调整 Gallery Detail 获取
This commit is contained in:
1 parent
8ad331af60
commit
3e76680aeb
2 files changed
+68
-175
No files matched your search
@@ -71,8 +71,6 @@ import com.hippo.ehviewer.util.ThreadPool;
|
||||
import com.hippo.ehviewer.util.Ui;
|
||||
import com.hippo.ehviewer.util.Util;
|
||||
|
||||
// TODO newer versions tip
|
||||
|
||||
public class EhClient {
|
||||
|
||||
private static final String TAG = "EhClient";
|
||||
@@ -190,16 +188,6 @@ public class EhClient {
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnCheckLoginListener {
|
||||
public void onSuccess();
|
||||
public void onFailure(String eMsg);
|
||||
}
|
||||
|
||||
public interface OnGetMangaDetailListener {
|
||||
public void onSuccess(GalleryDetail md);
|
||||
public void onFailure(String eMsg);
|
||||
}
|
||||
|
||||
public interface OnGetPageListListener {
|
||||
public void onSuccess(Object checkFlag, PreviewList pageList);
|
||||
public void onFailure(Object checkFlag, String eMsg);
|
||||
@@ -267,10 +255,8 @@ public class EhClient {
|
||||
return mInfo.getAvatar();
|
||||
}
|
||||
|
||||
private static final int GET_MANGA_DETAIL = 0x4;
|
||||
private static final int GET_PAGE_LIST = 0x5;
|
||||
private static final int GET_MANGA_URL = 0x6;
|
||||
private static final int RATE = 0x7;
|
||||
|
||||
private static Handler mHandler = new Handler() {
|
||||
@Override
|
||||
@@ -278,15 +264,6 @@ public class EhClient {
|
||||
|
||||
switch (msg.what) {
|
||||
|
||||
case GET_MANGA_DETAIL:
|
||||
GetMangaDetailPackage getMangaDetailPackage = (GetMangaDetailPackage) msg.obj;
|
||||
OnGetMangaDetailListener listener5 = getMangaDetailPackage.listener;
|
||||
if (getMangaDetailPackage.ok)
|
||||
listener5.onSuccess(getMangaDetailPackage.mangaDetail);
|
||||
else
|
||||
listener5.onFailure(getMangaDetailPackage.eMsg);
|
||||
break;
|
||||
|
||||
case GET_PAGE_LIST:
|
||||
GetPageListPackage getPageListPackage = (GetPageListPackage) msg.obj;
|
||||
OnGetPageListListener listener6 = getPageListPackage.listener;
|
||||
@@ -304,9 +281,6 @@ public class EhClient {
|
||||
else
|
||||
listener7.onFailure(getMangaUrlPackage.checkFlag, getMangaUrlPackage.eMsg);
|
||||
break;
|
||||
|
||||
case RATE:
|
||||
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -344,7 +318,7 @@ public class EhClient {
|
||||
hp.postForm(loginUrl, new String[][] {
|
||||
new String[] { "UserName", username },
|
||||
new String[] { "PassWord", password },
|
||||
new String[] { "submit", "Log+me+in" },
|
||||
new String[] { "submit", "Log me in" },
|
||||
new String[] { "CookieDate", "1" },
|
||||
new String[] { "temporary_https", "on" }});
|
||||
}
|
||||
@@ -436,149 +410,68 @@ public class EhClient {
|
||||
}
|
||||
|
||||
// Get Manga Detail
|
||||
private class GetMangaDetailPackage {
|
||||
public boolean ok;
|
||||
public GalleryDetail mangaDetail;
|
||||
public OnGetMangaDetailListener listener;
|
||||
public String eMsg;
|
||||
|
||||
public GetMangaDetailPackage(boolean ok, GalleryDetail mangaDetail,
|
||||
OnGetMangaDetailListener listener, String eMsg) {
|
||||
this.ok = ok;
|
||||
this.mangaDetail = mangaDetail;
|
||||
this.listener = listener;
|
||||
this.eMsg = eMsg;
|
||||
}
|
||||
public interface OnGetGDetailListener {
|
||||
public void onSuccess(GalleryDetail md);
|
||||
public void onFailure(String eMsg);
|
||||
}
|
||||
|
||||
private class GetMangaDetailRunnable implements Runnable {
|
||||
|
||||
private String url;
|
||||
private GalleryDetail md;
|
||||
|
||||
public boolean ok;
|
||||
public String eMsg;
|
||||
|
||||
public GetMangaDetailRunnable(String url, GalleryDetail md) {
|
||||
this.url = url;
|
||||
this.md = md;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ok = false;
|
||||
HttpHelper hp = new HttpHelper(mAppContext);
|
||||
String pageContent = hp.get(url);
|
||||
if (pageContent != null) {
|
||||
|
||||
|
||||
DetailParser parser = new DetailParser();
|
||||
int mode = DetailParser.DETAIL | DetailParser.TAG
|
||||
| DetailParser.PREVIEW_INFO | DetailParser.PREVIEW
|
||||
| DetailParser.COMMENT;
|
||||
parser.setMode(mode);
|
||||
int result = parser.parser(pageContent);
|
||||
if (result == DetailParser.OFFENSIVE) {
|
||||
ok = true;
|
||||
md.firstPage = "offensive";
|
||||
} else if (result == DetailParser.PINING) {
|
||||
ok = true;
|
||||
md.firstPage = "pining";
|
||||
} else if ((result & (DetailParser.DETAIL | DetailParser.PREVIEW_INFO)) != 0) {
|
||||
ok = true;
|
||||
md.thumb = parser.thumb;
|
||||
md.title = parser.title;
|
||||
md.title_jpn = parser.title_jpn;
|
||||
md.category = parser.category;
|
||||
md.uploader = parser.uploader;
|
||||
md.posted = parser.posted;
|
||||
md.pages = parser.pages;
|
||||
md.size = parser.size;
|
||||
md.resized = parser.resized;
|
||||
md.parent = parser.parent;
|
||||
md.visible = parser.visible;
|
||||
md.language = parser.language;
|
||||
md.people = parser.people;
|
||||
md.rating = parser.rating;
|
||||
md.firstPage = parser.firstPage;
|
||||
md.previewPerPage = parser.previewPerPage;
|
||||
md.previewSum = parser.previewSum;
|
||||
|
||||
md.tags = parser.tags;
|
||||
md.previewLists = new PreviewList[md.previewSum];
|
||||
md.previewLists[0] = parser.previewList;
|
||||
md.comments = parser.comments;
|
||||
} else {
|
||||
eMsg = mAppContext.getString(R.string.em_parser_error);
|
||||
}
|
||||
} else
|
||||
eMsg = hp.getEMsg();
|
||||
}
|
||||
}
|
||||
|
||||
public void getMangaDetail(String url, final GalleryDetail md,
|
||||
final OnGetMangaDetailListener listener) {
|
||||
|
||||
final GetMangaDetailRunnable task = new GetMangaDetailRunnable(url, md);
|
||||
mThreadPool.submit(new Job<Object>() {
|
||||
public void getGDetail(final String url, final GalleryDetail md,
|
||||
final OnGetGDetailListener listener) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public Object run(JobContext jc) {
|
||||
task.run();
|
||||
return null;
|
||||
public void run() {
|
||||
HttpHelper hp = new HttpHelper(mAppContext);
|
||||
hp.setOnRespondListener(new HttpHelper.OnRespondListener() {
|
||||
@Override
|
||||
public void onSuccess(String body) {
|
||||
DetailParser parser = new DetailParser();
|
||||
int mode = DetailParser.DETAIL | DetailParser.TAG
|
||||
| DetailParser.PREVIEW_INFO | DetailParser.PREVIEW
|
||||
| DetailParser.COMMENT;
|
||||
parser.setMode(mode);
|
||||
int result = parser.parser(body);
|
||||
if (result == DetailParser.OFFENSIVE) {
|
||||
md.firstPage = "offensive";
|
||||
listener.onSuccess(md);
|
||||
} else if (result == DetailParser.PINING) {
|
||||
md.firstPage = "pining";
|
||||
listener.onSuccess(md);
|
||||
} else if ((result & (DetailParser.DETAIL | DetailParser.PREVIEW_INFO)) != 0) {
|
||||
md.thumb = parser.thumb;
|
||||
md.title = parser.title;
|
||||
md.title_jpn = parser.title_jpn;
|
||||
md.category = parser.category;
|
||||
md.uploader = parser.uploader;
|
||||
md.posted = parser.posted;
|
||||
md.pages = parser.pages;
|
||||
md.size = parser.size;
|
||||
md.resized = parser.resized;
|
||||
md.parent = parser.parent;
|
||||
md.visible = parser.visible;
|
||||
md.language = parser.language;
|
||||
md.people = parser.people;
|
||||
md.rating = parser.rating;
|
||||
md.firstPage = parser.firstPage;
|
||||
md.previewPerPage = parser.previewPerPage;
|
||||
md.previewSum = parser.previewSum;
|
||||
|
||||
md.tags = parser.tags;
|
||||
md.previewLists = new PreviewList[md.previewSum];
|
||||
md.previewLists[0] = parser.previewList;
|
||||
md.comments = parser.comments;
|
||||
listener.onSuccess(md);
|
||||
} else {
|
||||
listener.onFailure(mAppContext.getString(R.string.em_parser_error));
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
listener.onFailure(eMsg);
|
||||
}
|
||||
});
|
||||
hp.get(url);
|
||||
}
|
||||
}, new FutureListener<Object>() {
|
||||
@Override
|
||||
public void onFutureDone(Future<Object> future) {
|
||||
Message msg = new Message();
|
||||
msg.what = GET_MANGA_DETAIL;
|
||||
msg.obj = new GetMangaDetailPackage(task.ok, md, listener, task.eMsg);
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public String[][] getTags(String pageContent) {
|
||||
ArrayList<String[]> list = new ArrayList<String[]>();
|
||||
Pattern p = Pattern
|
||||
.compile("<tr><td[^<>]*>([^<>]+):</td><td>(?:<div[^<>]*><a[^<>]*>[^<>]*</a>[^<>]*<span[^<>]*>\\d+</span>[^<>]*</div>)+</td></tr>");
|
||||
Matcher m = p.matcher(pageContent);
|
||||
while (m.find()) {
|
||||
String groupName = m.group(1);
|
||||
String[] group = getTagGroup(m.group(0));
|
||||
if (groupName != null && group != null) {
|
||||
group[0] = groupName;
|
||||
list.add(group);
|
||||
}
|
||||
}
|
||||
if (list.size() == 0)
|
||||
return new String[0][0];
|
||||
String[][] groups = new String[list.size()][];
|
||||
int i = 0;
|
||||
for (String[] item : list) {
|
||||
groups[i] = item;
|
||||
i++;
|
||||
}
|
||||
return groups;
|
||||
}
|
||||
|
||||
public String[] getTagGroup(String pageContent) {
|
||||
ArrayList<String> list = new ArrayList<String>();
|
||||
Pattern p = Pattern.compile("<a[^<>]*>([^<>]+)</a>");
|
||||
Matcher m = p.matcher(pageContent);
|
||||
while (m.find()) {
|
||||
String str = m.group(1);
|
||||
if (str != null)
|
||||
list.add(str);
|
||||
}
|
||||
if (list.size() == 0)
|
||||
return null;
|
||||
String[] strs = new String[list.size() + 1];
|
||||
int i = 1;
|
||||
for (String str : list) {
|
||||
strs[i] = str;
|
||||
i++;
|
||||
}
|
||||
return strs;
|
||||
}).start();
|
||||
}
|
||||
|
||||
// Get page list
|
||||
|
||||
@@ -300,7 +300,7 @@ public class DetailSectionFragment extends Fragment
|
||||
if (getFromCache)
|
||||
layout(mGalleryDetail);
|
||||
else
|
||||
mClient.getMangaDetail(mUrl, mGalleryDetail, new MangaDetailGetListener());
|
||||
mClient.getGDetail(mUrl, mGalleryDetail, new GDetailGetListener());
|
||||
|
||||
return mRootView;
|
||||
}
|
||||
@@ -671,8 +671,8 @@ public class DetailSectionFragment extends Fragment
|
||||
startActivity(intent);
|
||||
|
||||
} else if (v == mRefreshButton) {
|
||||
MangaDetailGetListener listener = new MangaDetailGetListener();
|
||||
mClient.getMangaDetail(mUrl, mGalleryDetail, listener);
|
||||
GDetailGetListener listener = new GDetailGetListener();
|
||||
mClient.getGDetail(mUrl, mGalleryDetail, listener);
|
||||
// Delete refresh button
|
||||
mRefreshButton.setVisibility(View.GONE);
|
||||
// Add progressBar
|
||||
@@ -684,16 +684,16 @@ public class DetailSectionFragment extends Fragment
|
||||
|
||||
} else if (v == mOnceButton) {
|
||||
// TODO create a class uri
|
||||
MangaDetailGetListener listener = new MangaDetailGetListener();
|
||||
mClient.getMangaDetail(mUrl + "&nw=session", mGalleryDetail, listener);
|
||||
GDetailGetListener listener = new GDetailGetListener();
|
||||
mClient.getGDetail(mUrl + "&nw=session", mGalleryDetail, listener);
|
||||
// Delete offensiveView
|
||||
mOffensiveView.setVisibility(View.GONE);
|
||||
// Add progressBar
|
||||
mWaitPb.setVisibility(View.VISIBLE);
|
||||
|
||||
} else if (v == mEveryButton) {
|
||||
MangaDetailGetListener listener = new MangaDetailGetListener();
|
||||
mClient.getMangaDetail(mUrl + "&nw=always", mGalleryDetail, listener);
|
||||
GDetailGetListener listener = new GDetailGetListener();
|
||||
mClient.getGDetail(mUrl + "&nw=always", mGalleryDetail, listener);
|
||||
// Delete offensiveView
|
||||
mOffensiveView.setVisibility(View.GONE);
|
||||
// Add progressBar
|
||||
@@ -806,8 +806,8 @@ public class DetailSectionFragment extends Fragment
|
||||
}
|
||||
}
|
||||
|
||||
private class MangaDetailGetListener
|
||||
implements EhClient.OnGetMangaDetailListener {
|
||||
private class GDetailGetListener
|
||||
implements EhClient.OnGetGDetailListener {
|
||||
@Override
|
||||
public void onSuccess(GalleryDetail md) {
|
||||
Cache.mdCache.put(String.valueOf(mGalleryDetail.gid), md);
|
||||
|
||||
Reference in new issue
Block a user