Cleanup DownloadManager
This commit is contained in:
1 parent
a148fd6ec3
commit
4593714298
1 file changed
+24
-124
@@ -71,7 +71,7 @@ object DownloadManager : OnSpiderListener {
|
||||
// Store download info wait to start
|
||||
private val mWaitList = LinkedList<DownloadInfo>()
|
||||
private val mSpeedReminder = SpeedReminder()
|
||||
private val mDownloadInfoListeners = mutableListOf<DownloadInfoListener>()
|
||||
private var mDownloadInfoListener: DownloadInfoListener? = null
|
||||
private val mNotifyTaskPool = ConcurrentPool<NotifyTask?>(5)
|
||||
private var mDownloadListener: DownloadListener? = null
|
||||
private var mCurrentTask: DownloadInfo? = null
|
||||
@@ -125,14 +125,6 @@ object DownloadManager : OnSpiderListener {
|
||||
return info?.state ?: DownloadInfo.STATE_INVALID
|
||||
}
|
||||
|
||||
fun addDownloadInfoListener(downloadInfoListener: DownloadInfoListener) {
|
||||
mDownloadInfoListeners.add(downloadInfoListener)
|
||||
}
|
||||
|
||||
fun removeDownloadInfoListener(downloadInfoListener: DownloadInfoListener) {
|
||||
mDownloadInfoListeners.remove(downloadInfoListener)
|
||||
}
|
||||
|
||||
fun setDownloadListener(listener: DownloadListener?) {
|
||||
mDownloadListener = listener
|
||||
}
|
||||
@@ -166,12 +158,7 @@ object DownloadManager : OnSpiderListener {
|
||||
mDownloadListener!!.onStart(info)
|
||||
}
|
||||
// Notify state update
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,12 +179,7 @@ object DownloadManager : OnSpiderListener {
|
||||
// Update in DB
|
||||
EhDB.putDownloadInfo(info)
|
||||
// Notify state update
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
// Make sure download is running
|
||||
ensureDownload()
|
||||
}
|
||||
@@ -227,9 +209,7 @@ object DownloadManager : OnSpiderListener {
|
||||
EhDB.putDownloadInfo(info)
|
||||
|
||||
// Notify
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onAdd(info, list, list.size - 1)
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
// Make sure download is running
|
||||
ensureDownload()
|
||||
|
||||
@@ -259,9 +239,7 @@ object DownloadManager : OnSpiderListener {
|
||||
}
|
||||
if (update) {
|
||||
// Notify Listener
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdateAll()
|
||||
}
|
||||
mDownloadInfoListener?.onUpdateAll()
|
||||
// Ensure download
|
||||
ensureDownload()
|
||||
}
|
||||
@@ -271,29 +249,17 @@ object DownloadManager : OnSpiderListener {
|
||||
|
||||
private val _stateFlow = callbackFlow {
|
||||
val listener = object : DownloadInfoListener {
|
||||
override fun onAdd(info: DownloadInfo, list: List<DownloadInfo>, position: Int) {
|
||||
trySend(info.gid)
|
||||
}
|
||||
|
||||
override fun onUpdate(info: DownloadInfo, list: List<DownloadInfo>) {
|
||||
override fun onUpdate(info: DownloadInfo) {
|
||||
trySend(info.gid)
|
||||
}
|
||||
|
||||
override fun onUpdateAll() {
|
||||
trySend(0)
|
||||
}
|
||||
|
||||
override fun onReload() {
|
||||
trySend(0)
|
||||
}
|
||||
|
||||
override fun onRemove(info: DownloadInfo, list: List<DownloadInfo>, position: Int) {
|
||||
trySend(info.gid)
|
||||
}
|
||||
}
|
||||
addDownloadInfoListener(listener)
|
||||
mDownloadInfoListener = listener
|
||||
awaitClose {
|
||||
removeDownloadInfoListener(listener)
|
||||
mDownloadInfoListener = null
|
||||
}
|
||||
}.shareIn(callbackFlowScope, SharingStarted.Eagerly)
|
||||
|
||||
@@ -317,9 +283,7 @@ object DownloadManager : OnSpiderListener {
|
||||
}
|
||||
if (update) {
|
||||
// Notify Listener
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdateAll()
|
||||
}
|
||||
mDownloadInfoListener?.onUpdateAll()
|
||||
// Ensure download
|
||||
ensureDownload()
|
||||
}
|
||||
@@ -355,9 +319,7 @@ object DownloadManager : OnSpiderListener {
|
||||
|
||||
// Notify
|
||||
if (notify) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onReload()
|
||||
}
|
||||
mDownloadInfoListener?.onUpdateAll()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -388,9 +350,7 @@ object DownloadManager : OnSpiderListener {
|
||||
|
||||
// Notify
|
||||
withUIContext {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onAdd(info, list, list.size - 1)
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,12 +358,7 @@ object DownloadManager : OnSpiderListener {
|
||||
val info = stopDownloadInternal(gid)
|
||||
if (info != null) {
|
||||
// Update listener
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
// Ensure download
|
||||
ensureDownload()
|
||||
}
|
||||
@@ -413,12 +368,7 @@ object DownloadManager : OnSpiderListener {
|
||||
val info = stopCurrentDownloadInternal()
|
||||
if (info != null) {
|
||||
// Update listener
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
// Ensure download
|
||||
ensureDownload()
|
||||
}
|
||||
@@ -428,9 +378,7 @@ object DownloadManager : OnSpiderListener {
|
||||
stopRangeDownloadInternal(gidList)
|
||||
|
||||
// Update listener
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdateAll()
|
||||
}
|
||||
mDownloadInfoListener?.onUpdateAll()
|
||||
|
||||
// Ensure download
|
||||
ensureDownload()
|
||||
@@ -449,9 +397,7 @@ object DownloadManager : OnSpiderListener {
|
||||
stopCurrentDownloadInternal()
|
||||
|
||||
// Notify mDownloadInfoListener
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdateAll()
|
||||
}
|
||||
mDownloadInfoListener?.onUpdateAll()
|
||||
}
|
||||
|
||||
suspend fun deleteDownload(gid: Long, deleteFiles: Boolean = false) {
|
||||
@@ -472,9 +418,7 @@ object DownloadManager : OnSpiderListener {
|
||||
if (index >= 0) {
|
||||
list.remove(info)
|
||||
// Update listener
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onRemove(info, list, index)
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -497,9 +441,7 @@ object DownloadManager : OnSpiderListener {
|
||||
allInfoList.removeAll(list.toSet())
|
||||
|
||||
// Update listener
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onReload()
|
||||
}
|
||||
mDownloadInfoListener?.onUpdateAll()
|
||||
|
||||
// Ensure download
|
||||
ensureDownload()
|
||||
@@ -659,9 +601,7 @@ object DownloadManager : OnSpiderListener {
|
||||
// Save to DB
|
||||
EhDB.putDownloadInfo(info)
|
||||
}
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onReload()
|
||||
}
|
||||
mDownloadInfoListener?.onUpdateAll()
|
||||
}
|
||||
|
||||
suspend fun addLabel(label: String?) {
|
||||
@@ -811,30 +751,15 @@ object DownloadManager : OnSpiderListener {
|
||||
}
|
||||
|
||||
interface DownloadInfoListener {
|
||||
/**
|
||||
* Add the special info to the special position
|
||||
*/
|
||||
fun onAdd(info: DownloadInfo, list: List<DownloadInfo>, position: Int)
|
||||
|
||||
/**
|
||||
* The special info is changed
|
||||
*/
|
||||
fun onUpdate(info: DownloadInfo, list: List<DownloadInfo>)
|
||||
fun onUpdate(info: DownloadInfo)
|
||||
|
||||
/**
|
||||
* Maybe all data is changed, but size is the same
|
||||
*/
|
||||
fun onUpdateAll()
|
||||
|
||||
/**
|
||||
* Maybe all data is changed, maybe list is changed
|
||||
*/
|
||||
fun onReload()
|
||||
|
||||
/**
|
||||
* Remove the special info from the special position
|
||||
*/
|
||||
fun onRemove(info: DownloadInfo, list: List<DownloadInfo>, position: Int)
|
||||
}
|
||||
|
||||
interface DownloadListener {
|
||||
@@ -941,12 +866,7 @@ object DownloadManager : OnSpiderListener {
|
||||
Log.e(TAG, "Current task is null, but it should not be")
|
||||
} else {
|
||||
info.total = mPages
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -975,12 +895,7 @@ object DownloadManager : OnSpiderListener {
|
||||
if (mDownloadListener != null) {
|
||||
mDownloadListener!!.onGetPage(info)
|
||||
}
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -993,12 +908,7 @@ object DownloadManager : OnSpiderListener {
|
||||
info.finished = mFinished
|
||||
info.downloaded = mDownloaded
|
||||
info.total = mTotal
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1037,12 +947,7 @@ object DownloadManager : OnSpiderListener {
|
||||
if (mDownloadListener != null) {
|
||||
mDownloadListener!!.onFinish(info)
|
||||
}
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
// Start next download
|
||||
ensureDownload()
|
||||
}
|
||||
@@ -1128,12 +1033,7 @@ object DownloadManager : OnSpiderListener {
|
||||
if (mDownloadListener != null) {
|
||||
mDownloadListener!!.onDownload(info)
|
||||
}
|
||||
val list: List<DownloadInfo>? = getInfoListForLabel(info.label)
|
||||
if (list != null) {
|
||||
for (l in mDownloadInfoListeners) {
|
||||
l.onUpdate(info, list)
|
||||
}
|
||||
}
|
||||
mDownloadInfoListener?.onUpdate(info)
|
||||
}
|
||||
mBytesRead = 0
|
||||
if (!mStop) {
|
||||
|
||||
Reference in new issue
Block a user