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 android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.*;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.*;
|
||||
import android.widget.*;
|
||||
|
||||
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||
import org.geometerplus.zlibrary.core.network.ZLNetworkManager;
|
||||
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.ui.android.network.SQLiteCookieDatabase;
|
||||
|
||||
import org.geometerplus.fbreader.network.NetworkLibrary;
|
||||
import org.geometerplus.fbreader.network.NetworkTree;
|
||||
import org.geometerplus.fbreader.network.*;
|
||||
import org.geometerplus.fbreader.network.opds.OPDSCustomNetworkLink;
|
||||
import org.geometerplus.fbreader.network.tree.*;
|
||||
import org.geometerplus.fbreader.network.urlInfo.*;
|
||||
import org.geometerplus.fbreader.tree.FBTree;
|
||||
|
||||
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() {
|
||||
public void run() {
|
||||
NetworkLibrary.Instance().runBackgroundUpdate(false);
|
||||
Util.requestCatalogPlugins(NetworkLibraryActivity.this);
|
||||
requestCatalogPlugins();
|
||||
if (intent != null) {
|
||||
openTreeByIntent(intent);
|
||||
}
|
||||
|
@ -151,19 +153,28 @@ public abstract class NetworkLibraryActivity extends TreeActivity<NetworkTree> i
|
|||
private boolean openTreeByIntent(Intent intent) {
|
||||
if (FBReaderIntents.Action.OPEN_NETWORK_CATALOG.equals(intent.getAction())) {
|
||||
final Uri uri = intent.getData();
|
||||
if (uri != null) {
|
||||
if (uri == null) {
|
||||
return false;
|
||||
}
|
||||
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(this, myNetworkContext), tree);
|
||||
checkAndRun(
|
||||
new OpenCatalogAction(NetworkLibraryActivity.this, myNetworkContext),
|
||||
tree
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -509,4 +520,63 @@ public abstract class NetworkLibraryActivity extends TreeActivity<NetworkTree> i
|
|||
|
||||
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 android.app.Activity;
|
||||
import android.content.*;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
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.util.MimeType;
|
||||
|
||||
import org.geometerplus.fbreader.network.*;
|
||||
import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager;
|
||||
import org.geometerplus.fbreader.network.opds.OPDSCustomNetworkLink;
|
||||
import org.geometerplus.fbreader.network.urlInfo.*;
|
||||
import org.geometerplus.fbreader.network.urlInfo.BookUrlInfo;
|
||||
import org.geometerplus.fbreader.network.urlInfo.UrlInfo;
|
||||
|
||||
import org.geometerplus.android.util.UIUtil;
|
||||
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.android.fbreader.network.Util;
|
||||
import org.geometerplus.android.fbreader.network.NetworkLibraryActivity;
|
||||
|
||||
public class RefreshRootCatalogAction extends RootAction {
|
||||
public RefreshRootCatalogAction(Activity activity) {
|
||||
public RefreshRootCatalogAction(NetworkLibraryActivity activity) {
|
||||
super(activity, ActionCode.REFRESH, "refreshCatalogsList", R.drawable.ic_menu_refresh);
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,6 @@ public class RefreshRootCatalogAction extends RootAction {
|
|||
@Override
|
||||
public void run(NetworkTree tree) {
|
||||
NetworkLibrary.Instance().runBackgroundUpdate(true);
|
||||
Util.requestCatalogPlugins(myActivity);
|
||||
((NetworkLibraryActivity)myActivity).requestCatalogPlugins();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -124,6 +124,7 @@ public class NetworkLibrary {
|
|||
return;
|
||||
}
|
||||
setLinkActive(link.getUrl(UrlInfo.Type.Catalog), active);
|
||||
myChildrenAreInvalid = true;
|
||||
}
|
||||
|
||||
public void setLinkActive(String id, boolean active) {
|
||||
|
@ -592,7 +593,16 @@ public class NetworkLibrary {
|
|||
public void addCustomLink(ICustomNetworkLink link) {
|
||||
final int id = link.getId();
|
||||
if (id == ICustomNetworkLink.INVALID_ID) {
|
||||
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 {
|
||||
synchronized (myLinks) {
|
||||
for (int i = myLinks.size() - 1; i >= 0; --i) {
|
||||
|
@ -606,6 +616,7 @@ public class NetworkLibrary {
|
|||
}
|
||||
NetworkDatabase.Instance().saveLink(link);
|
||||
setLinkActive(link, true);
|
||||
fireModelChangedEvent(ChangeListener.Code.SomeCode);
|
||||
}
|
||||
|
||||
public void removeCustomLink(ICustomNetworkLink link) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue