diff --git a/app/src/main/java/com/gh/download/DownloadDataHelper.kt b/app/src/main/java/com/gh/download/DownloadDataHelper.kt index 9d87a75453..ae6f625232 100644 --- a/app/src/main/java/com/gh/download/DownloadDataHelper.kt +++ b/app/src/main/java/com/gh/download/DownloadDataHelper.kt @@ -10,8 +10,8 @@ import com.gh.gamecenter.common.exposure.meta.MetaUtil import com.gh.gamecenter.common.exposure.meta.MetaUtil.getMeta import com.gh.gamecenter.common.loghub.LoghubUtils import com.gh.gamecenter.common.utils.* -import com.gh.gamecenter.core.utils.SentryHelper import com.gh.ndownload.NDataChanger +import com.gh.ndownload.NDownloadBridge import com.halo.assistant.HaloApp import com.lightgame.download.DownloadConfig import com.lightgame.download.DownloadEntity @@ -124,6 +124,7 @@ object DownloadDataHelper { val payloadObject = JSONObject() payloadObject.put("host", downloadEntity.meta[DownloadEntity.DOWNLOAD_HOST_KEY] ?: "unknown") payloadObject.put("path", downloadEntity.meta[DownloadEntity.DOWNLOAD_PATH_KEY] ?: "unknown") + payloadObject.put("redirected_host_list", downloadEntity.meta[NDownloadBridge.REDIRECTED_HOST_LIST] ?: "unknown") payloadObject.put("game_id", downloadEntity.gameId) payloadObject.put("gameName", downloadEntity.name) payloadObject.put("platform", downloadEntity.platform) @@ -212,6 +213,7 @@ object DownloadDataHelper { payloadObject.put("host", downloadEntity.meta[DownloadEntity.DOWNLOAD_HOST_KEY] ?: "unknown") payloadObject.put("path", downloadEntity.meta[DownloadEntity.DOWNLOAD_PATH_KEY] ?: "unknown") + payloadObject.put("redirected_host_list", downloadEntity.meta[NDownloadBridge.REDIRECTED_HOST_LIST] ?: "unknown") payloadObject.put("game_id", downloadEntity.gameId) payloadObject.put("gameName", downloadEntity.name) payloadObject.put("platform", downloadEntity.platform) @@ -251,6 +253,7 @@ object DownloadDataHelper { payloadObject.put("host", downloadEntity.meta[DownloadEntity.DOWNLOAD_HOST_KEY] ?: "unknown") payloadObject.put("path", downloadEntity.meta[DownloadEntity.DOWNLOAD_PATH_KEY] ?: "unknown") + payloadObject.put("redirected_host_list", downloadEntity.meta[NDownloadBridge.REDIRECTED_HOST_LIST] ?: "unknown") payloadObject.put("game_id", downloadEntity.gameId) payloadObject.put("gameName", downloadEntity.name) payloadObject.put("platform", downloadEntity.platform) @@ -315,6 +318,7 @@ object DownloadDataHelper { payloadObject.put("host", downloadEntity.meta[DownloadEntity.DOWNLOAD_HOST_KEY] ?: "unknown") payloadObject.put("path", downloadEntity.meta[DownloadEntity.DOWNLOAD_PATH_KEY] ?: "unknown") + payloadObject.put("redirected_host_list", downloadEntity.meta[NDownloadBridge.REDIRECTED_HOST_LIST] ?: "unknown") payloadObject.put("game_id", downloadEntity.gameId) payloadObject.put("gameName", downloadEntity.name) payloadObject.put("platform", downloadEntity.platform) @@ -357,6 +361,7 @@ object DownloadDataHelper { sheet = JSONObject() sheet.put("host", downloadEntity.meta[DownloadEntity.DOWNLOAD_HOST_KEY] ?: "unknown") sheet.put("path", downloadEntity.meta[DownloadEntity.DOWNLOAD_PATH_KEY] ?: "unknown") + sheet.put("redirected_host_list", downloadEntity.meta[NDownloadBridge.REDIRECTED_HOST_LIST] ?: "unknown") sheet.put("game_id", downloadEntity.gameId) sheet.put("platform", downloadEntity.platform) sheet.put("package", downloadEntity.packageName) @@ -376,6 +381,7 @@ object DownloadDataHelper { "path", downloadEntity.meta[DownloadEntity.DOWNLOAD_PATH_KEY] ?: "unknown" ) // 初始化记录的 path 为空 + sheet.put("redirected_host_list", downloadEntity.meta[NDownloadBridge.REDIRECTED_HOST_LIST] ?: "unknown") sheet.put("total_size", downloadEntity.size / 1024 / 1024) // 初始化记录的 total_size 有可能为0 sheet.put("progress_size", downloadEntity.progress / 1024 - progressSize) sheet.put("current_progress_size", downloadEntity.progress / 1024) diff --git a/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt b/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt index 3f728d9f9a..d50f6aad22 100644 --- a/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt +++ b/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt @@ -43,6 +43,8 @@ object NDownloadBridge : InnerDownloadListener, IErrorRetryHandler { private const val DEFAULT_DOWNLOAD_THREAD_SIZE = 2 private const val NO_NETWORK_MAX_RETRY_COUNT = 5 + const val REDIRECTED_HOST_LIST = "redirected_host_list" // 重定向后的 url 数组 + private var mRetryTimer: Timer? = null // 用于错误重试的 timer private val mRetryCountMap: ConcurrentHashMap by lazy { ConcurrentHashMap() } @@ -310,7 +312,6 @@ object NDownloadBridge : InnerDownloadListener, IErrorRetryHandler { if (!TextUtils.isEmpty(downloadEntity.eTag)) { val eTag: String = getRealETag(connection?.getHeaderField("Halo-ETag") ?: "") downloadEntity.haloEtag = eTag - DownloadDao.getInstance(HaloApp.getInstance()).update(downloadEntity, false) } // 记录重定向时获取到的最终格式,因为缓存问题,原格式与实际下载的格式有区别 @@ -319,9 +320,18 @@ object NDownloadBridge : InnerDownloadListener, IErrorRetryHandler { Utils.log(TAG, "获取到新的文件格式, $realFormat") downloadEntity.addMetaExtra(REAL_FORMAT, realFormat) - DownloadDao.getInstance(HaloApp.getInstance()).update(downloadEntity, false) } + // 记录重定向过程中所有的 host + val redirectedHostArray = downloadEntity.getMetaExtra(REDIRECTED_HOST_LIST).toObject>() ?: arrayListOf() + connection?.getHeaderField("Location")?.let { + val url = URL(it) + redirectedHostArray.add(url.host) + } + downloadEntity.addMetaExtra(REDIRECTED_HOST_LIST, redirectedHostArray.toJson()) + + DownloadDao.getInstance(HaloApp.getInstance()).update(downloadEntity, false) + NDataChanger.notifyDataChanged(downloadEntity) } } diff --git a/ndownload b/ndownload index b61908863c..bf5c887036 160000 --- a/ndownload +++ b/ndownload @@ -1 +1 @@ -Subproject commit b61908863c4ababc4712ae2d72a5f217037fb945 +Subproject commit bf5c88703646b39467a1c38770e2b777fe03d40b