From a182ecaa07fdf06f646827af0c3ee35941259564 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Tue, 20 Aug 2024 12:06:34 +0800 Subject: [PATCH] =?UTF-8?q?[1.0.0]=20[=E4=B8=8B=E8=BD=BD=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=96=87=E4=BB=B6]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/download/DownloadManager.kt | 75 +++++++++++++++---- .../module/wigets/media/MediaLoopPlayView.kt | 11 +-- .../wigets/media/MediaPlayerFragment.kt | 4 +- 3 files changed, 66 insertions(+), 24 deletions(-) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/DownloadManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/DownloadManager.kt index 1de9699178..3fae413463 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/DownloadManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/DownloadManager.kt @@ -3,24 +3,17 @@ package com.mogo.och.common.module.manager.download import android.annotation.SuppressLint import android.content.Context import android.os.Environment +import android.text.TextUtils +import android.util.Log import com.mogo.commons.AbsMogoApplication -import com.mogo.eagle.core.function.call.chat.CallerChatManager import com.mogo.eagle.core.utilcode.download.DownloadUtils import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener -import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope -import com.mogo.eagle.core.utilcode.util.StringUtils -import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.EncryptUtils import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.manager.loop.LoopInfo import com.mogo.och.common.module.utils.FileUtils -import com.mogo.och.common.module.wigets.media.MediaFileCacheManager.getCacheFileName import io.reactivex.schedulers.Schedulers -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.asCoroutineDispatcher -import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.launch import java.io.File @SuppressLint("StaticFieldLeak") @@ -50,11 +43,47 @@ object DownloadManager { return FileUtils.getCacheDirectory(context, "") + relativePath } + /** + * 本地是否已经存在下载完成的文件 + */ + private fun isLocalCacheFileExists(mediaUrl: String): Boolean { + val localVideoCacheFilePath = + getCacheFileFullPathByUrl(mediaUrl) + Log.e(TAG, "文件是否存在,mediaUrl=$mediaUrl------本地文件:${localVideoCacheFilePath}") + return com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(localVideoCacheFilePath) + } + + /** + * 获取文件缓存的缓存path, 文件名以base64编码避免 中文命名,重复文件名的影响 + */ + private fun getCacheFileFullPathByUrl(mediaUrl: String): String { + return getFileCacheDir() +File.separator +getCacheFileName(mediaUrl) + } + + /** + * 本地缓存文件的文件名,md5编码避免文件名重复或者特殊字符编码问题 + */ + private fun getCacheFileName(mediaUrl: String): String { + val fileSuffix = FileUtils.getExtension(mediaUrl) + if (TextUtils.isEmpty(fileSuffix)) { + Log.e(TAG, "getCacheFileName 根据url获取文件后缀不合法,mediaUrl=$mediaUrl") + return "" + } + return EncryptUtils.encryptMD5ToString(mediaUrl) + FileUtils.EXTENSION_SEPARATOR + fileSuffix + } + + fun clearLocalFile(localVideoPath:String) { + if (com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(localVideoPath)) { + com.mogo.eagle.core.utilcode.util.FileUtils.delete(localVideoPath) + } + OchChainLogManager.writechainLogDownload("删除本地文件","localVideoPath:${localVideoPath}") + } + fun downloadVideoFile(mediaUrl: String, listener: IDownloadListener?) { val downloadUrl = mediaUrl val downloadDir = getFileCacheDir() - val downloadFileName = getCacheFileName(mediaUrl) + val downloadFileName = getCacheFileName(mediaUrl)+"_temp" waitDownLoadList.add(OchDownLoad(downloadUrl,downloadDir,downloadFileName,listener)) @@ -69,7 +98,19 @@ object DownloadManager { return } val first = waitDownLoadList.first() - OchChainLogManager.writechainLogDownload("准备下周","信息:${first}") + // 临时文件存在 需要删除重新下载 + if (com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(first.downloadDir+File.separator+first.downloadFileName)) { + OchChainLogManager.writechainLogDownload("删除临时文件","文件名称:${first.downloadDir+File.separator+first.downloadFileName}") + clearLocalFile(first.downloadDir+File.separator+first.downloadFileName) + } + // 改名后文件存在 不需要下载 + if(isLocalCacheFileExists(first.downloadUrl)){ + waitDownLoadList.removeFirst() + OchChainLogManager.writechainLogDownload("取消下载文件已存在","信息:${first}") + go2Download() + return + } + OchChainLogManager.writechainLogDownload("准备下载","信息:${first}") DownloadUtils.downLoad( context, first.downloadUrl, @@ -87,15 +128,21 @@ object DownloadManager { } override fun onFinished(url: String, path: String) { - first.listener?.onFinished(url,path) - OchChainLogManager.writechainLogDownload("下载结束","url:${url}---path:${path}") + OchChainLogManager.writechainLogDownload("下载成功","url:${url}---path:${path}") waitDownLoadList.removeFirst() + if(path.endsWith("_temp")){ + val tempFile = File(path) + val newName = tempFile.name.replace("_temp","") + com.mogo.eagle.core.utilcode.util.FileUtils.rename(tempFile,newName) + first.listener?.onFinished(url,path.replace("_temp","")) + } go2Download() } override fun onError(url: String, error: String?) { first.listener?.onError(url,error) OchChainLogManager.writechainLogDownload("下载错误","url:${url}---error:${error}") + clearLocalFile(first.downloadDir+File.separator+first.downloadFileName) if(first.downLoadCount>=5){ OchChainLogManager.writechainLogDownload("下载错误5次可终点关注","url:${url}---error:${error}") waitDownLoadList.removeFirst() diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaLoopPlayView.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaLoopPlayView.kt index cc0c3292ac..45f9ff2453 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaLoopPlayView.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaLoopPlayView.kt @@ -237,15 +237,8 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter mDataList.forEachIndexed { index, mediaItem -> // 广告中有视频播放器 if(mediaItem.fileType==MediaItem.MEDIA_TYPE_VIDEO){ - if (currentPosition == mItemViewList.size - 1) { - //已经到最后一个, 从头开始 - mViewPager.post { - mViewPager.setCurrentItem(0, true) - } - } else { - mViewPager.post { - mViewPager.setCurrentItem(mViewPager.currentItem + 1, true) - } + mViewPager.post { + mViewPager.setCurrentItem(index, true) } return } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt index 20d2e9a840..e74f347705 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt @@ -72,7 +72,9 @@ class MediaPlayerFragment : fun setHightPriorityMediaItem(list: MutableList){ context?.let {context-> val cacheList = list.filter { - DownloadManager.downloadVideoFile(it.fileUrl,null) + if(!MediaFileCacheManager.isLocalCacheFileExists(context,it.fileUrl)){ + DownloadManager.downloadVideoFile(it.fileUrl,null) + } MediaFileCacheManager.isLocalCacheFileExists(context,it.fileUrl) } ThreadUtils.runOnUiThread {