|
|
@@ -1,5 +1,7 @@
|
|
|
/* eslint-disable */
|
|
|
+import { v4 } from 'uuid'
|
|
|
import { SystemInfo, ShareMessage, HttpRequestConfig } from './interface'
|
|
|
+import { urlScheme } from './constants'
|
|
|
|
|
|
declare global {
|
|
|
interface Window {
|
|
|
@@ -7,49 +9,6 @@ declare global {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const urlScheme = {
|
|
|
- appStore: {
|
|
|
- name: 'App Store',
|
|
|
- pname: '',
|
|
|
- scheme: 'itms-apps://'
|
|
|
- },
|
|
|
- alipay: {
|
|
|
- name: '支付宝',
|
|
|
- pname: 'com.eg.android.AlipayGphone',
|
|
|
- scheme: 'alipay://'
|
|
|
- },
|
|
|
- taobao: {
|
|
|
- name: '淘宝',
|
|
|
- pname: 'com.taobao.taobao',
|
|
|
- scheme: 'taobao://'
|
|
|
- },
|
|
|
- qq: {
|
|
|
- name: 'QQ',
|
|
|
- pname: 'com.tencent.mobileqq',
|
|
|
- scheme: 'mqq://'
|
|
|
- },
|
|
|
- weixin: {
|
|
|
- name: '微信',
|
|
|
- pname: 'com.tencent.mm',
|
|
|
- scheme: 'weixin://'
|
|
|
- },
|
|
|
- jd: {
|
|
|
- name: '京东',
|
|
|
- pname: 'com.jingdong.app.mall',
|
|
|
- scheme: 'openApp.jdMobile://'
|
|
|
- },
|
|
|
- weibo: {
|
|
|
- name: '新浪微博',
|
|
|
- pname: 'com.sina.weibo',
|
|
|
- scheme: 'sinaweibo://'
|
|
|
- },
|
|
|
- youku: {
|
|
|
- name: '优酷',
|
|
|
- pname: 'com.youku.phone',
|
|
|
- scheme: 'youku://'
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
export default new (class {
|
|
|
private readonly plusready = new Promise<void>((resolve) => {
|
|
|
if (this.hasPlus()) {
|
|
|
@@ -65,6 +24,11 @@ export default new (class {
|
|
|
private xhr = new XMLHttpRequest()
|
|
|
|
|
|
/**
|
|
|
+ * 当前下载任务
|
|
|
+ */
|
|
|
+ private downloadTask = new Map()
|
|
|
+
|
|
|
+ /**
|
|
|
* 系统信息
|
|
|
*/
|
|
|
private systemInfo: SystemInfo = {
|
|
|
@@ -124,15 +88,6 @@ export default new (class {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 退出应用程序
|
|
|
- */
|
|
|
- quit() {
|
|
|
- this.onPlusReady((plus) => {
|
|
|
- plus.runtime.quit()
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
* 获取系统信息
|
|
|
* @param prop
|
|
|
* @returns
|
|
|
@@ -234,64 +189,93 @@ export default new (class {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 更新应用
|
|
|
+ * 删除文件
|
|
|
* @param url
|
|
|
*/
|
|
|
- updateApp(url: string) {
|
|
|
+ deleteFile(url: string) {
|
|
|
this.onPlusReady((plus) => {
|
|
|
- const dtask = plus.downloader.createDownload(
|
|
|
- url,
|
|
|
- {
|
|
|
- filename: ''
|
|
|
- },
|
|
|
- function (d: { filename: string }, status: number) {
|
|
|
- if (status == 200) {
|
|
|
- // 当前下载的状态
|
|
|
- installApp(d.filename) // 调用安装的方法
|
|
|
- } else {
|
|
|
- //plus.nativeUI.alert('下载失败')
|
|
|
- }
|
|
|
- }
|
|
|
- )
|
|
|
-
|
|
|
- dtask.start() // 开启下载的任务
|
|
|
- // app自动更新进度
|
|
|
- dtask.addEventListener('statechanged', function (task: { state: number }) {
|
|
|
- // 给下载任务设置一个监听 并根据状态 做操作
|
|
|
- switch (task.state) {
|
|
|
- case 1:
|
|
|
- console.log('正在下载')
|
|
|
- break
|
|
|
- case 2:
|
|
|
- console.log('已连接到服务器')
|
|
|
- break
|
|
|
- case 3:
|
|
|
- // console.log(task)
|
|
|
- // console.log(task.downloadedSize)//当前的大
|
|
|
- // console.log(task.totalSize)//安装包的大小
|
|
|
+ plus.io.resolveLocalFileSystemURL(url, (entry: any) => {
|
|
|
+ entry.remove()
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 监听下载进度
|
|
|
+ * @param callback
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+ onDownload(callback: (filename: string, progress: number) => void) {
|
|
|
+ const uuid = v4()
|
|
|
+ this.downloadTask.set(uuid, callback)
|
|
|
+
|
|
|
+ /** 注意离开页面时销毁监听事件,防止事件重复触发 */
|
|
|
+ return {
|
|
|
+ uuid,
|
|
|
+ cancel: () => this.downloadTask.delete(uuid)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 文件下载
|
|
|
+ * https://www.html5plus.org/doc/zh_cn/downloader.html#plus.downloader.createDownload
|
|
|
+ * @param url
|
|
|
+ */
|
|
|
+ createDownload(url: string) {
|
|
|
+ this.onPlusReady((plus) => {
|
|
|
+ plus.downloader.enumerate((downloads: any) => {
|
|
|
+ if (downloads.length) {
|
|
|
+ plus.nativeUI.toast('正在下载')
|
|
|
+ } else {
|
|
|
+ const task = plus.downloader.createDownload(url, {
|
|
|
+ filename: '_downloads/', // 非系统 Download 目录
|
|
|
+ retry: 1,
|
|
|
+ }, (d: any, status: number) => {
|
|
|
+ if (status !== 200) {
|
|
|
+ plus.nativeUI.toast('下载失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // 监听下载状态
|
|
|
+ task.addEventListener('statechanged', (task: any) => {
|
|
|
+ switch (task.state) {
|
|
|
+ case 3:
|
|
|
+ const progress = task.downloadedSize / task.totalSize * 100
|
|
|
+ for (const fn of this.downloadTask.values()) {
|
|
|
+ fn(task.filename, progress) // 推送下载进度
|
|
|
+ }
|
|
|
+ break
|
|
|
+ case 4:
|
|
|
+ console.log('下载完成', task.filename)
|
|
|
+ this.downloadTask.clear()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // 开始下载
|
|
|
+ task.start()
|
|
|
}
|
|
|
})
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
- // 自动更新
|
|
|
- function installApp(path: string) {
|
|
|
- plus.nativeUI.showWaiting('正在更新...')
|
|
|
- plus.runtime.install(
|
|
|
- path,
|
|
|
- {
|
|
|
- // true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false
|
|
|
- force: false
|
|
|
- },
|
|
|
- function () {
|
|
|
- plus.nativeUI.closeWaiting()
|
|
|
- console.log('更新成功!')
|
|
|
- plus.runtime.restart()
|
|
|
- },
|
|
|
- function (e: { message: string }) {
|
|
|
- plus.nativeUI.closeWaiting()
|
|
|
- plus.nativeUI.alert('更新失败:' + e.message)
|
|
|
- }
|
|
|
- )
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * App更新安装
|
|
|
+ * @param file
|
|
|
+ */
|
|
|
+ installApp(file: string) {
|
|
|
+ this.onPlusReady((plus) => {
|
|
|
+ plus.nativeUI.showWaiting('正在安装...')
|
|
|
+ plus.runtime.install(file, {
|
|
|
+ // true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false
|
|
|
+ force: false
|
|
|
+ }, () => {
|
|
|
+ console.log('安装成功!')
|
|
|
+ this.deleteFile(file)
|
|
|
+ plus.nativeUI.closeWaiting()
|
|
|
+ plus.runtime.restart()
|
|
|
+ }, (e: any) => {
|
|
|
+ plus.nativeUI.closeWaiting()
|
|
|
+ plus.nativeUI.alert('安装失败:' + e.message)
|
|
|
+ })
|
|
|
})
|
|
|
}
|
|
|
|