diff --git a/app/src/main/java/com/gh/vspace/VHelper.kt b/app/src/main/java/com/gh/vspace/VHelper.kt index 5e04d6a7bf..d16a048805 100644 --- a/app/src/main/java/com/gh/vspace/VHelper.kt +++ b/app/src/main/java/com/gh/vspace/VHelper.kt @@ -559,7 +559,12 @@ object VHelper { /** * 在执行 callback 前先检查组件是否已安装,是否可下载 */ - fun validateVSpaceBeforeAction(context: Context, packageName: String?, gameEntity: GameEntity?, callback: () -> Unit) { + fun validateVSpaceBeforeAction( + context: Context, + packageName: String?, + gameEntity: GameEntity?, + callback: () -> Unit + ) { if (isLegacyInstalled(packageName)) { oldCwValidateVSpaceBeforeAction(context, gameEntity, callback) } else { @@ -1194,7 +1199,7 @@ object VHelper { logLaunchButtonClicked(packageName, gameId, gameName, gameType, location) } - validateVSpaceBeforeAction(context,packageName, GameEntity().apply { + validateVSpaceBeforeAction(context, packageName, GameEntity().apply { id = gameId name = gameName downloadStatus = Constants.V_GAME @@ -1981,63 +1986,43 @@ object VHelper { fun preparePluginUpdate() { Config.vNewSettingSubject.debounce(2, TimeUnit.SECONDS).doOnNext { it?.vaPlugin?.let { vaPlugin -> - if (!vaPlugin.id.isNullOrEmpty() && !vaPlugin.url64.isNullOrEmpty()) { - val installedPluginVersion = HostUtils.getPluginVersion() - // 因为服务端下发的插件都是release版本的,所以,开发者要调试插件更新,暂时先push文件到手机更新吧 + if (!vaPlugin.id.isNullOrEmpty()) { Utils.log(LOG_TAG, "开发者需要插件更新功能,请push文件到手机,或者【修改插件打包的配置为debug版本,然后上传,推送】") - if(com.gh.gamecenter.BuildConfig.DEBUG) { - val file = File("/data/local/tmp/gh-plugins/artifacts.zip") - if(file.exists()) { - Utils.log(LOG_TAG, "有本地更新文件") - PluginHelper.getInstance().updatePlugin(file) - } - } else { - if (installedPluginVersion?.isNotEmpty() == true - && !Version(vaPlugin.versionName).isEqual(installedPluginVersion) - ) { - - val pluginFileName = "${vaPlugin.id}.zip" - val currentPluginFile = File(HaloApp.getInstance().cacheDir, pluginFileName) - if (currentPluginFile.exists() && PluginFileUtils.isZipFile(currentPluginFile)) { - // 已经下载好了 - PluginHelper.getInstance().updatePlugin(currentPluginFile) - } else { - val currentDownloadEntity = DownloadMessageHandler.findEntity(vaPlugin.id) - if (currentDownloadEntity != null) { - SimpleDownloadManager.cancel(vaPlugin.id) + if (!vaPlugin.url64.isNullOrEmpty()) { + val installedPluginVersion = HostUtils.getPluginVersion() + // 因为服务端下发的插件都是release版本的,所以,开发者要调试插件更新,暂时先push文件到手机更新吧 + if (com.gh.gamecenter.BuildConfig.DEBUG) { + val file = File("/data/local/tmp/gh-plugins/artifacts.zip") + if (file.exists()) { + Utils.log(LOG_TAG, "有本地更新文件: 64位插件") + PluginHelper.getInstance().updatePlugin(file) + } + } else { + if (installedPluginVersion?.isNotEmpty() == true + && !Version(vaPlugin.versionName).isEqual(installedPluginVersion) + ) { + downloadPlugin(id = "${vaPlugin.id}64", url = vaPlugin.url64) { + PluginHelper.getInstance().updatePlugin(it) } - SimpleDownloadManager.download( - DownloadConfigBuilder() - .setUniqueId(vaPlugin.id) - .setFileName(pluginFileName) - .setUrl(vaPlugin.url64) - .setPathToStore(HaloApp.getInstance().cacheDir.absolutePath + File.separator) - .setHttpClient(DefaultHttpClient()) - .setDownloadThreadSize(2) - .setDownloadListener(DownloadMessageHandler) - .setDownloadExecutor(AppExecutor.ioExecutor) - .build() - ) - DownloadMessageHandler.registerListener(vaPlugin.id, object : DownloadListener { - override fun onError(error: DownloadError) { - } + } + } + } - override fun onProgress(progress: Float) { - } - - override fun onSizeReceived(fileSize: Long) { - } - - override fun onStatusChanged(status: DownloadStatus) { - if (status == DownloadStatus.COMPLETED) { - PluginHelper.getInstance().updatePlugin(currentPluginFile) - DownloadMessageHandler.unregisterListener(vaPlugin.id, this) - } - } - - override fun onSpeedChanged(speed: Float) { - } - }) + if (!vaPlugin.url32.isNullOrEmpty()) { + if (com.gh.gamecenter.BuildConfig.DEBUG) { + val file = File("/data/local/tmp/gh-plugins/artifacts32.zip") + if (file.exists()) { + Utils.log(LOG_TAG, "有本地更新文件: 32位插件") + VaApp.get().appManager.updatePlugin(file.absolutePath, "${vaPlugin.id}32.zip") + } + } else { + val installedPluginVersion = VaApp.get().appManager.extPluginVersion + if (installedPluginVersion?.isNotEmpty() == true + && !Version(vaPlugin.versionName).isEqual(installedPluginVersion) + ) { + downloadPlugin(id = "${vaPlugin.id}32", url = vaPlugin.url32) { + VaApp.get().appManager.updatePlugin(it.absolutePath, "${vaPlugin.id}32.zip") + } } } } @@ -2045,4 +2030,51 @@ object VHelper { } }.subscribeOn(Schedulers.io()).subscribe({}, {}) } + + private fun downloadPlugin(id: String, url: String, fn: (File) -> Unit) { + val pluginFileName = "${id}.zip" + val currentPluginFile = File(HaloApp.getInstance().cacheDir, pluginFileName) + if (currentPluginFile.exists() && PluginFileUtils.isZipFile(currentPluginFile)) { + // 已经下载好了 + fn(currentPluginFile) + } else { + val currentDownloadEntity = DownloadMessageHandler.findEntity(id) + if (currentDownloadEntity != null) { + SimpleDownloadManager.cancel(id) + } + SimpleDownloadManager.download( + DownloadConfigBuilder() + .setUniqueId(id) + .setFileName(pluginFileName) + .setUrl(url) + .setPathToStore(HaloApp.getInstance().cacheDir.absolutePath + File.separator) + .setHttpClient(DefaultHttpClient()) + .setDownloadThreadSize(2) + .setDownloadListener(DownloadMessageHandler) + .setDownloadExecutor(AppExecutor.ioExecutor) + .build() + ) + DownloadMessageHandler.registerListener(id, object : DownloadListener { + override fun onError(error: DownloadError) { + } + + override fun onProgress(progress: Float) { + } + + override fun onSizeReceived(fileSize: Long) { + } + + override fun onStatusChanged(status: DownloadStatus) { + if (status == DownloadStatus.COMPLETED) { + fn(currentPluginFile) + DownloadMessageHandler.unregisterListener(id, this) + } + } + + override fun onSpeedChanged(speed: Float) { + } + }) + } + } + } \ No newline at end of file