diff --git a/src/org/geometerplus/android/fbreader/BookInfoActivity.java b/src/org/geometerplus/android/fbreader/BookInfoActivity.java index 04e253493..0ac429368 100644 --- a/src/org/geometerplus/android/fbreader/BookInfoActivity.java +++ b/src/org/geometerplus/android/fbreader/BookInfoActivity.java @@ -113,7 +113,7 @@ public class BookInfoActivity extends Activity { }); setupButton(R.id.book_info_button_reload, "reloadInfo", new View.OnClickListener() { public void onClick(View view) { - book.reloadInfo(); + book.reloadInfoFromFile(); setupBookInfo(book); } }); diff --git a/src/org/geometerplus/android/fbreader/FBReader.java b/src/org/geometerplus/android/fbreader/FBReader.java index 4a6f7aa20..b3794f196 100644 --- a/src/org/geometerplus/android/fbreader/FBReader.java +++ b/src/org/geometerplus/android/fbreader/FBReader.java @@ -33,9 +33,12 @@ import org.geometerplus.zlibrary.core.application.ZLApplication; import org.geometerplus.zlibrary.core.filesystem.ZLFile; import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.zlibrary.core.view.ZLView; + import org.geometerplus.zlibrary.text.view.ZLTextFixedPosition; import org.geometerplus.zlibrary.text.view.ZLTextPosition; import org.geometerplus.zlibrary.text.view.ZLTextView; +import org.geometerplus.zlibrary.text.hyphenation.ZLTextHyphenator; + import org.geometerplus.zlibrary.ui.android.R; import org.geometerplus.zlibrary.ui.android.library.ZLAndroidActivity; import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication; @@ -43,6 +46,8 @@ import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication; import org.geometerplus.fbreader.fbreader.ActionCode; import org.geometerplus.fbreader.fbreader.FBReaderApp; import org.geometerplus.fbreader.fbreader.FBView; +import org.geometerplus.fbreader.bookmodel.BookModel; +import org.geometerplus.fbreader.library.Book; import org.geometerplus.android.fbreader.library.KillerCallback; @@ -228,6 +233,14 @@ public final class FBReader extends ZLAndroidActivity { case REPAINT_CODE: { final FBReaderApp fbreader = (FBReaderApp)ZLApplication.Instance(); + final BookModel model = fbreader.Model; + if (model != null) { + final Book book = model.Book; + if (book != null) { + book.reloadInfoFromDatabase(); + ZLTextHyphenator.Instance().load(book.getLanguage()); + } + } fbreader.clearTextCaches(); fbreader.repaintView(); break; diff --git a/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java b/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java index 29763a232..e6dbfda03 100644 --- a/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java +++ b/src/org/geometerplus/android/fbreader/SQLiteBooksDatabase.java @@ -128,6 +128,7 @@ public final class SQLiteBooksDatabase extends BooksDatabase { return new Date(cursor.getLong(index)); } + @Override protected Book loadBook(long bookId) { Book book = null; final Cursor cursor = myDatabase.rawQuery("SELECT file_id,title,encoding,language FROM Books WHERE book_id = " + bookId, null); @@ -140,6 +141,17 @@ public final class SQLiteBooksDatabase extends BooksDatabase { return book; } + @Override + protected void reloadBook(Book book) { + final Cursor cursor = myDatabase.rawQuery("SELECT title,encoding,language FROM Books WHERE book_id = " + book.getId(), null); + if (cursor.moveToNext()) { + book.setTitle(cursor.getString(0)); + book.setEncoding(cursor.getString(1)); + book.setLanguage(cursor.getString(2)); + } + cursor.close(); + } + protected Book loadBookByFile(long fileId, ZLFile file) { if (fileId == -1) { return null; diff --git a/src/org/geometerplus/android/fbreader/library/LibraryBaseActivity.java b/src/org/geometerplus/android/fbreader/library/LibraryBaseActivity.java index 726faa5e5..bad8dd1d6 100644 --- a/src/org/geometerplus/android/fbreader/library/LibraryBaseActivity.java +++ b/src/org/geometerplus/android/fbreader/library/LibraryBaseActivity.java @@ -201,28 +201,30 @@ abstract class LibraryBaseActivity extends BaseActivity implements MenuItem.OnMe } protected class OpenTreeRunnable implements Runnable { + private final Library myLibrary; private final Runnable myPostRunnable; - public OpenTreeRunnable(String treePath) { - this(treePath, null); + public OpenTreeRunnable(Library library, String treePath) { + this(library, treePath, null); } - public OpenTreeRunnable(String treePath, String parameter) { - this(new StartTreeActivityRunnable(treePath, parameter)); + public OpenTreeRunnable(Library library, String treePath, String parameter) { + this(library, new StartTreeActivityRunnable(treePath, parameter)); } - public OpenTreeRunnable(Runnable postRunnable) { + public OpenTreeRunnable(Library library, Runnable postRunnable) { + myLibrary = library; myPostRunnable = postRunnable; } public void run() { - if (LibraryInstance.hasState(Library.STATE_FULLY_INITIALIZED)) { + if (myLibrary.hasState(Library.STATE_FULLY_INITIALIZED)) { myPostRunnable.run(); } else { UIUtil.runWithMessage(LibraryBaseActivity.this, "loadingBookList", new Runnable() { public void run() { - LibraryInstance.waitForState(Library.STATE_FULLY_INITIALIZED); + myLibrary.waitForState(Library.STATE_FULLY_INITIALIZED); } }, myPostRunnable); diff --git a/src/org/geometerplus/android/fbreader/library/LibraryTopLevelActivity.java b/src/org/geometerplus/android/fbreader/library/LibraryTopLevelActivity.java index 3a40a6435..ad91cad33 100644 --- a/src/org/geometerplus/android/fbreader/library/LibraryTopLevelActivity.java +++ b/src/org/geometerplus/android/fbreader/library/LibraryTopLevelActivity.java @@ -60,7 +60,7 @@ public class LibraryTopLevelActivity extends LibraryBaseActivity { myItems.add(new TopLevelTree( myResource.getResource(PATH_FAVORITES), R.drawable.ic_list_library_favorites, - new OpenTreeRunnable(new StartTreeActivityRunnable(PATH_FAVORITES, null) { + new OpenTreeRunnable(LibraryInstance, new StartTreeActivityRunnable(PATH_FAVORITES, null) { public void run() { if (LibraryInstance.favorites().hasChildren()) { super.run(); @@ -73,17 +73,17 @@ public class LibraryTopLevelActivity extends LibraryBaseActivity { myItems.add(new TopLevelTree( myResource.getResource(PATH_RECENT), R.drawable.ic_list_library_recent, - new OpenTreeRunnable(PATH_RECENT) + new OpenTreeRunnable(LibraryInstance, PATH_RECENT) )); myItems.add(new TopLevelTree( myResource.getResource(PATH_BY_AUTHOR), R.drawable.ic_list_library_authors, - new OpenTreeRunnable(PATH_BY_AUTHOR) + new OpenTreeRunnable(LibraryInstance, PATH_BY_AUTHOR) )); myItems.add(new TopLevelTree( myResource.getResource(PATH_BY_TAG), R.drawable.ic_list_library_tags, - new OpenTreeRunnable(PATH_BY_TAG) + new OpenTreeRunnable(LibraryInstance, PATH_BY_TAG) )); myItems.add(new TopLevelTree( myResource.getResource("fileTree"), @@ -123,7 +123,7 @@ public class LibraryTopLevelActivity extends LibraryBaseActivity { myResource.getResource(PATH_SEARCH_RESULTS), pattern, R.drawable.ic_list_library_books, - new OpenTreeRunnable(PATH_SEARCH_RESULTS, pattern) + new OpenTreeRunnable(LibraryInstance, PATH_SEARCH_RESULTS, pattern) ); myItems.add(0, mySearchResultsItem); getListView().invalidateViews(); diff --git a/src/org/geometerplus/android/fbreader/library/LibraryTreeActivity.java b/src/org/geometerplus/android/fbreader/library/LibraryTreeActivity.java index ccbc274c3..6dbcc3d40 100644 --- a/src/org/geometerplus/android/fbreader/library/LibraryTreeActivity.java +++ b/src/org/geometerplus/android/fbreader/library/LibraryTreeActivity.java @@ -103,7 +103,7 @@ public class LibraryTreeActivity extends LibraryBaseActivity { if (tree instanceof BookTree) { showBookInfo(((BookTree)tree).Book); } else { - new OpenTreeRunnable(myTreePathString + "\000" + tree.getName()).run(); + new OpenTreeRunnable(LibraryInstance, myTreePathString + "\000" + tree.getName()).run(); } } } diff --git a/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java b/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java index 1c0830b30..cafd66140 100644 --- a/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java +++ b/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java @@ -28,8 +28,6 @@ import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.zlibrary.core.language.ZLLanguageUtil; import org.geometerplus.zlibrary.core.filesystem.ZLFile; -import org.geometerplus.zlibrary.text.hyphenation.ZLTextHyphenator; - import org.geometerplus.fbreader.library.Book; import org.geometerplus.android.fbreader.BookInfoActivity; @@ -108,8 +106,6 @@ public class EditBookInfoActivity extends ZLPreferenceActivity { @Override protected void onPause() { super.onPause(); - if (myBook.save()) { - ZLTextHyphenator.Instance().load(myBook.getLanguage()); - } + myBook.save(); } } diff --git a/src/org/geometerplus/fbreader/library/Book.java b/src/org/geometerplus/fbreader/library/Book.java index 88ae5e994..148672fc9 100644 --- a/src/org/geometerplus/fbreader/library/Book.java +++ b/src/org/geometerplus/fbreader/library/Book.java @@ -116,12 +116,21 @@ public class Book { File = file; } - public void reloadInfo() { + public void reloadInfoFromFile() { if (readMetaInfo()) { save(); } } + public void reloadInfoFromDatabase() { + final BooksDatabase database = BooksDatabase.Instance(); + database.reloadBook(this); + myAuthors = database.loadAuthors(myId); + myTags = database.loadTags(myId); + mySeriesInfo = database.loadSeriesInfo(myId); + myIsSaved = true; + } + boolean readMetaInfo() { final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File); if ((plugin == null) || !plugin.readMetaInfo(this)) { diff --git a/src/org/geometerplus/fbreader/library/BooksDatabase.java b/src/org/geometerplus/fbreader/library/BooksDatabase.java index 3301f85b2..6ecde9a48 100644 --- a/src/org/geometerplus/fbreader/library/BooksDatabase.java +++ b/src/org/geometerplus/fbreader/library/BooksDatabase.java @@ -58,6 +58,7 @@ public abstract class BooksDatabase { // returns map fileId -> book protected abstract Map loadBooks(FileInfoSet infos); protected abstract Book loadBook(long bookId); + protected abstract void reloadBook(Book book); protected abstract Book loadBookByFile(long fileId, ZLFile file); protected abstract List loadAuthors(long bookId);