mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 10:49:24 +02:00
basket books loading
This commit is contained in:
parent
41d56b3cf2
commit
3bcef21edb
9 changed files with 111 additions and 69 deletions
|
@ -29,7 +29,7 @@ resources for search actions
|
|||
titles/summaries
|
||||
menu items
|
||||
Search actions
|
||||
stop search
|
||||
interrupt search
|
||||
reload
|
||||
проверить все пути регистрации
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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(","));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue