From cf849068bd7fa0fb6458f94d6099cf5eb02d6d3f Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Fri, 13 Apr 2012 19:02:26 +0200 Subject: [PATCH] Book.getPlugin() method --- .../fbreader/library/BookInfoActivity.java | 2 +- .../preferences/EditBookInfoActivity.java | 59 ++++++++++--------- .../fbreader/bookmodel/BookModel.java | 7 +-- .../geometerplus/fbreader/library/Book.java | 38 +++++++----- .../fbreader/library/LibraryUtil.java | 12 ++-- 5 files changed, 65 insertions(+), 53 deletions(-) diff --git a/src/org/geometerplus/android/fbreader/library/BookInfoActivity.java b/src/org/geometerplus/android/fbreader/library/BookInfoActivity.java index 6be25f13e..7b8cb11f9 100644 --- a/src/org/geometerplus/android/fbreader/library/BookInfoActivity.java +++ b/src/org/geometerplus/android/fbreader/library/BookInfoActivity.java @@ -261,7 +261,7 @@ public class BookInfoActivity extends Activity { private void setupAnnotation(Book book) { final TextView titleView = (TextView)findViewById(R.id.book_info_annotation_title); final TextView bodyView = (TextView)findViewById(R.id.book_info_annotation_body); - final String annotation = LibraryUtil.getAnnotation(book.File); + final String annotation = LibraryUtil.getAnnotation(book); if (annotation == null) { titleView.setVisibility(View.GONE); bodyView.setVisibility(View.GONE); diff --git a/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java b/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java index 902c4f976..320c34def 100644 --- a/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java +++ b/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java @@ -32,7 +32,8 @@ import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.zlibrary.text.hyphenation.ZLTextHyphenator; import org.geometerplus.fbreader.library.Book; -import org.geometerplus.fbreader.formats.*; +import org.geometerplus.fbreader.formats.FormatPlugin; +import org.geometerplus.fbreader.bookmodel.BookReadingException; import org.geometerplus.android.fbreader.FBReader; import org.geometerplus.android.fbreader.library.BookInfoActivity; @@ -97,33 +98,37 @@ class EncodingPreference extends ZLStringListPreference { super(context, rootResource, resourceKey); myBook = book; - final FormatPlugin plugin = PluginCollection.Instance().getPlugin(book.File); - if (plugin != null) { - final List encodings = - new ArrayList(plugin.supportedEncodings().encodings()); - Collections.sort(encodings, new Comparator() { - public int compare(Encoding e1, Encoding e2) { - return e1.DisplayName.compareTo(e2.DisplayName); - } - }); - final String[] codes = new String[encodings.size()]; - final String[] names = new String[encodings.size()]; - int index = 0; - for (Encoding e : encodings) { - //addItem(e.Family, e.Name, e.DisplayName); - codes[index] = e.Name; - names[index] = e.DisplayName; - ++index; + final FormatPlugin plugin; + try { + plugin = book.getPlugin(); + } catch (BookReadingException e) { + return; + } + + final List encodings = + new ArrayList(plugin.supportedEncodings().encodings()); + Collections.sort(encodings, new Comparator() { + public int compare(Encoding e1, Encoding e2) { + return e1.DisplayName.compareTo(e2.DisplayName); } - setLists(codes, names); - if (encodings.size() == 1) { - setInitialValue(codes[0]); - setEnabled(false); - } else { - final String bookEncoding = book.getEncoding(); - if (bookEncoding != null) { - setInitialValue(bookEncoding.toLowerCase()); - } + }); + final String[] codes = new String[encodings.size()]; + final String[] names = new String[encodings.size()]; + int index = 0; + for (Encoding e : encodings) { + //addItem(e.Family, e.Name, e.DisplayName); + codes[index] = e.Name; + names[index] = e.DisplayName; + ++index; + } + setLists(codes, names); + if (encodings.size() == 1) { + setInitialValue(codes[0]); + setEnabled(false); + } else { + final String bookEncoding = book.getEncoding(); + if (bookEncoding != null) { + setInitialValue(bookEncoding.toLowerCase()); } } } diff --git a/src/org/geometerplus/fbreader/bookmodel/BookModel.java b/src/org/geometerplus/fbreader/bookmodel/BookModel.java index c72b4887b..4674e1cb7 100644 --- a/src/org/geometerplus/fbreader/bookmodel/BookModel.java +++ b/src/org/geometerplus/fbreader/bookmodel/BookModel.java @@ -24,14 +24,11 @@ import java.util.List; import org.geometerplus.zlibrary.text.model.*; import org.geometerplus.fbreader.library.Book; -import org.geometerplus.fbreader.formats.*; +import org.geometerplus.fbreader.formats.FormatPlugin; public abstract class BookModel { public static BookModel createModel(Book book) throws BookReadingException { - final FormatPlugin plugin = PluginCollection.Instance().getPlugin(book.File); - if (plugin == null) { - throw new BookReadingException("pluginNotFound", book.File); - } + final FormatPlugin plugin = book.getPlugin(); System.err.println("using plugin: " + plugin.supportedFileType() + "/" + plugin.type()); diff --git a/src/org/geometerplus/fbreader/library/Book.java b/src/org/geometerplus/fbreader/library/Book.java index 45f86e869..88b819c8e 100644 --- a/src/org/geometerplus/fbreader/library/Book.java +++ b/src/org/geometerplus/fbreader/library/Book.java @@ -153,7 +153,19 @@ public class Book { myIsSaved = true; } + public FormatPlugin getPlugin() throws BookReadingException { + final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File); + if (plugin == null) { + throw new BookReadingException("pluginNotFound", File); + } + return plugin; + } + void readMetaInfo() throws BookReadingException { + readMetaInfo(getPlugin()); + } + + private void readMetaInfo(FormatPlugin plugin) throws BookReadingException { myEncoding = null; myLanguage = null; myTitle = null; @@ -163,10 +175,6 @@ public class Book { myIsSaved = false; - final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File); - if (plugin == null) { - throw new BookReadingException("pluginNotFound", File); - } plugin.readMetaInfo(this); if (myTitle == null || myTitle.length() == 0) { @@ -295,15 +303,12 @@ public class Book { public String getEncoding() { if (myEncoding == null) { - final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File); - if (plugin != null) { - try { - plugin.detectLanguageAndEncoding(this); - } catch (BookReadingException e) { - } - if (myEncoding == null) { - setEncoding("utf-8"); - } + try { + getPlugin().detectLanguageAndEncoding(this); + } catch (BookReadingException e) { + } + if (myEncoding == null) { + setEncoding("utf-8"); } } return myEncoding; @@ -500,9 +505,10 @@ public class Book { } } ZLImage image = null; - final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File); - if (plugin != null) { - image = plugin.readCover(File); + try { + image = getPlugin().readCover(File); + } catch (BookReadingException e) { + // ignore } myCover = image != null ? new WeakReference(image) : NULL_IMAGE; return image; diff --git a/src/org/geometerplus/fbreader/library/LibraryUtil.java b/src/org/geometerplus/fbreader/library/LibraryUtil.java index a559cc5a2..b6f1722c8 100644 --- a/src/org/geometerplus/fbreader/library/LibraryUtil.java +++ b/src/org/geometerplus/fbreader/library/LibraryUtil.java @@ -23,7 +23,8 @@ import org.geometerplus.zlibrary.core.filesystem.ZLFile; import org.geometerplus.zlibrary.core.image.ZLImage; import org.geometerplus.zlibrary.core.resources.ZLResource; -import org.geometerplus.fbreader.formats.*; +import org.geometerplus.fbreader.formats.FormatPlugin; +import org.geometerplus.fbreader.bookmodel.BookReadingException; public abstract class LibraryUtil { public static ZLResource resource() { @@ -34,8 +35,11 @@ public abstract class LibraryUtil { return book != null ? book.getCover() : null; } - public static String getAnnotation(ZLFile file) { - final FormatPlugin plugin = PluginCollection.Instance().getPlugin(file); - return plugin != null ? plugin.readAnnotation(file) : null; + public static String getAnnotation(Book book) { + try { + return book.getPlugin().readAnnotation(book.File); + } catch (BookReadingException e) { + return null; + } } }