mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 18:29:23 +02:00
fixed NetworkTree.Key.equals; "get NetworkTree by key" method
This commit is contained in:
parent
d096a3456a
commit
05461052e6
3 changed files with 54 additions and 28 deletions
|
@ -28,6 +28,7 @@ import android.content.Intent;
|
|||
|
||||
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||
|
||||
import org.geometerplus.fbreader.network.NetworkLibrary;
|
||||
import org.geometerplus.fbreader.network.NetworkTree;
|
||||
import org.geometerplus.fbreader.network.tree.*;
|
||||
|
||||
|
@ -36,7 +37,6 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
|
|||
public static final String CATALOG_KEY_KEY = "org.geometerplus.android.fbreader.network.CatalogKey";
|
||||
|
||||
private NetworkTree myTree;
|
||||
private NetworkTree.Key myCatalogKey;
|
||||
private volatile boolean myInProgress;
|
||||
|
||||
@Override
|
||||
|
@ -57,14 +57,16 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
|
|||
throw new RuntimeException("Catalog Level was not specified!!!");
|
||||
}
|
||||
|
||||
myCatalogKey = (NetworkTree.Key)intent.getSerializableExtra(CATALOG_KEY_KEY);
|
||||
if (myCatalogKey == null) {
|
||||
throw new RuntimeException("Catalog Key was not specified!!!");
|
||||
final NetworkLibrary library = NetworkLibrary.Instance();
|
||||
final NetworkTree.Key key = (NetworkTree.Key)intent.getSerializableExtra(CATALOG_KEY_KEY);
|
||||
myTree = library.getTreeByKey(key);
|
||||
|
||||
System.err.println("KEY = " + key);
|
||||
if (myTree == null) {
|
||||
throw new RuntimeException("Tree not found for key " + key);
|
||||
}
|
||||
|
||||
myTree = networkView.getOpenedTree(level);
|
||||
|
||||
networkView.setOpenedActivity(myCatalogKey, this);
|
||||
networkView.setOpenedActivity(key, this);
|
||||
|
||||
setListAdapter(new CatalogAdapter());
|
||||
getListView().invalidateViews();
|
||||
|
@ -113,8 +115,8 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
|
|||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (myTree != null && myCatalogKey != null && NetworkView.Instance().isInitialized()) {
|
||||
NetworkView.Instance().setOpenedActivity(myCatalogKey, null);
|
||||
if (myTree != null && NetworkView.Instance().isInitialized()) {
|
||||
NetworkView.Instance().setOpenedActivity(myTree.getUniqueKey(), null);
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
|
@ -220,7 +222,7 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
|
|||
private void doStopLoading() {
|
||||
if (NetworkView.Instance().isInitialized()) {
|
||||
final ItemsLoadingRunnable runnable =
|
||||
NetworkView.Instance().getItemsLoadingRunnable(myCatalogKey);
|
||||
NetworkView.Instance().getItemsLoadingRunnable(myTree.getUniqueKey());
|
||||
if (runnable != null) {
|
||||
runnable.interruptLoading();
|
||||
}
|
||||
|
|
|
@ -417,6 +417,23 @@ public class NetworkLibrary {
|
|||
return myRootTree;
|
||||
}
|
||||
|
||||
public NetworkTree getTreeByKey(NetworkTree.Key key) {
|
||||
if (key.Parent == null) {
|
||||
return key.equals(myRootTree.getUniqueKey()) ? myRootTree : null;
|
||||
}
|
||||
final NetworkTree parentTree = getTreeByKey(key.Parent);
|
||||
if (parentTree == null) {
|
||||
return null;
|
||||
}
|
||||
for (FBTree tree : parentTree.subTrees()) {
|
||||
final NetworkTree nTree = (NetworkTree)tree;
|
||||
if (key.equals(nTree.getUniqueKey())) {
|
||||
return nTree;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void simpleSearch(String pattern, final NetworkOperationData.OnNewItemListener listener) throws ZLNetworkException {
|
||||
LinkedList<ZLNetworkRequest> requestList = new LinkedList<ZLNetworkRequest>();
|
||||
LinkedList<NetworkOperationData> dataList = new LinkedList<NetworkOperationData>();
|
||||
|
|
|
@ -21,7 +21,7 @@ package org.geometerplus.fbreader.network;
|
|||
|
||||
import java.util.LinkedList;
|
||||
import java.util.Set;
|
||||
import java.io.*;
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.geometerplus.zlibrary.core.constants.MimeTypes;
|
||||
import org.geometerplus.zlibrary.core.image.ZLImage;
|
||||
|
@ -32,18 +32,15 @@ public abstract class NetworkTree extends FBTree {
|
|||
public static final Key SearchKey = new Key(null, "@Search");
|
||||
|
||||
public static class Key implements Serializable {
|
||||
private Key myParent;
|
||||
private String myId;
|
||||
final Key Parent;
|
||||
final String Id;
|
||||
|
||||
private Key(Key parent, String id) {
|
||||
if (id == null) {
|
||||
throw new IllegalArgumentException("NetworkTree string id must be non-null");
|
||||
}
|
||||
myParent = parent;
|
||||
myId = id;
|
||||
}
|
||||
|
||||
private Key() {
|
||||
Parent = parent;
|
||||
Id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -55,25 +52,34 @@ public abstract class NetworkTree extends FBTree {
|
|||
return false;
|
||||
}
|
||||
final NetworkTree.Key key = (NetworkTree.Key)other;
|
||||
return myParent == key.myParent && myId.equals(key.myId);
|
||||
if (Parent == null) {
|
||||
return key.Parent == null && Id.equals(key.Id);
|
||||
}
|
||||
return Id.equals(key.Id) && Parent.equals(key.Parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return myId.hashCode();
|
||||
return Id.hashCode();
|
||||
}
|
||||
|
||||
private void writeObject(ObjectOutputStream os) throws IOException {
|
||||
if (myParent != null) {
|
||||
myParent.writeObject(os);
|
||||
@Override
|
||||
public String toString() {
|
||||
return Parent == null ? Id : Parent.toString() + " :: " + Id;
|
||||
}
|
||||
os.writeBytes(myId);
|
||||
|
||||
/*
|
||||
private void writeObject(ObjectOutputStream os) throws IOException {
|
||||
if (Parent != null) {
|
||||
Parent.writeObject(os);
|
||||
}
|
||||
os.writeBytes(Id);
|
||||
os.writeBytes("\000");
|
||||
}
|
||||
|
||||
private void readObject(ObjectInputStream is) throws IOException, ClassNotFoundException {
|
||||
myParent = null;
|
||||
myId = null;
|
||||
Parent = null;
|
||||
Id = null;
|
||||
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
try {
|
||||
|
@ -82,16 +88,17 @@ public abstract class NetworkTree extends FBTree {
|
|||
if (c != '\000') {
|
||||
builder.append(c);
|
||||
} else {
|
||||
if (myId != null) {
|
||||
myParent = new Key(myParent, myId);
|
||||
if (Id != null) {
|
||||
Parent = new Key(Parent, Id);
|
||||
}
|
||||
myId = builder.toString();
|
||||
Id = builder.toString();
|
||||
builder.delete(0, builder.length());
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
protected NetworkTree() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue