diff --git a/res/layout/mode.xml b/res/layout/mode.xml
new file mode 100644
index 000000000..dcf9a0f9d
--- /dev/null
+++ b/res/layout/mode.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a31d90587..b31624b62 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -212,6 +212,9 @@
缩小
菜单
+
+ 请登录以避免 Sad Panda
+
根本把持不住
好极了
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 6acd8d628..b9d93d541 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -22,6 +22,14 @@
- @string/star_5
+
+ - g.e-hentai.org
+ - exhentai.org
+ - lofi.e-hentai.org (460x)
+ - lofi.e-hentai.org (780x)
+ - lofi.e-hentai.org (980x)
+
+
- @string/actual_size
- @string/fit_to_width
@@ -94,10 +102,4 @@
- 2
-
-
- - g.e-hentai.org
- - exhentai.org
-
-
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9c644ddbc..39443c273 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -216,6 +216,9 @@
Zoom out
Menu
+
+ Please login to avoid Sad Panda.
+
DOUJINSHI
MANGA
@@ -243,7 +246,7 @@
DISASTER
- 发送
+ Send
Detail
Comment
Info
diff --git a/src/com/hippo/ehviewer/GallerysDownloader.java b/src/com/hippo/ehviewer/GallerysDownloader.java
index 5cc898ea5..73ef293c2 100644
--- a/src/com/hippo/ehviewer/GallerysDownloader.java
+++ b/src/com/hippo/ehviewer/GallerysDownloader.java
@@ -92,7 +92,7 @@ public class GallerysDownloader {
HttpHelper hp = new HttpHelper(mAppContext);
String url = EhClient.getDetailUrl(galleryInfo.gid, galleryInfo.token,
- EhClient.getDetailModeForDownloadMode(curDownloadInfo.getMode()));
+ curDownloadInfo.getMode());
String pageContent = getUrlContext(hp, url);
if (pageContent == null) {
if (mListener != null)
diff --git a/src/com/hippo/ehviewer/ListUrls.java b/src/com/hippo/ehviewer/ListUrls.java
index 1730d330d..5e6f6b975 100644
--- a/src/com/hippo/ehviewer/ListUrls.java
+++ b/src/com/hippo/ehviewer/ListUrls.java
@@ -186,7 +186,7 @@ public class ListUrls {
}
public String getUrl() {
- StringBuilder url = new StringBuilder(EhClient.listHeader);
+ StringBuilder url = new StringBuilder(EhClient.getUrlHeader());
url.append("?");
// Add type
diff --git a/src/com/hippo/ehviewer/activity/DetailSectionFragment.java b/src/com/hippo/ehviewer/activity/DetailSectionFragment.java
index 2fb7e60cd..abd71d9de 100644
--- a/src/com/hippo/ehviewer/activity/DetailSectionFragment.java
+++ b/src/com/hippo/ehviewer/activity/DetailSectionFragment.java
@@ -31,7 +31,6 @@ import com.hippo.ehviewer.widget.OlScrollView;
import com.hippo.ehviewer.widget.OnFitSystemWindowsListener;
import com.hippo.ehviewer.widget.OnLayoutListener;
import com.hippo.ehviewer.widget.ProgressiveRatingBar;
-import com.hippo.ehviewer.widget.ProgressiveTextView;
import android.app.AlertDialog;
import android.content.Context;
@@ -48,23 +47,19 @@ import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.LayoutInflater;
-import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
-import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RatingBar;
-import android.widget.ScrollView;
import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.Toast;
-import android.widget.ViewFlipper;
import android.widget.ViewSwitcher.ViewFactory;
public class DetailSectionFragment extends Fragment
@@ -122,7 +117,7 @@ public class DetailSectionFragment extends Fragment
mGalleryDetail = new GalleryDetail(galleryInfo);
}
mUrl = EhClient.getDetailUrl(
- mGalleryDetail.gid, mGalleryDetail.token, EhClient.EX);
+ mGalleryDetail.gid, mGalleryDetail.token);
mRootView = inflater.inflate(
R.layout.detail, container, false);
@@ -298,8 +293,6 @@ public class DetailSectionFragment extends Fragment
mWaitPreviewList.setVisibility(View.VISIBLE);
mPreviewRefreshButton.setVisibility(View.GONE);
- //previewNumText.setText(String.format("%d / %d",
- //curPage+1, mangaDetail.previewSum));
mPreviewNumText.setText(String.format("%d / %d",
mCurPage+1, mGalleryDetail.previewSum));
@@ -838,12 +831,4 @@ public class DetailSectionFragment extends Fragment
"投票失败\n" + eMsg, Toast.LENGTH_SHORT).show(); // TODO
}
}
-
- private ViewFactory mFactory = new ViewFactory() {
- @Override
- public View makeView() {
- LayoutInflater inflater = LayoutInflater.from(mActivity);
- return inflater.inflate(R.layout.detail_avg_text, null);
- }
- };
}
diff --git a/src/com/hippo/ehviewer/activity/FavouriteActivity.java b/src/com/hippo/ehviewer/activity/FavouriteActivity.java
index 6863bad45..e31fc79e6 100644
--- a/src/com/hippo/ehviewer/activity/FavouriteActivity.java
+++ b/src/com/hippo/ehviewer/activity/FavouriteActivity.java
@@ -70,7 +70,7 @@ public class FavouriteActivity extends Activity{
Intent it = new Intent(FavouriteActivity.this, DownloadService.class);
startService(it);
mServiceConn.getService().add(String.valueOf(lmd.gid), lmd.thumb,
- EhClient.detailHeader + lmd.gid + "/" + lmd.token, lmd.title);
+ EhClient.getDetailUrl(lmd.gid, lmd.token), lmd.title);
Toast.makeText(FavouriteActivity.this,
getString(R.string.toast_add_download),
Toast.LENGTH_SHORT).show();
@@ -214,7 +214,7 @@ public class FavouriteActivity extends Activity{
Intent intent = new Intent(FavouriteActivity.this,
MangaDetailActivity.class);
GalleryInfo gi = mFavouriteLmd.get(position);
- intent.putExtra("url", EhClient.detailHeader + gi.gid + "/" + gi.token);
+ intent.putExtra("url", EhClient.getDetailUrl(gi.gid, gi.token));
intent.putExtra(MangaDetailActivity.KEY_G_INFO, gi);
startActivity(intent);
}
diff --git a/src/com/hippo/ehviewer/activity/MangaDetailActivity.java b/src/com/hippo/ehviewer/activity/MangaDetailActivity.java
index 315cb9af9..cd6e3dcd0 100644
--- a/src/com/hippo/ehviewer/activity/MangaDetailActivity.java
+++ b/src/com/hippo/ehviewer/activity/MangaDetailActivity.java
@@ -228,7 +228,7 @@ public class MangaDetailActivity extends FragmentActivity
((AlertButton)v).dialog.dismiss();
String comment = et.getText().toString();
((AppContext)getApplication()).getEhClient()
- .comment(EhClient.getDetailUrl(mGalleryInfo.gid, mGalleryInfo.token, EhClient.EX),
+ .comment(EhClient.getDetailUrl(mGalleryInfo.gid, mGalleryInfo.token),
comment, new EhClient.OnCommentListener() {
@Override
public void onSuccess(List comments) {
diff --git a/src/com/hippo/ehviewer/activity/MangaListActivity.java b/src/com/hippo/ehviewer/activity/MangaListActivity.java
index b73ace173..c4238db6b 100644
--- a/src/com/hippo/ehviewer/activity/MangaListActivity.java
+++ b/src/com/hippo/ehviewer/activity/MangaListActivity.java
@@ -236,6 +236,56 @@ public class MangaListActivity extends SlidingActivity
}).create();
}
+ private void checkModeWarning(int mode, View warning) {
+ if (mode == 1 && !mEhClient.isLogin())
+ warning.setVisibility(View.VISIBLE);
+ else
+ warning.setVisibility(View.GONE);
+ }
+
+ private AlertDialog createModeDialog() {
+ LayoutInflater inflater = this.getLayoutInflater();
+ final View view = inflater.inflate(R.layout.mode, null);
+ final TextView warning = (TextView)view.findViewById(R.id.warning);
+ final Spinner modeSpinner = (Spinner)view.findViewById(R.id.mode);
+ int mode = Config.getMode();
+ modeSpinner.setSelection(mode);
+ checkModeWarning(mode, warning);
+ modeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
+ @Override
+ public void onItemSelected(AdapterView> parent, View view,
+ int position, long id) {
+ checkModeWarning(position, warning);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+ warning.setVisibility(View.GONE);
+ }
+ });
+
+ return new DialogBuilder(this).setTitle(R.string.mode)
+ .setView(view, true)
+ .setPositiveButton(android.R.string.ok, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int mode = modeSpinner.getSelectedItemPosition();
+ if (mode > 1) {
+ Toast.makeText(MangaListActivity.this,
+ R.string.unfinished, Toast.LENGTH_SHORT).show();
+ } else {
+ ((AlertButton)v).dialog.dismiss();
+ Config.setMode(mode);
+ }
+ }
+ }).setNegativeButton(android.R.string.cancel, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ((AlertButton)v).dialog.dismiss();
+ }
+ }).create();
+ }
+
private AlertDialog createFilterDialog() {
LayoutInflater inflater = this.getLayoutInflater();
final View view = inflater.inflate(R.layout.filter, null);
@@ -425,7 +475,7 @@ public class MangaListActivity extends SlidingActivity
Intent it = new Intent(MangaListActivity.this, DownloadService.class);
startService(it);
mServiceConn.getService().add(String.valueOf(lmd.gid), lmd.thumb,
- EhClient.detailHeader + lmd.gid + "/" + lmd.token, lmd.title);
+ EhClient.getDetailUrl(lmd.gid, lmd.token), lmd.title);
Toast.makeText(MangaListActivity.this,
getString(R.string.toast_add_download),
Toast.LENGTH_SHORT).show();
@@ -1231,6 +1281,7 @@ public class MangaListActivity extends SlidingActivity
}
break;
case 1:
+ createModeDialog().show();
break;
case 2:
filterDialog.show();
@@ -1359,7 +1410,7 @@ public class MangaListActivity extends SlidingActivity
Intent intent = new Intent(MangaListActivity.this,
MangaDetailActivity.class);
GalleryInfo gi = lmdArray.get(position);
- intent.putExtra("url", EhClient.detailHeader + gi.gid + "/" + gi.token);
+ intent.putExtra("url", EhClient.getDetailUrl(gi.gid, gi.token));
intent.putExtra(MangaDetailActivity.KEY_G_INFO, gi);
startActivity(intent);
}
@@ -1559,7 +1610,7 @@ public class MangaListActivity extends SlidingActivity
else
showMenu();
return true;
- case R.id.action_refresh: // TODO
+ case R.id.action_refresh:
if (!refresh())
Toast.makeText(MangaListActivity.this,
getString(R.string.wait),
diff --git a/src/com/hippo/ehviewer/data/DownloadInfo.java b/src/com/hippo/ehviewer/data/DownloadInfo.java
index 1e6083727..cd3fba59c 100644
--- a/src/com/hippo/ehviewer/data/DownloadInfo.java
+++ b/src/com/hippo/ehviewer/data/DownloadInfo.java
@@ -21,6 +21,7 @@ public class DownloadInfo {
public static final int WAITING = 0x1;
public static final int DOWNLOADING = 0x2;
+ // TODO delete it use EhClient
public static final int G = 0x0;
public static final int EX = 0x1;
public static final int LOFI_460x = 0x2;
diff --git a/src/com/hippo/ehviewer/ehclient/EhClient.java b/src/com/hippo/ehviewer/ehclient/EhClient.java
index d587eec8b..b9b19aa98 100644
--- a/src/com/hippo/ehviewer/ehclient/EhClient.java
+++ b/src/com/hippo/ehviewer/ehclient/EhClient.java
@@ -6,9 +6,6 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.net.CookieHandler;
-import java.net.CookieManager;
-import java.net.CookiePolicy;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
@@ -28,7 +25,6 @@ import com.hippo.ehviewer.AppContext;
import com.hippo.ehviewer.DiskCache;
import com.hippo.ehviewer.ListUrls;
import com.hippo.ehviewer.R;
-import com.hippo.ehviewer.R.string;
import com.hippo.ehviewer.activity.DownloadInfo;
import com.hippo.ehviewer.data.Comment;
import com.hippo.ehviewer.data.GalleryDetail;
@@ -37,7 +33,6 @@ import com.hippo.ehviewer.data.PreviewList;
import com.hippo.ehviewer.gallery.data.ImageSet;
import com.hippo.ehviewer.network.Downloader;
import com.hippo.ehviewer.network.HttpHelper;
-import com.hippo.ehviewer.network.ShapreCookieStore;
import com.hippo.ehviewer.service.DownloadService;
import com.hippo.ehviewer.util.ThreadPool.Job;
import com.hippo.ehviewer.util.ThreadPool.JobContext;
@@ -66,30 +61,21 @@ public class EhClient {
public static final int G = 0x0;
public static final int EX = 0x1;
- public static final int LOFI = 0x2;
+ public static final int LOFI_460x = 0x2;
+ public static final int LOFI_780x = 0x3;
+ public static final int LOFI_980x = 0x4;
public static final String G_API = "http://g.e-hentai.org/api.php";
- public static final String E_API = "http://exhentai.org/api.php";
+ public static final String EX_API = "http://exhentai.org/api.php";
public static final long APIUID = 1363542;
public static final String APIKEY = "f4b5407ab1727b9d08d7";
private static final String loginUrl = "http://forums.e-hentai.org/index.php?act=Login&CODE=01";
- private static final String E_HENTAI_LIST_HEADER = "http://g.e-hentai.org/";
- private static final String EXHENTAI_LIST_HEADER = "http://exhentai.org/";
- public static final String E_HENTAI_DETAIL_HEADER = "http://g.e-hentai.org/g/";
- public static final String EXHENTAI_DETAIL_HEADER = "http://exhentai.org/g/";
- public static final String EXHENTAI_PAGE_HEADER = "http://exhentai.org/s/";
-
-
-
public static final String G_HEADER = "http://g.e-hentai.org/";
public static final String EH_HEADER = "http://exhentai.org/";
public static final String LOFI_HEADER = "http://lofi.e-hentai.org/";
- public static String listHeader;
- public static String detailHeader;
-
private boolean mLogin = false;
private String mUsername;
private String mDisplayName;
@@ -98,38 +84,72 @@ public class EhClient {
private AppContext mAppContext;
private ThreadPool mThreadPool;
- public static String getDetailUrl(int gid, String token, int mode) {
+ public static String getUrlHeader() {
+ return getUrlHeader(Config.getMode());
+ }
+
+ public static String getUrlHeader(int mode) {
switch (mode) {
case EX:
- return EH_HEADER + "g/" + gid + "/" + token;
- case LOFI:
- return LOFI_HEADER + "g/" + gid + "/" + token;
+ return EH_HEADER;
+ case LOFI_460x:
+ case LOFI_780x:
+ case LOFI_980x:
+ return LOFI_HEADER;
default:
- return G_HEADER + "g/" + gid + "/" + token;
+ return G_HEADER;
}
}
+ public static String getDetailUrl(int gid, String token) {
+ return getDetailUrl(gid, token, 0, Config.getMode());
+ }
+
+
+ public static String getDetailUrl(int gid, String token, int pageNum) {
+ return getDetailUrl(gid, token, pageNum, Config.getMode());
+ }
+
+ public static String getDetailUrl(int gid, String token, int pageNum, int mode) {
+ switch (mode) {
+ case EX:
+ return EH_HEADER + "g/" + gid + "/" + token + "/?p=" + pageNum;
+ case LOFI_460x:
+ case LOFI_780x:
+ case LOFI_980x:
+ return LOFI_HEADER + "g/" + gid + "/" + token + "/?p=" + pageNum;
+ default:
+ return G_HEADER + "g/" + gid + "/" + token + "/?p=" + pageNum;
+ }
+ }
+
+ public static String getPageUrl(String gid, String token, int pageNum) {
+ return getPageUrl(gid, token, pageNum, Config.getMode());
+ }
+
public static String getPageUrl(String gid, String token, int pageNum, int mode) {
switch (mode) {
case EX:
return EH_HEADER + "s/" + token + "/" + gid + "-" + pageNum;
- case LOFI:
+ case LOFI_460x:
+ case LOFI_780x:
+ case LOFI_980x:
return LOFI_HEADER + "s/" + token + "/" + gid + "-" + pageNum;
default:
return G_HEADER + "s/" + token + "/" + gid + "-" + pageNum;
}
}
- public static int getDetailModeForDownloadMode(int downloadMode) {
- switch (downloadMode) {
- case com.hippo.ehviewer.data.DownloadInfo.EX:
- return EX;
- case com.hippo.ehviewer.data.DownloadInfo.LOFI_460x:
- case com.hippo.ehviewer.data.DownloadInfo.LOFI_780x:
- case com.hippo.ehviewer.data.DownloadInfo.LOFI_980x:
- return LOFI;
+ public static String getApiUrl() {
+ return getApiUrl(Config.getMode());
+ }
+
+ public static String getApiUrl(int mode) {
+ switch (mode) {
+ case EX:
+ return EX_API;
default:
- return G;
+ return G_API;
}
}
@@ -180,28 +200,8 @@ public class EhClient {
public EhClient(AppContext appContext) {
mAppContext = appContext;
-
- if (Config.isExhentai()) {
- listHeader = EXHENTAI_LIST_HEADER;
- detailHeader = EXHENTAI_DETAIL_HEADER;
- } else {
- listHeader = E_HENTAI_LIST_HEADER;
- detailHeader = E_HENTAI_DETAIL_HEADER;
- }
-
mThreadPool = mAppContext.getNetworkThreadPool();
}
-
- public static void setHeader(boolean isExhentai) {
- Config.exhentai(isExhentai);
- if (isExhentai) {
- listHeader = EXHENTAI_LIST_HEADER;
- detailHeader = EXHENTAI_DETAIL_HEADER;
- } else {
- listHeader = E_HENTAI_LIST_HEADER;
- detailHeader = E_HENTAI_DETAIL_HEADER;
- }
- }
public boolean isLogin() {
return mLogin;
@@ -1597,7 +1597,7 @@ public class EhClient {
listener.onFailure(eMsg);
}
});
- hp.postJson(E_API, json);
+ hp.postJson(getApiUrl(), json);
}
}).start();
}
@@ -1647,7 +1647,7 @@ public class EhClient {
listener.onFailure(eMsg);
}
});
- hp.postJson(E_API, json);
+ hp.postJson(getApiUrl(), json);
}
}).start();
}
diff --git a/src/com/hippo/ehviewer/util/Config.java b/src/com/hippo/ehviewer/util/Config.java
index 2801fa6a8..b252df015 100644
--- a/src/com/hippo/ehviewer/util/Config.java
+++ b/src/com/hippo/ehviewer/util/Config.java
@@ -1,5 +1,7 @@
package com.hippo.ehviewer.util;
+import com.hippo.ehviewer.ehclient.EhClient;
+
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
@@ -15,6 +17,8 @@ public class Config {
private static final String KEY_LOGIN = "login";
private static final String KEY_IS_EXHENTAI = "is_exhentai";
private static final String KEY_UPDATE_DATE = "update_date";
+ private static final String KEY_MODE = "mode";
+ private static final int MODE_DEFAULT = 0;
private static final String CP_CACHE = "preference_cp_cache";
private static final String CP_CACHE_DEFAULT = "25";
@@ -112,6 +116,21 @@ public class Config {
return mConfigPre.getString(DOWNLOAD_PATH, DOWNLOAD_PATH_DEFAULT);
}
+ public static int getMode() {
+ int mode = mConfigPre.getInt(KEY_MODE, MODE_DEFAULT);
+ if (mode < EhClient.G || mode > EhClient.LOFI_980x) {
+ mode = MODE_DEFAULT;
+ setMode(mode);
+ }
+ return mode;
+ }
+
+ public static void setMode(int mode) {
+ if (mode < EhClient.G || mode > EhClient.LOFI_980x)
+ mode = MODE_DEFAULT;
+ mConfigPre.edit().putInt(KEY_MODE, mode).apply();
+ }
+
/**
* Get cover cache size in MB
*