DownloadApkData.ts 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. import Main from "../Main";
  2. import AdM from "../manager/AdM";
  3. import GameM from "../manager/GameM";
  4. import UiM from "../manager/UiM";
  5. import GuideInstallApkNode from "../ui/GuideInstallApkNode";
  6. import LogUtil from "../utils/LogUtil";
  7. import { HTTP_TYPE } from "./CommonData";
  8. export default class DownloadApkData {
  9. private static instance: DownloadApkData = null
  10. static get Instance(): DownloadApkData {
  11. if (!DownloadApkData.instance) {
  12. DownloadApkData.instance = new DownloadApkData()
  13. }
  14. return DownloadApkData.instance
  15. }
  16. public installRewards = 0
  17. public startRewards = 0
  18. public curGuideInstallItem = null
  19. //本地下载文件路径列表
  20. public downloadApkFiles = []
  21. public installPackageName = ''
  22. public openPackageName = ''
  23. //引导下载开关
  24. public installSwitch = true
  25. public installRatio = "0.8"
  26. public openRatio = "0.2"
  27. /** 存取包的状态
  28. * 格式 {packageName:"",
  29. * state:0}
  30. * state 状态 1 安装 2 领奖 3 打开 4 领奖 5 结束
  31. */
  32. public packageInfoArr = []
  33. /** 显示列表数据 */
  34. public listData = []
  35. /** 获取服务器数据
  36. * 格式 {packageName:"",
  37. * appName:"",
  38. * icon:"",
  39. * path:"",
  40. * state:0}
  41. */
  42. getPackage() {
  43. LogUtil.logV('DownloadApkData getPackage ', '')
  44. let data = {}
  45. GameM.httpM.sendDatas(HTTP_TYPE.getPackage, data, DownloadApkData.Instance.getPackageBack.bind(DownloadApkData.Instance))
  46. }
  47. getPackageBack(data) {
  48. LogUtil.logV('DownloadApkData getPackageBack ', data)
  49. this.installRewards = data.userTreasureGourdInfo.installRewards
  50. this.startRewards = data.userTreasureGourdInfo.startRewards
  51. this.packageInfoArr = data.userTreasureGourdInfo.treasureGourds
  52. if (UiM.Instance.guideInstallApkNode) {
  53. UiM.Instance.guideInstallApkNode.getComponent(GuideInstallApkNode).initView()
  54. }
  55. else {
  56. let data = DownloadApkData.Instance.checkApkData()
  57. UiM.Instance.hallNode.getComponent(Main).setGuideInstallVisible(data.length > 0)
  58. }
  59. }
  60. updatePackage(data) {
  61. // let data = {
  62. // "packageName": packageName,
  63. // "state": state
  64. // }
  65. GameM.httpM.sendDatas(HTTP_TYPE.updatePackage, data, DownloadApkData.Instance.updatePackageBack.bind(DownloadApkData.Instance))
  66. LogUtil.logV("DownloadApkData updatePackage ", data)
  67. }
  68. updatePackageBack(data) {
  69. LogUtil.logV('DownloadApkData updatePackageBack ', data)
  70. }
  71. /** 更新奖励次数
  72. * @param rewardsType 1 安装 2 启动
  73. */
  74. updateRewards(rewardsType) {
  75. LogUtil.logV('DownloadApkData updateRewards ', rewardsType)
  76. let data = { "rewardsType": rewardsType }
  77. GameM.httpM.sendDatas(HTTP_TYPE.updateRewards, data, DownloadApkData.Instance.updateRewardsBack.bind(DownloadApkData.Instance))
  78. }
  79. updateRewardsBack(data) {
  80. LogUtil.logV('DownloadApkData updateRewardsBack ', data)
  81. this.installRewards = data.userTreasureGourdInfo.installRewards
  82. this.startRewards = data.userTreasureGourdInfo.startRewards
  83. if (this.curGuideInstallItem) {
  84. LogUtil.logV('DownloadApkData updateRewardsBack ', '11111111 ')
  85. this.curGuideInstallItem.freshGetAward()
  86. this.curGuideInstallItem = null
  87. }
  88. if (UiM.Instance.guideInstallApkNode) {
  89. LogUtil.logV('DownloadApkData updateRewardsBack ', '222222222 ')
  90. UiM.Instance.guideInstallApkNode.getComponent(GuideInstallApkNode).getGoldBack()
  91. }
  92. }
  93. setInDownloadApkFiles(filesPath: string) {
  94. LogUtil.logV("setInDownloadApkFiles", "one")
  95. let arr = filesPath.split('#')
  96. this.downloadApkFiles = []
  97. for (var i = 0; i < arr.length; i++) {
  98. let filesPath = arr[i]
  99. if (filesPath != "") {
  100. if (this.downloadApkFiles.indexOf(filesPath) >= 0) {
  101. } else {
  102. LogUtil.logV("setInDownloadApkFiles", "two")
  103. this.downloadApkFiles.push(filesPath)
  104. }
  105. }
  106. }
  107. LogUtil.logV("setInDownloadApkFiles filesPathArr ", this.downloadApkFiles)
  108. DownloadApkData.Instance.getPackage()
  109. }
  110. /** 对比服务器包名和本地包数据 显示在列表中
  111. * 以本地包为最大,如果本地没有安装包默认不给奖励了
  112. */
  113. checkApkData() {
  114. let len = this.downloadApkFiles.length
  115. this.listData = []
  116. let installNum = 0
  117. let tempPackNameArr = []
  118. for (var i = 0; i < len; i++) {
  119. let has = false
  120. let path = this.downloadApkFiles[i]
  121. let str = AdM.getApkFileInfo(path)
  122. if (str != null && str != undefined && str != "") {
  123. let jsonObj = JSON.parse(str)
  124. let packageName = jsonObj["packageName"]
  125. if (tempPackNameArr.indexOf(packageName) == -1) {
  126. tempPackNameArr.push(packageName)
  127. let len1 = this.packageInfoArr.length
  128. for (var m = 0; m < len1; m++) {
  129. if (this.packageInfoArr[m].packageName == packageName) {
  130. if (this.packageInfoArr[m].state < 5) {
  131. let passTime = (GameM.commonData.gameTime - this.packageInfoArr[m].timeSpan) * 0.01 / (3600 * 24 * 6)
  132. if (passTime < 6) {
  133. if (this.packageInfoArr[m].state <= 2) {
  134. if (installNum < this.installRewards) {
  135. this.listData.push(this.packageInfoArr[m])
  136. installNum++
  137. LogUtil.logV('DownloadApkData putAAAA ', jsonObj)
  138. }
  139. }
  140. else {
  141. this.listData.push(this.packageInfoArr[m])
  142. LogUtil.logV('DownloadApkData putBBBB ', jsonObj)
  143. }
  144. }
  145. }
  146. has = true
  147. break
  148. }
  149. }
  150. if (!has) {
  151. jsonObj['state'] = 1
  152. jsonObj['timeSpan'] = GameM.commonData.gameTime
  153. this.packageInfoArr.push(jsonObj)
  154. if (installNum < this.installRewards) {
  155. this.listData.push(jsonObj)
  156. installNum++
  157. }
  158. LogUtil.logV('DownloadApkData putCCCC ', jsonObj)
  159. DownloadApkData.Instance.updatePackage(jsonObj)
  160. }
  161. }
  162. }
  163. }
  164. //检查本地包已卸载但安装完成的包
  165. let len2 = this.packageInfoArr.length
  166. for (var m = 0; m < len2; m++) {
  167. let has = false
  168. let packInfo = this.packageInfoArr[m]
  169. if (packInfo.state >= 2 && packInfo.state < 5) {
  170. let passTime = (GameM.commonData.gameTime - this.packageInfoArr[m].timeSpan) * 0.01 / (3600 * 24 * 6)
  171. if (passTime < 6) {
  172. for (var n = 0; n < this.listData.length; n++) {
  173. if (packInfo.packageName == this.listData[n].packageName) {
  174. has = true
  175. break
  176. }
  177. }
  178. if (!has) {
  179. if (installNum < this.installRewards) {
  180. this.listData.push(packInfo)
  181. installNum++
  182. }
  183. }
  184. }
  185. }
  186. }
  187. LogUtil.logV('DownloadApkData this.listData ', this.listData)
  188. return this.listData
  189. }
  190. /** 返回刷新安装item */
  191. freshInstallApk() {
  192. if (UiM.Instance.guideInstallApkNode) {
  193. UiM.Instance.guideInstallApkNode.getComponent(GuideInstallApkNode).freshItem()
  194. }
  195. }
  196. }