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

related links support

This commit is contained in:
Nikolay Pultsin 2011-05-01 20:51:22 +01:00
parent 7600f00b68
commit f1023791c3
11 changed files with 71 additions and 16 deletions

View file

@ -1,7 +1,9 @@
===== 1.0.10 (??? ??, 2011) ===== ===== 1.0.10 (??? ??, 2011) =====
* Fixed book downloading service (book-by-link-downloading works again) * Fixed book downloading service (book-by-link-downloading works again)
* Old authentication dialog has gone * Old authentication dialog has gone
* 'Unencripted protocol' warning message has been restored * 'Unencrypted protocol' warning message has been restored
* ODPS full entry support
* Related links for books
===== 1.0.9 (Apr 23, 2011) ===== ===== 1.0.9 (Apr 23, 2011) =====
* HttpConnection => HttpClient (that fixes a bug in SSL connection) * HttpConnection => HttpClient (that fixes a bug in SSL connection)

View file

@ -40,8 +40,7 @@ import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageManager;
import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageData; import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageData;
import org.geometerplus.zlibrary.ui.android.network.SQLiteCookieDatabase; import org.geometerplus.zlibrary.ui.android.network.SQLiteCookieDatabase;
import org.geometerplus.fbreader.network.NetworkTree; import org.geometerplus.fbreader.network.*;
import org.geometerplus.fbreader.network.NetworkBookItem;
import org.geometerplus.fbreader.network.tree.NetworkBookTree; import org.geometerplus.fbreader.network.tree.NetworkBookTree;
import org.geometerplus.fbreader.network.urlInfo.*; import org.geometerplus.fbreader.network.urlInfo.*;
@ -166,10 +165,16 @@ public class NetworkBookInfoActivity extends Activity implements NetworkView.Eve
linkView = inflater.inflate(R.layout.extra_link_item, extraLinkSection, false); linkView = inflater.inflate(R.layout.extra_link_item, extraLinkSection, false);
linkView.setOnClickListener(new View.OnClickListener() { linkView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) { public void onClick(View view) {
if (MimeType.TEXT_HTML.equals(relatedInfo.Mime)) { final NetworkCatalogItem catalogItem =
myBook.createRelatedCatalogItem(relatedInfo);
if (catalogItem != null) {
NetworkCatalogActions.doExpandCatalog(
NetworkBookInfoActivity.this,
NetworkLibrary.Instance().getFakeCatalogTree(catalogItem)
);
} else if (MimeType.TEXT_HTML.equals(relatedInfo.Mime)) {
Util.openInBrowser(NetworkBookInfoActivity.this, relatedInfo.Url); Util.openInBrowser(NetworkBookInfoActivity.this, relatedInfo.Url);
} }
System.err.println(relatedInfo.Url);
} }
}); });
((TextView)linkView.findViewById(R.id.extra_link_title)).setText(relatedInfo.Title); ((TextView)linkView.findViewById(R.id.extra_link_title)).setText(relatedInfo.Title);

View file

