@ccos/webos
Version:
A Base JavaScript Framework for Skyworth/Coocaa TV
247 lines (236 loc) • 8.54 kB
JavaScript
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,
};