mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 10:19:33 +02:00
custom links search; custom links update
This commit is contained in:
parent
34119928a0
commit
c5f9ea0bd4
5 changed files with 41 additions and 12 deletions
|
@ -4,6 +4,8 @@
|
|||
* opds:// URLs support has been implemented
|
||||
* Unexpected search call has been fixed
|
||||
* Ignore case comparison for zip entry names
|
||||
* Fixed custom OPDS link search
|
||||
* Periodical update of custom links information has been added
|
||||
|
||||
===== 0.99.13 (Feb 13, 2011) =====
|
||||
* Fixed book/position forgetting bug
|
||||
|
|
|
@ -85,7 +85,7 @@ class SQLiteNetworkDatabase extends NetworkDatabase {
|
|||
final String summary = cursor.getString(3);
|
||||
|
||||
linksMap.clear();
|
||||
final Cursor linksCursor = myDatabase.rawQuery("SELECT key,url,update_time FROM LinkUrls WHERE url NOT NULL AND link_id = " + id, null);
|
||||
final Cursor linksCursor = myDatabase.rawQuery("SELECT key,url,update_time FROM LinkUrls WHERE link_id = " + id, null);
|
||||
while (linksCursor.moveToNext()) {
|
||||
linksMap.put(
|
||||
linksCursor.getString(0),
|
||||
|
@ -141,10 +141,10 @@ class SQLiteNetworkDatabase extends NetworkDatabase {
|
|||
link.setId((int) id);
|
||||
} else {
|
||||
id = link.getId();
|
||||
statement.bindLong(5, id);
|
||||
statement.bindLong(4, id);
|
||||
statement.execute();
|
||||
|
||||
final Cursor linksCursor = myDatabase.rawQuery("SELECT key,url,update_time FROM LinkUrls WHERE url NOT NULL AND link_id = " + link.getId(), null);
|
||||
final Cursor linksCursor = myDatabase.rawQuery("SELECT key,url,update_time FROM LinkUrls WHERE link_id = " + link.getId(), null);
|
||||
while (linksCursor.moveToNext()) {
|
||||
linksMap.put(
|
||||
linksCursor.getString(0),
|
||||
|
|
|
@ -37,6 +37,7 @@ public interface ICustomNetworkLink extends INetworkLink {
|
|||
void setUrl(String urlKey, String url);
|
||||
void removeUrl(String urlKey);
|
||||
|
||||
boolean isObsolete(long milliSeconds);
|
||||
void reloadInfo(boolean urlsOnly) throws ZLNetworkException;
|
||||
|
||||
// returns true if next methods have changed link's data:
|
||||
|
|
|
@ -244,6 +244,15 @@ public class NetworkLibrary {
|
|||
}
|
||||
}
|
||||
}
|
||||
for (INetworkLink link : myLinks) {
|
||||
if (link instanceof ICustomNetworkLink) {
|
||||
final ICustomNetworkLink customLink = (ICustomNetworkLink)link;
|
||||
if (customLink.isObsolete(12 * 60 * 60 * 1000)) { // 12 hours
|
||||
customLink.reloadInfo(true);
|
||||
NetworkDatabase.Instance().saveCustomLink(customLink);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -253,12 +262,11 @@ public class NetworkLibrary {
|
|||
// synchronize() method MUST be called after this method
|
||||
public void finishBackgroundUpdate() {
|
||||
synchronized (myBackgroundLock) {
|
||||
if (myBackgroundLinks == null) {
|
||||
return;
|
||||
}
|
||||
synchronized (myLinks) {
|
||||
if (myBackgroundLinks != null) {
|
||||
removeAllLoadedLinks();
|
||||
myLinks.addAll(myBackgroundLinks);
|
||||
}
|
||||
invalidateChildren();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -85,13 +85,29 @@ public class OPDSCustomLink extends OPDSNetworkLink implements ICustomNetworkLin
|
|||
myHasChanges = myHasChanges || oldUrl != null;
|
||||
}
|
||||
|
||||
public void reloadInfo(boolean urlsOnly) throws ZLNetworkException {
|
||||
public boolean isObsolete(long milliSeconds) {
|
||||
final long old = System.currentTimeMillis() - milliSeconds;
|
||||
|
||||
final Date searchUpdateDate = getUrlInfo(URL_SEARCH).Updated;
|
||||
if (searchUpdateDate == null || searchUpdateDate.getTime() < old) {
|
||||
return true;
|
||||
}
|
||||
|
||||
final Date iconUpdateDate = getUrlInfo(URL_ICON).Updated;
|
||||
if (iconUpdateDate == null || iconUpdateDate.getTime() < old) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void reloadInfo(final boolean urlsOnly) throws ZLNetworkException {
|
||||
final LinkedList<String> opensearchDescriptionURLs = new LinkedList<String>();
|
||||
final List<OpenSearchDescription> descriptions = Collections.synchronizedList(new LinkedList<OpenSearchDescription>());
|
||||
|
||||
ZLNetworkException error = null;
|
||||
try {
|
||||
ZLNetworkManager.Instance().perform(new ZLNetworkRequest(getUrlInfo(INetworkLink.URL_MAIN).URL) {
|
||||
ZLNetworkManager.Instance().perform(new ZLNetworkRequest(getUrlInfo(URL_MAIN).URL) {
|
||||
@Override
|
||||
public void handleStream(URLConnection connection, InputStream inputStream) throws IOException, ZLNetworkException {
|
||||
final CatalogInfoReader info = new CatalogInfoReader(URL, OPDSCustomLink.this, opensearchDescriptionURLs);
|
||||
|
@ -103,12 +119,14 @@ public class OPDSCustomLink extends OPDSNetworkLink implements ICustomNetworkLin
|
|||
if (info.Title == null) {
|
||||
throw new ZLNetworkException(NetworkException.ERROR_NO_REQUIRED_INFORMATION);
|
||||
}
|
||||
myTitle = info.Title;
|
||||
setUrl(URL_ICON, info.Icon);
|
||||
mySummary = info.Summary;
|
||||
if (info.DirectOpenSearchDescription != null) {
|
||||
descriptions.add(info.DirectOpenSearchDescription);
|
||||
}
|
||||
if (!urlsOnly) {
|
||||
myTitle = info.Title;
|
||||
mySummary = info.Summary;
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (ZLNetworkException e) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue