mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 18:29:23 +02:00
fixed adding catalog from external plugin
This commit is contained in:
parent
53ec85193b
commit
b826f322bd
4 changed files with 106 additions and 74 deletions
|
@ -22,22 +22,24 @@ package org.geometerplus.android.fbreader.network;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.*;
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
import android.widget.*;
|
import android.widget.*;
|
||||||
|
|
||||||
|
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||||
import org.geometerplus.zlibrary.core.network.ZLNetworkManager;
|
import org.geometerplus.zlibrary.core.network.ZLNetworkManager;
|
||||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||||
|
import org.geometerplus.zlibrary.core.util.MimeType;
|
||||||
import org.geometerplus.zlibrary.core.util.ZLBoolean3;
|
import org.geometerplus.zlibrary.core.util.ZLBoolean3;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.ui.android.network.SQLiteCookieDatabase;
|
import org.geometerplus.zlibrary.ui.android.network.SQLiteCookieDatabase;
|
||||||
|
|
||||||
import org.geometerplus.fbreader.network.NetworkLibrary;
|
import org.geometerplus.fbreader.network.*;
|
||||||
import org.geometerplus.fbreader.network.NetworkTree;
|
import org.geometerplus.fbreader.network.opds.OPDSCustomNetworkLink;
|
||||||
import org.geometerplus.fbreader.network.tree.*;
|
import org.geometerplus.fbreader.network.tree.*;
|
||||||
|
import org.geometerplus.fbreader.network.urlInfo.*;
|
||||||
import org.geometerplus.fbreader.tree.FBTree;
|
import org.geometerplus.fbreader.tree.FBTree;
|
||||||
|
|
||||||
import org.geometerplus.android.fbreader.api.FBReaderIntents;
|
import org.geometerplus.android.fbreader.api.FBReaderIntents;
|
||||||
|
@ -95,7 +97,7 @@ public abstract class NetworkLibraryActivity extends TreeActivity<NetworkTree> i
|
||||||
Util.initLibrary(NetworkLibraryActivity.this, myNetworkContext, new Runnable() {
|
Util.initLibrary(NetworkLibraryActivity.this, myNetworkContext, new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
NetworkLibrary.Instance().runBackgroundUpdate(false);
|
NetworkLibrary.Instance().runBackgroundUpdate(false);
|
||||||
Util.requestCatalogPlugins(NetworkLibraryActivity.this);
|
requestCatalogPlugins();
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
openTreeByIntent(intent);
|
openTreeByIntent(intent);
|
||||||
}
|
}
|
||||||
|
@ -151,18 +153,27 @@ public abstract class NetworkLibraryActivity extends TreeActivity<NetworkTree> i
|
||||||
private boolean openTreeByIntent(Intent intent) {
|
private boolean openTreeByIntent(Intent intent) {
|
||||||
if (FBReaderIntents.Action.OPEN_NETWORK_CATALOG.equals(intent.getAction())) {
|
if (FBReaderIntents.Action.OPEN_NETWORK_CATALOG.equals(intent.getAction())) {
|
||||||
final Uri uri = intent.getData();
|
final Uri uri = intent.getData();
|
||||||
if (uri != null) {
|
if (uri == null) {
|
||||||
final String id = uri.toString();
|
return false;
|
||||||
final NetworkLibrary library = NetworkLibrary.Instance();
|
|
||||||
library.setLinkActive(id, true);
|
|
||||||
library.synchronize();
|
|
||||||
|
|
||||||
final NetworkTree tree = library.getCatalogTreeByUrl(id);
|
|
||||||
if (tree != null) {
|
|
||||||
checkAndRun(new OpenCatalogAction(this, myNetworkContext), tree);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
final String id = uri.toString();
|
||||||
|
addCustomLink(id, new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
final NetworkLibrary library = NetworkLibrary.Instance();
|
||||||
|
library.setLinkActive(id, true);
|
||||||
|
library.synchronize();
|
||||||
|
onLibraryChanged(NetworkLibrary.ChangeListener.Code.SomeCode, new Object[0]);
|
||||||
|
|
||||||
|
final NetworkTree tree = library.getCatalogTreeByUrl(id);
|
||||||
|
if (tree != null) {
|
||||||
|
checkAndRun(
|
||||||
|
new OpenCatalogAction(NetworkLibraryActivity.this, myNetworkContext),
|
||||||
|
tree
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -509,4 +520,63 @@ public abstract class NetworkLibraryActivity extends TreeActivity<NetworkTree> i
|
||||||
|
|
||||||
public void onScrollStateChanged(AbsListView view, int state) {
|
public void onScrollStateChanged(AbsListView view, int state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final BroadcastReceiver myCatalogInfoReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
final List<String> urls =
|
||||||
|
getResultExtras(true).getStringArrayList("fbreader.catalog.ids");
|
||||||
|
if (urls == null || urls.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (String u : urls) {
|
||||||
|
addCustomLink(u, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private void addCustomLink(String url, final Runnable postAction) {
|
||||||
|
final NetworkLibrary library = NetworkLibrary.Instance();
|
||||||
|
if (library.getLinkByUrl(url) != null) {
|
||||||
|
if (postAction != null) {
|
||||||
|
runOnUiThread(postAction);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ICustomNetworkLink link = new OPDSCustomNetworkLink(
|
||||||
|
INetworkLink.INVALID_ID,
|
||||||
|
INetworkLink.Type.Custom,
|
||||||
|
null, null, null,
|
||||||
|
new UrlInfoCollection<UrlInfoWithDate>(new UrlInfoWithDate(
|
||||||
|
UrlInfo.Type.Catalog, url, MimeType.APP_ATOM_XML
|
||||||
|
))
|
||||||
|
);
|
||||||
|
final Runnable loader = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
link.reloadInfo(myNetworkContext, false, false);
|
||||||
|
library.addCustomLink(link);
|
||||||
|
if (postAction != null) {
|
||||||
|
runOnUiThread(postAction);
|
||||||
|
}
|
||||||
|
} catch (ZLNetworkException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
new Thread(loader).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void requestCatalogPlugins() {
|
||||||
|
sendOrderedBroadcast(
|
||||||
|
new Intent(Util.EXTRA_CATALOG_ACTION),
|
||||||
|
null,
|
||||||
|
myCatalogInfoReceiver,
|
||||||
|
null,
|
||||||
|
RESULT_OK,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,17 +22,17 @@ package org.geometerplus.android.fbreader.network;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.*;
|
import android.content.ActivityNotFoundException;
|
||||||
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.network.*;
|
import org.geometerplus.zlibrary.core.network.ZLNetworkContext;
|
||||||
import org.geometerplus.zlibrary.core.options.Config;
|
import org.geometerplus.zlibrary.core.options.Config;
|
||||||
import org.geometerplus.zlibrary.core.util.MimeType;
|
|
||||||
|
|
||||||
import org.geometerplus.fbreader.network.*;
|
import org.geometerplus.fbreader.network.*;
|
||||||
import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager;
|
import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager;
|
||||||
import org.geometerplus.fbreader.network.opds.OPDSCustomNetworkLink;
|
import org.geometerplus.fbreader.network.urlInfo.BookUrlInfo;
|
||||||
import org.geometerplus.fbreader.network.urlInfo.*;
|
import org.geometerplus.fbreader.network.urlInfo.UrlInfo;
|
||||||
|
|
||||||
import org.geometerplus.android.util.UIUtil;
|
import org.geometerplus.android.util.UIUtil;
|
||||||
import org.geometerplus.android.util.PackageUtil;
|
import org.geometerplus.android.util.PackageUtil;
|
||||||
|
@ -136,53 +136,4 @@ public abstract class Util implements UserRegistrationConstants {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final BroadcastReceiver catalogInfoReceiver = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
final List<String> urls =
|
|
||||||
getResultExtras(true).getStringArrayList("fbreader.catalog.ids");
|
|
||||||
if (urls == null || urls.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final NetworkLibrary library = NetworkLibrary.Instance();
|
|
||||||
for (String u : urls) {
|
|
||||||
if (library.getLinkByUrl(u) != null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final ICustomNetworkLink link = new OPDSCustomNetworkLink(
|
|
||||||
INetworkLink.INVALID_ID,
|
|
||||||
INetworkLink.Type.Custom,
|
|
||||||
null, null, null,
|
|
||||||
new UrlInfoCollection<UrlInfoWithDate>(new UrlInfoWithDate(
|
|
||||||
UrlInfo.Type.Catalog, u, MimeType.APP_ATOM_XML
|
|
||||||
))
|
|
||||||
);
|
|
||||||
final Runnable loader = new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
link.reloadInfo(new QuietNetworkContext(), false, false);
|
|
||||||
library.addCustomLink(link);
|
|
||||||
} catch (ZLNetworkException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
new Thread(loader).start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public static void requestCatalogPlugins(Activity activity) {
|
|
||||||
activity.sendOrderedBroadcast(
|
|
||||||
new Intent(EXTRA_CATALOG_ACTION),
|
|
||||||
null,
|
|
||||||
catalogInfoReceiver,
|
|
||||||
null,
|
|
||||||
Activity.RESULT_OK,
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,10 @@ import org.geometerplus.fbreader.network.NetworkLibrary;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.ui.android.R;
|
import org.geometerplus.zlibrary.ui.android.R;
|
||||||
|
|
||||||
import org.geometerplus.android.fbreader.network.Util;
|
import org.geometerplus.android.fbreader.network.NetworkLibraryActivity;
|
||||||
|
|
||||||
public class RefreshRootCatalogAction extends RootAction {
|
public class RefreshRootCatalogAction extends RootAction {
|
||||||
public RefreshRootCatalogAction(Activity activity) {
|
public RefreshRootCatalogAction(NetworkLibraryActivity activity) {
|
||||||
super(activity, ActionCode.REFRESH, "refreshCatalogsList", R.drawable.ic_menu_refresh);
|
super(activity, ActionCode.REFRESH, "refreshCatalogsList", R.drawable.ic_menu_refresh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,6 @@ public class RefreshRootCatalogAction extends RootAction {
|
||||||
@Override
|
@Override
|
||||||
public void run(NetworkTree tree) {
|
public void run(NetworkTree tree) {
|
||||||
NetworkLibrary.Instance().runBackgroundUpdate(true);
|
NetworkLibrary.Instance().runBackgroundUpdate(true);
|
||||||
Util.requestCatalogPlugins(myActivity);
|
((NetworkLibraryActivity)myActivity).requestCatalogPlugins();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,7 @@ public class NetworkLibrary {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setLinkActive(link.getUrl(UrlInfo.Type.Catalog), active);
|
setLinkActive(link.getUrl(UrlInfo.Type.Catalog), active);
|
||||||
|
myChildrenAreInvalid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLinkActive(String id, boolean active) {
|
public void setLinkActive(String id, boolean active) {
|
||||||
|
@ -592,7 +593,16 @@ public class NetworkLibrary {
|
||||||
public void addCustomLink(ICustomNetworkLink link) {
|
public void addCustomLink(ICustomNetworkLink link) {
|
||||||
final int id = link.getId();
|
final int id = link.getId();
|
||||||
if (id == ICustomNetworkLink.INVALID_ID) {
|
if (id == ICustomNetworkLink.INVALID_ID) {
|
||||||
myLinks.add(link);
|
synchronized (myLinks) {
|
||||||
|
final INetworkLink existing = getLinkByUrl(link.getUrl(UrlInfo.Type.Catalog));
|
||||||
|
if (existing == null) {
|
||||||
|
myLinks.add(link);
|
||||||
|
} else {
|
||||||
|
setLinkActive(existing, true);
|
||||||
|
fireModelChangedEvent(ChangeListener.Code.SomeCode);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
synchronized (myLinks) {
|
synchronized (myLinks) {
|
||||||
for (int i = myLinks.size() - 1; i >= 0; --i) {
|
for (int i = myLinks.size() - 1; i >= 0; --i) {
|
||||||
|
@ -606,6 +616,7 @@ public class NetworkLibrary {
|
||||||
}
|
}
|
||||||
NetworkDatabase.Instance().saveLink(link);
|
NetworkDatabase.Instance().saveLink(link);
|
||||||
setLinkActive(link, true);
|
setLinkActive(link, true);
|
||||||
|
fireModelChangedEvent(ChangeListener.Code.SomeCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeCustomLink(ICustomNetworkLink link) {
|
public void removeCustomLink(ICustomNetworkLink link) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue