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

rewriteUrl for external links

git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@1146 6a642e6f-84f6-412e-ac94-c4a38d5a04b0
This commit is contained in:
Vasiliy Bout 2010-03-26 11:27:51 +00:00
parent 547c8545d0
commit e4edf5aade
7 changed files with 41 additions and 9 deletions

View file

@ -11,6 +11,9 @@ DONE постепенная асинхронная загрузка катало
DELAYED нормальная архитектура для асинхронной загрузки каталогов
DELAYED асинхронная работа с сетью
* использование rewriteUrl
DONE link from a Book (reading mode) -- external
DONE link from a Network Library -- external
** link from a Network Library -- internal
* загрузка иконок:
* книг

View file

@ -197,6 +197,7 @@ public class NetworkLibraryActivity extends ListActivity implements MenuItem.OnM
public void openInBrowser(String url) {
if (url != null) {
url = NetworkLibrary.Instance().rewriteUrl(url, true);
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}
}

View file

@ -23,6 +23,7 @@ import java.io.*;
import java.util.*;
import org.geometerplus.zlibrary.core.filesystem.*;
import org.geometerplus.zlibrary.core.util.ZLNetworkUtil;
import org.geometerplus.fbreader.tree.FBTree;
import org.geometerplus.fbreader.network.tree.*;
@ -87,6 +88,16 @@ public class NetworkLibrary {
return Collections.unmodifiableList(myLinks);
}
public String rewriteUrl(String url, boolean externalUrl) {
final String host = ZLNetworkUtil.hostFromUrl(url).toLowerCase();
for (NetworkLink link: myLinks) {
if (host.contains(link.SiteName)) {
url = link.rewriteUrl(url, externalUrl);
}
}
return url;
}
public void invalidate() {
myUpdateChildren = true;
}

View file

@ -23,6 +23,8 @@ import java.util.*;
import java.io.*;
import java.net.*;
import org.geometerplus.zlibrary.core.util.ZLNetworkUtil;
import org.geometerplus.fbreader.network.*;
@ -82,12 +84,7 @@ class OPDSCatalogItem extends NetworkCatalogItem {
} catch (SocketTimeoutException ex) {
return NetworkErrors.errorMessage("operationTimedOutMessage");
} catch (IOException ex) {
try {
return NetworkErrors.errorMessage(NetworkErrors.ERROR_SOMETHING_WRONG, new URL(urlString).getHost());
} catch (MalformedURLException ex2) {
// return error???
return null;
}
return NetworkErrors.errorMessage(NetworkErrors.ERROR_SOMETHING_WRONG, ZLNetworkUtil.hostFromUrl(urlString));
}
return null;
}

View file

@ -84,6 +84,9 @@ class OPDSLink extends NetworkLink {
@Override
public String rewriteUrl(String url, boolean isUrlExternal) {
if (myUrlRewritingRules == null) {
return url;
}
for (URLRewritingRule rule: myUrlRewritingRules) {
if (rule.Apply != URLRewritingRule.APPLY_ALWAYS) {
if ((rule.Apply == URLRewritingRule.APPLY_EXTERNAL && !isUrlExternal)

View file

@ -99,6 +99,19 @@ public class ZLNetworkUtil {
return new StringBuilder(url).append(delimiter).append(name).append('=').append(value).toString();
}
public static String hostFromUrl(String url) {
String host = url;
int index = host.indexOf("://");
if (index != -1) {
host = host.substring(index + 3);
}
index = host.indexOf("/");
if (index != -1) {
host = host.substring(0, index);
}
return host;
}
public static String getUserAgent(String versionName) {
return "FBReader/" + versionName + "(java)";
}

View file

@ -36,6 +36,8 @@ import org.geometerplus.zlibrary.ui.android.view.ZLAndroidPaintContext;
import org.geometerplus.zlibrary.ui.android.view.ZLAndroidWidget;
import org.geometerplus.zlibrary.ui.android.dialogs.ZLAndroidDialogManager;
import org.geometerplus.fbreader.network.NetworkLibrary;
import org.geometerplus.android.fbreader.network.BookDownloader;
public final class ZLAndroidLibrary extends ZLibrary {
@ -72,11 +74,13 @@ public final class ZLAndroidLibrary extends ZLibrary {
public void openInBrowser(String reference) {
final Intent intent = new Intent(Intent.ACTION_VIEW);
final Uri uri = Uri.parse(reference);
if (BookDownloader.acceptsUri(uri)) {
boolean externalUrl = true;
if (BookDownloader.acceptsUri(Uri.parse(reference))) {
intent.setClass(myActivity, BookDownloader.class);
externalUrl = false;
}
intent.setData(uri);
reference = NetworkLibrary.Instance().rewriteUrl(reference, externalUrl);
intent.setData(Uri.parse(reference));
myActivity.startActivity(intent);
}