diff --git a/src/org/geometerplus/android/fbreader/BookmarksActivity.java b/src/org/geometerplus/android/fbreader/BookmarksActivity.java index 128b2c1c9..cc1515028 100644 --- a/src/org/geometerplus/android/fbreader/BookmarksActivity.java +++ b/src/org/geometerplus/android/fbreader/BookmarksActivity.java @@ -81,7 +81,7 @@ public class BookmarksActivity extends TabActivity implements MenuItem.OnMenuIte } private void init() { - myAllBooksBookmarks = new ArrayList(myCollection.allBookmarks()); + myAllBooksBookmarks = new ArrayList(myCollection.bookmarks(0, 100000)); Collections.sort(myAllBooksBookmarks, new Bookmark.ByTimeComparator()); final Book book = SerializerUtil.deserializeBook(getIntent().getStringExtra(FBReader.BOOK_KEY)); diff --git a/src/org/geometerplus/android/fbreader/libraryService/BookCollectionShadow.java b/src/org/geometerplus/android/fbreader/libraryService/BookCollectionShadow.java index 8f1fa5c70..30ee9a682 100644 --- a/src/org/geometerplus/android/fbreader/libraryService/BookCollectionShadow.java +++ b/src/org/geometerplus/android/fbreader/libraryService/BookCollectionShadow.java @@ -523,12 +523,12 @@ public class BookCollectionShadow extends AbstractBookCollection implements Serv } } - public synchronized List allBookmarks() { + public synchronized List bookmarks(long fromId, int limitCount) { if (myInterface == null) { return Collections.emptyList(); } try { - return SerializerUtil.deserializeBookmarkList(myInterface.allBookmarks()); + return SerializerUtil.deserializeBookmarkList(myInterface.bookmarks(fromId, limitCount)); } catch (RemoteException e) { return Collections.emptyList(); } diff --git a/src/org/geometerplus/android/fbreader/libraryService/LibraryInterface.aidl b/src/org/geometerplus/android/fbreader/libraryService/LibraryInterface.aidl index 24c7c353d..25e0a705d 100644 --- a/src/org/geometerplus/android/fbreader/libraryService/LibraryInterface.aidl +++ b/src/org/geometerplus/android/fbreader/libraryService/LibraryInterface.aidl @@ -53,7 +53,7 @@ interface LibraryInterface { void markHyperlinkAsVisited(in String book, in String linkId); List invisibleBookmarks(in String book); - List allBookmarks(); + List bookmarks(in long fromId, in int limitCount); String saveBookmark(in String bookmark); void deleteBookmark(in String bookmark); } diff --git a/src/org/geometerplus/android/fbreader/libraryService/LibraryService.java b/src/org/geometerplus/android/fbreader/libraryService/LibraryService.java index 02edb807b..976000d45 100644 --- a/src/org/geometerplus/android/fbreader/libraryService/LibraryService.java +++ b/src/org/geometerplus/android/fbreader/libraryService/LibraryService.java @@ -300,8 +300,8 @@ public class LibraryService extends Service { ); } - public List allBookmarks() { - return SerializerUtil.serializeBookmarkList(myCollection.allBookmarks()); + public List bookmarks(long fromId, int limitCount) { + return SerializerUtil.serializeBookmarkList(myCollection.bookmarks(fromId, limitCount)); } public String saveBookmark(String serialized) { diff --git a/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java b/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java index 2922c3204..9413ae450 100644 --- a/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java +++ b/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java @@ -762,11 +762,16 @@ final class SQLiteBooksDatabase extends BooksDatabase { } @Override - protected List loadAllVisibleBookmarks() { + protected List loadVisibleBookmarks(long fromId, int limitCount) { LinkedList list = new LinkedList(); myDatabase.execSQL("DELETE FROM Bookmarks WHERE book_id = -1"); - Cursor cursor = myDatabase.rawQuery( - "SELECT Bookmarks.bookmark_id,Bookmarks.book_id,Books.title,Bookmarks.bookmark_text,Bookmarks.creation_time,Bookmarks.modification_time,Bookmarks.access_time,Bookmarks.access_counter,Bookmarks.model_id,Bookmarks.paragraph,Bookmarks.word,Bookmarks.char FROM Bookmarks INNER JOIN Books ON Books.book_id = Bookmarks.book_id WHERE Bookmarks.visible = 1", null + Cursor cursor = myDatabase.rawQuery("SELECT" + + " bm.bookmark_id,bm.book_id,b.title,bm.bookmark_text," + + "bm.creation_time,bm.modification_time,bm.access_time,bm.access_counter," + + "bm.model_id,bm.paragraph,bm.word,bm.char" + + " FROM Bookmarks AS bm INNER JOIN Books AS b ON b.book_id = bm.book_id" + + " WHERE bm.bookmark_id >= ? AND bm.visible = 1 ORDER BY bm.bookmark_id LIMIT ?", + new String[] { String.valueOf(fromId), String.valueOf(limitCount) } ); while (cursor.moveToNext()) { list.add(createBookmark( diff --git a/src/org/geometerplus/fbreader/book/BookCollection.java b/src/org/geometerplus/fbreader/book/BookCollection.java index 219511142..4f3676e81 100644 --- a/src/org/geometerplus/fbreader/book/BookCollection.java +++ b/src/org/geometerplus/fbreader/book/BookCollection.java @@ -757,8 +757,8 @@ public class BookCollection extends AbstractBookCollection { } } - public List allBookmarks() { - return myDatabase.loadAllVisibleBookmarks(); + public List bookmarks(long fromId, int limitCount) { + return myDatabase.loadVisibleBookmarks(fromId, limitCount); } public List invisibleBookmarks(Book book) { diff --git a/src/org/geometerplus/fbreader/book/BooksDatabase.java b/src/org/geometerplus/fbreader/book/BooksDatabase.java index a61740003..f449550b4 100644 --- a/src/org/geometerplus/fbreader/book/BooksDatabase.java +++ b/src/org/geometerplus/fbreader/book/BooksDatabase.java @@ -87,7 +87,7 @@ public abstract class BooksDatabase { } protected abstract List loadBookmarks(long bookId, boolean isVisible); - protected abstract List loadAllVisibleBookmarks(); + protected abstract List loadVisibleBookmarks(long fromId, int limitCount); protected abstract long saveBookmark(Bookmark bookmark); protected abstract void deleteBookmark(Bookmark bookmark); diff --git a/src/org/geometerplus/fbreader/book/IBookCollection.java b/src/org/geometerplus/fbreader/book/IBookCollection.java index bd4f8a686..1ea99b94d 100644 --- a/src/org/geometerplus/fbreader/book/IBookCollection.java +++ b/src/org/geometerplus/fbreader/book/IBookCollection.java @@ -91,7 +91,7 @@ public interface IBookCollection { boolean isHyperlinkVisited(Book book, String linkId); void markHyperlinkAsVisited(Book book, String linkId); - List allBookmarks(); + List bookmarks(long fromId, int limitCount); List invisibleBookmarks(Book book); void saveBookmark(Bookmark bookmark); void deleteBookmark(Bookmark bookmark);