Add delete download item

This commit is contained in:
seven332 committed 2016-02-26 17:01:40 +08:00
1 parent ce797bcf24
commit a4b4de08da
11 files changed
+359 -81

No files matched your search

@@ -45,18 +45,21 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
private final Context mContext;
@NonNull
private final Map<String, LinkedList<DownloadInfo>> mMap;
// All labels without default label
@NonNull
private final List<String> mLabelList;
// Store download info with default label
@NonNull
private final LinkedList<DownloadInfo> mDefaultInfoList;
// Store all download info
private final LinkedList<DownloadInfo> mAllInfoList;
// For quick search
@NonNull
private final SparseArray<DownloadInfo> mAllInfoMap;
// Store download info wait to start
@NonNull
private final LinkedList<DownloadInfo> mWaitList;
@NonNull
private final SpeedReminder mSpeedReminder;
private DownloadListener mDownloadListener;
@@ -82,8 +85,6 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
}
// Create default for non tag
mDefaultInfoList = new LinkedList<>();
// Create all download info list
mAllInfoList = new LinkedList<>();
// Create all download info map
mAllInfoMap = new SparseArray<>();
@@ -95,18 +96,17 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
continue;
}
// Add to all info list
mAllInfoList.add(info);
// Add to all info map
mAllInfoMap.put(info.galleryInfo.gid, info);
// Add to list
List<DownloadInfo> list = null;
if (info.label != null) {
list = mMap.get(info.label);
}
LinkedList<DownloadInfo> list = getInfoListForLabel(info.label);
if (list == null) {
list = mDefaultInfoList;
list = new LinkedList<>();
mMap.put(info.label, list);
if (!mLabelList.contains(info.label)) {
mLabelList.add(info.label);
}
}
list.add(info);
}
@@ -119,7 +119,7 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
}
@Nullable
private DownloadInfo createDownloadInfo(DownloadInfoRaw raw) {
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());
@@ -139,6 +139,15 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
return info;
}
@Nullable
private LinkedList<DownloadInfo> getInfoListForLabel(String label) {
if (label == null) {
return mDefaultInfoList;
} else {
return mMap.get(label);
}
}
public boolean containLabel(String label) {
return mLabelList.contains(label);
}
@@ -148,11 +157,6 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
return mLabelList;
}
@NonNull
public List<DownloadInfo> getAllDownloadInfoList() {
return mAllInfoList;
}
@NonNull
public List<DownloadInfo> getDefaultDownloadInfoList() {
return mDefaultInfoList;
@@ -198,8 +202,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
mDownloadListener.onStart(info);
}
// Notify state update
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
}
}
@@ -221,8 +226,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
// Update in DB
EhDB.updateDownloadInfo(info);
// Notify state update
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
// Make sure download is running
ensureDownload();
@@ -234,33 +240,27 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
info.label = label;
info.state = DownloadInfo.STATE_WAIT;
info.date = System.currentTimeMillis();
// Add to all download list and map
mAllInfoList.add(info);
mAllInfoMap.put(galleryInfo.gid, info);
// Add to label download list
LinkedList<DownloadInfo> list;
if (label == null) {
list = mDefaultInfoList;
} else {
list = mMap.get(label);
if (list == null) {
Log.e(TAG, "Can't find download info list with label: " + label);
list = new LinkedList<>();
mMap.put(label, list);
// Maybe label is missing in mLabelList
if (!mLabelList.contains(label)) {
mLabelList.add(label);
}
}
LinkedList<DownloadInfo> list = getInfoListForLabel(info.label);
if (list == null) {
Log.e(TAG, "Can't find download info list with label: " + label);
return;
}
list.add(info);
// Add to all download list and map
mAllInfoMap.put(galleryInfo.gid, info);
// Add to wait list
mWaitList.add(info);
// Save to
EhDB.addDownloadInfo(info);
// Notify
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onAdd(info);
mDownloadInfoListener.onAdd(info, list, list.size() - 1);
}
// Make sure download is running
ensureDownload();
@@ -271,8 +271,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
DownloadInfo info = stopDownloadInternal(gid);
if (info != null) {
// Update listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
// Ensure download
ensureDownload();
@@ -283,8 +284,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
DownloadInfo info = stopCurrentDownloadInternal();
if (info != null) {
// Update listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
// Ensure download
ensureDownload();
@@ -309,6 +311,34 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
}
}
void deleteDownload(int gid) {
stopDownloadInternal(gid);
DownloadInfo info = mAllInfoMap.get(gid);
if (info != null) {
// Remove from DB
EhDB.removeDownloadInfo(info.galleryInfo.gid);
// Remove all list and map
mAllInfoMap.remove(info.galleryInfo.gid);
// Remove label list
LinkedList<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null) {
int index = list.indexOf(info);
if (index >= 0) {
list.remove(info);
// Update listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onRemove(info, list, index);
}
}
}
// Ensure download
ensureDownload();
}
}
// Update in DB
// Update listener
// No ensureDownload
@@ -504,8 +534,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
Log.e(TAG, "Current task is null, but it should not be");
} else {
info.total = mPages;
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
}
break;
@@ -530,8 +561,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
if (mDownloadListener != null) {
mDownloadListener.onGetPage(info);
}
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
}
break;
@@ -543,8 +575,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
} else {
info.download = mDownloaded;
info.total = mTotal;
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
}
break;
@@ -582,8 +615,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
if (mDownloadListener != null) {
mDownloadListener.onFinish(info);
}
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
// Start next download
ensureDownload();
@@ -629,8 +663,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
if (mDownloadListener != null) {
mDownloadListener.onDownload(info);
}
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info);
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
}
}
@@ -642,13 +677,13 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
public interface DownloadInfoListener {
void onAdd(DownloadInfo info);
void onAdd(DownloadInfo info, List<DownloadInfo> list, int position);
void onUpdate(DownloadInfo info);
void onUpdate(DownloadInfo info, List<DownloadInfo> list);
void onUpdateAll();
void onRemove(DownloadInfo info);
void onRemove(DownloadInfo info, List<DownloadInfo> list, int position);
}
public interface DownloadListener {