UNPKG

@ccos/webos

Version:

A Base JavaScript Framework for Skyworth/Coocaa TV

247 lines (236 loc) 8.54 kB
import { call_uapi, getUrlBase } from './base'; import inc from './incnumber'; import qs from 'qs'; import { getQjyMApi } from './qjymapi'; function strToData(str) { var apps = str.split("__QJYLINE__").filter(str => str.trim() !== "").map(appStr => { var parts = appStr.split("__QJYSPLIT__"); var permissions = parts[6].split("__QJYSUBSPLIT__").filter(str => str.trim() !== ""); return { packageName: parts[0], appName: parts[1], openUrl: parts[2], iconUrl: parts[3], versionName: parts[4], preInstalled: parts[5], permissions: permissions }; }); return apps; } function currGetProcessCallback(id, state) { console.log(`GetProcessCallback: id=${id}, state=${state}`); } async function getInstalledAppList() { let qjyapi = getQjyMApi(); // if (qjyapi) { console.log('qjyapi true'); // let promiseInst1 = new Promise((resolve) => { window['getAppListCallback'] = (data) => { //console.log('getAppListCallback = ' + data); let list = strToData(data); //console.log('list = ' + JSON.stringify(list)); // let newArray = list.map(function(currentValue) { let preFlag = parseInt(currentValue.preInstalled); return { package: currentValue.packageName, name: currentValue.appName, version: currentValue.versionName, icon: currentValue.iconUrl, url: currentValue.openUrl, preinstalled: preFlag ? true : false, permissions: currentValue.permissions, }; }); resolve({code: 0, data: newArray}); }; qjyapi.exec('UserPermission','method=getAppList,callback=getAppListCallback'); }); let promiseInst2 = new Promise((resolve) => { setTimeout(()=> { resolve({code: -1, msg: 'timeout'}); }, 5000); }); let getInstalledAppListPromise = Promise.race([promiseInst1, promiseInst2]); return await getInstalledAppListPromise; } else { console.log('qjyapi == null'); // let ret = await call_uapi('/api/appman/installedlist', null); console.log('ret = ', ret); if (ret && 0 == ret.code) { for (let item of ret.data) { if (item && item.icon) { if (item.icon.startsWith('/')) { item.icon = getUrlBase() + "/app/" + item.package + item.icon; } else { item.icon = getUrlBase() + "/app/" + item.package + '/' + item.icon; } } } } return ret; } } async function startInstallApp(params) { let path = ''; let replaceFlag = 1; let allowVersionDowngrade = 1; let packageName = ''; if (params && params.path) { path = params.path; } if (params && typeof(params.replace) != 'undefined') { replaceFlag = params.replace ? 1 : 0; } if (params && typeof(params.allowDowngrade) != 'undefined') { allowVersionDowngrade = params.allowDowngrade ? 1 : 0; } if (params && typeof(params.package) == 'string') { packageName = params.package; } // let qjyapi = getQjyMApi(); // if (qjyapi) { console.log('qjyapi true'); let promiseInst1 = new Promise((resolve) => { window['downloadAppCallback'] = (id, state) => { console.log(`downloadAppCallback: id = ${id}, state = ${state}`); let code = 0; let msg = 'ok'; if (state < 0) { code = -3; msg = 'fail'; } resolve({code, msg, package: id}); }; window['getProcessCallback'] = currGetProcessCallback; // qjyapi.exec('UserPermission',`method=installWebAppProcess,packageName=${packageName},callback=getProcessCallback`); qjyapi.exec('UserPermission',`method=installWebApp,packageName=${packageName},path=${path},replaceFlag=${replaceFlag},allowVersionDowngrade=${allowVersionDowngrade},callback=downloadAppCallback`) }); let promiseInst2 = new Promise((resolve) => { setTimeout(()=> { resolve({code: -1, msg: 'timeout'}); }, 5000); }); let getInstalledAppListPromise = Promise.race([promiseInst1, promiseInst2]); return await getInstalledAppListPromise; } else { console.log('qjyapi == null'); const postStr = qs.stringify({url}); return call_uapi('/api/appman/installapp', postStr); } } async function removeApp(params) { let packageName = ''; if (params && params.package) { packageName = params.package; } let qjyapi = getQjyMApi(); // if (qjyapi) { console.log('qjyapi true'); let promiseInst1 = new Promise((resolve) => { window['uninstallAppCallback'] = (id, state) => { console.log(`uninstallAppCallback: id = ${id}, state = ${state}`); let code = 0; let msg = 'ok'; if (state == 0) { code = -3; msg = 'fail'; } resolve({code, msg, package: id}); }; qjyapi.exec('UserPermission',`method=uninstallWebApp,packageName=${packageName},callback=uninstallAppCallback`); }); let promiseInst2 = new Promise((resolve) => { setTimeout(()=> { resolve({code: -1, msg: 'timeout'}); }, 5000); }); let getInstalledAppListPromise = Promise.race([promiseInst1, promiseInst2]); return await getInstalledAppListPromise; } else { console.log('qjyapi == null'); const postStr = qs.stringify({package: packageName}); return call_uapi('/api/appman/removeapp', postStr); } } async function openApp(packageNameOrUrl, params, router) { let path = packageNameOrUrl.toLowerCase(); let url; if (path.startsWith('http:') || path.startsWith('https:') || path.startsWith('file:')) { url = packageNameOrUrl; } else { url = `http://localhost:32758/app/${packageNameOrUrl}/`; } // if (params) { if (typeof(params) == 'object' && JSON.stringify(params) != '{}') { let qstr = qs.stringify(params); if (qstr) { url += ('?' + qstr); } } else if (typeof(params) == 'string') { if (params.startsWith('?')) { url += params; } else { url += ('?' + params); } } } if (router && typeof(router) == 'string') { if (router.startsWith('#')) { url += router; } else { url += ('#' + router); } } // if (true) { const socket = new WebSocket('ws://127.0.0.1:8000/?app=coocaalite'); let id = inc.get(); if (socket) { socket.onopen = (event) => { if (socket.readyState == WebSocket.OPEN) { let message = { skyrpc: '1.0', id: id, service: 'AppMgr', method: 'openApp', params: { url: url, lastUrl: window.location.href, } } socket.send(btoa(JSON.stringify(message))); } setTimeout(() => { socket.close(); }, 5000); }; socket.onmessage = (event) => { // }; socket.onclose = (event) => { // }; } } } export default { getInstalledAppList, startInstallApp, removeApp, openApp, };