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

basket books loading

This commit is contained in:
Nikolay Pultsin 2011-09-28 02:36:01 +01:00
parent 41d56b3cf2
commit 3bcef21edb
9 changed files with 111 additions and 69 deletions

View file

@ -29,7 +29,7 @@ resources for search actions
titles/summaries
menu items
Search actions
stop search
interrupt search
reload
проверить все пути регистрации

View file

@ -22,16 +22,14 @@ package org.geometerplus.fbreader.network;
import java.util.*;
import org.geometerplus.zlibrary.core.money.Money;
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
import org.geometerplus.zlibrary.core.options.ZLStringListOption;
import org.geometerplus.fbreader.network.urlInfo.*;
import org.geometerplus.fbreader.network.tree.NetworkItemsLoader;
public class BasketItem extends NetworkCatalogItem {
public abstract class BasketItem extends NetworkCatalogItem {
private final ZLStringListOption myBooksInBasketOption;
public BasketItem(INetworkLink link) {
protected BasketItem(INetworkLink link) {
super(
link,
NetworkLibrary.resource().getResource("basket").getValue(),
@ -62,10 +60,6 @@ public class BasketItem extends NetworkCatalogItem {
return !bookIds().isEmpty();
}
@Override
public void loadChildren(NetworkItemsLoader loader) throws ZLNetworkException {
}
@Override
public String getStringId() {
return "@Basket";

View file

@ -55,7 +55,6 @@ public interface INetworkLink extends Comparable<INetworkLink> {
BasketItem getBasketItem();
ZLNetworkRequest bookListRequest(List<String> bookIds, NetworkOperationData data);
ZLNetworkRequest simpleSearchRequest(String pattern, NetworkOperationData data);
ZLNetworkRequest resume(NetworkOperationData data);

View file

@ -22,6 +22,8 @@ package org.geometerplus.fbreader.network;
import java.util.*;
import org.geometerplus.zlibrary.core.util.ZLBoolean3;
import org.geometerplus.zlibrary.core.network.ZLNetworkManager;
import org.geometerplus.zlibrary.core.network.ZLNetworkRequest;
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager;
@ -128,4 +130,23 @@ public abstract class NetworkCatalogItem extends NetworkItem {
}
public abstract String getStringId();
/**
* Performs all necessary operations with NetworkOperationData and NetworkRequest
* to complete loading children items.
*
* @param data Network operation data instance
* @param networkRequest initial network request
*
* @throws ZLNetworkException when network operation couldn't be completed
*/
protected final void doLoadChildren(NetworkOperationData data, ZLNetworkRequest networkRequest) throws ZLNetworkException {
while (networkRequest != null) {
ZLNetworkManager.Instance().perform(networkRequest);
if (data.Loader.confirmInterruption()) {
return;
}
networkRequest = data.resume();
}
}
}

View file

@ -20,8 +20,6 @@
package org.geometerplus.fbreader.network;
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
import org.geometerplus.zlibrary.core.network.ZLNetworkManager;
import org.geometerplus.zlibrary.core.network.ZLNetworkRequest;
import org.geometerplus.fbreader.network.urlInfo.UrlInfo;
import org.geometerplus.fbreader.network.urlInfo.UrlInfoCollection;
@ -42,25 +40,6 @@ public abstract class NetworkURLCatalogItem extends NetworkCatalogItem {
super(link, title, summary, urls, accessibility, flags);
}
/**
* Performs all necessary operations with NetworkOperationData and NetworkRequest
* to complete loading children items.
*
* @param data Network operation data instance
* @param networkRequest initial network request
*
* @throws ZLNetworkException when network operation couldn't be completed
*/
protected final void doLoadChildren(NetworkOperationData data, ZLNetworkRequest networkRequest) throws ZLNetworkException {
while (networkRequest != null) {
ZLNetworkManager.Instance().perform(networkRequest);
if (data.Loader.confirmInterruption()) {
return;
}
networkRequest = data.resume();
}
}
protected String getCatalogUrl() {
return getUrl(UrlInfo.Type.Catalog);
}

View file

@ -0,0 +1,53 @@
/*
* Copyright (C) 2010-2011 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package org.geometerplus.fbreader.network.opds;
import java.util.List;
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
import org.geometerplus.zlibrary.core.util.ZLMiscUtil;
import org.geometerplus.fbreader.network.BasketItem;
import org.geometerplus.fbreader.network.urlInfo.*;
import org.geometerplus.fbreader.network.tree.NetworkItemsLoader;
class OPDSBasketItem extends BasketItem {
OPDSBasketItem(OPDSNetworkLink link) {
super(link);
}
@Override
public void loadChildren(NetworkItemsLoader loader) throws ZLNetworkException {
final List<String> ids = bookIds();
if (ids.isEmpty()) {
return;
}
final OPDSNetworkLink opdsLink = (OPDSNetworkLink)Link;
String url = opdsLink.getUrl(UrlInfo.Type.ListBooks);
if (url == null) {
return;
}
url = url.replace("{ids}", ZLMiscUtil.listToString(ids));
final OPDSCatalogItem.State state = opdsLink.createOperationData(loader);
doLoadChildren(state, opdsLink.createNetworkData(null, url, state));
}
}

View file

@ -25,9 +25,10 @@ import java.io.InputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.geometerplus.zlibrary.core.util.MimeType;
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
import org.geometerplus.zlibrary.core.network.ZLNetworkRequest;
import org.geometerplus.zlibrary.core.util.MimeType;
import org.geometerplus.zlibrary.core.util.ZLMiscUtil;
import org.geometerplus.fbreader.network.*;
import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager;
@ -112,7 +113,7 @@ public abstract class OPDSNetworkLink extends AbstractNetworkLink {
}
public ZLNetworkRequest resume(NetworkOperationData data) {
return createNetworkData(null, data.ResumeURI, (OPDSCatalogItem.State) data);
return createNetworkData(null, data.ResumeURI, (OPDSCatalogItem.State)data);
}
public NetworkCatalogItem libraryItem() {
@ -172,17 +173,11 @@ public abstract class OPDSNetworkLink extends AbstractNetworkLink {
public BasketItem getBasketItem() {
final String url = getUrl(UrlInfo.Type.ListBooks);
if (url != null && myBasketItem == null) {
myBasketItem = new BasketItem(this);
myBasketItem = new OPDSBasketItem(this);
}
return myBasketItem;
}
@Override
public ZLNetworkRequest bookListRequest(List<String> bookIds, NetworkOperationData data) {
// TODO: implement
return null;
}
@Override
public String toString() {
return "OPDSNetworkLink: {super=" + super.toString()

View file

@ -21,34 +21,12 @@ package org.geometerplus.zlibrary.core.options;
import java.util.*;
import org.geometerplus.zlibrary.core.util.ZLMiscUtil;
public class ZLStringListOption extends ZLOption {
private final List<String> myDefaultValue;
private List<String> myValue;
private static String listToString(List<String> list) {
if (list == null || list.isEmpty()) {
return "";
}
final StringBuilder builder = new StringBuilder();
boolean first = true;
for (String s : list) {
if (first) {
first = false;
} else {
builder.append(",");
}
builder.append(s);
}
return builder.toString();
}
private static List<String> stringToList(String str) {
if (str == null || "".equals(str)) {
return Collections.emptyList();
}
return Arrays.asList(str.split(","));
}
public ZLStringListOption(String group, String optionName, List<String> defaultValue) {
super(group, optionName);
myDefaultValue = (defaultValue != null) ? defaultValue : Collections.<String>emptyList();
@ -57,9 +35,9 @@ public class ZLStringListOption extends ZLOption {
public List<String> getValue() {
if (!myIsSynchronized) {
final String value = getConfigValue(listToString(myDefaultValue));
final String value = getConfigValue(ZLMiscUtil.listToString(myDefaultValue));
if (value != null) {
myValue = stringToList(value);
myValue = ZLMiscUtil.stringToList(value);
}
myIsSynchronized = true;
}
@ -77,7 +55,7 @@ public class ZLStringListOption extends ZLOption {
if (value.equals(myDefaultValue)) {
unsetConfigValue();
} else {
setConfigValue(listToString(value));
setConfigValue(ZLMiscUtil.listToString(value));
}
myIsSynchronized = true;
}

View file

@ -19,8 +19,7 @@
package org.geometerplus.zlibrary.core.util;
import java.util.List;
import java.util.Map;
import java.util.*;
public abstract class ZLMiscUtil {
public static <T> boolean equals(T o0, T o1) {
@ -67,4 +66,28 @@ public abstract class ZLMiscUtil {
return (text.length() >= lowerCasePattern.length()) &&
(text.toLowerCase().indexOf(lowerCasePattern) >= 0);
}
public static String listToString(List<String> list) {
if (list == null || list.isEmpty()) {
return "";
}
final StringBuilder builder = new StringBuilder();
boolean first = true;
for (String s : list) {
if (first) {
first = false;
} else {
builder.append(",");
}
builder.append(s);
}
return builder.toString();
}
public static List<String> stringToList(String str) {
if (str == null || "".equals(str)) {
return Collections.emptyList();
}
return Arrays.asList(str.split(","));
}
}