This commit is contained in:
chenjuntao
2024-05-24 15:17:48 +08:00
parent d53782b8de
commit fffd3ef789
3 changed files with 20 additions and 4 deletions

View File

@ -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)

View File

@ -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<String, Int> 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<ArrayList<String>>() ?: 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)
}
}