import Main from "../Main"; import AdM from "../manager/AdM"; import GameM from "../manager/GameM"; import UiM from "../manager/UiM"; import GuideInstallApkNode from "../ui/GuideInstallApkNode"; import LogUtil from "../utils/LogUtil"; import { HTTP_TYPE } from "./CommonData"; export default class DownloadApkData { private static instance: DownloadApkData = null static get Instance(): DownloadApkData { if (!DownloadApkData.instance) { DownloadApkData.instance = new DownloadApkData() } return DownloadApkData.instance } public installRewards = 0 public startRewards = 0 public curGuideInstallItem = null //本地下载文件路径列表 public downloadApkFiles = [] public installPackageName = '' public openPackageName = '' //引导下载开关 public installSwitch = true public installRatio = "0.8" public openRatio = "0.2" /** 存取包的状态 * 格式 {packageName:"", * state:0} * state 状态 1 安装 2 领奖 3 打开 4 领奖 5 结束 */ public packageInfoArr = [] /** 显示列表数据 */ public listData = [] /** 获取服务器数据 * 格式 {packageName:"", * appName:"", * icon:"", * path:"", * state:0} */ getPackage() { LogUtil.logV('DownloadApkData getPackage ', '') let data = {} GameM.httpM.sendDatas(HTTP_TYPE.getPackage, data, DownloadApkData.Instance.getPackageBack.bind(DownloadApkData.Instance)) } getPackageBack(data) { LogUtil.logV('DownloadApkData getPackageBack ', data) this.installRewards = data.userTreasureGourdInfo.installRewards this.startRewards = data.userTreasureGourdInfo.startRewards this.packageInfoArr = data.userTreasureGourdInfo.treasureGourds if (UiM.Instance.guideInstallApkNode) { UiM.Instance.guideInstallApkNode.getComponent(GuideInstallApkNode).initView() } else { let data = DownloadApkData.Instance.checkApkData() UiM.Instance.hallNode.getComponent(Main).setGuideInstallVisible(data.length > 0) } } updatePackage(data) { // let data = { // "packageName": packageName, // "state": state // } GameM.httpM.sendDatas(HTTP_TYPE.updatePackage, data, DownloadApkData.Instance.updatePackageBack.bind(DownloadApkData.Instance)) LogUtil.logV("DownloadApkData updatePackage ", data) } updatePackageBack(data) { LogUtil.logV('DownloadApkData updatePackageBack ', data) } /** 更新奖励次数 * @param rewardsType 1 安装 2 启动 */ updateRewards(rewardsType) { LogUtil.logV('DownloadApkData updateRewards ', rewardsType) let data = { "rewardsType": rewardsType } GameM.httpM.sendDatas(HTTP_TYPE.updateRewards, data, DownloadApkData.Instance.updateRewardsBack.bind(DownloadApkData.Instance)) } updateRewardsBack(data) { LogUtil.logV('DownloadApkData updateRewardsBack ', data) this.installRewards = data.userTreasureGourdInfo.installRewards this.startRewards = data.userTreasureGourdInfo.startRewards if (this.curGuideInstallItem) { LogUtil.logV('DownloadApkData updateRewardsBack ', '11111111 ') this.curGuideInstallItem.freshGetAward() this.curGuideInstallItem = null } if (UiM.Instance.guideInstallApkNode) { LogUtil.logV('DownloadApkData updateRewardsBack ', '222222222 ') UiM.Instance.guideInstallApkNode.getComponent(GuideInstallApkNode).getGoldBack() } } setInDownloadApkFiles(filesPath: string) { LogUtil.logV("setInDownloadApkFiles", "one") let arr = filesPath.split('#') this.downloadApkFiles = [] for (var i = 0; i < arr.length; i++) { let filesPath = arr[i] if (filesPath != "") { if (this.downloadApkFiles.indexOf(filesPath) >= 0) { } else { LogUtil.logV("setInDownloadApkFiles", "two") this.downloadApkFiles.push(filesPath) } } } LogUtil.logV("setInDownloadApkFiles filesPathArr ", this.downloadApkFiles) DownloadApkData.Instance.getPackage() } /** 对比服务器包名和本地包数据 显示在列表中 * 以本地包为最大,如果本地没有安装包默认不给奖励了 */ checkApkData() { let len = this.downloadApkFiles.length this.listData = [] let installNum = 0 let tempPackNameArr = [] for (var i = 0; i < len; i++) { let has = false let path = this.downloadApkFiles[i] let str = AdM.getApkFileInfo(path) if (str != null && str != undefined && str != "") { let jsonObj = JSON.parse(str) let packageName = jsonObj["packageName"] if (tempPackNameArr.indexOf(packageName) == -1) { tempPackNameArr.push(packageName) let len1 = this.packageInfoArr.length for (var m = 0; m < len1; m++) { if (this.packageInfoArr[m].packageName == packageName) { if (this.packageInfoArr[m].state < 5) { let passTime = (GameM.commonData.gameTime - this.packageInfoArr[m].timeSpan) * 0.01 / (3600 * 24 * 6) if (passTime < 6) { if (this.packageInfoArr[m].state <= 2) { if (installNum < this.installRewards) { this.listData.push(this.packageInfoArr[m]) installNum++ LogUtil.logV('DownloadApkData putAAAA ', jsonObj) } } else { this.listData.push(this.packageInfoArr[m]) LogUtil.logV('DownloadApkData putBBBB ', jsonObj) } } } has = true break } } if (!has) { jsonObj['state'] = 1 jsonObj['timeSpan'] = GameM.commonData.gameTime this.packageInfoArr.push(jsonObj) if (installNum < this.installRewards) { this.listData.push(jsonObj) installNum++ } LogUtil.logV('DownloadApkData putCCCC ', jsonObj) DownloadApkData.Instance.updatePackage(jsonObj) } } } } //检查本地包已卸载但安装完成的包 let len2 = this.packageInfoArr.length for (var m = 0; m < len2; m++) { let has = false let packInfo = this.packageInfoArr[m] if (packInfo.state >= 2 && packInfo.state < 5) { let passTime = (GameM.commonData.gameTime - this.packageInfoArr[m].timeSpan) * 0.01 / (3600 * 24 * 6) if (passTime < 6) { for (var n = 0; n < this.listData.length; n++) { if (packInfo.packageName == this.listData[n].packageName) { has = true break } } if (!has) { if (installNum < this.installRewards) { this.listData.push(packInfo) installNum++ } } } } } LogUtil.logV('DownloadApkData this.listData ', this.listData) return this.listData } /** 返回刷新安装item */ freshInstallApk() { if (UiM.Instance.guideInstallApkNode) { UiM.Instance.guideInstallApkNode.getComponent(GuideInstallApkNode).freshItem() } } }