1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 02:39:23 +02:00

More changes to fbreader/network core

This commit is contained in:
Vasiliy Bout 2011-01-26 17:47:25 +03:00 committed by Nikolay Pultsin
parent 62d6b0525f
commit acf00d5706
15 changed files with 95 additions and 47 deletions

View file

@ -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;
}
}

View file

@ -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);
}

View file

@ -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)
);
}

View file

@ -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) {

View file

@ -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();

View file

@ -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) {

View file

@ -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);

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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<NetworkLibraryItem> items) {
if (items.isEmpty() || subTrees().isEmpty()) {
return;

View file

@ -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;
}
}

View file

@ -72,4 +72,9 @@ public class NetworkBookTree extends NetworkTree {
public NetworkLibraryItem getHoldedItem() {
return Book;
}
@Override
public String getUniqueKey() {
return null;
}
}

View file

@ -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);
}
}

View file

@ -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();
}
}

View file

@ -32,4 +32,9 @@ public final class RootTree extends NetworkTree {
public NetworkLibraryItem getHoldedItem() {
return null;
}
@Override
public String getUniqueKey() {
return null;
}
}