diff --git a/src/org/geometerplus/android/fbreader/network/SQLiteNetworkDatabase.java b/src/org/geometerplus/android/fbreader/network/SQLiteNetworkDatabase.java index b9f2732c1..2acbfc80b 100644 --- a/src/org/geometerplus/android/fbreader/network/SQLiteNetworkDatabase.java +++ b/src/org/geometerplus/android/fbreader/network/SQLiteNetworkDatabase.java @@ -19,6 +19,8 @@ package org.geometerplus.android.fbreader.network; +import java.util.*; + import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; @@ -26,8 +28,7 @@ import android.database.sqlite.SQLiteStatement; import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication; -import org.geometerplus.fbreader.network.ICustomNetworkLink; -import org.geometerplus.fbreader.network.NetworkDatabase; +import org.geometerplus.fbreader.network.*; import org.geometerplus.fbreader.network.urlInfo.*; import org.geometerplus.android.util.SQLiteUtil; @@ -77,7 +78,9 @@ class SQLiteNetworkDatabase extends NetworkDatabase { } @Override - protected void loadCustomLinks(ICustomLinksHandler handler) { + protected List loadLinks() { + final List links = new LinkedList(); + final Cursor cursor = myDatabase.rawQuery("SELECT link_id,title,site_name,summary FROM Links", null); final UrlInfoCollection linksMap = new UrlInfoCollection(); while (cursor.moveToNext()) { @@ -102,9 +105,14 @@ class SQLiteNetworkDatabase extends NetworkDatabase { } linksCursor.close(); - handler.handleCustomLinkData(id, siteName, title, summary, linksMap); + final INetworkLink l = createLink(id, siteName, title, summary, linksMap); + if (l != null) { + links.add(l); + } } cursor.close(); + + return links; } private SQLiteStatement myInsertCustomLinkStatement; diff --git a/src/org/geometerplus/fbreader/network/NetworkDatabase.java b/src/org/geometerplus/fbreader/network/NetworkDatabase.java index 6b61346b2..e039cff6c 100644 --- a/src/org/geometerplus/fbreader/network/NetworkDatabase.java +++ b/src/org/geometerplus/fbreader/network/NetworkDatabase.java @@ -19,7 +19,10 @@ package org.geometerplus.fbreader.network; +import java.util.List; + import org.geometerplus.fbreader.network.urlInfo.*; +import org.geometerplus.fbreader.network.opds.OPDSCustomLink; public abstract class NetworkDatabase { private static NetworkDatabase ourInstance; @@ -34,11 +37,14 @@ public abstract class NetworkDatabase { protected abstract void executeAsATransaction(Runnable actions); - public interface ICustomLinksHandler { - void handleCustomLinkData(int id, String siteName, String title, String summary, UrlInfoCollection infos); + protected INetworkLink createLink(int id, String siteName, String title, String summary, UrlInfoCollection infos) { + if (siteName == null || title == null || infos.getInfo(UrlInfo.Type.Catalog) == null) { + return null; + } + return new OPDSCustomLink(id, siteName, title, summary, infos); } - protected abstract void loadCustomLinks(ICustomLinksHandler handler); + protected abstract List loadLinks(); protected abstract void saveCustomLink(ICustomNetworkLink link); protected abstract void deleteCustomLink(ICustomNetworkLink link); } diff --git a/src/org/geometerplus/fbreader/network/NetworkLibrary.java b/src/org/geometerplus/fbreader/network/NetworkLibrary.java index faf405a36..071be7ce7 100644 --- a/src/org/geometerplus/fbreader/network/NetworkLibrary.java +++ b/src/org/geometerplus/fbreader/network/NetworkLibrary.java @@ -31,7 +31,6 @@ import org.geometerplus.zlibrary.core.language.ZLLanguageUtil; import org.geometerplus.fbreader.tree.FBTree; import org.geometerplus.fbreader.network.tree.*; -import org.geometerplus.fbreader.network.opds.OPDSCustomLink; import org.geometerplus.fbreader.network.opds.OPDSLinkReader; import org.geometerplus.fbreader.network.urlInfo.*; @@ -180,21 +179,7 @@ public class NetworkLibrary { final NetworkDatabase db = NetworkDatabase.Instance(); if (db != null) { - db.loadCustomLinks( - new NetworkDatabase.ICustomLinksHandler() { - public void handleCustomLinkData(int id, String siteName, - String title, String summary, UrlInfoCollection infos) { - if (title != null && - siteName != null && - infos.getInfo(UrlInfo.Type.Catalog) != null) { - final ICustomNetworkLink link = new OPDSCustomLink( - id, siteName, title, summary, infos - ); - myLinks.add(link); - } - } - } - ); + myLinks.addAll(db.loadLinks()); } myIsAlreadyInitialized = true;