@ -397,7 +397,7 @@ class NetworkCatalogActions extends NetworkTreeActions {
} }
} }
private void processExtraData(final NetworkBaseActivity activity, Map<String,String> extraData, final Runnable postRunnable) { private static void processExtraData(final Activity activity, Map<String,String> extraData, final Runnable postRunnable) {
if (extraData != null && !extraData.isEmpty()) { if (extraData != null && !extraData.isEmpty()) {
PackageUtil.runInstallPluginDialog(activity, extraData, postRunnable); PackageUtil.runInstallPluginDialog(activity, extraData, postRunnable);
} else { } else {
@ -405,7 +405,7 @@ class NetworkCatalogActions extends NetworkTreeActions {
} }
} }
private void doExpandCatalog(final NetworkBaseActivity activity, final NetworkCatalogTree tree) { static void doExpandCatalog(final Activity activity, final NetworkCatalogTree tree) {
NetworkView.Instance().tryResumeLoading(activity, tree, new Runnable() { NetworkView.Instance().tryResumeLoading(activity, tree, new Runnable() {
public void run() { public void run() {
boolean resumeNotLoad = false; boolean resumeNotLoad = false;

View file

@ -21,6 +21,7 @@ package org.geometerplus.android.fbreader.network;
import java.util.*; import java.util.*;
import android.app.Activity;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.view.MenuItem; import android.view.MenuItem;
@ -132,7 +133,7 @@ class NetworkView {
* Code for loading network items (running items-loading service and managing items-loading runnables). * Code for loading network items (running items-loading service and managing items-loading runnables).
*/ */
public void tryResumeLoading(NetworkBaseActivity activity, NetworkCatalogTree tree, Runnable expandRunnable) { public void tryResumeLoading(Activity activity, NetworkCatalogTree tree, Runnable expandRunnable) {
final ItemsLoadingRunnable runnable = ItemsLoadingService.getRunnable(tree); final ItemsLoadingRunnable runnable = ItemsLoadingService.getRunnable(tree);
if (runnable != null && runnable.tryResumeLoading()) { if (runnable != null && runnable.tryResumeLoading()) {
Util.openTree(activity, tree); Util.openTree(activity, tree);

View file

@ -116,6 +116,10 @@ public class NetworkBookItem extends NetworkItem {
public void loadFullInformation() throws ZLNetworkException { public void loadFullInformation() throws ZLNetworkException {
} }
public NetworkCatalogItem createRelatedCatalogItem(RelatedUrlInfo info) {
return null;
}
public BookUrlInfo reference(UrlInfo.Type type) { public BookUrlInfo reference(UrlInfo.Type type) {
BookUrlInfo reference = null; BookUrlInfo reference = null;
for (UrlInfo r : getAllInfos(type)) { for (UrlInfo r : getAllInfos(type)) {

View file

@ -151,7 +151,8 @@ public class NetworkLibrary {
return filteredList; return filteredList;
} }
private final RootTree myRootTree = new RootTree(); private final RootTree myRootTree = new RootTree("@Root");
private final RootTree myFakeRootTree = new RootTree("@FakeRoot");
private SearchItemTree mySearchItemTree; private SearchItemTree mySearchItemTree;
private boolean myChildrenAreInvalid = true; private boolean myChildrenAreInvalid = true;
@ -404,12 +405,29 @@ public class NetworkLibrary {
return mySearchItemTree; return mySearchItemTree;
} }
public NetworkCatalogTree getFakeCatalogTree(NetworkCatalogItem item) {
final String id = item.getStringId();
for (FBTree tree : myFakeRootTree.subTrees()) {
final NetworkCatalogTree ncTree = (NetworkCatalogTree)tree;
if (id.equals(ncTree.getUniqueKey().Id)) {
return ncTree;
}
}
return new NetworkCatalogTree(myFakeRootTree, item, 0);
}
public NetworkTree getTreeByKey(NetworkTree.Key key) { public NetworkTree getTreeByKey(NetworkTree.Key key) {
if (key == null) { if (key == null) {
return null; return null;
} }
if (key.Parent == null) { if (key.Parent == null) {
return key.equals(myRootTree.getUniqueKey()) ? myRootTree : null; if (key.equals(myRootTree.getUniqueKey())) {
return myRootTree;
}
if (key.equals(myFakeRootTree.getUniqueKey())) {
return myFakeRootTree;
}
return null;
} }
final NetworkTree parentTree = getTreeByKey(key.Parent); final NetworkTree parentTree = getTreeByKey(key.Parent);
if (parentTree == null) { if (parentTree == null) {

View file

@ -23,10 +23,11 @@ import org.geometerplus.zlibrary.core.util.ZLNetworkUtil;
import org.geometerplus.fbreader.network.*; import org.geometerplus.fbreader.network.*;
import org.geometerplus.fbreader.network.opds.OPDSCatalogItem; import org.geometerplus.fbreader.network.opds.OPDSCatalogItem;
import org.geometerplus.fbreader.network.opds.OPDSNetworkLink;
import org.geometerplus.fbreader.network.urlInfo.*; import org.geometerplus.fbreader.network.urlInfo.*;
public class LitResRecommendationsItem extends OPDSCatalogItem { public class LitResRecommendationsItem extends OPDSCatalogItem {
public LitResRecommendationsItem(INetworkLink link, String title, String summary, UrlInfoCollection urls, Accessibility accessibility) { public LitResRecommendationsItem(OPDSNetworkLink link, String title, String summary, UrlInfoCollection urls, Accessibility accessibility) {
super(link, title, summary, urls, accessibility, FLAGS_DEFAULT & ~FLAGS_GROUP); super(link, title, summary, urls, accessibility, FLAGS_DEFAULT & ~FLAGS_GROUP);
} }

View file

@ -236,6 +236,13 @@ public class OPDSBookItem extends NetworkBookItem implements OPDSConstants {
}); });
} }
public OPDSCatalogItem createRelatedCatalogItem(RelatedUrlInfo info) {
if (MimeType.APP_ATOM.equals(info.Mime)) {
return new OPDSCatalogItem((OPDSNetworkLink)Link, info);
}
return null;
}
private class SingleEntryFeedHandler implements ATOMFeedHandler<OPDSFeedMetadata,OPDSEntry> { private class SingleEntryFeedHandler implements ATOMFeedHandler<OPDSFeedMetadata,OPDSEntry> {
private final String myUrl; private final String myUrl;

View file

@ -32,23 +32,34 @@ public class OPDSCatalogItem extends NetworkURLCatalogItem {
public String LastLoadedId; public String LastLoadedId;
public final HashSet<String> LoadedIds = new HashSet<String>(); public final HashSet<String> LoadedIds = new HashSet<String>();
public State(INetworkLink link, OnNewItemListener listener) { public State(OPDSNetworkLink link, OnNewItemListener listener) {
super(link, listener); super(link, listener);
} }
} }
private State myLoadingState; private State myLoadingState;
private final Map<String,String> myExtraData; private final Map<String,String> myExtraData;
OPDSCatalogItem(INetworkLink link, String title, String summary, UrlInfoCollection urls, Map<String,String> extraData) { OPDSCatalogItem(OPDSNetworkLink link, String title, String summary, UrlInfoCollection urls, Map<String,String> extraData) {
super(link, title, summary, urls); super(link, title, summary, urls);
myExtraData = extraData; myExtraData = extraData;
} }
public OPDSCatalogItem(INetworkLink link, String title, String summary, UrlInfoCollection urls, Accessibility accessibility, int flags) { protected OPDSCatalogItem(OPDSNetworkLink link, String title, String summary, UrlInfoCollection urls, Accessibility accessibility, int flags) {
super(link, title, summary, urls, accessibility, flags); super(link, title, summary, urls, accessibility, flags);
myExtraData = null; myExtraData = null;
} }
private static UrlInfoCollection createSimpleCollection(String url) {
final UrlInfoCollection collection = new UrlInfoCollection();
collection.addInfo(new UrlInfo(UrlInfo.Type.Catalog, url));
return collection;
}
OPDSCatalogItem(OPDSNetworkLink link, RelatedUrlInfo info) {
super(link, info.Title, null, createSimpleCollection(info.Url));
myExtraData = null;
}
private void doLoadChildren(ZLNetworkRequest networkRequest) throws ZLNetworkException { private void doLoadChildren(ZLNetworkRequest networkRequest) throws ZLNetworkException {
try { try {
super.doLoadChildren(myLoadingState, networkRequest); super.doLoadChildren(myLoadingState, networkRequest);

View file

@ -32,7 +32,7 @@ public class NetworkCatalogTree extends NetworkTree {
private long myLoadedTime = -1; private long myLoadedTime = -1;
NetworkCatalogTree(RootTree parent, NetworkCatalogItem item, int position) { public NetworkCatalogTree(RootTree parent, NetworkCatalogItem item, int position) {
super(parent, position); super(parent, position);
Item = item; Item = item;
} }

View file

@ -23,6 +23,12 @@ import org.geometerplus.fbreader.network.NetworkItem;
import org.geometerplus.fbreader.network.NetworkTree; import org.geometerplus.fbreader.network.NetworkTree;
public final class RootTree extends NetworkTree { public final class RootTree extends NetworkTree {
private final String myId;
public RootTree(String id) {
myId = id;
}
@Override @Override
public String getName() { public String getName() {
return null; return null;
@ -35,6 +41,6 @@ public final class RootTree extends NetworkTree {
@Override @Override
protected String getStringId() { protected String getStringId() {
return "@Root"; return myId;
} }
} }