diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index e22354641..6dedc5774 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -22,7 +22,6 @@ import android.os.Debug; import android.support.annotation.NonNull; import android.util.Log; import android.util.SparseArray; -import android.util.SparseBooleanArray; import com.hippo.beerbelly.LruCacheEx; import com.hippo.conaco.Conaco; @@ -41,6 +40,8 @@ import com.hippo.text.Html; import com.hippo.util.ReadableTime; import com.hippo.yorozuya.FileUtils; import com.hippo.yorozuya.SimpleHandler; +import com.hippo.yorozuya.sparse.SparseJBArray; +import com.hippo.yorozuya.sparse.SparseJLArray; import java.io.File; import java.util.Comparator; @@ -63,13 +64,13 @@ public class EhApplication extends SceneApplication { private OkHttpClient mOkHttpClient; private ImageWrapperHelper mImageWrapperHelper; private Conaco mConaco; - private LruCacheEx mGalleryDetailCache; + private LruCacheEx mGalleryDetailCache; private LruCacheEx mLargePreviewSetCache; - private LruCacheEx mPreviewPagesCache; + private LruCacheEx mPreviewPagesCache; private DownloadManager mDownloadManager; - private SparseBooleanArray mItemStateArray; - private SparseArray mItemTitleArray; + private SparseJBArray mItemStateArray; + private SparseJLArray mItemTitleArray; private int mFailedCount; private int mFinishedCount; private int mDownloadedCount; @@ -209,14 +210,14 @@ public class EhApplication extends SceneApplication { } @NonNull - public static LruCacheEx getGalleryDetailCache(@NonNull Context context) { + public static LruCacheEx getGalleryDetailCache(@NonNull Context context) { EhApplication application = ((EhApplication) context.getApplicationContext()); if (application.mGalleryDetailCache == null) { // Max size 25, 3 min timeout - application.mGalleryDetailCache = new LruCacheEx<>(25, 3 * 60 * 1000, new Comparator() { + application.mGalleryDetailCache = new LruCacheEx<>(25, 3 * 60 * 1000, new Comparator() { @Override - public int compare(Integer lhs, Integer rhs) { - return lhs - rhs; + public int compare(Long lhs, Long rhs) { + return lhs > rhs ? 1 : lhs > rhs ? -1 : 0; } }); } @@ -239,14 +240,14 @@ public class EhApplication extends SceneApplication { } @NonNull - public static LruCacheEx getPreviewPagesCache(@NonNull Context context) { + public static LruCacheEx getPreviewPagesCache(@NonNull Context context) { EhApplication application = ((EhApplication) context.getApplicationContext()); if (application.mPreviewPagesCache == null) { // Max size 50, 3 min timeout - application.mPreviewPagesCache = new LruCacheEx<>(50, 3 * 60 * 1000, new Comparator() { + application.mPreviewPagesCache = new LruCacheEx<>(50, 3 * 60 * 1000, new Comparator() { @Override - public int compare(Integer lhs, Integer rhs) { - return lhs - rhs; + public int compare(Long lhs, Long rhs) { + return lhs > rhs ? 1 : lhs > rhs ? -1 : 0; } }); } @@ -266,10 +267,10 @@ public class EhApplication extends SceneApplication { public static void initDownloadService(Context context, DownloadService service) { EhApplication application = ((EhApplication) context.getApplicationContext()); if (application.mItemStateArray == null) { - application.mItemStateArray = new SparseBooleanArray(); + application.mItemStateArray = new SparseJBArray(); } if (application.mItemTitleArray == null) { - application.mItemTitleArray = new SparseArray<>(); + application.mItemTitleArray = new SparseJLArray<>(); } service.init(application.mItemStateArray, application.mItemTitleArray, diff --git a/app/src/main/java/com/hippo/ehviewer/EhDB.java b/app/src/main/java/com/hippo/ehviewer/EhDB.java index ba5272e8c..e5aa20fe8 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhDB.java +++ b/app/src/main/java/com/hippo/ehviewer/EhDB.java @@ -30,10 +30,10 @@ import com.hippo.ehviewer.dao.DaoMaster; import com.hippo.ehviewer.dao.DaoSession; import com.hippo.ehviewer.dao.DownloadDirnameDao; import com.hippo.ehviewer.dao.DownloadDirnameRaw; -import com.hippo.ehviewer.dao.DownloadInfoDao; -import com.hippo.ehviewer.dao.DownloadInfoRaw; +import com.hippo.ehviewer.dao.DownloadInfo; import com.hippo.ehviewer.dao.DownloadLabelDao; import com.hippo.ehviewer.dao.DownloadLabelRaw; +import com.hippo.ehviewer.dao.DownloadsDao; import com.hippo.ehviewer.dao.GalleryInfoDao; import com.hippo.ehviewer.dao.GalleryInfoRaw; import com.hippo.ehviewer.dao.HistoryInfoDao; @@ -42,15 +42,15 @@ import com.hippo.ehviewer.dao.LocalFavoritesDao; import com.hippo.ehviewer.dao.LocalFavoritesRaw; import com.hippo.ehviewer.dao.QuickSearchDao; import com.hippo.ehviewer.dao.QuickSearchRaw; -import com.hippo.ehviewer.download.DownloadInfo; +import com.hippo.yorozuya.sparse.SparseJLArray; import java.util.ArrayList; import java.util.List; -import de.greenrobot.dao.query.LazyList; - public class EhDB { + private static final String TAG = EhDB.class.getSimpleName(); + private static DaoSession sDaoSession; private static boolean sHasOldDB; @@ -124,6 +124,34 @@ public class EhDB { return; } + // Get GalleryInfo list + SparseJLArray map = new SparseJLArray<>(); + try { + Cursor cursor = oldDB.rawQuery("select * from " + OldDBHelper.TABLE_GALLERY, null); + if (cursor != null) { + if (cursor.moveToFirst()) { + while (!cursor.isAfterLast()) { + GalleryInfo gi = new GalleryInfo(); + gi.gid = cursor.getInt(0); + gi.token = cursor.getString(1); + gi.title = cursor.getString(2); + gi.posted = cursor.getString(3); + gi.category = cursor.getInt(4); + gi.thumb = cursor.getString(5); + gi.uploader = cursor.getString(5); + gi.rating = cursor.getFloat(6); + + map.put(gi.gid, gi); + + cursor.moveToNext(); + } + } + cursor.close(); + } + } catch (Exception e) { + // Ignore + } + // Merge gallery info try { Cursor cursor = oldDB.rawQuery("select * from " + OldDBHelper.TABLE_GALLERY, null); @@ -213,27 +241,33 @@ public class EhDB { try { Cursor cursor = oldDB.rawQuery("select * from " + OldDBHelper.TABLE_DOWNLOAD, null); if (cursor != null) { - DownloadInfoDao dao = sDaoSession.getDownloadInfoDao(); + DownloadsDao dao = sDaoSession.getDownloadsDao(); if (cursor.moveToFirst()) { long i = 0L; while (!cursor.isAfterLast()) { - DownloadInfoRaw raw = new DownloadInfoRaw(); + // Get GalleryInfo first + long gid = cursor.getInt(0); + GalleryInfo gi = map.get(gid); + if (gi == null) { + Log.e(TAG, "Can't get GalleryInfo with gid: " + gid); + cursor.moveToNext(); + continue; + } + DownloadInfo info = new DownloadInfo(gi); int state = cursor.getInt(2); int legacy = cursor.getInt(3); if (state == DownloadInfo.STATE_FINISH && legacy > 0) { state = DownloadInfo.STATE_FAILED; } - - raw.setGid((long) cursor.getInt(0)); - raw.setState(state); - raw.setLegacy(legacy); + info.setState(state); + info.setLegacy(legacy); if (cursor.getColumnCount() == 5) { - raw.setDate(cursor.getLong(4)); + info.setTime(cursor.getLong(4)); } else { - raw.setDate(i); + info.setTime(i); } - dao.insert(raw); + dao.insert(info); cursor.moveToNext(); i++; } @@ -274,11 +308,11 @@ public class EhDB { private static synchronized void addGalleryInfo(GalleryInfo galleryInfo) { GalleryInfoDao dao = sDaoSession.getGalleryInfoDao(); - GalleryInfoRaw raw = dao.load((long) galleryInfo.gid); + GalleryInfoRaw raw = dao.load(galleryInfo.gid); if (raw == null) { // add new item, set reference 1 raw = new GalleryInfoRaw(); - raw.setGid((long) galleryInfo.gid); + raw.setGid(galleryInfo.gid); raw.setToken(galleryInfo.token); raw.setTitle(galleryInfo.title); raw.setThumb(galleryInfo.thumb); @@ -309,12 +343,12 @@ public class EhDB { } } - public static synchronized GalleryInfo getGalleryInfo(int gid) { + public static synchronized GalleryInfo getGalleryInfo(long gid) { GalleryInfoDao dao = sDaoSession.getGalleryInfoDao(); - GalleryInfoRaw raw = dao.load((long) gid); + GalleryInfoRaw raw = dao.load(gid); if (raw != null) { GalleryInfo gi = new GalleryInfo(); - gi.gid = (int) (long) raw.getGid(); + gi.gid = raw.getGid(); gi.token = raw.getToken(); gi.title = raw.getTitle(); gi.thumb = raw.getThumb(); @@ -329,52 +363,38 @@ public class EhDB { } } - public static synchronized LazyList getDownloadInfoLazyList() { - return sDaoSession.getDownloadInfoDao().queryBuilder() - .orderAsc(DownloadInfoDao.Properties.Date).listLazy(); + public static synchronized List getAllDownloadInfos() { + DownloadsDao dao = sDaoSession.getDownloadsDao(); + List list = dao.queryBuilder().orderAsc(DownloadsDao.Properties.Time).list(); + // Fix state + for (DownloadInfo info: list) { + if (info.state == DownloadInfo.STATE_WAIT || info.state == DownloadInfo.STATE_DOWNLOAD) { + info.state = DownloadInfo.STATE_NONE; + } + } + return list; } - public static synchronized void addDownloadInfo(DownloadInfo info) { - // Add gallery info first - addGalleryInfo(info.galleryInfo); - // Add download info - DownloadInfoDao dao = sDaoSession.getDownloadInfoDao(); - DownloadInfoRaw raw = new DownloadInfoRaw(); - raw.setGid((long) info.galleryInfo.gid); - raw.setState(info.state); - raw.setLegacy(info.legacy); - raw.setDate(info.date); - raw.setLabel(info.label); - dao.insert(raw); - } - - public static synchronized void updateDownloadInfo(DownloadInfo info) { - DownloadInfoDao dao = sDaoSession.getDownloadInfoDao(); - DownloadInfoRaw raw = dao.load((long) info.galleryInfo.gid); - if (raw == null) { - Log.e("TAG", "Can't find download info: " + info.galleryInfo.gid); - addDownloadInfo(info); + // Insert or update + public static synchronized void putDownloadInfo(DownloadInfo downloadInfo) { + DownloadsDao dao = sDaoSession.getDownloadsDao(); + if (null != dao.load(downloadInfo.gid)) { + // Update + dao.update(downloadInfo); } else { - raw.setState(info.state); - raw.setLegacy(info.legacy); - raw.setDate(info.date); - raw.setLabel(info.label); - dao.update(raw); + // Insert + dao.insert(downloadInfo); } } - public static synchronized void removeDownloadInfo(int gid) { - DownloadInfoDao dao = sDaoSession.getDownloadInfoDao(); - if (null != dao.load((long) gid)) { - removeGalleryInfo(gid); - dao.deleteByKey((long) gid); - } + public static synchronized void removeDownloadInfo(long gid) { + sDaoSession.getDownloadsDao().deleteByKey(gid); } @Nullable - public static synchronized String getDownloadDirname(int gid) { + public static synchronized String getDownloadDirname(long gid) { DownloadDirnameDao dao = sDaoSession.getDownloadDirnameDao(); - DownloadDirnameRaw raw = dao.load((long) gid); + DownloadDirnameRaw raw = dao.load(gid); if (raw != null) { return raw.getDirname(); } else { @@ -385,23 +405,23 @@ public class EhDB { /** * Insert or update */ - public static synchronized void putDownloadDirname(int gid, String dirname) { + public static synchronized void putDownloadDirname(long gid, String dirname) { DownloadDirnameDao dao = sDaoSession.getDownloadDirnameDao(); - DownloadDirnameRaw raw = dao.load((long) gid); + DownloadDirnameRaw raw = dao.load(gid); if (raw != null) { // Update raw.setDirname(dirname); dao.update(raw); } else { // Insert raw = new DownloadDirnameRaw(); - raw.setGid((long) gid); + raw.setGid(gid); raw.setDirname(dirname); dao.insert(raw); } } - public static synchronized void removeDownloadDirname(int gid) { + public static synchronized void removeDownloadDirname(long gid) { DownloadDirnameDao dao = sDaoSession.getDownloadDirnameDao(); - dao.deleteByKey((long) gid); + dao.deleteByKey(gid); } @NonNull @@ -459,7 +479,7 @@ public class EhDB { List list = dao.queryBuilder().orderAsc(LocalFavoritesDao.Properties.Date).list(); List result = new ArrayList<>(list.size()); for (LocalFavoritesRaw raw: list) { - GalleryInfo gi = getGalleryInfo((int) (long) raw.getGid()); + GalleryInfo gi = getGalleryInfo(raw.getGid()); if (null == gi) { continue; } @@ -482,32 +502,32 @@ public class EhDB { return result; } - public static synchronized void removeLocalFavorites(int gid) { - sDaoSession.getLocalFavoritesDao().deleteByKey((long) gid); + public static synchronized void removeLocalFavorites(long gid) { + sDaoSession.getLocalFavoritesDao().deleteByKey(gid); } - public static synchronized void removeLocalFavorites(int[] gidArray) { + public static synchronized void removeLocalFavorites(long[] gidArray) { LocalFavoritesDao dao = sDaoSession.getLocalFavoritesDao(); - for (int gid: gidArray) { - dao.deleteByKey((long) gid); + for (long gid: gidArray) { + dao.deleteByKey(gid); } } - public static synchronized boolean containLocalFavorites(int gid) { + public static synchronized boolean containLocalFavorites(long gid) { LocalFavoritesDao dao = sDaoSession.getLocalFavoritesDao(); - return null != dao.load((long) gid); + return null != dao.load(gid); } public static synchronized void addLocalFavorites(GalleryInfo galleryInfo) { LocalFavoritesDao dao = sDaoSession.getLocalFavoritesDao(); - if (null != dao.load((long) galleryInfo.gid)) { + if (null != dao.load(galleryInfo.gid)) { // Contained return; } addGalleryInfo(galleryInfo); LocalFavoritesRaw raw = new LocalFavoritesRaw(); - raw.setGid((long) galleryInfo.gid); + raw.setGid(galleryInfo.gid); raw.setDate(System.currentTimeMillis()); dao.insert(raw); } @@ -515,14 +535,14 @@ public class EhDB { public static synchronized void addLocalFavorites(List galleryInfoList) { LocalFavoritesDao dao = sDaoSession.getLocalFavoritesDao(); for (GalleryInfo gi: galleryInfoList) { - if (null != dao.load((long) gi.gid)) { + if (null != dao.load(gi.gid)) { // Contained continue; } addGalleryInfo(gi); LocalFavoritesRaw raw = new LocalFavoritesRaw(); - raw.setGid((long) gi.gid); + raw.setGid(gi.gid); raw.setDate(System.currentTimeMillis()); dao.insert(raw); } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.java b/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.java index b48fa786d..823b547cb 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.java @@ -18,23 +18,23 @@ package com.hippo.ehviewer.client; public class EhCacheKeyFactory { - public static String getThumbKey(int gid) { + public static String getThumbKey(long gid) { return "thumb:" + gid; } - public static String getNormalPreviewKey(int gid, int index) { + public static String getNormalPreviewKey(long gid, int index) { return "preview:normal:" + gid + ":" + index; } - public static String getLargePreviewKey(int gid, int index) { + public static String getLargePreviewKey(long gid, int index) { return "preview:large:" + gid + ":" + index; } - public static String getLargePreviewSetKey(int gid, int index) { + public static String getLargePreviewSetKey(long gid, int index) { return "large_preview_set:" + gid + ":" + index; } - public static String getImageKey(int gid, int index) { + public static String getImageKey(long gid, int index) { return "image:" + gid + ":" + index; } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhClient.java b/app/src/main/java/com/hippo/ehviewer/client/EhClient.java index c82518ca7..02fabe56b 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhClient.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhClient.java @@ -156,19 +156,19 @@ public class EhClient { case METHOD_GET_LARGE_PREVIEW_SET: return EhEngine.getLargePreviewSet(this, mOkHttpClient, (String) params[0]); case METHOD_GET_RATE_GALLERY: - return EhEngine.rateGallery(this, mOkHttpClient, (Integer) params[0], (String) params[1], (Float) params[2]); + return EhEngine.rateGallery(this, mOkHttpClient, (Long) params[0], (String) params[1], (Float) params[2]); case METHOD_GET_COMMENT_GALLERY: return EhEngine.commentGallery(this, mOkHttpClient, (String) params[0], (String) params[1]); case METHOD_GET_GALLERY_TOKEN: - return EhEngine.getGalleryToken(this, mOkHttpClient, (Integer) params[0], (String) params[1], (Integer) params[2]); + return EhEngine.getGalleryToken(this, mOkHttpClient, (Long) params[0], (String) params[1], (Integer) params[2]); case METHOD_GET_FAVORITES: return EhEngine.getFavorites(this, mOkHttpClient, (String) params[0], (Boolean) params[1]); case METHOD_ADD_FAVORITES: - return EhEngine.addFavorites(this, mOkHttpClient, (Integer) params[0], (String) params[1], (Integer) params[2], (String) params[3]); + return EhEngine.addFavorites(this, mOkHttpClient, (Long) params[0], (String) params[1], (Integer) params[2], (String) params[3]); case METHOD_ADD_FAVORITES_RANGE: - return EhEngine.addFavoritesRange(this, mOkHttpClient, (int[]) params[0], (String[]) params[1], (Integer) params[2]); + return EhEngine.addFavoritesRange(this, mOkHttpClient, (long[]) params[0], (String[]) params[1], (Integer) params[2]); case METHOD_MODIFY_FAVORITES: - return EhEngine.modifyFavorites(this, mOkHttpClient, (String) params[0], (int[]) params[1], (Integer) params[2], (Boolean) params[3]); + return EhEngine.modifyFavorites(this, mOkHttpClient, (String) params[0], (long[]) params[1], (Integer) params[2], (Boolean) params[3]); case METHOD_GET_TORRENT_LIST: return EhEngine.getTorrentList(this, mOkHttpClient, (String) params[0]); default: diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index daff0d474..bf775bf59 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -264,7 +264,7 @@ public class EhEngine { } public static RateGalleryParser.Result rateGallery(EhClient.Task task, - OkHttpClient okHttpClient, int gid, String token, float rating) throws Exception { + OkHttpClient okHttpClient, long gid, String token, float rating) throws Exception { final JSONObject json = new JSONObject(); json.put("method", "rategallery"); json.put("apiuid", APIUID); @@ -328,7 +328,7 @@ public class EhEngine { } public static String getGalleryToken(EhClient.Task task, OkHttpClient okHttpClient, - int gid, String gtoken, int page) throws Exception { + long gid, String gtoken, int page) throws Exception { JSONObject json = new JSONObject() .put("method", "gtoken") .put("pagelist", new JSONArray().put( @@ -395,7 +395,7 @@ public class EhEngine { * @param note max 250 characters */ public static Void addFavorites(EhClient.Task task, OkHttpClient okHttpClient, - int gid, String token, int dstCat, String note) throws Exception { + long gid, String token, int dstCat, String note) throws Exception { String catStr; if (dstCat == -1) { catStr = "favdel"; @@ -437,7 +437,7 @@ public class EhEngine { } public static Void addFavoritesRange(EhClient.Task task, OkHttpClient okHttpClient, - int[] gidArray, String[] tokenArray, int dstCat) throws Exception { + long[] gidArray, String[] tokenArray, int dstCat) throws Exception { AssertUtils.assertEqualsEx(gidArray.length, tokenArray.length); for (int i = 0, n = gidArray.length; i < n; i++) { addFavorites(task, okHttpClient, gidArray[i], tokenArray[i], dstCat, null); @@ -446,7 +446,7 @@ public class EhEngine { } public static FavoritesParser.Result modifyFavorites(EhClient.Task task, OkHttpClient okHttpClient, - String url, int[] gidArray, int dstCat, boolean callApi) throws Exception { + String url, long[] gidArray, int dstCat, boolean callApi) throws Exception { String catStr; if (dstCat == -1) { catStr = "delete"; @@ -457,8 +457,8 @@ public class EhEngine { } FormBody.Builder builder = new FormBody.Builder(); builder.add("ddact", catStr); - for (int gid : gidArray) { - builder.add("modifygids[]", Integer.toString(gid)); + for (long gid : gidArray) { + builder.add("modifygids[]", Long.toString(gid)); } builder.add("apply", "Apply"); Log.d(TAG, url); diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java index c568d8e23..2edc9cf76 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java @@ -34,11 +34,11 @@ public class EhUrl { public static final String URL_FAVORITES = HOST_EX + "favorites.php"; - public static String getGalleryDetailUrl(int gid, String token) { + public static String getGalleryDetailUrl(long gid, String token) { return getGalleryDetailUrl(gid, token, 0, false); } - public static String getGalleryDetailUrl(int gid, String token, int index, boolean allComment) { + public static String getGalleryDetailUrl(long gid, String token, int index, boolean allComment) { UrlBuilder builder = new UrlBuilder(HOST_EX + "g/" + gid + '/' + token + '/'); if (index != 0) { builder.addQuery("p", index); @@ -49,11 +49,11 @@ public class EhUrl { return builder.build(); } - public static String getPageUrl(int gid, int index, String pToken) { + public static String getPageUrl(long gid, int index, String pToken) { return HOST_EX + "s/" + pToken + '/' + gid + '-' + (index + 1); } - public static String getAddFavorites(int gid, String token) { + public static String getAddFavorites(long gid, String token) { return HOST_EX + "gallerypopups.php?gid=" + gid + "&t=" + token + "&act=addfav"; } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrlOpener.java b/app/src/main/java/com/hippo/ehviewer/client/EhUrlOpener.java index 65698fb68..ff1a05794 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrlOpener.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrlOpener.java @@ -59,7 +59,7 @@ public class EhUrlOpener { if (result1 != null) { Bundle args = new Bundle(); args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN); - args.putInt(GalleryDetailScene.KEY_GID, result1.gid); + args.putLong(GalleryDetailScene.KEY_GID, result1.gid); args.putString(GalleryDetailScene.KEY_TOKEN, result1.token); intent = new Intent(activity, MainActivity.class); intent.putExtra(StageActivity.KEY_SCENE_NAME, GalleryDetailScene.class.getName()); @@ -72,9 +72,9 @@ public class EhUrlOpener { if (result2 != null) { Bundle args = new Bundle(); args.putString(ProgressScene.KEY_ACTION, ProgressScene.ACTION_GALLERY_TOKEN); - args.putInt(ProgressScene.KEY_GID, result2.gid); + args.putLong(ProgressScene.KEY_GID, result2.gid); args.putString(ProgressScene.KEY_PTOKEN, result2.pToken); - args.putInt(ProgressScene.KEY_PAGE, result2.page); + args.putLong(ProgressScene.KEY_PAGE, result2.page); intent = new Intent(activity, MainActivity.class); intent.putExtra(StageActivity.KEY_SCENE_NAME, ProgressScene.class.getName()); intent.putExtra(StageActivity.KEY_SCENE_ARGS, args); diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryApiInfo.java b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryApiInfo.java index 1e38d84a6..f6e143684 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryApiInfo.java +++ b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryApiInfo.java @@ -22,7 +22,7 @@ import android.support.annotation.Nullable; public class GalleryApiInfo implements Parcelable { - public int gid; + public long gid; public String token; public String archiverKey; public String title; @@ -46,7 +46,7 @@ public class GalleryApiInfo implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(this.gid); + dest.writeLong(this.gid); dest.writeString(this.token); dest.writeString(this.archiverKey); dest.writeString(this.title); @@ -67,7 +67,7 @@ public class GalleryApiInfo implements Parcelable { } protected GalleryApiInfo(Parcel in) { - this.gid = in.readInt(); + this.gid = in.readLong(); this.token = in.readString(); this.archiverKey = in.readString(); this.title = in.readString(); diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java index 1770c18aa..74755508c 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java +++ b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java @@ -18,6 +18,7 @@ package com.hippo.ehviewer.client.data; import android.os.Parcel; import android.os.Parcelable; +import android.support.annotation.Nullable; import java.util.regex.Pattern; @@ -77,7 +78,7 @@ public class GalleryInfo implements Parcelable { Pattern.compile("[(\\[]dutch[)\\]]", Pattern.CASE_INSENSITIVE), }; - public int gid; + public long gid ; public String token; public String title; public String titleJpn; @@ -86,6 +87,7 @@ public class GalleryInfo implements Parcelable { public String posted; public String uploader; public float rating; + @Nullable public String[] simpleTags; /** @@ -110,7 +112,7 @@ public class GalleryInfo implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(this.gid); + dest.writeLong(this.gid); dest.writeString(this.token); dest.writeString(this.title); dest.writeString(this.titleJpn); @@ -120,12 +122,13 @@ public class GalleryInfo implements Parcelable { dest.writeString(this.uploader); dest.writeFloat(this.rating); dest.writeString(this.simpleLanguage); + dest.writeStringArray(this.simpleTags); } public GalleryInfo() {} protected GalleryInfo(Parcel in) { - this.gid = in.readInt(); + this.gid = in.readLong(); this.token = in.readString(); this.title = in.readString(); this.titleJpn = in.readString(); @@ -135,6 +138,7 @@ public class GalleryInfo implements Parcelable { this.uploader = in.readString(); this.rating = in.readFloat(); this.simpleLanguage = in.readString(); + this.simpleTags = in.createStringArray(); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryApiParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryApiParser.java index 67fbe8984..8f5249a24 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryApiParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryApiParser.java @@ -33,7 +33,7 @@ public class GalleryApiParser { for (int i = 0, length = ja.length(); i < length; i++) { JSONObject g = ja.getJSONObject(i); - int gid = g.getInt("gid"); + long gid = g.getLong("gid"); GalleryInfo gi = getGalleryInfoByGid(galleryInfoList, gid); if (gi == null) { continue; @@ -56,7 +56,7 @@ public class GalleryApiParser { } } - private static GalleryInfo getGalleryInfoByGid(List galleryInfoList, int gid) { + private static GalleryInfo getGalleryInfoByGid(List galleryInfoList, long gid) { for (int i = 0, size = galleryInfoList.size(); i < size; i++) { GalleryInfo gi = galleryInfoList.get(i); if (gi.gid == gid) { diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java index 05e19435f..e769f38ce 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java @@ -125,7 +125,7 @@ public class GalleryDetailParser { throw new ParseException("Parse gallery detail error", body); } - gd.gid = ParserUtils.parseInt(m.group(1)); + gd.gid = ParserUtils.parseLong(m.group(1)); gd.token = ParserUtils.trim(m.group(2)); gd.thumb = ParserUtils.trim(m.group(3)); gd.title = ParserUtils.trim(m.group(4)); diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailUrlParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailUrlParser.java index 51c631166..41a8c0138 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailUrlParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailUrlParser.java @@ -38,7 +38,7 @@ public final class GalleryDetailUrlParser { Matcher m = URL_PATTERN.matcher(url); if (m.find()) { Result result = new Result(); - result.gid = Integer.parseInt(m.group(1)); + result.gid = Long.parseLong(m.group(1)); result.token = m.group(2); return result; } else { @@ -47,7 +47,7 @@ public final class GalleryDetailUrlParser { } public static class Result { - public int gid; + public long gid; public String token; } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.java index b15492c49..c3a24e621 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.java @@ -90,7 +90,7 @@ public class GalleryListParser { Matcher matcher = GalleryDetailUrlParser.URL_PATTERN.matcher(m.group(9)); if (matcher.find()) { - gi.gid = ParserUtils.parseInt(matcher.group(1)); + gi.gid = ParserUtils.parseLong(matcher.group(1)); gi.token = ParserUtils.trim(matcher.group(2)); } else { continue; diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryPageUrlParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryPageUrlParser.java index aa04f86ce..076bff7b8 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryPageUrlParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryPageUrlParser.java @@ -37,7 +37,7 @@ public final class GalleryPageUrlParser { Matcher m = URL_PATTERN.matcher(url); if (m.find()) { Result result = new Result(); - result.gid = Integer.parseInt(m.group(2)); + result.gid = Long.parseLong(m.group(2)); result.pToken = m.group(1); result.page = Integer.parseInt(m.group(3)) - 1; return result; @@ -47,7 +47,7 @@ public final class GalleryPageUrlParser { } public static class Result { - public int gid; + public long gid; public String pToken; public int page; } diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/ParserUtils.java b/app/src/main/java/com/hippo/ehviewer/client/parser/ParserUtils.java index ebf9f8d70..ac79210b6 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/ParserUtils.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/ParserUtils.java @@ -31,4 +31,8 @@ public class ParserUtils { public static int parseInt(String str) { return Integer.parseInt(trim(str).replace(",", "")); } + + public static long parseLong(String str) { + return Long.parseLong(trim(str).replace(",", "")); + } } diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadInfo.java b/app/src/main/java/com/hippo/ehviewer/download/DownloadInfo.java deleted file mode 100644 index af026b314..000000000 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadInfo.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2016 Hippo Seven - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.hippo.ehviewer.download; - -import com.hippo.ehviewer.client.data.GalleryInfo; - -public class DownloadInfo { - - public static final int STATE_NONE = 0; - public static final int STATE_WAIT = 1; - public static final int STATE_DOWNLOAD = 2; - public static final int STATE_FINISH = 3; - public static final int STATE_FAILED = 4; - - public String label; - public GalleryInfo galleryInfo; - public int state = STATE_NONE; - // byte/second, -1 for can't get speed now - public long speed; - // Remain time millis - public long remaining; - // -1 for unknown - public int finished = 0; - // -1 for unknown - public int downloaded = 0; - // -1 for unknown - public int total = -1; - // -1 for unknown - public int legacy = -1; - // For order - public long date; -} diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java index 12fa8773e..0f5ed8769 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java @@ -20,20 +20,20 @@ import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; -import android.util.SparseArray; import com.hippo.ehviewer.EhDB; import com.hippo.ehviewer.client.data.GalleryInfo; -import com.hippo.ehviewer.dao.DownloadInfoRaw; +import com.hippo.ehviewer.dao.DownloadInfo; import com.hippo.ehviewer.dao.DownloadLabelRaw; import com.hippo.ehviewer.spider.SpiderQueen; import com.hippo.image.Image; import com.hippo.yorozuya.ConcurrentPool; -import com.hippo.yorozuya.IntList; +import com.hippo.yorozuya.LongList; import com.hippo.yorozuya.MathUtils; import com.hippo.yorozuya.ObjectUtils; import com.hippo.yorozuya.SimpleHandler; import com.hippo.yorozuya.sparse.SparseIJArray; +import com.hippo.yorozuya.sparse.SparseJLArray; import java.util.Collections; import java.util.Comparator; @@ -43,8 +43,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import de.greenrobot.dao.query.LazyList; - public class DownloadManager implements SpiderQueen.OnSpiderListener { private static final String TAG = DownloadManager.class.getSimpleName(); @@ -61,7 +59,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { private final LinkedList mDefaultInfoList; // For quick search @NonNull - private final SparseArray mAllInfoMap; + private final SparseJLArray mAllInfoMap; // Store download info wait to start @NonNull private final LinkedList mWaitList; @@ -96,21 +94,16 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Create default for non tag mDefaultInfoList = new LinkedList<>(); // Create all download info map - SparseArray allInfoMap = new SparseArray<>(); + SparseJLArray allInfoMap = new SparseJLArray<>(); mAllInfoMap = allInfoMap; // Fill download info list - LazyList lazyList = EhDB.getDownloadInfoLazyList(); - for (DownloadInfoRaw raw : lazyList) { - DownloadInfo info = createDownloadInfo(raw); - if (info == null) { - continue; - } - + List allInfoList = EhDB.getAllDownloadInfos(); + for (DownloadInfo info: allInfoList) { // Add to all info map - allInfoMap.put(info.galleryInfo.gid, info); + allInfoMap.put(info.gid, info); - // Add to list + // Add to each label list LinkedList list = getInfoListForLabel(info.label); if (list == null) { list = new LinkedList<>(); @@ -122,7 +115,6 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } list.add(info); } - lazyList.close(); // Create wait list mWaitList = new LinkedList<>(); @@ -130,27 +122,6 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { mSpeedReminder = new SpeedReminder(); } - @Nullable - private static DownloadInfo createDownloadInfo(DownloadInfoRaw raw) { - GalleryInfo gi = EhDB.getGalleryInfo((int) (long) raw.getGid()); - if (gi == null) { - Log.d(TAG, "Can't get GalleryInfo: " + raw.getGid()); - return null; - } - - DownloadInfo info = new DownloadInfo(); - int state = raw.getState(); - if (state == DownloadInfo.STATE_WAIT || state == DownloadInfo.STATE_DOWNLOAD) { - state = DownloadInfo.STATE_NONE; - } - info.galleryInfo = gi; - info.state = state; - info.legacy = raw.getLegacy(); - info.date = raw.getDate(); - info.label = raw.getLabel(); - return info; - } - @Nullable private LinkedList getInfoListForLabel(String label) { if (label == null) { @@ -174,7 +145,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { return false; } - public boolean containDownloadInfo(int gid) { + public boolean containDownloadInfo(long gid) { return mAllInfoMap.indexOfKey(gid) >= 0; } @@ -210,7 +181,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Get download from wait list if (!mWaitList.isEmpty()) { DownloadInfo info = mWaitList.removeFirst(); - SpiderQueen spider = SpiderQueen.obtainSpiderQueen(mContext, info.galleryInfo, SpiderQueen.MODE_DOWNLOAD); + SpiderQueen spider = SpiderQueen.obtainSpiderQueen(mContext, info, SpiderQueen.MODE_DOWNLOAD); mCurrentTask = info; mCurrentSpider = spider; spider.addOnSpiderListener(this); @@ -222,7 +193,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { info.downloaded = 0; info.legacy = -1; // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); // Start speed count mSpeedReminder.start(); // Notify start downloading @@ -238,7 +209,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } void startDownload(GalleryInfo galleryInfo, @Nullable String label) { - if (mCurrentTask != null && mCurrentTask.galleryInfo.gid == galleryInfo.gid) { + if (mCurrentTask != null && mCurrentTask.gid == galleryInfo.gid) { // It is current task return; } @@ -252,7 +223,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Add to wait list mWaitList.add(info); // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); // Notify state update List list = getInfoListForLabel(info.label); if (list != null && mDownloadInfoListener != null) { @@ -263,11 +234,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } else { // It is new download info - info = new DownloadInfo(); - info.galleryInfo = galleryInfo; + info = new DownloadInfo(galleryInfo); info.label = label; info.state = DownloadInfo.STATE_WAIT; - info.date = System.currentTimeMillis(); + info.time = System.currentTimeMillis(); // Add to label download list LinkedList list = getInfoListForLabel(info.label); @@ -284,7 +254,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { mWaitList.add(info); // Save to - EhDB.addDownloadInfo(info); + EhDB.putDownloadInfo(info); // Notify if (mDownloadInfoListener != null) { @@ -295,11 +265,11 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } - void startRangeDownload(IntList gidList) { + void startRangeDownload(LongList gidList) { boolean update = false; for (int i = 0, n = gidList.size(); i < n; i++) { - int gid = gidList.get(i); + long gid = gidList.get(i); DownloadInfo info = mAllInfoMap.get(gid); if (null == info) { Log.d(TAG, "Can't get download info with gid: " + gid); @@ -315,7 +285,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Add to wait list mWaitList.add(info); // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); } } @@ -333,7 +303,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { boolean update = false; // Start all STATE_NONE and STATE_FAILED item // TODO keep order in wait list - SparseArray allInfoMap = mAllInfoMap; + SparseJLArray allInfoMap = mAllInfoMap; List waitList = mWaitList; for (int i = 0, n = allInfoMap.size(); i < n; i++) { DownloadInfo info = allInfoMap.valueAt(i); @@ -344,7 +314,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Add to wait list waitList.add(info); // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); } } @@ -358,7 +328,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } - void stopDownload(int gid) { + void stopDownload(long gid) { DownloadInfo info = stopDownloadInternal(gid); if (info != null) { // Update listener @@ -384,7 +354,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } - void stopRangeDownload(IntList gidList) { + void stopRangeDownload(LongList gidList) { stopRangeDownloadInternal(gidList); // Update listener @@ -401,7 +371,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { for (DownloadInfo info : mWaitList) { info.state = DownloadInfo.STATE_NONE; // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); } mWaitList.clear(); @@ -414,15 +384,15 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } - void deleteDownload(int gid) { + void deleteDownload(long gid) { stopDownloadInternal(gid); DownloadInfo info = mAllInfoMap.get(gid); if (info != null) { // Remove from DB - EhDB.removeDownloadInfo(info.galleryInfo.gid); + EhDB.removeDownloadInfo(info.gid); // Remove all list and map - mAllInfoMap.remove(info.galleryInfo.gid); + mAllInfoMap.remove(info.gid); // Remove label list LinkedList list = getInfoListForLabel(info.label); @@ -442,11 +412,11 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } - void deleteRangeDownload(IntList gidList) { + void deleteRangeDownload(LongList gidList) { stopRangeDownloadInternal(gidList); for (int i = 0, n = gidList.size(); i < n; i++) { - int gid = gidList.get(i); + long gid = gidList.get(i); DownloadInfo info = mAllInfoMap.get(gid); if (null == info) { Log.d(TAG, "Can't get download info with gid: " + gid); @@ -454,10 +424,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } // Remove from DB - EhDB.removeDownloadInfo(info.galleryInfo.gid); + EhDB.removeDownloadInfo(info.gid); // Remove from all info map - mAllInfoMap.remove(info.galleryInfo.gid); + mAllInfoMap.remove(info.gid); // Remove from label list LinkedList list = getInfoListForLabel(info.label); @@ -475,22 +445,22 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Update in DB // Update listener // No ensureDownload - private DownloadInfo stopDownloadInternal(int gid) { + private DownloadInfo stopDownloadInternal(long gid) { // Check current task - if (mCurrentTask != null && mCurrentTask.galleryInfo.gid == gid) { + if (mCurrentTask != null && mCurrentTask.gid == gid) { // Stop current return stopCurrentDownloadInternal(); } for (Iterator iterator = mWaitList.iterator(); iterator.hasNext();) { DownloadInfo info = iterator.next(); - if (info.galleryInfo.gid == gid) { + if (info.gid == gid) { // Remove from wait list iterator.remove(); // Update state info.state = DownloadInfo.STATE_NONE; // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); return info; } } @@ -518,7 +488,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Update state info.state = DownloadInfo.STATE_NONE; // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); // Listener if (mDownloadListener != null) { mDownloadListener.onCancel(info); @@ -528,7 +498,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Update in DB // Update mDownloadListener - private void stopRangeDownloadInternal(IntList gidList) { + private void stopRangeDownloadInternal(LongList gidList) { // Two way if (gidList.size() < mWaitList.size()) { for (int i = 0, n = gidList.size(); i < n; i++) { @@ -536,7 +506,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } else { // Check current task - if (mCurrentTask != null && gidList.contains(mCurrentTask.galleryInfo.gid)) { + if (mCurrentTask != null && gidList.contains(mCurrentTask.gid)) { // Stop current stopCurrentDownloadInternal(); } @@ -544,13 +514,13 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { // Check all in wait list for (Iterator iterator = mWaitList.iterator(); iterator.hasNext();) { DownloadInfo info = iterator.next(); - if (gidList.contains(info.galleryInfo.gid)) { + if (gidList.contains(info.gid)) { // Remove from wait list iterator.remove(); // Update state info.state = DownloadInfo.STATE_NONE; // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); } } } @@ -591,7 +561,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { Collections.sort(dstList, sDateAscComparator); // Save to DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); changed = true; } @@ -649,7 +619,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { for (DownloadInfo info: list) { info.label = to; // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); } // Put list back with new label mMap.put(to, list); @@ -685,7 +655,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { for (DownloadInfo info: list) { info.label = null; // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); mDefaultInfoList.add(info); } @@ -925,7 +895,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { info.state = DownloadInfo.STATE_FAILED; } // Update in DB - EhDB.updateDownloadInfo(info); + EhDB.putDownloadInfo(info); // Notify if (mDownloadListener != null) { mDownloadListener.onFinish(info); @@ -1041,7 +1011,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { private static final Comparator sDateAscComparator = new Comparator() { @Override public int compare(DownloadInfo lhs, DownloadInfo rhs) { - return lhs.date - rhs.date > 0 ? 1 : -1; + return lhs.time - rhs.time > 0 ? 1 : -1; } }; diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java b/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java index aeffcae8e..7c69eb5fa 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java @@ -28,16 +28,17 @@ import android.support.annotation.IntDef; import android.support.annotation.Nullable; import android.support.v4.app.NotificationCompat; import android.util.Log; -import android.util.SparseArray; -import android.util.SparseBooleanArray; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.client.data.GalleryInfo; +import com.hippo.ehviewer.dao.DownloadInfo; import com.hippo.util.ReadableTime; import com.hippo.yorozuya.FileUtils; -import com.hippo.yorozuya.IntList; +import com.hippo.yorozuya.LongList; import com.hippo.yorozuya.SimpleHandler; +import com.hippo.yorozuya.sparse.SparseJBArray; +import com.hippo.yorozuya.sparse.SparseJLArray; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -78,15 +79,15 @@ public class DownloadService extends Service implements DownloadManager.Download private NotificationDelay m509Delay; @Nullable - private SparseBooleanArray mItemStateArray; + private SparseJBArray mItemStateArray; @Nullable - private SparseArray mItemTitleArray; + private SparseJLArray mItemTitleArray; private int mFailedCount; private int mFinishedCount; private int mDownloadedCount; - public void init(SparseBooleanArray stateArray, SparseArray titleArray, + public void init(SparseJBArray stateArray, SparseJLArray titleArray, int failedCount, int finishedCount, int downloadedCount) { mItemStateArray = stateArray; mItemTitleArray = titleArray; @@ -163,7 +164,7 @@ public class DownloadService extends Service implements DownloadManager.Download mDownloadManager.startDownload(gi, label); } } else if (ACTION_START_RANGE.equals(action)) { - IntList gidList = intent.getParcelableExtra(KEY_GID_LIST); + LongList gidList = intent.getParcelableExtra(KEY_GID_LIST); if (gidList != null && mDownloadManager != null) { mDownloadManager.startRangeDownload(gidList); } @@ -172,7 +173,7 @@ public class DownloadService extends Service implements DownloadManager.Download mDownloadManager.startAllDownload(); } } else if (ACTION_STOP.equals(action)) { - int gid = intent.getIntExtra(KEY_GID, -1); + long gid = intent.getLongExtra(KEY_GID, -1); if (gid != -1 && mDownloadManager != null) { mDownloadManager.stopDownload(gid); } @@ -181,7 +182,7 @@ public class DownloadService extends Service implements DownloadManager.Download mDownloadManager.stopCurrentDownload(); } } else if (ACTION_STOP_RANGE.equals(action)) { - IntList gidList = intent.getParcelableExtra(KEY_GID_LIST); + LongList gidList = intent.getParcelableExtra(KEY_GID_LIST); if (gidList != null && mDownloadManager != null) { mDownloadManager.stopRangeDownload(gidList); } @@ -190,12 +191,12 @@ public class DownloadService extends Service implements DownloadManager.Download mDownloadManager.stopAllDownload(); } } else if (ACTION_DELETE.equals(action)) { - int gid = intent.getIntExtra(KEY_GID, -1); + long gid = intent.getLongExtra(KEY_GID, -1); if (gid != -1 && mDownloadManager != null) { mDownloadManager.deleteDownload(gid); } } else if (ACTION_DELETE_RANGE.equals(action)) { - IntList gidList = intent.getParcelableExtra(KEY_GID_LIST); + LongList gidList = intent.getParcelableExtra(KEY_GID_LIST); if (gidList != null && mDownloadManager != null) { mDownloadManager.deleteRangeDownload(gidList); } @@ -287,7 +288,7 @@ public class DownloadService extends Service implements DownloadManager.Download ensureDownloadingBuilder(); - mDownloadingBuilder.setContentTitle(info.galleryInfo.title) + mDownloadingBuilder.setContentTitle(info.title) .setContentText(null) .setContentInfo(null) .setProgress(0, 0, true) @@ -313,7 +314,7 @@ public class DownloadService extends Service implements DownloadManager.Download } else { text = getString(R.string.download_speed_text, text); } - mDownloadingBuilder.setContentTitle(info.galleryInfo.title) + mDownloadingBuilder.setContentTitle(info.title) .setContentText(text) .setContentInfo(info.total == -1 || info.finished == -1 ? null : info.finished + "/" + info.total) .setProgress(info.total, info.finished, false); @@ -342,11 +343,11 @@ public class DownloadService extends Service implements DownloadManager.Download ensureDownloadedBuilder(); boolean finish = info.state == DownloadInfo.STATE_FINISH; - int gid = info.galleryInfo.gid; + long gid = info.gid; int index = mItemStateArray.indexOfKey(gid); if (index < 0) { // Not contain mItemStateArray.put(gid, finish); - mItemTitleArray.put(gid, info.galleryInfo.title); + mItemTitleArray.put(gid, info.title); mDownloadedCount++; if (finish) { mFinishedCount++; @@ -356,7 +357,7 @@ public class DownloadService extends Service implements DownloadManager.Download } else { // Contain boolean oldFinish = mItemStateArray.valueAt(index); mItemStateArray.put(gid, finish); - mItemTitleArray.put(gid, info.galleryInfo.title); + mItemTitleArray.put(gid, info.title); if (oldFinish && !finish) { mFinishedCount--; mFailedCount++; @@ -403,10 +404,10 @@ public class DownloadService extends Service implements DownloadManager.Download if (needStyle) { style = new NotificationCompat.InboxStyle(); style.setBigContentTitle(getString(R.string.stat_download_done_title)); - SparseBooleanArray stateArray = mItemStateArray; - SparseArray titleArray = mItemTitleArray; + SparseJBArray stateArray = mItemStateArray; + SparseJLArray titleArray = mItemTitleArray; for (int i = 0, n = stateArray.size(); i < n; i++) { - int id = stateArray.keyAt(i); + long id = stateArray.keyAt(i); boolean fin = stateArray.valueAt(i); String title = titleArray.get(id); if (title == null) { diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java index 98f08b27d..7763673eb 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java @@ -46,7 +46,7 @@ public final class SpiderDen { @Nullable private final UniFile mDownloadDir; private volatile int mMode = SpiderQueen.MODE_READ; - private final int mGid; + private final long mGid; @Nullable private static SimpleDiskCache sCache; diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.java index bffd5a9d5..9af87fd23 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.java @@ -37,7 +37,7 @@ public class SpiderInfo { static final String TOKEN_WAIT = "wait"; int currentIndex = 0; - int gid = -1; + long gid = -1; String token = null; int pages = -1; int previewPages = -1; @@ -58,7 +58,7 @@ public class SpiderInfo { // Current index spiderInfo.currentIndex = Integer.parseInt(IOUtils.readAsciiLine(is), 16); // Gid - spiderInfo.gid = Integer.parseInt(IOUtils.readAsciiLine(is)); + spiderInfo.gid = Long.parseLong(IOUtils.readAsciiLine(is)); // Token spiderInfo.token = IOUtils.readAsciiLine(is); // Deprecated, mode, only ex is support now, MUST be 1 @@ -106,7 +106,7 @@ public class SpiderInfo { writer = new OutputStreamWriter(os); writer.write(String.format("%08x", currentIndex)); writer.write("\n"); - writer.write(Integer.toString(gid)); + writer.write(Long.toString(gid)); writer.write("\n"); writer.write(token); writer.write("\n"); diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index 05fd41164..3f51d3b23 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -52,6 +52,7 @@ import com.hippo.yorozuya.PriorityThreadFactory; import com.hippo.yorozuya.StringUtils; import com.hippo.yorozuya.io.InputStreamPipe; import com.hippo.yorozuya.io.OutputStreamPipe; +import com.hippo.yorozuya.sparse.SparseJLArray; import java.io.File; import java.io.FileOutputStream; @@ -109,7 +110,7 @@ public class SpiderQueen implements Runnable { "/509s.gif" }; - private static final SparseArray sQueenMap = new SparseArray<>(); + private static final SparseJLArray sQueenMap = new SparseJLArray<>(); private final OkHttpClient mHttpClient; private final GalleryInfo mGalleryInfo; @@ -547,7 +548,7 @@ public class SpiderQueen implements Runnable { // Read from cache File dir = AppConfig.getSpiderInfoCacheDir(); if (dir != null) { - UniFile file = UniFile.fromFile(new File(dir, Integer.toString(mGalleryInfo.gid))); + UniFile file = UniFile.fromFile(new File(dir, Long.toString(mGalleryInfo.gid))); SpiderInfo spiderInfo = SpiderInfo.readFromUniFile(file); if (spiderInfo != null && spiderInfo.gid == mGalleryInfo.gid && spiderInfo.token.equals(mGalleryInfo.token)) { @@ -642,7 +643,7 @@ public class SpiderQueen implements Runnable { File dir = AppConfig.getSpiderInfoCacheDir(); if (dir != null) { try { - spiderInfo.write(new FileOutputStream(new File(dir, Integer.toString(mGalleryInfo.gid)))); + spiderInfo.write(new FileOutputStream(new File(dir, Long.toString(mGalleryInfo.gid)))); } catch (Exception e) { // Ignore } @@ -799,7 +800,7 @@ public class SpiderQueen implements Runnable { private class SpiderWorker implements Runnable { private final int mWorkerIndex; - private final int mGid; + private final long mGid; public SpiderWorker(int workerIndex) { mWorkerIndex = workerIndex; @@ -851,7 +852,7 @@ public class SpiderQueen implements Runnable { } } - private GalleryPageParser.Result getImageUrl(int gid, int index, String pToken, + private GalleryPageParser.Result getImageUrl(long gid, int index, String pToken, String skipHathKey) throws IOException, ParseException, Image509Exception { String url = EhUrl.getPageUrl(gid, index, pToken); if (skipHathKey != null) { @@ -874,7 +875,7 @@ public class SpiderQueen implements Runnable { } // false for stop - private boolean downloadImage(int gid, int index, String pToken, boolean force) { + private boolean downloadImage(long gid, int index, String pToken, boolean force) { String skipHathKey = null; String imageUrl; String error = null; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadScene.java index 6d21e59b3..244516cbf 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadScene.java @@ -58,8 +58,8 @@ import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.EhCacheKeyFactory; import com.hippo.ehviewer.client.EhUtils; import com.hippo.ehviewer.client.data.GalleryInfo; +import com.hippo.ehviewer.dao.DownloadInfo; import com.hippo.ehviewer.dao.DownloadLabelRaw; -import com.hippo.ehviewer.download.DownloadInfo; import com.hippo.ehviewer.download.DownloadManager; import com.hippo.ehviewer.download.DownloadService; import com.hippo.ehviewer.spider.SpiderDen; @@ -77,7 +77,7 @@ import com.hippo.view.ViewTransition; import com.hippo.widget.FabLayout; import com.hippo.widget.LoadImageView; import com.hippo.yorozuya.FileUtils; -import com.hippo.yorozuya.IntList; +import com.hippo.yorozuya.LongList; import com.hippo.yorozuya.ObjectUtils; import com.hippo.yorozuya.ResourcesUtils; import com.hippo.yorozuya.ViewUtils; @@ -410,7 +410,7 @@ public class DownloadScene extends ToolbarScene Intent intent = new Intent(getActivity(), GalleryActivity.class); intent.setAction(GalleryActivity.ACTION_EH); - intent.putExtra(GalleryActivity.KEY_GALLERY_INFO, list.get(position).galleryInfo); + intent.putExtra(GalleryActivity.KEY_GALLERY_INFO, list.get(position)); startActivity(intent); return true; } @@ -453,17 +453,12 @@ public class DownloadScene extends ToolbarScene return; } - IntList gidList = null; - List galleryInfoList = null; + LongList gidList = null; List downloadInfoList = null; boolean collectGid = position == 1 || position == 2 || position == 3; // Start, Stop, Delete - boolean collectGalleryInfo = position == 3; // Delete - boolean collectDownloadInfo = position == 4; // Move + boolean collectDownloadInfo = position == 3 || position == 4; // Delete or Move if (collectGid) { - gidList = new IntList(); - } - if (collectGalleryInfo) { - galleryInfoList = new LinkedList<>(); + gidList = new LongList(); } if (collectDownloadInfo) { downloadInfoList = new LinkedList<>(); @@ -476,12 +471,8 @@ public class DownloadScene extends ToolbarScene if (collectDownloadInfo) { downloadInfoList.add(info); } - GalleryInfo gi = info.galleryInfo; - if (collectGalleryInfo) { - galleryInfoList.add(gi); - } if (collectGid) { - gidList.add(gi.gid); + gidList.add(info.gid); } } } @@ -511,7 +502,7 @@ public class DownloadScene extends ToolbarScene getString(R.string.download_remove_dialog_check_text), Settings.getRemoveImageFiles()); DeleteRangeDialogHelper helper = new DeleteRangeDialogHelper( - galleryInfoList, gidList, builder); + downloadInfoList, gidList, builder); builder.setTitle(R.string.download_remove_dialog_title) .setPositiveButton(android.R.string.ok, helper) .show(); @@ -744,13 +735,13 @@ public class DownloadScene extends ToolbarScene private class DeleteRangeDialogHelper implements DialogInterface.OnClickListener { - private final List mGalleryInfoList; - private final IntList mGidList; + private final List mDownloadInfoList; + private final LongList mGidList; private final CheckBoxDialogBuilder mBuilder; - public DeleteRangeDialogHelper(List galleryInfoList, - IntList gidList, CheckBoxDialogBuilder builder) { - mGalleryInfoList = galleryInfoList; + public DeleteRangeDialogHelper(List downloadInfoList, + LongList gidList, CheckBoxDialogBuilder builder) { + mDownloadInfoList = downloadInfoList; mGidList = gidList; mBuilder = builder; } @@ -776,13 +767,13 @@ public class DownloadScene extends ToolbarScene boolean checked = mBuilder.isChecked(); Settings.putRemoveImageFiles(checked); if (checked) { - UniFile[] files = new UniFile[mGalleryInfoList.size()]; + UniFile[] files = new UniFile[mDownloadInfoList.size()]; int i = 0; - for (GalleryInfo gi: mGalleryInfoList) { + for (DownloadInfo info: mDownloadInfoList) { // Remove download path - EhDB.removeDownloadDirname(gi.gid); + EhDB.removeDownloadDirname(info.gid); // Put file - files[i] = SpiderDen.getGalleryDownloadDir(gi); + files[i] = SpiderDen.getGalleryDownloadDir(info); i++; } // Delete file @@ -878,7 +869,7 @@ public class DownloadScene extends ToolbarScene if (thumb == v) { Bundle args = new Bundle(); args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GALLERY_INFO); - args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, list.get(index).galleryInfo); + args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, list.get(index)); Announcer announcer = new Announcer(GalleryDetailScene.class).setArgs(args); if (ApiHelper.SUPPORT_TRANSITION) { DownloadHolder holder = (DownloadHolder) recyclerView.getChildViewHolder(itemView); @@ -888,15 +879,15 @@ public class DownloadScene extends ToolbarScene } else if (start == v) { Intent intent = new Intent(getActivity(), DownloadService.class); intent.setAction(DownloadService.ACTION_START); - intent.putExtra(DownloadService.KEY_GALLERY_INFO, list.get(index).galleryInfo); + intent.putExtra(DownloadService.KEY_GALLERY_INFO, list.get(index)); getActivity().startService(intent); } else if (stop == v) { Intent intent = new Intent(getActivity(), DownloadService.class); intent.setAction(DownloadService.ACTION_STOP); - intent.putExtra(DownloadService.KEY_GID, list.get(index).galleryInfo.gid); + intent.putExtra(DownloadService.KEY_GID, list.get(index).gid); getActivity().startService(intent); } else if (delete == v) { - GalleryInfo galleryInfo = list.get(index).galleryInfo; + GalleryInfo galleryInfo = list.get(index); CheckBoxDialogBuilder builder = new CheckBoxDialogBuilder(getContext(), getString(R.string.download_remove_dialog_message, galleryInfo.title), getString(R.string.download_remove_dialog_check_text), @@ -948,7 +939,7 @@ public class DownloadScene extends ToolbarScene if (mList == null || position < 0 || position >= mList.size()) { return 0; } - return mList.get(position).galleryInfo.gid; + return mList.get(position).gid; } @Override @@ -963,22 +954,21 @@ public class DownloadScene extends ToolbarScene return; } DownloadInfo info = mList.get(position); - GalleryInfo gi = info.galleryInfo; - holder.thumb.load(EhCacheKeyFactory.getThumbKey(gi.gid), gi.thumb, true); - holder.title.setText(gi.title); - holder.uploader.setText(gi.uploader); - holder.rating.setRating(gi.rating); + holder.thumb.load(EhCacheKeyFactory.getThumbKey(info.gid), info.thumb, true); + holder.title.setText(info.title); + holder.uploader.setText(info.uploader); + holder.rating.setRating(info.rating); TextView category = holder.category; - String newCategoryText = EhUtils.getCategory(gi.category); + String newCategoryText = EhUtils.getCategory(info.category); if (!newCategoryText.equals(category.getText())) { category.setText(newCategoryText); - category.setBackgroundColor(EhUtils.getCategoryColor(gi.category)); + category.setBackgroundColor(EhUtils.getCategoryColor(info.category)); } bindForState(holder, info); // Update transition name if (ApiHelper.SUPPORT_TRANSITION) { - int gid = gi.gid; + long gid = info.gid; holder.thumb.setTransitionName(TransitionNameFactory.getThumbTransitionName(gid)); holder.title.setTransitionName(TransitionNameFactory.getTitleTransitionName(gid)); holder.uploader.setTransitionName(TransitionNameFactory.getUploaderTransitionName(gid)); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index 2c330832b..045278485 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -803,7 +803,7 @@ public class FavoritesScene extends BaseScene implements mRecyclerView.outOfCustomChoiceMode(); if (mUrlBuilder.getFavCat() == FavListUrlBuilder.FAV_CAT_LOCAL) { // Delete local fav - int[] gidArray = new int[mModifyGiList.size()]; + long[] gidArray = new long[mModifyGiList.size()]; for (int i = 0, n = mModifyGiList.size(); i < n; i++) { gidArray[i] = mModifyGiList.get(i).gid; } @@ -847,7 +847,7 @@ public class FavoritesScene extends BaseScene implements mRecyclerView.outOfCustomChoiceMode(); if (srcCat == FavListUrlBuilder.FAV_CAT_LOCAL) { // Move from local to cloud - int[] gidArray = new int[mModifyGiList.size()]; + long[] gidArray = new long[mModifyGiList.size()]; for (int i = 0, n = mModifyGiList.size(); i < n; i++) { gidArray[i] = mModifyGiList.get(i).gid; } @@ -962,7 +962,7 @@ public class FavoritesScene extends BaseScene implements // Update transition name if (ApiHelper.SUPPORT_TRANSITION) { - int gid = gi.gid; + long gid = gi.gid; holder.thumb.setTransitionName(TransitionNameFactory.getThumbTransitionName(gid)); holder.title.setTransitionName(TransitionNameFactory.getTitleTransitionName(gid)); holder.uploader.setTransitionName(TransitionNameFactory.getUploaderTransitionName(gid)); @@ -990,7 +990,7 @@ public class FavoritesScene extends BaseScene implements boolean local = mUrlBuilder.getFavCat() == FavListUrlBuilder.FAV_CAT_LOCAL; if (mModifyAdd) { - int[] gidArray = new int[mModifyGiList.size()]; + long[] gidArray = new long[mModifyGiList.size()]; String[] tokenArray = new String[mModifyGiList.size()]; for (int i = 0, n = mModifyGiList.size(); i < n; i++) { GalleryInfo gi = mModifyGiList.get(i); @@ -1007,7 +1007,7 @@ public class FavoritesScene extends BaseScene implements request.setArgs(gidArray, tokenArray, mModifyFavCat); mClient.execute(request); } else { - int[] gidArray = new int[mModifyGiList.size()]; + long[] gidArray = new long[mModifyGiList.size()]; for (int i = 0, n = mModifyGiList.size(); i < n; i++) { gidArray[i] = mModifyGiList.get(i).gid; } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java index d417f4393..262f67742 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java @@ -70,7 +70,7 @@ public final class GalleryCommentsScene extends ToolbarScene public static final String KEY_TOKEN = "token"; public static final String KEY_COMMENTS = "comments"; - private int mGid; + private long mGid; private String mToken; private GalleryComment[] mComments; @@ -100,7 +100,7 @@ public final class GalleryCommentsScene extends ToolbarScene return; } - mGid = args.getInt(KEY_GID, -1); + mGid = args.getLong(KEY_GID, -1); mToken = args.getString(KEY_TOKEN, null); Parcelable[] parcelables = args.getParcelableArray(KEY_COMMENTS); if (parcelables instanceof GalleryComment[]) { @@ -113,7 +113,7 @@ public final class GalleryCommentsScene extends ToolbarScene } private void onRestore(@NonNull Bundle savedInstanceState) { - mGid = savedInstanceState.getInt(KEY_GID, -1); + mGid = savedInstanceState.getLong(KEY_GID, -1); mToken = savedInstanceState.getString(KEY_TOKEN, null); Parcelable[] parcelables = savedInstanceState.getParcelableArray(KEY_COMMENTS); if (parcelables instanceof GalleryComment[]) { @@ -124,7 +124,7 @@ public final class GalleryCommentsScene extends ToolbarScene @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putInt(KEY_GID, mGid); + outState.putLong(KEY_GID, mGid); outState.putString(KEY_TOKEN, mToken); outState.putParcelableArray(KEY_COMMENTS, mComments); } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 93d55dfcb..96f4701e9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -254,7 +254,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene private String mAction; @Nullable private GalleryInfo mGalleryInfo; - private int mGid; + private long mGid; private String mToken; @Nullable @@ -278,14 +278,14 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene if (ACTION_GALLERY_INFO.equals(action)) { mGalleryInfo = args.getParcelable(KEY_GALLERY_INFO); } else if (ACTION_GID_TOKEN.equals(action)) { - mGid = args.getInt(KEY_GID); + mGid = args.getLong(KEY_GID); mToken = args.getString(KEY_TOKEN); } } @Nullable private String getGalleryDetailUrl(boolean allComment) { - int gid; + long gid; String token; if (mGalleryDetail != null) { gid = mGalleryDetail.gid; @@ -303,7 +303,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene } // -1 for error - private int getGid() { + private long getGid() { if (mGalleryDetail != null) { return mGalleryDetail.gid; } else if (mGalleryInfo != null) { @@ -366,7 +366,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene private void onRestore(Bundle savedInstanceState) { mAction = savedInstanceState.getString(KEY_ACTION); mGalleryInfo = savedInstanceState.getParcelable(KEY_GALLERY_INFO); - mGid = savedInstanceState.getInt(KEY_GID); + mGid = savedInstanceState.getLong(KEY_GID); mToken = savedInstanceState.getString(KEY_TOKEN); mGalleryDetail = savedInstanceState.getParcelable(KEY_GALLERY_DETAIL); mRequestId = savedInstanceState.getInt(KEY_REQUEST_ID); @@ -382,7 +382,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene if (mGalleryInfo != null) { outState.putParcelable(KEY_GALLERY_INFO, mGalleryInfo); } - outState.putInt(KEY_GID, mGid); + outState.putLong(KEY_GID, mGid); if (mToken != null) { outState.putString(KEY_TOKEN, mAction); } @@ -564,7 +564,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene return true; } - int gid = getGid(); + long gid = getGid(); if (gid == -1) { return false; } @@ -913,7 +913,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void setTransitionName() { - int gid = getGid(); + long gid = getGid(); if (gid != -1 && ApiHelper.SUPPORT_TRANSITION && mThumb != null && mTitle != null && mUploader != null && mCategory != null) { @@ -1064,20 +1064,20 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene return; } Bundle args = new Bundle(); - args.putInt(GalleryCommentsScene.KEY_GID, mGalleryDetail.gid); + args.putLong(GalleryCommentsScene.KEY_GID, mGalleryDetail.gid); args.putString(GalleryCommentsScene.KEY_TOKEN, mGalleryDetail.token); args.putParcelableArray(GalleryCommentsScene.KEY_COMMENTS, mGalleryDetail.comments); startScene(new Announcer(GalleryCommentsScene.class) .setArgs(args) .setRequestCode(this, REQUEST_CODE_COMMENT_GALLERY)); } else if (mPreviews == v) { - int gid = getGid(); + long gid = getGid(); String token = getToken(); if (gid == -1 || token == null) { return; } Bundle args = new Bundle(); - args.putInt(GalleryPreviewsScene.KEY_GID, gid); + args.putLong(GalleryPreviewsScene.KEY_GID, gid); args.putString(GalleryPreviewsScene.KEY_TOKEN, token); startScene(new Announcer(GalleryPreviewsScene.class).setArgs(args)); } else { @@ -1446,9 +1446,9 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene private static class RateGalleryListener extends EhCallback { - private final int mGid; + private final long mGid; - public RateGalleryListener(Context context, int stageId, String sceneTag, int gid) { + public RateGalleryListener(Context context, int stageId, String sceneTag, long gid) { super(context, stageId, sceneTag); mGid = gid; } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java index 2b7493c78..1d5982d7e 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java @@ -81,7 +81,7 @@ public final class GalleryInfoScene extends ToolbarScene implements EasyRecycler mKeys.add(resources.getString(R.string.header_key)); mValues.add(resources.getString(R.string.header_value)); mKeys.add(resources.getString(R.string.key_gid)); - mValues.add(Integer.toString(gd.gid)); + mValues.add(Long.toString(gd.gid)); mKeys.add(resources.getString(R.string.key_token)); mValues.add(gd.token); mKeys.add(resources.getString(R.string.key_url)); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index fd1839435..701d62c76 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -625,10 +625,10 @@ public final class GalleryListScene extends BaseScene return; } - int gid; + long gid; String token; try { - gid = Integer.parseInt(query.substring(0, index)); + gid = Long.parseLong(query.substring(0, index)); } catch (NumberFormatException e) { Toast.makeText(getContext(), "Error", Toast.LENGTH_SHORT).show(); // TODO return; @@ -637,7 +637,7 @@ public final class GalleryListScene extends BaseScene Bundle args = new Bundle(); args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN); - args.putInt(GalleryDetailScene.KEY_GID, gid); + args.putLong(GalleryDetailScene.KEY_GID, gid); args.putString(GalleryDetailScene.KEY_TOKEN, token); startScene(new Announcer(GalleryDetailScene.class).setArgs(args)); return; @@ -785,7 +785,7 @@ public final class GalleryListScene extends BaseScene // Update transition name if (ApiHelper.SUPPORT_TRANSITION) { - int gid = gi.gid; + long gid = gi.gid; holder.thumb.setTransitionName(TransitionNameFactory.getThumbTransitionName(gid)); holder.title.setTransitionName(TransitionNameFactory.getTitleTransitionName(gid)); holder.uploader.setTransitionName(TransitionNameFactory.getUploaderTransitionName(gid)); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java index 528be2e2e..571bef465 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java @@ -68,7 +68,7 @@ public class GalleryPreviewsScene extends ToolbarScene { private GalleryPreviewAdapter mAdapter; @Nullable private GalleryPreviewHelper mHelper; - private int mGid = -1; + private long mGid = -1; private String mToken = null; private boolean mHasFirstRefresh = false; @@ -89,7 +89,7 @@ public class GalleryPreviewsScene extends ToolbarScene { return; } - mGid = args.getInt(KEY_GID, -1); + mGid = args.getLong(KEY_GID, -1); mToken = args.getString(KEY_TOKEN, null); } @@ -98,7 +98,7 @@ public class GalleryPreviewsScene extends ToolbarScene { } private void onRestore(@NonNull Bundle savedInstanceState) { - mGid = savedInstanceState.getInt(KEY_GID, -1); + mGid = savedInstanceState.getLong(KEY_GID, -1); mToken = savedInstanceState.getString(KEY_TOKEN, null); mHasFirstRefresh = savedInstanceState.getBoolean(KEY_HAS_FIRST_REFRESH); } @@ -106,7 +106,7 @@ public class GalleryPreviewsScene extends ToolbarScene { @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putInt(KEY_GID, mGid); + outState.putLong(KEY_GID, mGid); outState.putString(KEY_TOKEN, mToken); outState.putBoolean(KEY_HAS_FIRST_REFRESH, mHasFirstRefresh); } @@ -313,10 +313,10 @@ public class GalleryPreviewsScene extends ToolbarScene { private static class GetLargePreviewSetListener extends EhCallback> { private final int mTaskId; - private final int mGid; + private final long mGid; private final int mPage; - public GetLargePreviewSetListener(Context context, int stageId, String sceneTag, int taskId, int gid, int page) { + public GetLargePreviewSetListener(Context context, int stageId, String sceneTag, int taskId, long gid, int page) { super(context, stageId, sceneTag); mTaskId = taskId; mGid = gid; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java index 7b465abfa..e11ce3214 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java @@ -56,7 +56,7 @@ public final class ProgressScene extends BaseScene implements View.OnClickListen private String mAction; - private int mGid; + private long mGid; private String mPToken; private int mPage; @@ -127,7 +127,7 @@ public final class ProgressScene extends BaseScene implements View.OnClickListen mAction = savedInstanceState.getString(KEY_ACTION); - mGid = savedInstanceState.getInt(KEY_GID, -1); + mGid = savedInstanceState.getLong(KEY_GID, -1); mPToken = savedInstanceState.getString(KEY_PTOKEN, null); mPage = savedInstanceState.getInt(KEY_PAGE, -1); } @@ -140,7 +140,7 @@ public final class ProgressScene extends BaseScene implements View.OnClickListen outState.putString(KEY_ACTION, mAction); - outState.putInt(KEY_GID, mGid); + outState.putLong(KEY_GID, mGid); outState.putString(KEY_PTOKEN, mPToken); outState.putInt(KEY_PAGE, mPage); } @@ -190,7 +190,7 @@ public final class ProgressScene extends BaseScene implements View.OnClickListen private void onGetGalleryTokenSuccess(String result) { Bundle arg = new Bundle(); arg.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN); - arg.putInt(GalleryDetailScene.KEY_GID, mGid); + arg.putLong(GalleryDetailScene.KEY_GID, mGid); arg.putString(GalleryDetailScene.KEY_TOKEN, result); arg.putInt(GalleryDetailScene.KEY_PAGE, mPage); startScene(new Announcer(GalleryDetailScene.class).setArgs(arg)); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/TransitionNameFactory.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/TransitionNameFactory.java index 6ea8731bb..8175b9c6c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/TransitionNameFactory.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/TransitionNameFactory.java @@ -18,19 +18,19 @@ package com.hippo.ehviewer.ui.scene; public final class TransitionNameFactory { - public static String getThumbTransitionName(int gid) { + public static String getThumbTransitionName(long gid) { return "thumb:" + gid; } - public static String getTitleTransitionName(int gid) { + public static String getTitleTransitionName(long gid) { return "title:" + gid; } - public static String getUploaderTransitionName(int gid) { + public static String getUploaderTransitionName(long gid) { return "uploader:" + gid; } - public static String getCategoryTransitionName(int gid) { + public static String getCategoryTransitionName(long gid) { return "category:" + gid; } } diff --git a/daogenerator/build.gradle b/daogenerator/build.gradle index d986a8a8a..1a19a7281 100644 --- a/daogenerator/build.gradle +++ b/daogenerator/build.gradle @@ -24,4 +24,6 @@ task executeDaoGenerator(type:JavaExec) { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile('de.greenrobot:greendao-generator:2.0.0') + compile('org.jboss.forge.roaster:roaster-api:2.18.2.Final') + compile('org.jboss.forge.roaster:roaster-jdt:2.18.2.Final') } diff --git a/daogenerator/src/main/java/com/hippo/ehviewer/daogenerator/EhDaoGenerator.java b/daogenerator/src/main/java/com/hippo/ehviewer/daogenerator/EhDaoGenerator.java index 9052c12b9..ab7b96dce 100644 --- a/daogenerator/src/main/java/com/hippo/ehviewer/daogenerator/EhDaoGenerator.java +++ b/daogenerator/src/main/java/com/hippo/ehviewer/daogenerator/EhDaoGenerator.java @@ -16,7 +16,11 @@ package com.hippo.ehviewer.daogenerator; +import org.jboss.forge.roaster.Roaster; +import org.jboss.forge.roaster.model.source.JavaClassSource; + import java.io.File; +import java.io.FileWriter; import de.greenrobot.daogenerator.DaoGenerator; import de.greenrobot.daogenerator.Entity; @@ -30,6 +34,8 @@ public class EhDaoGenerator { private static final int VERSION = 1; + private static final String DOWNLOAD_INFO_PATH = "../app/src/main/java-gen/com/hippo/ehviewer/dao/DownloadInfo.java"; + public static void generate() throws Exception { Utilities.deleteContents(new File(DELETE_DIR)); File outDir = new File(OUT_DIR); @@ -38,13 +44,15 @@ public class EhDaoGenerator { Schema schema = new Schema(VERSION, PACKAGE); addGalleryInfo(schema); - addDownloadInfo(schema); + addDownloads(schema); addDownloadLabel(schema); addDownloadDirname(schema); addHistoryInfo(schema); addQuickSearch(schema); addLocalFavorites(schema); new DaoGenerator().generateAll(schema, OUT_DIR); + + adjustDownloads(); } private static void addGalleryInfo(Schema schema) { @@ -62,14 +70,28 @@ public class EhDaoGenerator { entity.addIntProperty("reference"); } - private static void addDownloadInfo(Schema schema) { - Entity entity = schema.addEntity("DownloadInfoRaw"); - entity.setTableName("DOWNLOAD_INFO"); - entity.setClassNameDao("DownloadInfoDao"); - entity.addLongProperty("gid").primaryKey(); - entity.addIntProperty("state"); - entity.addIntProperty("legacy"); - entity.addLongProperty("date"); + private static void addDownloads(Schema schema) { + Entity entity = schema.addEntity("DownloadInfo"); + entity.setTableName("DOWNLOADS"); + entity.setClassNameDao("DownloadsDao"); + + entity.setSuperclass("com.hippo.ehviewer.client.data.GalleryInfo"); + + // Gallery Info Data + entity.addLongProperty("gid").primaryKey().notNull(); + entity.addStringProperty("token"); + entity.addStringProperty("title"); + entity.addStringProperty("titleJpn"); + entity.addStringProperty("thumb"); + entity.addIntProperty("category").notNull(); + entity.addStringProperty("posted"); + entity.addStringProperty("uploader"); + entity.addFloatProperty("rating").notNull(); + entity.addStringProperty("simpleLanguage"); + // Download Info Data + entity.addIntProperty("state").notNull(); + entity.addIntProperty("legacy").notNull(); + entity.addLongProperty("time").notNull(); entity.addStringProperty("label"); } @@ -120,4 +142,85 @@ public class EhDaoGenerator { entity.addLongProperty("gid").primaryKey(); entity.addLongProperty("date"); } + + private static void adjustDownloads() throws Exception { + JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, new File(DOWNLOAD_INFO_PATH)); + // Remove field from GalleryInfo + javaClass.removeField(javaClass.getField("gid")); + javaClass.removeField(javaClass.getField("token")); + javaClass.removeField(javaClass.getField("title")); + javaClass.removeField(javaClass.getField("titleJpn")); + javaClass.removeField(javaClass.getField("thumb")); + javaClass.removeField(javaClass.getField("category")); + javaClass.removeField(javaClass.getField("posted")); + javaClass.removeField(javaClass.getField("uploader")); + javaClass.removeField(javaClass.getField("rating")); + // Set all field public + javaClass.getField("state").setPublic(); + javaClass.getField("legacy").setPublic(); + javaClass.getField("time").setPublic(); + javaClass.getField("label").setPublic(); + // Add Parcelable stuff + javaClass.addMethod("\t@Override\n" + + "\tpublic int describeContents() {\n" + + "\t\treturn 0;\n" + + "\t}"); + javaClass.addMethod("\t@Override\n" + + "\tpublic void writeToParcel(Parcel dest, int flags) {\n" + + "\t\tsuper.writeToParcel(dest, flags);\n" + + "\t\tdest.writeInt(this.state);\n" + + "\t\tdest.writeInt(this.legacy);\n" + + "\t\tdest.writeLong(this.time);\n" + + "\t\tdest.writeString(this.label);\n" + + "\t}"); + javaClass.addMethod("\tprotected DownloadInfo(Parcel in) {\n" + + "\t\tsuper(in);\n" + + "\t\tthis.state = in.readInt();\n" + + "\t\tthis.legacy = in.readInt();\n" + + "\t\tthis.time = in.readLong();\n" + + "\t\tthis.label = in.readString();\n" + + "\t}").setConstructor(true); + javaClass.addField("\tpublic static final Creator CREATOR = new Creator() {\n" + + "\t\t@Override\n" + + "\t\tpublic DownloadInfo createFromParcel(Parcel source) {\n" + + "\t\t\treturn new DownloadInfo(source);\n" + + "\t\t}\n" + + "\n" + + "\t\t@Override\n" + + "\t\tpublic DownloadInfo[] newArray(int size) {\n" + + "\t\t\treturn new DownloadInfo[size];\n" + + "\t\t}\n" + + "\t};"); + javaClass.addImport("android.os.Parcel"); + // Add download info stuff + javaClass.addField("public static final int STATE_NONE = 0"); + javaClass.addField("public static final int STATE_WAIT = 1"); + javaClass.addField("public static final int STATE_DOWNLOAD = 2"); + javaClass.addField("public static final int STATE_FINISH = 3"); + javaClass.addField("public static final int STATE_FAILED = 4"); + javaClass.addField("public long speed"); + javaClass.addField("public long remaining"); + javaClass.addField("public int finished"); + javaClass.addField("public int downloaded"); + javaClass.addField("public int total"); + // Add from GalleryInfo constructor + javaClass.addMethod("\tpublic DownloadInfo(GalleryInfo galleryInfo) {\n" + + "\t\tthis.gid = galleryInfo.gid;\n" + + "\t\tthis.token = galleryInfo.token;\n" + + "\t\tthis.title = galleryInfo.title;\n" + + "\t\tthis.titleJpn = galleryInfo.titleJpn;\n" + + "\t\tthis.thumb = galleryInfo.thumb;\n" + + "\t\tthis.category = galleryInfo.category;\n" + + "\t\tthis.posted = galleryInfo.posted;\n" + + "\t\tthis.uploader = galleryInfo.uploader;\n" + + "\t\tthis.rating = galleryInfo.rating;\n" + + "\t\tthis.simpleTags = galleryInfo.simpleTags;\n" + + "\t\tthis.simpleLanguage = galleryInfo.simpleLanguage;\n" + + "\t}").setConstructor(true); + javaClass.addImport("com.hippo.ehviewer.client.data.GalleryInfo"); + + FileWriter fileWriter = new FileWriter(DOWNLOAD_INFO_PATH); + fileWriter.write(javaClass.toString()); + fileWriter.close(); + } } diff --git a/yorozuya b/yorozuya index f509f306a..2845c6e8d 160000 --- a/yorozuya +++ b/yorozuya @@ -1 +1 @@ -Subproject commit f509f306a304c975779242794e0be7f3bb6b9df4 +Subproject commit 2845c6e8de5337ef72beaa748c01bae25f73243f