From acf00d5706efe04cf61701b1d6364f531bbe7258 Mon Sep 17 00:00:00 2001 From: Vasiliy Bout Date: Wed, 26 Jan 2011 17:47:25 +0300 Subject: [PATCH] More changes to fbreader/network core --- .../network/AddCustomCatalogItemTree.java | 5 +++ .../fbreader/network/NetworkBookActions.java | 7 +--- .../network/NetworkCatalogActions.java | 37 ++++++++++--------- .../network/NetworkCatalogActivity.java | 28 +++++--------- .../network/NetworkLibraryActivity.java | 10 +++-- .../network/NetworkSearchActivity.java | 2 +- .../android/fbreader/network/NetworkView.java | 3 +- .../fbreader/network/RefillAccountTree.java | 5 +++ .../fbreader/network/SearchItemTree.java | 5 +++ .../fbreader/network/NetworkTree.java | 6 +++ .../network/tree/NetworkAuthorTree.java | 5 +++ .../network/tree/NetworkBookTree.java | 5 +++ .../network/tree/NetworkCatalogTree.java | 6 +++ .../network/tree/NetworkSeriesTree.java | 13 +++++++ .../fbreader/network/tree/RootTree.java | 5 +++ 15 files changed, 95 insertions(+), 47 deletions(-) diff --git a/src/org/geometerplus/android/fbreader/network/AddCustomCatalogItemTree.java b/src/org/geometerplus/android/fbreader/network/AddCustomCatalogItemTree.java index 4b111f5e5..d625d2c86 100644 --- a/src/org/geometerplus/android/fbreader/network/AddCustomCatalogItemTree.java +++ b/src/org/geometerplus/android/fbreader/network/AddCustomCatalogItemTree.java @@ -51,4 +51,9 @@ public class AddCustomCatalogItemTree extends NetworkTree implements ZLAndroidTr public int getCoverResourceId() { return R.drawable.ic_list_plus; } + + @Override + public String getUniqueKey() { + return null; + } } diff --git a/src/org/geometerplus/android/fbreader/network/NetworkBookActions.java b/src/org/geometerplus/android/fbreader/network/NetworkBookActions.java index cff6a0021..fda5944e4 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkBookActions.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkBookActions.java @@ -226,12 +226,7 @@ class NetworkBookActions extends NetworkTreeActions { private void showBooks(NetworkBaseActivity activity, NetworkTree tree) { - String key = null; - if (tree instanceof NetworkAuthorTree) { - key = PACKAGE + ".Authors:" + ((NetworkAuthorTree) tree).Author.DisplayName; - } else if (tree instanceof NetworkSeriesTree) { - key = PACKAGE + ".Series:" + ((NetworkSeriesTree) tree).SeriesTitle; - } + final String key = tree.getUniqueKey(); if (key != null) { NetworkView.Instance().openTree(activity, tree, key); } diff --git a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java index 4fda7af71..111b371bb 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java @@ -172,11 +172,12 @@ class NetworkCatalogActions extends NetworkTreeActions { final NetworkCatalogTree catalogTree = (NetworkCatalogTree) tree; final NetworkCatalogItem item = catalogTree.Item; - final String catalogUrl = item.URLByType.get(NetworkCatalogItem.URL_CATALOG); - final boolean isLoading = (catalogUrl != null) ? - NetworkView.Instance().containsItemsLoadingRunnable(catalogUrl) : false; + final String key = tree.getUniqueKey(); + final boolean isLoading = (key != null) ? + NetworkView.Instance().containsItemsLoadingRunnable(key) : false; - prepareOptionsItem(menu, RELOAD_ITEM_ID, catalogUrl != null && !isLoading); + prepareOptionsItem(menu, RELOAD_ITEM_ID, + item.URLByType.get(NetworkCatalogItem.URL_CATALOG) != null && !isLoading); boolean signIn = false; boolean signOut = false; @@ -399,11 +400,11 @@ class NetworkCatalogActions extends NetworkTreeActions { } public void doExpandCatalog(final NetworkBaseActivity activity, final NetworkCatalogTree tree) { - final String url = tree.Item.URLByType.get(NetworkCatalogItem.URL_CATALOG); - if (url == null) { - throw new RuntimeException("That's impossible!!!"); + final String key = tree.getUniqueKey(); + if (key == null) { + throw new RuntimeException("Catalog tree has null unique key. That's impossible!!!"); } - NetworkView.Instance().tryResumeLoading(activity, tree, url, new Runnable() { + NetworkView.Instance().tryResumeLoading(activity, tree, key, new Runnable() { public void run() { boolean resumeNotLoad = false; if (tree.hasChildren()) { @@ -411,7 +412,7 @@ class NetworkCatalogActions extends NetworkTreeActions { if (tree.Item.supportsResumeLoading()) { resumeNotLoad = true; } else { - NetworkView.Instance().openTree(activity, tree, url); + NetworkView.Instance().openTree(activity, tree, key); return; } } else { @@ -421,15 +422,15 @@ class NetworkCatalogActions extends NetworkTreeActions { } } - final ExpandCatalogHandler handler = new ExpandCatalogHandler(tree, url); + final ExpandCatalogHandler handler = new ExpandCatalogHandler(tree, key); NetworkView.Instance().startItemsLoading( activity, - url, + key, new ExpandCatalogRunnable(handler, tree, true, resumeNotLoad) ); processExtraData(activity, tree.Item.extraData(), new Runnable() { public void run() { - NetworkView.Instance().openTree(activity, tree, url); + NetworkView.Instance().openTree(activity, tree, key); } }); } @@ -437,20 +438,20 @@ class NetworkCatalogActions extends NetworkTreeActions { } public void doReloadCatalog(NetworkBaseActivity activity, final NetworkCatalogTree tree) { - final String url = tree.Item.URLByType.get(NetworkCatalogItem.URL_CATALOG); - if (url == null) { - throw new RuntimeException("That's impossible!!!"); + final String key = tree.getUniqueKey(); + if (key == null) { + throw new RuntimeException("Catalog tree has null unique key. That's impossible!!!"); } - if (NetworkView.Instance().containsItemsLoadingRunnable(url)) { + if (NetworkView.Instance().containsItemsLoadingRunnable(key)) { return; } tree.ChildrenItems.clear(); tree.clear(); NetworkView.Instance().fireModelChangedAsync(); - final ExpandCatalogHandler handler = new ExpandCatalogHandler(tree, url); + final ExpandCatalogHandler handler = new ExpandCatalogHandler(tree, key); NetworkView.Instance().startItemsLoading( activity, - url, + key, new ExpandCatalogRunnable(handler, tree, false, false) ); } diff --git a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActivity.java b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActivity.java index b30016e0c..62f90ded0 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActivity.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActivity.java @@ -29,7 +29,6 @@ import android.content.Intent; import org.geometerplus.zlibrary.core.network.ZLNetworkException; import org.geometerplus.fbreader.network.NetworkTree; -import org.geometerplus.fbreader.network.NetworkCatalogItem; import org.geometerplus.fbreader.network.tree.*; public class NetworkCatalogActivity extends NetworkBaseActivity implements UserRegistrationConstants { @@ -112,21 +111,6 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR setProgressBarIndeterminateVisibility(myInProgress); } - private static String getNetworkTreeKey(NetworkTree tree, boolean recursive) { - if (tree instanceof NetworkCatalogTree) { - return ((NetworkCatalogTree) tree).Item.URLByType.get(NetworkCatalogItem.URL_CATALOG); - } else if (tree instanceof SearchItemTree) { - return NetworkSearchActivity.SEARCH_RUNNABLE_KEY; - } else if (recursive && tree.Parent instanceof NetworkTree) { - if (tree instanceof NetworkAuthorTree - || tree instanceof NetworkSeriesTree) { - return getNetworkTreeKey((NetworkTree) tree.Parent, true); - } - } - return null; - } - - @Override public void onDestroy() { if (myTree != null && myCatalogKey != null && NetworkView.Instance().isInitialized()) { @@ -200,10 +184,18 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR } } + private static String getLoadableNetworkTreeKey(NetworkTree tree) { + if ((tree instanceof NetworkAuthorTree || tree instanceof NetworkSeriesTree) + && tree.Parent instanceof NetworkTree) { + return getLoadableNetworkTreeKey((NetworkTree) tree.Parent); + } + return tree.getUniqueKey(); + } + @Override public void onModelChanged() { final NetworkView networkView = NetworkView.Instance(); - final String key = getNetworkTreeKey(myTree, true); + final String key = getLoadableNetworkTreeKey(myTree); myInProgress = key != null && networkView.isInitialized() && networkView.containsItemsLoadingRunnable(key); getListView().invalidateViews(); @@ -227,7 +219,7 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR } private void doStopLoading() { - final String key = getNetworkTreeKey(myTree, false); + final String key = myCatalogKey; if (key != null && NetworkView.Instance().isInitialized()) { final ItemsLoadingRunnable runnable = NetworkView.Instance().getItemsLoadingRunnable(key); if (runnable != null) { diff --git a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java index e4b74009d..f463cb57f 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java @@ -217,11 +217,15 @@ public class NetworkLibraryActivity extends NetworkBaseActivity { return true; } + private static boolean searchIsInProgress() { + return NetworkView.Instance().containsItemsLoadingRunnable( + NetworkSearchActivity.SEARCH_RUNNABLE_KEY); + } + @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - final boolean searchInProgress = NetworkView.Instance().containsItemsLoadingRunnable(NetworkSearchActivity.SEARCH_RUNNABLE_KEY); - menu.findItem(MENU_SEARCH).setEnabled(!searchInProgress); + menu.findItem(MENU_SEARCH).setEnabled(!searchIsInProgress()); return true; } @@ -289,7 +293,7 @@ public class NetworkLibraryActivity extends NetworkBaseActivity { @Override public boolean onSearchRequested() { - if (NetworkView.Instance().containsItemsLoadingRunnable(NetworkSearchActivity.SEARCH_RUNNABLE_KEY)) { + if (searchIsInProgress()) { return false; } final NetworkLibrary library = NetworkLibrary.Instance(); diff --git a/src/org/geometerplus/android/fbreader/network/NetworkSearchActivity.java b/src/org/geometerplus/android/fbreader/network/NetworkSearchActivity.java index bbca41a07..eafb52370 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkSearchActivity.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkSearchActivity.java @@ -36,7 +36,7 @@ import org.geometerplus.fbreader.network.*; public class NetworkSearchActivity extends Activity { - public static final String SEARCH_RUNNABLE_KEY = "org.geometerplus.android.fbreader.network.NetworkSearchActivity"; + static final String SEARCH_RUNNABLE_KEY = "org.geometerplus.android.fbreader.network.NetworkSearchActivity"; @Override public void onCreate(Bundle icicle) { diff --git a/src/org/geometerplus/android/fbreader/network/NetworkView.java b/src/org/geometerplus/android/fbreader/network/NetworkView.java index 226a30e69..44435fe34 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkView.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkView.java @@ -33,6 +33,7 @@ import android.view.Menu; import org.geometerplus.zlibrary.core.network.ZLNetworkException; import org.geometerplus.fbreader.network.*; +import org.geometerplus.fbreader.network.tree.NetworkCatalogTree; class NetworkView { private static NetworkView ourInstance; @@ -177,7 +178,7 @@ class NetworkView { return getItemsLoadingRunnable(key) != null; } - public void tryResumeLoading(NetworkBaseActivity activity, NetworkTree tree, String key, Runnable expandRunnable) { + public void tryResumeLoading(NetworkBaseActivity activity, NetworkCatalogTree tree, String key, Runnable expandRunnable) { final ItemsLoadingRunnable runnable = getItemsLoadingRunnable(key); if (runnable != null && runnable.tryResumeLoading()) { openTree(activity, tree, key); diff --git a/src/org/geometerplus/android/fbreader/network/RefillAccountTree.java b/src/org/geometerplus/android/fbreader/network/RefillAccountTree.java index a70ea64eb..7d10da183 100644 --- a/src/org/geometerplus/android/fbreader/network/RefillAccountTree.java +++ b/src/org/geometerplus/android/fbreader/network/RefillAccountTree.java @@ -73,4 +73,9 @@ class RefillAccountTree extends NetworkTree implements ZLAndroidTree { public int getCoverResourceId() { return R.drawable.ic_list_library_wallet; } + + @Override + public String getUniqueKey() { + return null; + } } diff --git a/src/org/geometerplus/android/fbreader/network/SearchItemTree.java b/src/org/geometerplus/android/fbreader/network/SearchItemTree.java index 67979ff25..286074501 100644 --- a/src/org/geometerplus/android/fbreader/network/SearchItemTree.java +++ b/src/org/geometerplus/android/fbreader/network/SearchItemTree.java @@ -102,4 +102,9 @@ public class SearchItemTree extends NetworkTree implements ZLAndroidTree { public NetworkLibraryItem getHoldedItem() { return null; } + + @Override + public String getUniqueKey() { + return NetworkSearchActivity.SEARCH_RUNNABLE_KEY; + } } diff --git a/src/org/geometerplus/fbreader/network/NetworkTree.java b/src/org/geometerplus/fbreader/network/NetworkTree.java index 22603e003..b79a30334 100644 --- a/src/org/geometerplus/fbreader/network/NetworkTree.java +++ b/src/org/geometerplus/fbreader/network/NetworkTree.java @@ -90,6 +90,12 @@ public abstract class NetworkTree extends FBTree { public abstract NetworkLibraryItem getHoldedItem(); + /** + * Returns unique identifier which can be used in NetworkView methods + * @return unique String instance + */ + public abstract String getUniqueKey(); + public void removeItems(Set items) { if (items.isEmpty() || subTrees().isEmpty()) { return; diff --git a/src/org/geometerplus/fbreader/network/tree/NetworkAuthorTree.java b/src/org/geometerplus/fbreader/network/tree/NetworkAuthorTree.java index 17a02f627..7a395ab54 100644 --- a/src/org/geometerplus/fbreader/network/tree/NetworkAuthorTree.java +++ b/src/org/geometerplus/fbreader/network/tree/NetworkAuthorTree.java @@ -123,4 +123,9 @@ public class NetworkAuthorTree extends NetworkTree { public NetworkLibraryItem getHoldedItem() { return null; } + + @Override + public String getUniqueKey() { + return "org.geometerplus.fbreader.network.tree.Authors:" + Author.DisplayName; + } } diff --git a/src/org/geometerplus/fbreader/network/tree/NetworkBookTree.java b/src/org/geometerplus/fbreader/network/tree/NetworkBookTree.java index 8193d3241..df737635b 100644 --- a/src/org/geometerplus/fbreader/network/tree/NetworkBookTree.java +++ b/src/org/geometerplus/fbreader/network/tree/NetworkBookTree.java @@ -72,4 +72,9 @@ public class NetworkBookTree extends NetworkTree { public NetworkLibraryItem getHoldedItem() { return Book; } + + @Override + public String getUniqueKey() { + return null; + } } diff --git a/src/org/geometerplus/fbreader/network/tree/NetworkCatalogTree.java b/src/org/geometerplus/fbreader/network/tree/NetworkCatalogTree.java index 564c02bad..43b6b14a9 100644 --- a/src/org/geometerplus/fbreader/network/tree/NetworkCatalogTree.java +++ b/src/org/geometerplus/fbreader/network/tree/NetworkCatalogTree.java @@ -167,4 +167,10 @@ public class NetworkCatalogTree extends NetworkTree { ChildrenItems.removeAll(items); super.removeItems(items); } + + @Override + public String getUniqueKey() { + // FIXME: URL can be the same for POST queries!!! + return Item.URLByType.get(NetworkCatalogItem.URL_CATALOG); + } } diff --git a/src/org/geometerplus/fbreader/network/tree/NetworkSeriesTree.java b/src/org/geometerplus/fbreader/network/tree/NetworkSeriesTree.java index 81f838b3e..5ae3f7984 100644 --- a/src/org/geometerplus/fbreader/network/tree/NetworkSeriesTree.java +++ b/src/org/geometerplus/fbreader/network/tree/NetworkSeriesTree.java @@ -98,4 +98,17 @@ public class NetworkSeriesTree extends NetworkTree { removeSelf(); } } + + @Override + public String getUniqueKey() { + final StringBuilder buffer = new StringBuilder(); + + final String parentKey = ((NetworkTree)Parent).getUniqueKey(); + if (parentKey != null) { + buffer.append(parentKey).append("///"); + } + buffer.append("org.geometerplus.fbreader.network.tree.Series:").append(SeriesTitle); + + return buffer.toString(); + } } diff --git a/src/org/geometerplus/fbreader/network/tree/RootTree.java b/src/org/geometerplus/fbreader/network/tree/RootTree.java index 561566c43..a954f6c32 100644 --- a/src/org/geometerplus/fbreader/network/tree/RootTree.java +++ b/src/org/geometerplus/fbreader/network/tree/RootTree.java @@ -32,4 +32,9 @@ public final class RootTree extends NetworkTree { public NetworkLibraryItem getHoldedItem() { return null; } + + @Override + public String getUniqueKey() { + return null; + } }