diff --git a/app/src/main/java/com/hippo/ehviewer/EhDB.java b/app/src/main/java/com/hippo/ehviewer/EhDB.java index e9403e827..65f1e8eac 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhDB.java +++ b/app/src/main/java/com/hippo/ehviewer/EhDB.java @@ -297,9 +297,9 @@ public class EhDB { } } - public static synchronized List getAllDownloadInfos() { + public static synchronized List getAllDownloadInfo() { DownloadsDao dao = sDaoSession.getDownloadsDao(); - List list = dao.queryBuilder().orderAsc(DownloadsDao.Properties.Time).list(); + List list = dao.queryBuilder().orderDesc(DownloadsDao.Properties.Time).list(); // Fix state for (DownloadInfo info: list) { if (info.state == DownloadInfo.STATE_WAIT || info.state == DownloadInfo.STATE_DOWNLOAD) { 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 f489eb6dd..b91ae1cce 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java @@ -50,26 +50,23 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { private final Context mContext; - @NonNull + // All download info list + private final LinkedList mAllInfoList; + // All download info map + private final SparseJLArray mAllInfoMap; + // label and info list map, without default label info list private final Map> mMap; // All labels without default label - @NonNull private final List mLabelList; // Store download info with default label - @NonNull private final LinkedList mDefaultInfoList; - // For quick search - @NonNull - private final SparseJLArray mAllInfoMap; // Store download info wait to start - @NonNull private final LinkedList mWaitList; - @NonNull + private final SpeedReminder mSpeedReminder; @Nullable private DownloadListener mDownloadListener; - @NonNull private final List mDownloadInfoListeners; @Nullable @@ -77,12 +74,12 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { @Nullable private SpiderQueen mCurrentSpider; - @NonNull private final ConcurrentPool mNotifyTaskPool = new ConcurrentPool<>(5); public DownloadManager(Context context) { mContext = context; + // Get all labels List labels = EhDB.getAllDownloadLabelList(); mLabelList = labels; @@ -92,21 +89,28 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { for (DownloadLabel label : labels) { map.put(label.getLabel(), new LinkedList()); } + // Create default for non tag mDefaultInfoList = new LinkedList<>(); - // Create all download info map - SparseJLArray allInfoMap = new SparseJLArray<>(); + + // Get all info + List allInfoList = EhDB.getAllDownloadInfo(); + mAllInfoList = new LinkedList<>(allInfoList); + + // Create all info map + SparseJLArray allInfoMap = new SparseJLArray<>(allInfoList.size() + 10); mAllInfoMap = allInfoMap; - // Fill download info list - List allInfoList = EhDB.getAllDownloadInfos(); - for (DownloadInfo info: allInfoList) { + for (int i = 0, n = allInfoList.size(); i < n; i++) { + DownloadInfo info = allInfoList.get(i); + // Add to all info map allInfoMap.put(info.gid, info); // Add to each label list LinkedList list = getInfoListForLabel(info.label); if (list == null) { + // Can't find the label in label list list = new LinkedList<>(); map.put(info.label, list); if (!containLabel(info.label)) { @@ -262,9 +266,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { Log.e(TAG, "Can't find download info list with label: " + label); return; } - list.add(info); + list.addFirst(info); // Add to all download list and map + mAllInfoList.addFirst(info); mAllInfoMap.put(galleryInfo.gid, info); // Add to wait list @@ -319,17 +324,15 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { void startAllDownload() { boolean update = false; // Start all STATE_NONE and STATE_FAILED item - // TODO keep order in wait list - SparseJLArray allInfoMap = mAllInfoMap; - List waitList = mWaitList; - for (int i = 0, n = allInfoMap.size(); i < n; i++) { - DownloadInfo info = allInfoMap.valueAt(i); + LinkedList allInfoList = mAllInfoList; + LinkedList waitList = mWaitList; + for (DownloadInfo info: allInfoList) { if (info.state == DownloadInfo.STATE_NONE || info.state == DownloadInfo.STATE_FAILED) { update = true; // Set state DownloadInfo.STATE_WAIT info.state = DownloadInfo.STATE_WAIT; // Add to wait list - waitList.add(info); + waitList.addLast(info); // Update in DB EhDB.putDownloadInfo(info); } @@ -363,9 +366,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { Log.e(TAG, "Can't find download info list with label: " + label); return; } - list.add(info); + list.addFirst(info); // Add to all download list and map + mAllInfoList.addFirst(info); mAllInfoMap.put(galleryInfo.gid, info); // Add to wait list @@ -449,6 +453,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { EhDB.removeDownloadInfo(info.gid); // Remove all list and map + mAllInfoList.remove(info); mAllInfoMap.remove(info.gid); // Remove label list @@ -484,6 +489,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { EhDB.removeDownloadInfo(info.gid); // Remove from all info map + mAllInfoList.remove(info); mAllInfoMap.remove(info.gid); // Remove from label list @@ -598,8 +604,6 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { return; } - boolean changed = false; - for (DownloadInfo info: list) { if (ObjectUtils.equal(info.label, label)) { continue; @@ -614,13 +618,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { srcList.remove(info); dstList.add(info); info.label = label; - // TODO Other comparator - Collections.sort(dstList, sDateAscComparator); + Collections.sort(dstList, sDateDescComparator); // Save to DB EhDB.putDownloadInfo(info); - - changed = true; } for (DownloadInfoListener l: mDownloadInfoListeners) { @@ -717,7 +718,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } // Sort - Collections.sort(mDefaultInfoList, sDateAscComparator); + Collections.sort(mDefaultInfoList, sDateDescComparator); // Notify listener for (DownloadInfoListener l: mDownloadInfoListeners) { @@ -814,6 +815,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { private long mContentLength; private long mReceivedSize; private int mBytesRead; + @SuppressWarnings("unused") private String mError; private int mFinished; private int mDownloaded; @@ -1075,10 +1077,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } - private static final Comparator sDateAscComparator = new Comparator() { + private static final Comparator sDateDescComparator = new Comparator() { @Override public int compare(DownloadInfo lhs, DownloadInfo rhs) { - return lhs.time - rhs.time > 0 ? 1 : -1; + return lhs.time - rhs.time > 0 ? -1 : 1; } }; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java index 2f0e9758b..ce65c658e 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java @@ -295,9 +295,6 @@ public class DownloadsScene extends ToolbarScene getActivity().startService(intent); return true; } - case R.id.action_label: { - openDrawer(Gravity.RIGHT); - } } return false; } diff --git a/app/src/main/res/menu/scene_download.xml b/app/src/main/res/menu/scene_download.xml index 1bd11830f..42edfcb1c 100644 --- a/app/src/main/res/menu/scene_download.xml +++ b/app/src/main/res/menu/scene_download.xml @@ -29,12 +29,6 @@ android:id="@+id/action_stop_all" android:icon="@drawable/v_pause_dark_x24" android:title="@string/download_stop_all" - app:showAsAction="always"/> - -