From f9bc5f18e4296e7dc8eae6de63d9860da5b88d1e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 9 Jun 2022 20:21:51 +0800 Subject: [PATCH] update 2022-06-09 20:21:51 --- .../src/dist/luci-static/istore/i18n/en.json | 2 +- .../dist/luci-static/istore/i18n/zh-cn.json | 2 +- .../src/dist/luci-static/istore/index.js | 28 ++++++++--------- .../src/dist/luci-static/istore/style.css | 2 +- .../model/cbi/gpsysupgrade/sysupgrade.lua | 12 ++++++++ luci-app-passwall/Makefile | 6 ++++ .../model/cbi/passwall/api/gen_v2ray.lua | 1 + .../model/cbi/passwall/client/node_config.lua | 3 ++ .../passwall/client/node_subscribe_config.lua | 2 +- .../luasrc/model/cbi/passwall/client/rule.lua | 2 +- .../model/cbi/passwall/server/api/app.lua | 3 ++ .../cbi/passwall/server/api/shadowsocks.lua | 8 ++++- .../luasrc/model/cbi/passwall/server/user.lua | 22 ++++++++++++++ luci-app-passwall/po/zh-cn/passwall.po | 6 ++++ .../root/usr/share/passwall/0_default_config | 2 +- .../usr/share/passwall/helper_dnsmasq_add.lua | 4 ++- .../share/passwall/helper_smartdns_add.lua | 4 ++- .../root/usr/share/passwall/rule_update.lua | 19 ++++++++---- .../root/usr/share/passwall/subscribe.lua | 30 ++++++++++++------- luci-app-passwall2/Makefile | 6 ++++ .../model/cbi/passwall2/server/api/app.lua | 3 ++ .../cbi/passwall2/server/api/shadowsocks.lua | 8 ++++- .../model/cbi/passwall2/server/user.lua | 22 ++++++++++++++ luci-app-store/Makefile | 6 ++-- luci-app-store/src/po/zh-cn/iStore.po | 2 +- luci-app-store/src/po/zh-tw/iStore.po | 2 +- .../etc/uci-defaults/zz-ipq-default-settings | 9 ------ .../armv8/files/etc/hotplug.d/iface/12-rk3328 | 20 +++++-------- 28 files changed, 170 insertions(+), 66 deletions(-) delete mode 100644 my-default-settings/target/ipq807x/files/etc/uci-defaults/zz-ipq-default-settings diff --git a/app-store-ui/src/dist/luci-static/istore/i18n/en.json b/app-store-ui/src/dist/luci-static/istore/i18n/en.json index c17976c0f..034b3e2a8 100644 --- a/app-store-ui/src/dist/luci-static/istore/i18n/en.json +++ b/app-store-ui/src/dist/luci-static/istore/i18n/en.json @@ -1 +1 @@ -{"en":{"author":"Author","Icon is gone":"Icon is gone","install":"install","loading data":"loading data","open":"open","order":"order","please enter the search keyword":"please enter the search keyword","uninstall":"uninstall","upgrade":"upgrade","website":"website"}} \ No newline at end of file +{"en":{"%{name} downloads":"%{name} downloads","%{name} links":"%{name} links","all app":"all app","app backup":"app backup","are you sure you want to uninstall %{name}?":"are you sure you want to uninstall %{name}?","author":"author","backup fail":"backup fail","backup now":"backup now","backup now backs up installed software (unlimited installation sources) to external storage":"backup now backs up installed software (unlimited installation sources) to external storage","backup now will download a list of iStore installed software":"backup now will download a list of iStore installed software","backup success":"backup success","backuping":"backuping","By download":"By download","By rating":"By rating","checking for latest version":"checking for latest version","choose":"choose","choose backup file":"choose backup file","click to download":"click to download","click to update":"click to update","closed":"closed","customize":"customize","default":"default","do not refresh this page during plugin installation/uninstallation":"do not refresh this page during plugin installation/uninstallation","download":"Download","explain":"explain","external storage directory":"external storage directory","from this page, you can upload plugin packages to install plugins":"from this page, you can upload plugin packages to install plugins","Icon is gone":"Icon is gone","install":"install","installation failed, error code":"installation failed, error code","installation is complete, please close the current window":"installation is complete, please close the current window","installed":"installed","installing plugin":"installing plugin","last version":"last version","light backup":"light backup","like":"like","liked":"liked","loading data":"loading data","local backup":"local backup","maintain":"maintain","manual install":"Manual install","monitor":"Monitor","multimedia":"Multimedia","nas":"NAS","net":"Net","networking":"Networking","no files selected":"no files selected","no internet required for recovery":"no internet required for recovery","offline install":"offline install","offline installation failed with error code":"offline installation failed with error code","offline installation is successful, please close the current window":"offline installation is successful, please close the current window","open":"open","order":"order","please enter an absolute path starting with %{name}":"please enter an absolute path starting with %{name}","please enter the path, give up the input, please clear the input box":"please enter the path, give up the input, please clear the input box","please enter the search keyword":"please enter the search keyword","please fill in the external storage directory":"please fill in the external storage directory","please select a backup file to restore":"please select a backup file to restore","restore backup":"restore backup","restore now":"restore now","restoring backup":"restoring backup","select or drag and drop files":"select or drag and drop files","service":"Service","support .ipk plug-in, .run self-extracting format":"support .ipk plug-in, .run self-extracting format","system":"System","tag":"Tag","the backup was restored fail":"the backup was restored fail","the backup was restored success":"the backup was restored success","the is last version":"the is last version","the update is success, please close the current window":"the update is success, please close the current window","there are no backup files in this path":"there are no backup files in this path","tool":"Tool","uninstall":"uninstall","uninstall failed, error code":"uninstall failed, error code","uninstallation succeeded, please close the current window":"uninstallation succeeded, please close the current window","uninstalling plugin":"uninstalling plugin","update date":"update date","update error":"update error","update failed with error code":"update failed with error code","update success":"update success","updateing":"updateing","updating plugin":"updating plugin","upgrade":"upgrade","upload software list and install from iStore when restoring backup":"upload software list and install from iStore when restoring backup","uploading plugin":"uploading plugin","website":"website","you have already liked":"you have already liked"}} \ No newline at end of file diff --git a/app-store-ui/src/dist/luci-static/istore/i18n/zh-cn.json b/app-store-ui/src/dist/luci-static/istore/i18n/zh-cn.json index 70291094b..141ebab93 100644 --- a/app-store-ui/src/dist/luci-static/istore/i18n/zh-cn.json +++ b/app-store-ui/src/dist/luci-static/istore/i18n/zh-cn.json @@ -1 +1 @@ -{"zh-cn":{"%{name} downloads":"%{name} 次下载","%{name} links":"%{name} 次点赞","all app":"全部软件","app backup":"软件备份","are you sure you want to uninstall %{name}?":"确定要卸载 %{name} 吗?","author":"作者","backup fail":"备份失败","backup now":"立即备份","backup now backs up installed software (unlimited installation sources) to external storage":"立即备份将备份已安装软件(不限安装来源)到外部存储","backup now will download a list of iStore installed software":"立即备份将下载iStore已安装的软件列表","backup success":"备份成功","backuping":"正在备份","By download":"按下载","By rating":"按评分","checking for latest version":"正在检查最新版本","choose":"请选择","choose backup file":"选择备份文件","click to download":"点此下载","click to update":"点我更新","closed":"关闭","customize":"自定义","default":"默认","do not refresh this page during plugin installation/uninstallation":"插件安装/卸载过程中请勿刷新此页面","explain":"说明","external storage directory":"外部存储目录","from this page, you can upload plugin packages to install plugins":"通过本页,你可以上传插件包来安装插件","Icon is gone":"图标出走啦","install":"安装","installation failed, error code":"安装失败,错误码","installation is complete, please close the current window":"安装完成,请关闭当前窗口","installed":"已安装","installing plugin":"正在安装插件","last version":"最新版本","light backup":"轻量备份","like":"点赞","liked":"已点赞","loading data":"正在努力的获取数据","local backup":"本地备份","maintain":"维护","manual install":"手动安装","no files selected":"未选择任何文件","no internet required for recovery":"恢复时不需要网络","offline install":"离线安装","offline installation failed with error code":"离线安装失败,错误码","offline installation is successful, please close the current window":"离线安装成功,请关闭当前窗口","open":"打开","order":"排序","please enter an absolute path starting with %{name}":"请输入 %{name} 开头的绝对路径","please enter the path, give up the input, please clear the input box":"请输入路径,放弃输入请清空输入框","please enter the search keyword":"请输入搜索关键词","please fill in the external storage directory":"请填写外部存储目录","please select a backup file to restore":"请选择要恢复的备份文件","restore backup":"恢复备份","restore now":"立即恢复","restoring backup":"正在恢复备份","select or drag and drop files":"选择或拖放文件","support .ipk plug-in, .run self-extracting format":"支持 .ipk 插件,.run 自解压格式","tag":"标签","the backup was restored fail":"恢复备份失败","the backup was restored success":"恢复备份成功","the is last version":"当前已经是最新版本","the update is success, please close the current window":"更新成功,请关闭当前窗口","there are no backup files in this path":"此路径下没有备份文件","uninstall":"卸载","uninstall failed, error code":"卸载失败,错误码","uninstallation succeeded, please close the current window":"卸载完成,请关闭当前窗口","uninstalling plugin":"正在卸载插件","update date":"更新日期","update error":"更新失败","update failed with error code":"更新失败,错误代码","update success":"更新成功","updateing":"正在更新中","updating plugin":"正在更新插件","upgrade":"更新","upload software list and install from iStore when restoring backup":"复备份时上传软件列表并从iStore安装","uploading plugin":"正在上传插件","website":"官网","you have already liked":"您已经点赞过啦"}} \ No newline at end of file +{"zh-cn":{"%{name} downloads":"%{name} 次下载","%{name} links":"%{name} 次点赞","all app":"全部软件","app backup":"软件备份","are you sure you want to uninstall %{name}?":"确定要卸载 %{name} 吗?","author":"作者","backup fail":"备份失败","backup now":"立即备份","backup now backs up installed software (unlimited installation sources) to external storage":"立即备份将备份已安装软件(不限安装来源)到外部存储","backup now will download a list of iStore installed software":"立即备份将下载iStore已安装的软件列表","backup success":"备份成功","backuping":"正在备份","By download":"按下载","By rating":"按评分","checking for latest version":"正在检查最新版本","choose":"请选择","choose backup file":"选择备份文件","click to download":"点此下载","click to update":"点我更新","closed":"关闭","customize":"自定义","default":"默认","do not refresh this page during plugin installation/uninstallation":"插件安装/卸载过程中请勿刷新此页面","download":"下载","explain":"说明","external storage directory":"外部存储目录","from this page, you can upload plugin packages to install plugins":"通过本页,你可以上传插件包来安装插件","Icon is gone":"图标出走啦","install":"安装","installation failed, error code":"安装失败,错误码","installation is complete, please close the current window":"安装完成,请关闭当前窗口","installed":"已安装","installing plugin":"正在安装插件","last version":"最新版本","light backup":"轻量备份","like":"点赞","liked":"已点赞","loading data":"正在努力的获取数据","local backup":"本地备份","maintain":"维护","manual install":"手动安装","monitor":"监控","multimedia":"多媒体","nas":"NAS","net":"网络","networking":"组网","no files selected":"未选择任何文件","no internet required for recovery":"恢复时不需要网络","offline install":"离线安装","offline installation failed with error code":"离线安装失败,错误码","offline installation is successful, please close the current window":"离线安装成功,请关闭当前窗口","open":"打开","order":"排序","please enter an absolute path starting with %{name}":"请输入 %{name} 开头的绝对路径","please enter the path, give up the input, please clear the input box":"请输入路径,放弃输入请清空输入框","please enter the search keyword":"请输入搜索关键词","please fill in the external storage directory":"请填写外部存储目录","please select a backup file to restore":"请选择要恢复的备份文件","restore backup":"恢复备份","restore now":"立即恢复","restoring backup":"正在恢复备份","select or drag and drop files":"选择或拖放文件","service":"服务","support .ipk plug-in, .run self-extracting format":"支持 .ipk 插件,.run 自解压格式","system":"系统","tag":"标签","the backup was restored fail":"恢复备份失败","the backup was restored success":"恢复备份成功","the is last version":"当前已经是最新版本","the update is success, please close the current window":"更新成功,请关闭当前窗口","there are no backup files in this path":"此路径下没有备份文件","tool":"工具","uninstall":"卸载","uninstall failed, error code":"卸载失败,错误码","uninstallation succeeded, please close the current window":"卸载完成,请关闭当前窗口","uninstalling plugin":"正在卸载插件","update date":"更新日期","update error":"更新失败","update failed with error code":"更新失败,错误代码","update success":"更新成功","updateing":"正在更新中","updating plugin":"正在更新插件","upgrade":"更新","upload software list and install from iStore when restoring backup":"复备份时上传软件列表并从iStore安装","uploading plugin":"正在上传插件","website":"官网","you have already liked":"您已经点赞过啦"}} \ No newline at end of file diff --git a/app-store-ui/src/dist/luci-static/istore/index.js b/app-store-ui/src/dist/luci-static/istore/index.js index a8f250013..f23220aa4 100644 --- a/app-store-ui/src/dist/luci-static/istore/index.js +++ b/app-store-ui/src/dist/luci-static/istore/index.js @@ -1,32 +1,32 @@ -var xe=Object.defineProperty,Ce=Object.defineProperties;var Se=Object.getOwnPropertyDescriptors;var ge=Object.getOwnPropertySymbols;var Le=Object.prototype.hasOwnProperty,Ae=Object.prototype.propertyIsEnumerable;var fe=(t,e,n)=>e in t?xe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Z=(t,e)=>{for(var n in e||(e={}))Le.call(e,n)&&fe(t,n,e[n]);if(ge)for(var n of ge(e))Ae.call(e,n)&&fe(t,n,e[n]);return t},de=(t,e)=>Ce(t,Se(e));var Te=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var L=(t,e,n)=>new Promise((a,o)=>{var u=l=>{try{c(n.next(l))}catch(h){o(h)}},i=l=>{try{c(n.throw(l))}catch(h){o(h)}},c=l=>l.done?a(l.value):Promise.resolve(l.value).then(u,i);c((n=n.apply(t,e)).next())});import{a as pe,c as Ee,u as R,b as K,d as B,r as se,o as d,e as _,F as O,f as W,g as X,w as Ie,h as r,p as re,i as le,j as s,t as g,k as z,n as j,l as De,m as A,q as we,s as Pe,v as N,x as _e,y as be,z as ie,A as $e,B as ye,C as Be,D as ve,E as Ve,G as Fe,H as Me}from"./vendor.js?v=64c6a109";var Zo=Te(I=>{const ze=function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const u of o)if(u.type==="childList")for(const i of u.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&a(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const u={};return o.integrity&&(u.integrity=o.integrity),o.referrerpolicy&&(u.referrerPolicy=o.referrerpolicy),o.crossorigin==="use-credentials"?u.credentials="include":o.crossorigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function a(o){if(o.ep)return;o.ep=!0;const u=n(o);fetch(o.href,u)}};ze();const Ue=t=>L(I,null,function*(){const e=window.vue_lang;new Date().getTime();let n={};try{const o=yield pe({url:window.vue_lang_data,method:"GET"});o.data&&(n=o.data)}catch(o){console.log(o)}const a=Ee({defaultLanguage:e,translations:n,setGlobalProperties:!1,provideDirective:!1,provideComponent:!1});t.use(a)});var E=(t,e)=>{const n=t.__vccOpts||t;for(const[a,o]of e)n[a]=o;return n};const Oe=t=>(re("data-v-13251538"),t=t(),le(),t),Re={class:"tabs"},Ge=["href","onClick"],Ne={key:0},He=Oe(()=>s("div",{class:"auto"},null,-1)),Ke={setup(t){const{$gettext:e}=R(),n=K(),a=B(()=>n.state.version),o=B(()=>[{to:"/installed",name:e("installed")},{to:"/store",name:e("all app")},{to:"/upload",name:e("manual install")},{to:"/maintance",name:e("maintain"),up:a.value}]);return(u,i)=>{const c=se("router-link");return d(),_("ul",Re,[(d(!0),_(O,null,W(r(o),l=>(d(),X(c,{to:l.to,custom:"",key:l.to},{default:Ie(({href:h,navigate:y,isActive:k})=>[s("li",{class:j(k&&"active cbi-tab")},[s("a",{href:h,onClick:y},g(l.name),9,Ge),l.up?(d(),_("span",Ne)):z("",!0)],2)]),_:2},1032,["to"]))),128)),He])}}};var We=E(Ke,[["__scopeId","data-v-13251538"]]);const qe=()=>window.vue_base,Ze=()=>window.istore_api_base||"https://istore.linkease.com",Ye=t=>{if(t)return De(t).format("YYYY-MM-DD HH:mm:ss")},Je=()=>new Date().getTime(),Qe=t=>{if(t<1024)return""+t+"KB";let n=1024,a=0;for(let u=t/1024;u>=1024;u/=1024)n*=1024,a++;let o=["M","G","T","P","E"];return(t/100/(n/100)).toFixed(2)+o[a]},Xe=t=>{if(t==null)return 0;if(t<1e4)return t;let n=parseInt(`${t/1e4}`),a=t%1e4;return`${n}\u4E07${a}`},je=()=>window.token||"",et=()=>{var t;return((t=window==null?void 0:window.device_id)==null?void 0:t.uid)||""},tt=()=>{var t;return((t=window==null?void 0:window.device_id)==null?void 0:t.version)||""},nt=()=>{var t;return((t=window==null?void 0:window.device_id)==null?void 0:t.arch)||""},at=()=>"https://www.kooldns.cn/bind",me={all:"\u5168\u90E8",sys:"\u7CFB\u7EDF",tool:"\u5DE5\u5177",net:"\u7F51\u7EDC"},ot=t=>me[t]?me[t]:t;var st=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",BasePage:qe,ApiBaseURL:Ze,formatDate:Ye,UnixDate:Je,numberToSize:Qe,numberToSum:Xe,getToken:je,getDeviceId:et,getVersion:tt,modelArch:nt,getIframeURL:at,getTagValue:ot}),U=Z({},st);const D=pe.create({});D.interceptors.request.use(t=>(t.params==null&&(t.params={}),t.params=de(Z({},t.params),{token:U.getToken(),_t:U.UnixDate()}),t),t=>t);D.interceptors.response.use(t=>t,t=>t);const Y=pe.create({baseURL:U.ApiBaseURL()});Y.interceptors.request.use(t=>(t.params==null&&(t.params={}),t.params=de(Z({},t.params),{modelArch:U.modelArch(),deviceId:U.getDeviceId(),_t:U.UnixDate()}),t),t=>t);Y.interceptors.response.use(t=>t);const rt=()=>new Promise((t,e)=>L(I,null,function*(){try{const n=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/installed"});if(n.status==200){t(n.data);return}e(n.status);return}catch(n){e(n);return}})),lt=t=>new Promise((e,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/install",params:{package:t}});if(a.status==200){e(a.data);return}n(a.status);return}catch(a){n(a);return}})),ct=t=>new Promise((e,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/upgrade",params:{package:t}});if(a.status==200){e(a.data);return}n(a.status);return}catch(a){n(a);return}})),it=t=>new Promise((e,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/remove",params:{package:t}});if(a.status==200){e(a.data);return}n(a.status);return}catch(a){n(a);return}})),ut=()=>new Promise((t,e)=>L(I,null,function*(){try{const n=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/update"});if(n.status==200){t(n.data);return}e(n.status);return}catch(n){e(n);return}})),dt=t=>new Promise((e,n)=>L(I,null,function*(){try{const a=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/status",params:{package:t}});if(a.status==200){e(a.data);return}n(a.status);return}catch(a){n(a);return}})),pt=()=>new Promise((t,e)=>L(I,null,function*(){try{const n=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/log"});if(n.status==200){t(n.data);return}e(n.status);return}catch(n){e(n);return}})),_t=t=>new Promise((e,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/upload",headers:{"Content-Type":"multipart/form-data"},data:t});if(a.data){e(a.data);return}}catch(a){n(a);return}n("not found soft")})),ht=()=>new Promise((t,e)=>L(I,null,function*(){try{const n=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/light_backup"});if(n.status==200){t(n.data);return}e(n.status);return}catch(n){e(n);return}})),gt=t=>new Promise((e,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/light_restore",headers:{"Content-Type":"multipart/form-data"},data:t});if(a.data){e(a.data);return}}catch(a){n(a);return}n("not found soft")})),ft=t=>new Promise((e,n)=>L(I,null,function*(){try{const a=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/get_available_backup_file_list",params:{path:t}});if(a.status==200){e(a==null?void 0:a.data);return}n(a.status);return}catch(a){n(a);return}})),vt=()=>new Promise((t,e)=>L(I,null,function*(){try{const n=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/get_local_backup_dir_path"});if(n.status==200){t(n==null?void 0:n.data);return}e(n.status);return}catch(n){e(n);return}})),mt=(t,e)=>new Promise((n,a)=>L(I,null,function*(){try{const o=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/local_backup",params:{path:t,force:e}});if(o.status==200){n(o==null?void 0:o.data);return}a(o.status);return}catch(o){a(o);return}})),wt=t=>new Promise((e,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/local_restore",params:{path:t}});if(a.status==200){e(a.data);return}n(a.status);return}catch(a){n(a);return}})),bt=()=>new Promise((t,e)=>L(I,null,function*(){try{const n=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/get_block_devices"});if(n.status==200){t(n==null?void 0:n.data);return}e(n.status);return}catch(n){e(n);return}}));var $t=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",getInstalledApp:rt,installApp:lt,upgradeApp:ct,removeApp:it,updateAppStore:ut,getAppStatus:dt,getLog:pt,uploadAppIPK:_t,lightBackup:ht,lightRestore:gt,backupFileList:ft,localBackupdirPath:vt,localBackup:mt,localRestore:wt,getBlockDevices:bt});const yt=t=>new Promise((e,n)=>L(I,null,function*(){var a,o,u,i;try{const c=yield Y({method:"GET",url:"/api/store/list",params:t});if(((a=c==null?void 0:c.data)==null?void 0:a.success)===0){e((o=c==null?void 0:c.data)==null?void 0:o.result);return}if((u=c==null?void 0:c.data)!=null&&u.message){n((i=c==null?void 0:c.data)==null?void 0:i.message);return}n("error")}catch(c){console.log(c),n(c);return}})),kt=U.ApiBaseURL(),xt=t=>`${kt}${t}`,Ct=()=>new Promise((t,e)=>L(I,null,function*(){var n,a,o,u;try{const i=yield Y({method:"GET",url:"/api/store/tags"});if(((n=i==null?void 0:i.data)==null?void 0:n.success)===0){t((a=i==null?void 0:i.data)==null?void 0:a.result);return}if((o=i==null?void 0:i.data)!=null&&o.message){e((u=i==null?void 0:i.data)==null?void 0:u.message);return}e("error")}catch(i){e(i);return}})),St=t=>new Promise((e,n)=>{Y({method:"POST",url:"/api/store/expand",data:{appsId:t||[],deviceId:U.getDeviceId()}}).then(a=>{var o,u,i;if(((o=a.data)==null?void 0:o.success)==0&&((u=a.data)==null?void 0:u.result)){e((i=a.data)==null?void 0:i.result);return}n("not found expand")}).catch(a=>{n(a)})}),Lt=t=>{Y({method:"POST",url:"/api/store/download",data:{appId:t,deviceId:U.getDeviceId()}}).then(e=>{var n;((n=e.data)==null?void 0:n.success)!=0})},At=t=>new Promise((e,n)=>{Y({method:"POST",url:"/api/store/star",data:{appId:t,deviceId:U.getDeviceId()}}).then(a=>{var o;if(((o=a.data)==null?void 0:o.success)==0){e(a.data);return}n("not found expand")}).catch(a=>{n(a)})});var Tt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",getStoreAppList:yt,getStoreAppIcon:xt,getStoreTags:Ct,getAppExpandData:St,increasingDownloadCount:Lt,postStarApp:At});const Et=()=>D({method:"GET",url:"/cgi-bin/luci/admin/store/check_self_upgrade"}),It=()=>D({method:"POST",url:"/cgi-bin/luci/admin/store/do_self_upgrade"});var Dt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",updateIstore:Et,selfUpdateIstore:It}),T=Z(Z(Z({},$t),Tt),Dt);const Pt={setup(){const t=K(),e=B(()=>t.state.log.action),n=B(()=>t.state.log.content),a=B(()=>t.state.log.end),o=B(()=>t.state.log.exitCode),u=A(!1),i=A(null);let c="",l=A(""),h=A("."),y="",k="";switch(e.value){case"install":c="\u6B63\u5728\u5B89\u88C5\u63D2\u4EF6",y="\u5B89\u88C5\u5B8C\u6210,\u8BF7\u5173\u95ED\u5F53\u524D\u7A97\u53E3",k="\u5B89\u88C5\u5931\u8D25,\u9519\u8BEF\u7801";break;case"uninstall":c="\u6B63\u5728\u5378\u8F7D\u63D2\u4EF6",y="\u5378\u8F7D\u6210\u529F,\u8BF7\u5173\u95ED\u5F53\u524D\u7A97\u53E3",k="\u5378\u8F7D\u5931\u8D25,\u9519\u8BEF\u7801";break;case"upgrade":c="\u6B63\u5728\u66F4\u65B0\u63D2\u4EF6",y="\u66F4\u65B0\u6210\u529F,\u8BF7\u5173\u95ED\u5F53\u524D\u7A97\u53E3",k="\u66F4\u65B0\u5931\u8D25,\u9519\u8BEF\u7801";break;case"upload":c="\u6B63\u5728\u4E0A\u4F20\u63D2\u4EF6",y="\u79BB\u7EBF\u5B89\u88C5\u6210\u529F,\u8BF7\u5173\u95ED\u5F53\u524D\u7A97\u53E3",k="\u79BB\u7EBF\u5B89\u88C5\u5931\u8D25,\u9519\u8BEF\u7801";break}we(()=>{document.body.setAttribute("lock-scroll",!0),V()}),Pe(()=>{document.body.removeAttribute("lock-scroll")});const P=()=>{var f;(f=i.value)!=null&&f.scrollHeight&&(i.value.scrollTop=i.value.scrollHeight)},V=()=>{setTimeout(()=>{if(a.value){w(),P();return}T.getLog().then(f=>{if(a.value){w(),P();return}switch(f==null?void 0:f.code){}const C=f==null?void 0:f.stdout,v=f==null?void 0:f.stderr;(C||v)&&(l.value=`${C}${v}`),h.value=`${h.value}.`,P(),V()}).catch(f=>{l.value=`${f}`,P(),V()})},500)},w=()=>{u.value=!0},p=()=>{location.reload()};return{logText:B(()=>u.value?o.value!==void 0&&o.value!==0?`${c} +var Ct=Object.defineProperty,St=Object.defineProperties;var Lt=Object.getOwnPropertyDescriptors;var gt=Object.getOwnPropertySymbols;var At=Object.prototype.hasOwnProperty,Tt=Object.prototype.propertyIsEnumerable;var ft=(e,t,n)=>t in e?Ct(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Z=(e,t)=>{for(var n in t||(t={}))At.call(t,n)&&ft(e,n,t[n]);if(gt)for(var n of gt(t))Tt.call(t,n)&&ft(e,n,t[n]);return e},dt=(e,t)=>St(e,Lt(t));var Et=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var L=(e,t,n)=>new Promise((a,o)=>{var l=c=>{try{i(n.next(c))}catch(h){o(h)}},u=c=>{try{i(n.throw(c))}catch(h){o(h)}},i=c=>c.done?a(c.value):Promise.resolve(c.value).then(l,u);i((n=n.apply(e,t)).next())});import{a as pt,c as It,u as R,b as K,d as B,r as st,o as d,e as _,F as O,f as W,g as X,w as Dt,h as r,p as rt,i as lt,j as s,t as g,k as z,n as j,l as Pt,m as A,q as mt,s as Bt,v as N,x as _t,y as wt,z as it,A as bt,B as $t,C as Vt,D as vt,E as Mt,G as Ft,H as zt}from"./vendor.js?v=64c6a109";var Zo=Et(I=>{const Ut=function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const l of o)if(l.type==="childList")for(const u of l.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&a(u)}).observe(document,{childList:!0,subtree:!0});function n(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerpolicy&&(l.referrerPolicy=o.referrerpolicy),o.crossorigin==="use-credentials"?l.credentials="include":o.crossorigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function a(o){if(o.ep)return;o.ep=!0;const l=n(o);fetch(o.href,l)}};Ut();let yt={};const Ot=e=>L(I,null,function*(){const t=window.vue_lang;new Date().getTime();let n={};try{const l=yield pt({url:window.vue_lang_data,method:"GET"});l.data&&(n=l.data)}catch(l){console.log(l)}const a=It({defaultLanguage:t,translations:n,setGlobalProperties:!1,provideDirective:!1,provideComponent:!1});e.use(a);const{$gettext:o}=a;yt={net:o("net"),tool:o("tool"),download:o("download"),service:o("service"),multimedia:o("multimedia"),nas:o("nas"),monitor:o("monitor"),system:o("system"),networking:o("networking")}}),kt=e=>yt[e]||e;var E=(e,t)=>{const n=e.__vccOpts||e;for(const[a,o]of t)n[a]=o;return n};const Rt=e=>(rt("data-v-13251538"),e=e(),lt(),e),Gt={class:"tabs"},Nt=["href","onClick"],Ht={key:0},Kt=Rt(()=>s("div",{class:"auto"},null,-1)),Wt={setup(e){const{$gettext:t}=R(),n=K(),a=B(()=>n.state.version),o=B(()=>[{to:"/installed",name:t("installed")},{to:"/store",name:t("all app")},{to:"/upload",name:t("manual install")},{to:"/maintance",name:t("maintain"),up:a.value}]);return(l,u)=>{const i=st("router-link");return d(),_("ul",Gt,[(d(!0),_(O,null,W(r(o),c=>(d(),X(i,{to:c.to,custom:"",key:c.to},{default:Dt(({href:h,navigate:y,isActive:k})=>[s("li",{class:j(k&&"active cbi-tab")},[s("a",{href:h,onClick:y},g(c.name),9,Nt),c.up?(d(),_("span",Ht)):z("",!0)],2)]),_:2},1032,["to"]))),128)),Kt])}}};var qt=E(Wt,[["__scopeId","data-v-13251538"]]);const Zt=()=>window.vue_base,Yt=()=>window.istore_api_base||"https://istore.linkease.com",Jt=e=>{if(e)return Pt(e).format("YYYY-MM-DD HH:mm:ss")},Qt=()=>new Date().getTime(),Xt=e=>{if(e<1024)return""+e+"KB";let n=1024,a=0;for(let l=e/1024;l>=1024;l/=1024)n*=1024,a++;let o=["M","G","T","P","E"];return(e/100/(n/100)).toFixed(2)+o[a]},jt=e=>{if(e==null)return 0;if(e<1e4)return e;let n=parseInt(`${e/1e4}`),a=e%1e4;return`${n}\u4E07${a}`},te=()=>window.token||"",ee=()=>{var e;return((e=window==null?void 0:window.device_id)==null?void 0:e.uid)||""},ne=()=>{var e;return((e=window==null?void 0:window.device_id)==null?void 0:e.version)||""},ae=()=>{var e;return((e=window==null?void 0:window.device_id)==null?void 0:e.arch)||""},oe=()=>"https://www.kooldns.cn/bind";var se=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",BasePage:Zt,ApiBaseURL:Yt,formatDate:Jt,UnixDate:Qt,numberToSize:Xt,numberToSum:jt,getToken:te,getDeviceId:ee,getVersion:ne,modelArch:ae,getIframeURL:oe}),U=Z({},se);const D=pt.create({});D.interceptors.request.use(e=>(e.params==null&&(e.params={}),e.params=dt(Z({},e.params),{token:U.getToken(),_t:U.UnixDate()}),e),e=>e);D.interceptors.response.use(e=>e,e=>e);const Y=pt.create({baseURL:U.ApiBaseURL()});Y.interceptors.request.use(e=>(e.params==null&&(e.params={}),e.params=dt(Z({},e.params),{modelArch:U.modelArch(),deviceId:U.getDeviceId(),_t:U.UnixDate()}),e),e=>e);Y.interceptors.response.use(e=>e);const re=()=>new Promise((e,t)=>L(I,null,function*(){try{const n=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/installed"});if(n.status==200){e(n.data);return}t(n.status);return}catch(n){t(n);return}})),le=e=>new Promise((t,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/install",params:{package:e}});if(a.status==200){t(a.data);return}n(a.status);return}catch(a){n(a);return}})),ce=e=>new Promise((t,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/upgrade",params:{package:e}});if(a.status==200){t(a.data);return}n(a.status);return}catch(a){n(a);return}})),ie=e=>new Promise((t,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/remove",params:{package:e}});if(a.status==200){t(a.data);return}n(a.status);return}catch(a){n(a);return}})),ue=()=>new Promise((e,t)=>L(I,null,function*(){try{const n=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/update"});if(n.status==200){e(n.data);return}t(n.status);return}catch(n){t(n);return}})),de=e=>new Promise((t,n)=>L(I,null,function*(){try{const a=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/status",params:{package:e}});if(a.status==200){t(a.data);return}n(a.status);return}catch(a){n(a);return}})),pe=()=>new Promise((e,t)=>L(I,null,function*(){try{const n=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/log"});if(n.status==200){e(n.data);return}t(n.status);return}catch(n){t(n);return}})),_e=e=>new Promise((t,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/upload",headers:{"Content-Type":"multipart/form-data"},data:e});if(a.data){t(a.data);return}}catch(a){n(a);return}n("not found soft")})),he=()=>new Promise((e,t)=>L(I,null,function*(){try{const n=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/light_backup"});if(n.status==200){e(n.data);return}t(n.status);return}catch(n){t(n);return}})),ge=e=>new Promise((t,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/light_restore",headers:{"Content-Type":"multipart/form-data"},data:e});if(a.data){t(a.data);return}}catch(a){n(a);return}n("not found soft")})),fe=e=>new Promise((t,n)=>L(I,null,function*(){try{const a=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/get_available_backup_file_list",params:{path:e}});if(a.status==200){t(a==null?void 0:a.data);return}n(a.status);return}catch(a){n(a);return}})),ve=()=>new Promise((e,t)=>L(I,null,function*(){try{const n=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/get_local_backup_dir_path"});if(n.status==200){e(n==null?void 0:n.data);return}t(n.status);return}catch(n){t(n);return}})),me=(e,t)=>new Promise((n,a)=>L(I,null,function*(){try{const o=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/local_backup",params:{path:e,force:t}});if(o.status==200){n(o==null?void 0:o.data);return}a(o.status);return}catch(o){a(o);return}})),we=e=>new Promise((t,n)=>L(I,null,function*(){try{const a=yield D({method:"POST",url:"/cgi-bin/luci/admin/store/local_restore",params:{path:e}});if(a.status==200){t(a.data);return}n(a.status);return}catch(a){n(a);return}})),be=()=>new Promise((e,t)=>L(I,null,function*(){try{const n=yield D({method:"GET",url:"/cgi-bin/luci/admin/store/get_block_devices"});if(n.status==200){e(n==null?void 0:n.data);return}t(n.status);return}catch(n){t(n);return}}));var $e=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",getInstalledApp:re,installApp:le,upgradeApp:ce,removeApp:ie,updateAppStore:ue,getAppStatus:de,getLog:pe,uploadAppIPK:_e,lightBackup:he,lightRestore:ge,backupFileList:fe,localBackupdirPath:ve,localBackup:me,localRestore:we,getBlockDevices:be});const ye=e=>new Promise((t,n)=>L(I,null,function*(){var a,o,l,u;try{const i=yield Y({method:"GET",url:"/api/store/list",params:e});if(((a=i==null?void 0:i.data)==null?void 0:a.success)===0){t((o=i==null?void 0:i.data)==null?void 0:o.result);return}if((l=i==null?void 0:i.data)!=null&&l.message){n((u=i==null?void 0:i.data)==null?void 0:u.message);return}n("error")}catch(i){console.log(i),n(i);return}})),ke=U.ApiBaseURL(),xe=e=>`${ke}${e}`,Ce=()=>new Promise((e,t)=>L(I,null,function*(){var n,a,o,l;try{const u=yield Y({method:"GET",url:"/api/store/tags"});if(((n=u==null?void 0:u.data)==null?void 0:n.success)===0){e((a=u==null?void 0:u.data)==null?void 0:a.result);return}if((o=u==null?void 0:u.data)!=null&&o.message){t((l=u==null?void 0:u.data)==null?void 0:l.message);return}t("error")}catch(u){t(u);return}})),Se=e=>new Promise((t,n)=>{Y({method:"POST",url:"/api/store/expand",data:{appsId:e||[],deviceId:U.getDeviceId()}}).then(a=>{var o,l,u;if(((o=a.data)==null?void 0:o.success)==0&&((l=a.data)==null?void 0:l.result)){t((u=a.data)==null?void 0:u.result);return}n("not found expand")}).catch(a=>{n(a)})}),Le=e=>{Y({method:"POST",url:"/api/store/download",data:{appId:e,deviceId:U.getDeviceId()}}).then(t=>{var n;((n=t.data)==null?void 0:n.success)!=0})},Ae=e=>new Promise((t,n)=>{Y({method:"POST",url:"/api/store/star",data:{appId:e,deviceId:U.getDeviceId()}}).then(a=>{var o;if(((o=a.data)==null?void 0:o.success)==0){t(a.data);return}n("not found expand")}).catch(a=>{n(a)})});var Te=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",getStoreAppList:ye,getStoreAppIcon:xe,getStoreTags:Ce,getAppExpandData:Se,increasingDownloadCount:Le,postStarApp:Ae});const Ee=()=>D({method:"GET",url:"/cgi-bin/luci/admin/store/check_self_upgrade"}),Ie=()=>D({method:"POST",url:"/cgi-bin/luci/admin/store/do_self_upgrade"});var De=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",updateIstore:Ee,selfUpdateIstore:Ie}),T=Z(Z(Z({},$e),Te),De);const Pe={setup(){const e=K(),t=B(()=>e.state.log.action),n=B(()=>e.state.log.content),a=B(()=>e.state.log.end),o=B(()=>e.state.log.exitCode),l=A(!1),u=A(null);let i="",c=A(""),h=A("."),y="",k="";switch(t.value){case"install":i="\u6B63\u5728\u5B89\u88C5\u63D2\u4EF6",y="\u5B89\u88C5\u5B8C\u6210,\u8BF7\u5173\u95ED\u5F53\u524D\u7A97\u53E3",k="\u5B89\u88C5\u5931\u8D25,\u9519\u8BEF\u7801";break;case"uninstall":i="\u6B63\u5728\u5378\u8F7D\u63D2\u4EF6",y="\u5378\u8F7D\u6210\u529F,\u8BF7\u5173\u95ED\u5F53\u524D\u7A97\u53E3",k="\u5378\u8F7D\u5931\u8D25,\u9519\u8BEF\u7801";break;case"upgrade":i="\u6B63\u5728\u66F4\u65B0\u63D2\u4EF6",y="\u66F4\u65B0\u6210\u529F,\u8BF7\u5173\u95ED\u5F53\u524D\u7A97\u53E3",k="\u66F4\u65B0\u5931\u8D25,\u9519\u8BEF\u7801";break;case"upload":i="\u6B63\u5728\u4E0A\u4F20\u63D2\u4EF6",y="\u79BB\u7EBF\u5B89\u88C5\u6210\u529F,\u8BF7\u5173\u95ED\u5F53\u524D\u7A97\u53E3",k="\u79BB\u7EBF\u5B89\u88C5\u5931\u8D25,\u9519\u8BEF\u7801";break}mt(()=>{document.body.setAttribute("lock-scroll",!0),V()}),Bt(()=>{document.body.removeAttribute("lock-scroll")});const P=()=>{var f;(f=u.value)!=null&&f.scrollHeight&&(u.value.scrollTop=u.value.scrollHeight)},V=()=>{setTimeout(()=>{if(a.value){w(),P();return}T.getLog().then(f=>{if(a.value){w(),P();return}switch(f==null?void 0:f.code){}const C=f==null?void 0:f.stdout,v=f==null?void 0:f.stderr;(C||v)&&(c.value=`${C}${v}`),h.value=`${h.value}.`,P(),V()}).catch(f=>{c.value=`${f}`,P(),V()})},500)},w=()=>{l.value=!0},p=()=>{location.reload()};return{logText:B(()=>l.value?o.value!==void 0&&o.value!==0?`${i} ${n.value} ${k} ${o.value} -`:`${c} +`:`${i} ${n.value} ${y} -`:`${c} +`:`${i} ${h.value} -${l.value} +${c.value} ${n.value} -`),Close:p,disabled:u,textDom:i}},mounted(){this.$nextTick(()=>{const t=document.querySelector("body");t.append?t.append(this.$el):t.appendChild(this.$el)})}},he=t=>(re("data-v-6695545b"),t=t(),le(),t),Bt={class:"software-log_shade"},Vt=he(()=>s("div",{class:"software-log_shade__bg"},null,-1)),Ft={class:"software-log_shade__pannel"},Mt=he(()=>s("div",{class:"software-log_shade__pannel-title"}," \u8F6F\u4EF6\u4E2D\u5FC3 - \u65E5\u5FD7\u8BB0\u5F55 ",-1)),zt=he(()=>s("div",{class:"software-log_shade__pannel-now"},[s("i",null,"\xA0\xA0\xA0\xA0\u63D2\u4EF6\u5B89\u88C5/\u5378\u8F7D\u8FC7\u7A0B\u4E2D\u8BF7\u52FF\u5237\u65B0\u6B64\u9875\u9762\uFF01")],-1)),Ut={class:"software-log_shade__pannel-content"},Ot=["value"],Rt={key:0,class:"software-log_shade__pannel-btn"};function Gt(t,e,n,a,o,u){return d(),_("div",Bt,[Vt,s("div",Ft,[Mt,zt,s("div",Ut,[s("textarea",{ref:"textDom",cols:"63",rows:"26",wrap:"on",readonly:"readonly",autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellcheck:"false",value:a.logText},null,8,Ot)]),a.disabled?(d(),_("div",Rt,[s("button",{class:"close",onClick:e[0]||(e[0]=i=>a.Close())}," \u5173\u95ED ")])):z("",!0)])])}var Nt=E(Pt,[["render",Gt],["__scopeId","data-v-6695545b"]]);const Ht={setup(t){const e=K();e.dispatch("getData");const n=B(()=>e.state.log.status);return(a,o)=>{const u=se("router-view");return d(),_(O,null,[N(We),N(u),r(n)?(d(),X(Nt,{key:0})):z("",!0)],64)}}},Kt={class:"toast"},Wt=["title"],qt={key:1,class:"msg"},Zt=["innerHTML"],Yt={props:{content:String,type:String,Close:Function,keep:Boolean,html:Boolean},setup(t){const e=t,{$gettext:n}=R(),a=A(e.content),o=A(e.keep),u=A(e.html);e.keep||setTimeout(()=>{e.Close()},2e3);const i=()=>{e.Close()};return(c,l)=>(d(),_("div",Kt,[o.value?(d(),_("div",{key:0,class:"toast-close",onClick:i,title:r(n)("closed")},"x",8,Wt)):z("",!0),u.value?z("",!0):(d(),_("div",qt,g(a.value),1)),u.value?(d(),_("div",{key:2,class:"msg",innerHTML:a.value},null,8,Zt)):z("",!0)]))}};var Jt=E(Yt,[["__scopeId","data-v-6a723585"]]);const M=t=>{let e={content:"",type:"",keep:!1,html:!1,Close:()=>{a.unmount(n),document.body.removeChild(n)}};t!=null&&(typeof t=="object"?(e.content=(t==null?void 0:t.content)||"",e.type=(t==null?void 0:t.type)||"",e.keep=(t==null?void 0:t.keep)||!1,e.html=(t==null?void 0:t.html)||!1):e.content=t);let n=document.createElement("div"),a=_e(Jt,e);document.body.append(n),a.mount(n),be(()=>{a.unmount(n),document.body.removeChild(n)})},Qt={props:{content:String,Close:Function},setup(t){return{message:t.content}}},Xt=t=>(re("data-v-6d7664a4"),t=t(),le(),t),jt={class:"loading"},en=Xt(()=>s("div",{class:"icon"},null,-1)),tn={class:"msg"};function nn(t,e,n,a,o,u){return d(),_("div",jt,[en,s("div",tn,g(a.message),1)])}var an=E(Qt,[["render",nn],["__scopeId","data-v-6d7664a4"]]),H={props:{content:"",Close:()=>{}},Start(t){this.props={content:t,Close:()=>{e.unmount(n),document.body.removeChild(n)}};let e=_e(an,this.props),n=document.createElement("div");document.body.append(n),e.mount(n),be(()=>{this.props.Close()})},Stop(){this.props.Close()}};const on=()=>` +`),Close:p,disabled:l,textDom:u}},mounted(){this.$nextTick(()=>{const e=document.querySelector("body");e.append?e.append(this.$el):e.appendChild(this.$el)})}},ht=e=>(rt("data-v-6695545b"),e=e(),lt(),e),Be={class:"software-log_shade"},Ve=ht(()=>s("div",{class:"software-log_shade__bg"},null,-1)),Me={class:"software-log_shade__pannel"},Fe=ht(()=>s("div",{class:"software-log_shade__pannel-title"}," \u8F6F\u4EF6\u4E2D\u5FC3 - \u65E5\u5FD7\u8BB0\u5F55 ",-1)),ze=ht(()=>s("div",{class:"software-log_shade__pannel-now"},[s("i",null,"\xA0\xA0\xA0\xA0\u63D2\u4EF6\u5B89\u88C5/\u5378\u8F7D\u8FC7\u7A0B\u4E2D\u8BF7\u52FF\u5237\u65B0\u6B64\u9875\u9762\uFF01")],-1)),Ue={class:"software-log_shade__pannel-content"},Oe=["value"],Re={key:0,class:"software-log_shade__pannel-btn"};function Ge(e,t,n,a,o,l){return d(),_("div",Be,[Ve,s("div",Me,[Fe,ze,s("div",Ue,[s("textarea",{ref:"textDom",cols:"63",rows:"26",wrap:"on",readonly:"readonly",autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellcheck:"false",value:a.logText},null,8,Oe)]),a.disabled?(d(),_("div",Re,[s("button",{class:"close",onClick:t[0]||(t[0]=u=>a.Close())}," \u5173\u95ED ")])):z("",!0)])])}var Ne=E(Pe,[["render",Ge],["__scopeId","data-v-6695545b"]]);const He={setup(e){const t=K();t.dispatch("getData");const n=B(()=>t.state.log.status);return(a,o)=>{const l=st("router-view");return d(),_(O,null,[N(qt),N(l),r(n)?(d(),X(Ne,{key:0})):z("",!0)],64)}}},Ke={class:"toast"},We=["title"],qe={key:1,class:"msg"},Ze=["innerHTML"],Ye={props:{content:String,type:String,Close:Function,keep:Boolean,html:Boolean},setup(e){const t=e,{$gettext:n}=R(),a=A(t.content),o=A(t.keep),l=A(t.html);t.keep||setTimeout(()=>{t.Close()},2e3);const u=()=>{t.Close()};return(i,c)=>(d(),_("div",Ke,[o.value?(d(),_("div",{key:0,class:"toast-close",onClick:u,title:r(n)("closed")},"x",8,We)):z("",!0),l.value?z("",!0):(d(),_("div",qe,g(a.value),1)),l.value?(d(),_("div",{key:2,class:"msg",innerHTML:a.value},null,8,Ze)):z("",!0)]))}};var Je=E(Ye,[["__scopeId","data-v-6a723585"]]);const F=e=>{let t={content:"",type:"",keep:!1,html:!1,Close:()=>{a.unmount(n),document.body.removeChild(n)}};e!=null&&(typeof e=="object"?(t.content=(e==null?void 0:e.content)||"",t.type=(e==null?void 0:e.type)||"",t.keep=(e==null?void 0:e.keep)||!1,t.html=(e==null?void 0:e.html)||!1):t.content=e);let n=document.createElement("div"),a=_t(Je,t);document.body.append(n),a.mount(n),wt(()=>{a.unmount(n),document.body.removeChild(n)})},Qe={props:{content:String,Close:Function},setup(e){return{message:e.content}}},Xe=e=>(rt("data-v-6d7664a4"),e=e(),lt(),e),je={class:"loading"},tn=Xe(()=>s("div",{class:"icon"},null,-1)),en={class:"msg"};function nn(e,t,n,a,o,l){return d(),_("div",je,[tn,s("div",en,g(a.message),1)])}var an=E(Qe,[["render",nn],["__scopeId","data-v-6d7664a4"]]),H={props:{content:"",Close:()=>{}},Start(e){this.props={content:e,Close:()=>{t.unmount(n),document.body.removeChild(n)}};let t=_t(an,this.props),n=document.createElement("div");document.body.append(n),t.mount(n),wt(()=>{this.props.Close()})},Stop(){this.props.Close()}};const on=()=>` - `,sn=()=>{const t=document.createElement("div");return t.className="software-log_shade",t.setAttribute("data-logger",""),t.innerHTML=on(),t},rn=()=>{const t=document.createElement("div");return t.className="software-log_shade__bg",t},ln=()=>{const t=document.createElement("div");return t.className="software-log_shade__pannel",t},cn=t=>{const e=document.createElement("div");return e.className="software-log_shade__pannel-title",e.textContent=t,e},un=t=>{const e=document.createElement("div");return e.className="software-log_shade__pannel-now",e.innerHTML=`    ${t}`,e},dn=()=>{const t=document.createElement("div");return t.className="software-log_shade__pannel-content",t},pn=t=>{const e=document.createElement("textarea");return e.setAttribute("readonly",""),e.setAttribute("cols","63"),e.setAttribute("rows","26"),e.setAttribute("wrap","on"),e.setAttribute("autocomplete","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck","false"),e.className="software-log_shade__pannel-content-text",e.value=t,e},_n=(t,e)=>{const n=document.createElement("button");return n.className="software-log_shade__pannel-btn-close",n.textContent=t,n.addEventListener("click",e),n},hn=()=>{const t=document.createElement("div");return t.className="software-log_shade__pannel-btn",t},gn=t=>{const e=t.title!=null?t.title:"\u65E5\u5FD7\u8BB0\u5F55",n=t.description!=null?t.description:"\u63D2\u4EF6\u5B89\u88C5/\u5378\u8F7D\u8FC7\u7A0B\u4E2D\u8BF7\u52FF\u5237\u65B0\u6B64\u9875\u9762!",a=t.clearText!=null?t.clearText:"\u5173\u95ED",o=t.value!=null?t.value:"",u=t.callback!=null?t.callback:()=>{};return{title:e,description:n,clearText:a,valueText:o,callback:u}},ue=t=>{const{title:e,description:n,clearText:a,valueText:o,callback:u}=gn(t);let i=!1,c="",l="",h=!1;const y=sn(),k=()=>{h||(document.body&&document.body.removeAttribute("lock-scroll"),u&&u(),y&&y.remove(),h=!0)},P=()=>{q.scrollTop=q.scrollHeight},V=S=>{q.value=`${c} -${S}`,P()},w=S=>{l=S,V(l)},p=S=>{w(l+S)},b=()=>{c+=".",w(l)},f=S=>{i=S,i?J.appendChild(te):J.removeChild(te)},C=()=>i,v=()=>{C()||setTimeout(()=>{T.getLog().then(S=>{switch(S==null?void 0:S.code){}const ne=S==null?void 0:S.stdout,G=S==null?void 0:S.stderr;(ne||G)&&w(`${ne}${G}`),b()}).catch(S=>{w(`${S}`)}).finally(()=>{v()})},500)};v();const $=rn(),m=ln(),x=cn(e),F=un(n),ee=dn(),q=pn(o);ee.appendChild(q);const J=hn(),te=_n(a,k);return m.append(x,F,ee,J),y.append($,m),document.body.appendChild(y),document.body.setAttribute("lock-scroll","true"),{close:k,setValue:w,addValue:p,setDisabled:f,getDisabled:C}},ce=t=>(re("data-v-c7ef5ab6"),t=t(),le(),t),fn={class:"app-container"},vn={class:"app-info"},mn={class:"app-f"},wn={class:"app-icon"},bn=["alt","src"],$n={class:"app-tags"},yn={class:"tag"},kn=ce(()=>s("span",{class:"block"},"\uFF5C",-1)),xn={class:"app-r"},Cn=["title"],Sn={class:"app-name"},Ln={class:"app-version"},An={class:"app-as"},Tn=ce(()=>s("span",{style:{margin:"0 10px"}},"|",-1)),En=["title"],In=["title"],Dn=["title"],Pn={class:"app-author"},Bn={class:"app-date"},Vn={class:"app-btns"},Fn=["href"],Mn=ce(()=>s("div",{class:"auto"},null,-1)),zn=ce(()=>s("div",{class:"app-margin-left"},null,-1)),Un=["href"],On=ce(()=>s("div",{class:"app-margin-left"},null,-1)),Rn={props:{col:{type:Object,default(){return{description:"",tags:[],entry:"",author:"",depends:[],installed:!1,hasupdate:!1,title:"",time:"",release:1,website:"",name:"",version:""}}}},setup(t){const e=t,{$gettext:n}=R(),a=B(()=>e.col),o=K(),u=U.formatDate,i=U.numberToSum,c=p=>{const b=ue({title:n("updating plugin"),description:n("do not refresh this page during plugin installation/uninstallation"),clearText:n("closed"),valueText:"",callback:()=>{location.reload()}});T.upgradeApp(p).then(f=>{let C=f.stdout,v=f.stderr;b.addValue(`${C} + `,sn=()=>{const e=document.createElement("div");return e.className="software-log_shade",e.setAttribute("data-logger",""),e.innerHTML=on(),e},rn=()=>{const e=document.createElement("div");return e.className="software-log_shade__bg",e},ln=()=>{const e=document.createElement("div");return e.className="software-log_shade__pannel",e},cn=e=>{const t=document.createElement("div");return t.className="software-log_shade__pannel-title",t.textContent=e,t},un=e=>{const t=document.createElement("div");return t.className="software-log_shade__pannel-now",t.innerHTML=`    ${e}`,t},dn=()=>{const e=document.createElement("div");return e.className="software-log_shade__pannel-content",e},pn=e=>{const t=document.createElement("textarea");return t.setAttribute("readonly",""),t.setAttribute("cols","63"),t.setAttribute("rows","26"),t.setAttribute("wrap","on"),t.setAttribute("autocomplete","off"),t.setAttribute("autocapitalize","off"),t.setAttribute("spellcheck","false"),t.className="software-log_shade__pannel-content-text",t.value=e,t},_n=(e,t)=>{const n=document.createElement("button");return n.className="software-log_shade__pannel-btn-close",n.textContent=e,n.addEventListener("click",t),n},hn=()=>{const e=document.createElement("div");return e.className="software-log_shade__pannel-btn",e},gn=e=>{const t=e.title!=null?e.title:"\u65E5\u5FD7\u8BB0\u5F55",n=e.description!=null?e.description:"\u63D2\u4EF6\u5B89\u88C5/\u5378\u8F7D\u8FC7\u7A0B\u4E2D\u8BF7\u52FF\u5237\u65B0\u6B64\u9875\u9762!",a=e.clearText!=null?e.clearText:"\u5173\u95ED",o=e.value!=null?e.value:"",l=e.callback!=null?e.callback:()=>{};return{title:t,description:n,clearText:a,valueText:o,callback:l}},ut=e=>{const{title:t,description:n,clearText:a,valueText:o,callback:l}=gn(e);let u=!1,i="",c="",h=!1;const y=sn(),k=()=>{h||(document.body&&document.body.removeAttribute("lock-scroll"),l&&l(),y&&y.remove(),h=!0)},P=()=>{q.scrollTop=q.scrollHeight},V=S=>{q.value=`${i} +${S}`,P()},w=S=>{c=S,V(c)},p=S=>{w(c+S)},b=()=>{i+=".",w(c)},f=S=>{u=S,u?J.appendChild(et):J.removeChild(et)},C=()=>u,v=()=>{C()||setTimeout(()=>{T.getLog().then(S=>{switch(S==null?void 0:S.code){}const nt=S==null?void 0:S.stdout,G=S==null?void 0:S.stderr;(nt||G)&&w(`${nt}${G}`),b()}).catch(S=>{w(`${S}`)}).finally(()=>{v()})},500)};v();const $=rn(),m=ln(),x=cn(t),M=un(n),tt=dn(),q=pn(o);tt.appendChild(q);const J=hn(),et=_n(a,k);return m.append(x,M,tt,J),y.append($,m),document.body.appendChild(y),document.body.setAttribute("lock-scroll","true"),{close:k,setValue:w,addValue:p,setDisabled:f,getDisabled:C}},ct=e=>(rt("data-v-54a5b850"),e=e(),lt(),e),fn={class:"app-container"},vn={class:"app-info"},mn={class:"app-f"},wn={class:"app-icon"},bn=["alt","src"],$n={class:"app-tags"},yn={class:"tag"},kn=ct(()=>s("span",{class:"block"},"\uFF5C",-1)),xn={class:"app-r"},Cn=["title"],Sn={class:"app-name"},Ln={class:"app-version"},An={class:"app-as"},Tn=ct(()=>s("span",{style:{margin:"0 10px"}},"|",-1)),En=["title"],In=["title"],Dn=["title"],Pn={class:"app-author"},Bn={class:"app-date"},Vn={class:"app-btns"},Mn=["href"],Fn=ct(()=>s("div",{class:"auto"},null,-1)),zn=ct(()=>s("div",{class:"app-margin-left"},null,-1)),Un=["href"],On=ct(()=>s("div",{class:"app-margin-left"},null,-1)),Rn={props:{col:{type:Object,default(){return{description:"",tags:[],entry:"",author:"",depends:[],installed:!1,hasupdate:!1,title:"",time:"",release:1,website:"",name:"",version:""}}}},setup(e){const t=e,{$gettext:n}=R(),a=B(()=>t.col),o=K(),l=U.formatDate,u=U.numberToSum,i=p=>{const b=ut({title:n("updating plugin"),description:n("do not refresh this page during plugin installation/uninstallation"),clearText:n("closed"),valueText:"",callback:()=>{location.reload()}});T.upgradeApp(p).then(f=>{let C=f.stdout,v=f.stderr;b.addValue(`${C} ${v}`),b.addValue(` ${n("the update is success, please close the current window")}`)}).catch(f=>{b.addValue(`${f}`),b.addValue(` -${n("update failed with error code")}: ${500}`)}).finally(()=>{b.setDisabled(!0);try{window.L.ui.menu.flushCache()}catch(f){}})},l=p=>{const b=ue({title:n("installing plugin"),description:n("do not refresh this page during plugin installation/uninstallation"),clearText:n("closed"),valueText:"",callback:()=>{location.reload()}});T.increasingDownloadCount(p),o.dispatch("apps/incrAppDownload",{name:p}),T.installApp(p).then(f=>{let C=f.stdout,v=f.stderr;b.addValue(`${C} +${n("update failed with error code")}: ${500}`)}).finally(()=>{b.setDisabled(!0);try{window.L.ui.menu.flushCache()}catch(f){}})},c=p=>{const b=ut({title:n("installing plugin"),description:n("do not refresh this page during plugin installation/uninstallation"),clearText:n("closed"),valueText:"",callback:()=>{location.reload()}});T.increasingDownloadCount(p),o.dispatch("apps/incrAppDownload",{name:p}),T.installApp(p).then(f=>{let C=f.stdout,v=f.stderr;b.addValue(`${C} ${v}`),b.addValue(` ${n("installation is complete, please close the current window")}`)}).catch(f=>{b.addValue(`${f}`),b.addValue(` -${n("installation failed, error code")}: ${500}`)}).finally(()=>{b.setDisabled(!0);try{window.L.ui.menu.flushCache()}catch(f){}})},h=p=>{if(!confirm(n("are you sure you want to uninstall %{name}?",{name:p})))return;const f=ue({title:n("uninstalling plugin"),description:n("do not refresh this page during plugin installation/uninstallation"),clearText:n("closed"),valueText:"",callback:()=>{location.reload()}});T.removeApp(p).then(C=>{let v=C.stdout,$=C.stderr;f.addValue(`${v} +${n("installation failed, error code")}: ${500}`)}).finally(()=>{b.setDisabled(!0);try{window.L.ui.menu.flushCache()}catch(f){}})},h=p=>{if(!confirm(n("are you sure you want to uninstall %{name}?",{name:p})))return;const f=ut({title:n("uninstalling plugin"),description:n("do not refresh this page during plugin installation/uninstallation"),clearText:n("closed"),valueText:"",callback:()=>{location.reload()}});T.removeApp(p).then(C=>{let v=C.stdout,$=C.stderr;f.addValue(`${v} ${$}`),f.addValue(` ${n("uninstallation succeeded, please close the current window")}`)}).catch(C=>{f.addValue(`${C}`),f.addValue(` -${n("uninstall failed, error code")}: ${500}`)}).finally(()=>{f.setDisabled(!0);try{window.L.ui.menu.flushCache()}catch(C){}})},y=p=>L(this,null,function*(){H.Start();try{(yield T.postStarApp(p))&&o.dispatch("apps/incrAppStar",{name:p})}catch(b){}H.Stop()}),k=()=>{M(n("you have already liked"))},P=p=>a.value.installed?`/luci-static/resources/app-icons/${p}.png`:a.value.icon?T.getStoreAppIcon(a.value.icon):`/luci-static/resources/app-icons/${p}.png`,V=p=>{switch(window.vue_lang){case"zh-cn":case"zh-tw":return p.title}return p.title_en||p.title},w=p=>{switch(window.vue_lang){case"zh-cn":case"zh-tw":return p.description}return p.description_en||p.description};return(p,b)=>{var v,$,m,x,F,ee,q,J,te,S,ne;const f=se("svg-star-off"),C=se("svg-star-on");return d(),_("div",fn,[s("div",vn,[s("div",mn,[s("div",wn,[s("img",{alt:r(n)("Icon is gone")+"~",src:P(r(a).name)},null,8,bn)]),s("div",$n,[(d(!0),_(O,null,W(r(a).tags,G=>(d(),_(O,{key:G},[s("div",yn,[s("span",null,g(G),1)]),kn],64))),128))])]),s("div",xn,[s("div",{class:"app-title",title:r(a).name},[s("span",Sn,g(V(r(a))),1),s("span",Ln,"v"+g(r(a).version),1)],8,Cn),s("div",An,[s("span",null,g(r(n)("%{name} downloads",{name:r(i)(($=(v=r(a))==null?void 0:v.expand)==null?void 0:$.downloadCount)})),1),Tn,s("span",null,g(r(n)("%{name} links",{name:r(i)((x=(m=r(a))==null?void 0:m.expand)==null?void 0:x.starCount)})),1),((F=r(a))==null?void 0:F.expand)!=null?(d(),_(O,{key:0},[(q=(ee=r(a))==null?void 0:ee.expand)!=null&&q.isStar?(d(),_("a",{key:0,class:"star-btn",title:r(n)("liked"),onClick:b[0]||(b[0]=G=>k())},[N(f)],8,En)):(d(),_("a",{key:1,class:"star-btn",title:r(n)("like"),onClick:b[1]||(b[1]=G=>y(r(a).name))},[N(C)],8,In))],64)):z("",!0)]),s("div",{class:"app-description cbi-value-description",title:w(r(a))},[s("span",null,g(w(r(a))),1)],8,Dn),s("div",Pn,[s("span",null,g(r(n)("author"))+": "+g(r(a).author||"null"),1)]),s("div",Bn,[s("span",null,g(r(n)("update date"))+": "+g(r(u)(r(a).time*1e3)||"null"),1)])])]),s("div",Vn,[r(a).website?(d(),_("a",{key:0,class:"app-btn cbi-button cbi-button-apply",target:"_blank",href:r(a).website},g(r(n)("website")),9,Fn)):z("",!0),Mn,r(a).installed?(d(),_(O,{key:1},[((J=r(a))==null?void 0:J.curVersion)!=((te=r(a))==null?void 0:te.lastVersion)||((S=r(a))==null?void 0:S.curRelease)!=((ne=r(a))==null?void 0:ne.lastRelease)?(d(),_("a",{key:0,class:"app-btn cbi-button cbi-button-reload",onClick:b[2]||(b[2]=G=>c(r(a).name))},g(r(n)("upgrade")),1)):z("",!0),zn,r(a).entry?(d(),_("a",{key:1,class:"app-btn cbi-button cbi-button-apply",href:r(a).entry},g(r(n)("open")),9,Un)):z("",!0),On,s("a",{class:"app-btn cbi-button cbi-button-remove",onClick:b[3]||(b[3]=G=>h(r(a).name))},g(r(n)("uninstall")),1)],64)):(d(),_("a",{key:2,class:"app-btn cbi-button cbi-button-add",onClick:b[4]||(b[4]=G=>l(r(a).name))},g(r(n)("install")),1))])])}}};var ke=E(Rn,[["__scopeId","data-v-c7ef5ab6"]]);const Gn={class:"cbi-section"},Nn={class:"containers"},Hn={setup(t){const e=K(),n=B(()=>e.getters["apps/LocalApps"]);return(a,o)=>(d(),_("fieldset",Gn,[s("div",Nn,[(d(!0),_(O,null,W(r(n),u=>(d(),X(ke,{key:u.name,col:u},null,8,["col"]))),128))])]))}};var Kn=E(Hn,[["__scopeId","data-v-0046e0f2"]]);const Wn={class:"sort-container"},qn={class:"sort-title"},Zn={class:"sort-value"},Yn=["value","onClick"],Jn={setup(t){const{$gettext:e}=R(),n=A("default"),a=K(),o=A([{key:e("default"),value:"default"},{key:e("By download"),value:"download"},{key:e("By rating"),value:"star"}]),u=i=>{n.value=i,a.dispatch("apps/filterCurApps",{sort:i})};return(i,c)=>(d(),_("div",Wn,[s("div",qn,g(r(e)("order"))+":",1),s("div",Zn,[(d(!0),_(O,null,W(o.value,l=>(d(),_("input",{key:l.value,class:j(["cbi-button",{"cbi-button-apply":n.value==l.value}]),type:"button",value:l.key,onClick:h=>u(l.value)},null,10,Yn))),128))])]))}};var Qn=E(Jn,[["__scopeId","data-v-e3845a5c"]]);const Xn={class:"tags-container"},jn={class:"tags-title"},ea={class:"tags-value"},ta=["value"],na=["value","onClick"],aa={setup(t){const{$gettext:e}=R(),n=A("default"),a=K(),o=B(()=>a.getters["tags/Tags"]),u=i=>{n.value=i,a.dispatch("apps/filterCurApps",{tag:i})};return(i,c)=>(d(),_("div",Xn,[s("div",jn,g(r(e)("tag"))+": ",1),s("div",ea,[s("input",{class:j(["cbi-button",{"cbi-button-apply":n.value=="default"}]),type:"button",value:r(e)("default"),onClick:c[0]||(c[0]=l=>u("default"))},null,10,ta),(d(!0),_(O,null,W(r(o),l=>(d(),_("input",{key:l,class:j(["cbi-button",{"cbi-button-apply":n.value==l}]),type:"button",value:l,onClick:h=>u(l)},null,10,na))),128))])]))}};var oa=E(aa,[["__scopeId","data-v-3aaf04ee"]]);const sa=["onSubmit"],ra=["placeholder"],la={setup(t){const{$gettext:e}=R(),n=A(""),a=K(),o=()=>{a.dispatch("apps/filterCurApps",{search:n.value})};return(u,i)=>{const c=se("svg-search");return d(),_("form",{class:"search",onSubmit:ye(o,["prevent"])},[s("a",{class:"search-btn",onClick:o},[N(c)]),ie(s("input",{type:"text",placeholder:r(e)("please enter the search keyword"),"onUpdate:modelValue":i[0]||(i[0]=l=>n.value=l)},null,8,ra),[[$e,n.value,void 0,{trim:!0}]])],40,sa)}}};var ca=E(la,[["__scopeId","data-v-c4e8a9f2"]]);const ia={class:"containers"},ua={key:1,style:{margin:"10px 0","text-align":"center",width:"100%"}},da={setup(t){const{$gettext:e}=R(),n=K(),a=B(()=>n.getters["apps/StoreApps"]),o=B(()=>n.state.apps.Load);return(u,i)=>(d(),_("div",ia,[r(o)?(d(!0),_(O,{key:0},W(r(a),c=>(d(),X(ke,{key:c.name,col:c},null,8,["col"]))),128)):(d(),_("span",ua,g(r(e)("loading data"))+"...",1))]))}};var pa=E(da,[["__scopeId","data-v-1b494368"]]);const _a={class:"cbi-section"},ha={setup(t){return(e,n)=>(d(),_("fieldset",_a,[N(ca),N(oa),N(Qn),N(pa)]))}};var ga=E(ha,[["__scopeId","data-v-74b0669f"]]);const fa=t=>(re("data-v-9c880c04"),t=t(),le(),t),va={class:"cbi-section"},ma={class:"container_msg cbi-map-descr"},wa=["onSubmit"],ba={class:"upload-file"},$a={class:"button"},ya=fa(()=>s("div",{class:"auto"},null,-1)),ka={setup(t){const{$gettext:e}=R(),n=A(null),a=A(null);we(()=>{if(n.value){const c=n.value;c.addEventListener("dragenter",l=>{(l.fromElement===null||!c.contains(l.fromElement))&&console.log("dragenter")},!1),c.addEventListener("dragleave",l=>{(l.fromElement===null||!c.contains(l.fromElement))&&console.log("dragleave")},!1),c.addEventListener("dragover",l=>{l.preventDefault(),l.dataTransfer.dropEffect="link"},!1),c.addEventListener("drop",l=>{console.log("drop"),l.preventDefault(),o(l)},!1)}});const o=c=>{const l=c.dataTransfer.files;if(l&&l.length>0){const h=l[0];i(h);return}},u=c=>{const l=c.target.files;if(l&&l.length>0){const h=l[0];i(h);return}},i=c=>{if(c.name.endsWith(".run")||c.name.endsWith(".ipk")){const l=ue({title:e("uploading plugin"),description:e("do not refresh this page during plugin installation/uninstallation"),clearText:e("closed"),valueText:"",callback:()=>{location.reload()}});let h=new FormData;h.append(c.name,c),T.uploadAppIPK(h).then(y=>{let k=y.stdout,P=y.stderr;l.addValue(`${k} -${P}`),l.addValue(` -${e("offline installation is successful, please close the current window")}`)}).catch(y=>{l.addValue(`${y}`),l.addValue(` -${e("offline installation failed with error code")}: ${500}`)}).finally(()=>{l.setDisabled(!0);try{window.L.ui.menu.flushCache()}catch(y){}})}};return(c,l)=>{var h;return d(),_("fieldset",va,[s("div",ma,[s("span",null,g(r(e)("offline install")),1),s("span",null,"\xB7 "+g(r(e)("from this page, you can upload plugin packages to install plugins")),1),s("span",null,"\xB7 "+g(r(e)("support .ipk plug-in, .run self-extracting format")),1)]),s("form",{onSubmit:ye(i,["prevent"])},[s("div",{class:"flex",ref_key:"upl",ref:n},[s("label",ba,[s("span",null,g(((h=a.value)==null?void 0:h.name)||r(e)("no files selected")),1),s("input",{type:"file",name:"file",accept:".ipk, .run",hidden:"",onChange:u},null,32),s("div",$a,g(r(e)("select or drag and drop files")),1)]),ya],512)],40,wa)])}}};var xa=E(ka,[["__scopeId","data-v-9c880c04"]]);const Ca={class:"cbi-section"},Sa={class:"webapp-container"},La=["src"],Aa={setup(t){const e=B(()=>""),n=B(()=>""),a=B(()=>`${U.getIframeURL()}/#/apps?token=${n.value}&deviceId=${e.value}`);return(o,u)=>(d(),_("fieldset",Ca,[s("div",Sa,[s("iframe",{src:r(a),sandbox:"allow-scripts allow-same-origin allow-popups",seamless:""},null,8,La)])]))}};var Ta=E(Aa,[["__scopeId","data-v-8e330954"]]);const Ea={class:"log-containers"},Ia={key:0,class:"containers-tit"},Da={key:1,class:"containers-tit"},Pa=["value"],Ba={key:1},Va={setup(t){const{$gettext:e}=R(),n=K(),a=B(()=>n.state.version),o=B(()=>n.state.versionLoad),u=()=>{H.Start(`${e("updateing")}...`),T.selfUpdateIstore().then(({data:i})=>{if(i){const{stdout:c,stderr:l,code:h}=i;if(h==0){M(e("update success")),n.dispatch("istoreUpdated");return}else throw l||"unknown error"}throw"unknown error"}).catch(i=>{M(`${e("update error")}: ${i}`)}).finally(()=>{H.Stop()})};return(i,c)=>(d(),_("div",Ea,[r(o)?(d(),_("div",Da,[r(a)?(d(),_(O,{key:0},[s("span",null,g(r(e)("last version"))+":"+g(r(a)),1),s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:c[0]||(c[0]=l=>u()),value:r(e)("click to update")},null,8,Pa)],64)):(d(),_("span",Ba,g(r(e)("the is last version"))+"...",1))])):(d(),_("div",Ia,g(r(e)("checking for latest version")),1))]))}};var Fa=E(Va,[["__scopeId","data-v-8f2ad39a"]]),Ma={namespaced:!0,state:{Load:!1,LocalApps:[],StoreApps:[],Expand:{},Cur:{tag:"default",sort:"default",search:"",limit:30,offset:0},LocalAppsMap:{},StoreAppsMap:{}},mutations:{setExpand(t,e){t.Expand=e},setLocalApps(t,e){t.LocalApps=e||[],e.forEach(n=>{t.LocalAppsMap[n.name]=n})},setStoreApps(t,e){t.StoreApps=e||[],e.forEach(n=>{t.StoreAppsMap[n.name]=n})},setCur(t,e){for(const n in e)Object.hasOwnProperty.call(e,n)&&(t.Cur[n]=e[n])}},getters:{Cur(t){return t.Cur},LocalApps(t){let e=[...t.LocalApps],n=t.Expand;for(let a=0;a{p.tags&&p.tags.forEach(b=>{b==a&&w.push(p)})}),e=w}let o=t.Cur.search;if(o){let w=[];e.forEach(p=>{let b=JSON.stringify(p);new RegExp(o,"i").test(b)&&w.push(p)}),e=w}let u=e.length;switch(t.Cur.sort){case"download":for(let w=0;w{n.forEach(a=>{a.installed=!0}),e("setLocalApps",n)})},getStoreApps(t,e){const{state:n,commit:a,dispatch:o}=t;let u=[];T.getStoreAppList(e).then(i=>{i.apps&&(i.apps.forEach(c=>{u.push(c.name)}),o("getStoreAppsExpand",u),a("setStoreApps",i.apps)),n.Load=!0}).catch(i=>{console.log(i)})},getStoreAppsExpand(t,e){const{commit:n}=t;T.getAppExpandData(e).then(a=>{a&&n("setExpand",a)})}}},za={namespaced:!0,state:{Tags:[],Total:0},mutations:{},getters:{Tags(t){return t.Tags},Total(t){return t.Total}},actions:{getTags(t){const{state:e,commit:n}=t;T.getStoreTags().then(a=>{e.Tags=(a==null?void 0:a.tags)||[],e.Total=(a==null?void 0:a.total)||0})}}},Ua={namespaced:!0,state:{status:!1,action:"install",content:"",end:!1,exitCode:void 0},mutations:{setStatus(t,e){t.status=e.status,t.action=(e==null?void 0:e.action)||"install",t.content=(e==null?void 0:e.content)||"",t.end=(e==null?void 0:e.end)||!1,t.exitCode=void 0},setContent(t,e){t.content=e},setEnd(t,e){t.end=!0,t.exitCode=e}},getters:{},actions:{}},oe=Be({state:{version:"",versionLoad:!1},mutations:{setVersion(t,e){t.version=e},setVersionLoad(t,e){t.versionLoad=e}},modules:{apps:Ma,tags:za,log:Ua},actions:{getData(t){const{dispatch:e}=t;e("tags/getTags"),e("apps/getApps"),e("getVersion")},getVersion(t){return L(this,null,function*(){const{commit:e}=t;try{const n=yield T.updateIstore(),{code:a,msg:o}=n==null?void 0:n.data;a==200&&e("setVersion",o)}catch(n){console.log(n)}e("setVersionLoad",!0)})},istoreUpdated(t){const{commit:e}=t;e("setVersion","")}}}),ae={Start(t,e){oe.commit("log/setStatus",{status:!0,action:t,content:""})},Stop(){oe.commit("log/setStatus",{status:!1,action:"install",content:""})},Add(t){oe.commit("log/setContent",t)},End(t){oe.commit("log/setEnd",t)}};const Oa={class:"Lightweight"},Ra={class:"Lightweight-container"},Ga={class:"model"},Na={class:"Lightweight-container1"},Ha={class:"container1-center"},Ka={class:"Lightweight-tit"},Wa={class:"Lightweight-backup"},qa=["value"],Za=["value"],Ya={setup(t){const{$gettext:e}=R(),n=A(null),a=()=>{const c=e("backuping"),l=e("backup success"),h=e("backup fail"),y=e("click to download");H.Start(`${c}...`),T.lightBackup().then(k=>{if(k){const{msg:P,code:V}=k;if(V==200){M({content:`${l}\uFF0C${y}

`,keep:!0,html:!0});return}else throw P||"unknown error"}throw"unknown error"}).catch(k=>{M(`${h} : ${k}`)}).finally(()=>{H.Stop()})},o=c=>{const l=c.target.files;if(l&&l.length>0){const h=l[0];u(h);return}},u=c=>{let l=new FormData;l.append(c.name,c),ae.Start("upload"),T.lightRestore(l).then(h=>{let y=h.stdout,k=h.stderr;ae.Add(`${y} -${k}`),ae.End(h.code)}).catch(h=>{ae.Add(h),ae.End(500)})},i=c=>{n.value.click(c),c.preventDefault()};return(c,l)=>(d(),_("div",Oa,[s("div",Ra,[s("div",Ga,g(r(e)("explain")),1),s("div",Na,[s("div",Ha,[s("div",Ka,[s("span",null,"\xB7 "+g(r(e)("backup now will download a list of iStore installed software")),1),s("span",null,"\xB7 "+g(r(e)("upload software list and install from iStore when restoring backup")),1)]),s("div",Wa,[s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:a,value:r(e)("backup now")},null,8,qa),s("input",{type:"file",name:"file",accept:".tar, .gz",hidden:"",onChange:o,ref_key:"upl",ref:n},null,544),s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:i,value:r(e)("restore backup")},null,8,Za)])])])])]))}};var Ja=E(Ya,[["__scopeId","data-v-0f5d170b"]]);const Qa={class:"local"},Xa={class:"local-container"},ja={class:"model"},eo={class:"local-container1"},to={class:"container1-center"},no={class:"local-tit"},ao={class:"local-device"},oo={class:"local-input"},so={value:"",disabled:""},ro=["value"],lo={value:"-"},co=["onKeyup","placeholder"],io={key:2,class:"local-btn"},uo=["value"],po=["value"],_o={key:0,class:"device-list"},ho=["value"],go=["value"],fo={setup(t){const{$gettext:e}=R(),n=e("backup now backs up installed software (unlimited installation sources) to external storage"),a=A([]),o=A("-");let u="-";const i=A(!1),c=A([]),l=A(""),h=A(""),y=A(),k=(v,$)=>{if(!($===""||$==="-"||v.find(m=>m.path===$))){let m;v.filter(x=>x.mount&&x.dev&&$.startsWith(x.mount)).forEach(x=>{m&&m.mount.length>x.mount.length||(m=x)}),v.push({path:$,size:m?m.size:void 0})}a.value=v,$!=="-"&&(o.value=$,P())};o.value=="-"&&(T.localBackupdirPath().then(v=>{if(v){const{code:$,msg:m}=v;$==200&&k(a.value,m)}}),T.getBlockDevices().then(v=>{if(v&&v.code==200){const $=v.data,m=[];for(let x in $){const F=$[x];F.mount&&F.mount!="/"&&F.mount!="/rom"&&F.mount!="/overlay"&&m.push(F)}m.forEach(x=>{x.path=x.mount+"/istore_backup"}),k(m,m.length>0&&o.value==="-"?"":o.value)}}));const P=v=>{i.value=!1,o.value==="-"?(u!="-"&&(h.value=u),y.value.focus()):u=o.value},V=v=>{h.value==""?u!="-"?o.value=u:o.value="":h.value.startsWith("/")?k(a.value,h.value):(M(e("please enter the path, give up the input, please clear the input box")),y.value.setSelectionRange(0,h.value.length),y.value.focus())},w=()=>o.value.length>1&&o.value.endsWith("/")?o.value.substring(0,o.value.length-1):o.value,p=()=>{let v=w();if(v==""){M(e("please fill in the external storage directory"));return}i.value=!1,T.backupFileList(v).then($=>{if($){const{code:m,msg:x}=$;if(m==200){let F=JSON.parse(x);F.length==0?(M(e("there are no backup files in this path")),i.value=!1):(c.value=F,i.value=!0);return}throw x||"unknown error"}throw"unknown error"}).catch($=>{M($)})},b=()=>{let v=w();if(v==""){M(e("please fill in the external storage directory"));return}H.Start(`${e("backuping")}...`),T.localBackup(v).then($=>{if($){const{msg:m,code:x,stderr:F}=$;if(x==0){M(e("backup success"));return}else throw x==500?m:F||"unknown error"}throw"unknown error"}).catch($=>{M(`${e("backup fail")}: ${$}`)}).finally(()=>{H.Stop()})},f=v=>o.value.endsWith("/")?o.value+v:o.value+"/"+v,C=()=>{if(l.value===""){M(e("please select a backup file to restore"));return}H.Start(`${e("restoring backup")}...`),T.localRestore(f(l.value)).then(v=>{if(v){const{msg:$,stderr:m,code:x}=v;if(x==0){M(e("the backup was restored success"));return}else throw $||m||"unknown error"}throw"unknown error"}).catch(v=>{M(`${e("the backup was restored fail")}: ${v}`)}).finally(()=>{H.Stop()})};return(v,$)=>(d(),_("div",Qa,[s("div",Xa,[s("div",ja,g(r(e)("explain")),1),s("div",eo,[s("div",to,[s("div",no,[s("span",null,"\xB7 "+g(r(e)(r(n))),1),s("span",null,"\xB7 "+g(r(e)("no internet required for recovery")),1)]),s("div",ao,g(r(e)("external storage directory"))+" \uFF1A ",1),s("div",oo,[o.value!="-"?ie((d(),_("select",{key:0,class:"local-input-field",onChange:P,"onUpdate:modelValue":$[0]||($[0]=m=>o.value=m)},[s("option",so,g(r(e)("choose")),1),(d(!0),_(O,null,W(a.value,(m,x)=>(d(),_("option",{value:m.path,key:x},g(m.path+(m.size?"\uFF08"+m.size+"\uFF09":"")),9,ro))),128)),s("option",lo,g(r(e)("customize")),1)],544)),[[ve,o.value,void 0,{trim:!0}]]):ie((d(),_("input",{key:1,class:"local-input-field",onBlur:V,onKeyup:Ve(V,["enter"]),placeholder:r(e)("please enter an absolute path starting with %{name}",{name:"/"}),type:"text","onUpdate:modelValue":$[1]||($[1]=m=>h.value=m),ref_key:"user_input",ref:y},null,40,co)),[[$e,h.value,void 0,{trim:!0}]]),o.value!="-"&&o.value!=""?(d(),_("div",io,[s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:b,value:r(e)("backup now")},null,8,uo),s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:p,value:r(e)("restore backup")},null,8,po)])):z("",!0)]),i.value?(d(),_("div",_o,[s("div",null,g(r(e)("choose backup file"))+" \uFF1A",1),ie(s("select",{"onUpdate:modelValue":$[2]||($[2]=m=>l.value=m)},[(d(!0),_(O,null,W(c.value,m=>(d(),_("option",{key:m,value:m},g(m),9,ho))),128))],512),[[ve,l.value,void 0,{trim:!0}]]),s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:C,value:r(e)("restore now")},null,8,go)])):z("",!0)])])])]))}};var vo=E(fo,[["__scopeId","data-v-745c433e"]]);const mo={class:"cbi-map"},wo={class:"cbi-section"},bo={class:"panel-title"},$o={class:"cbi-section"},yo={class:"panel-title"},ko={class:"cbi-tabmenu"},xo={onclick:"false",href:"#"},Co={onclick:"false",href:"#"},So={setup(t){const{$gettext:e}=R(),n=A(2);return(a,o)=>(d(),_("div",mo,[s("fieldset",wo,[s("span",bo,g(r(e)("upgrade"))+" iStore",1),N(Fa)]),s("fieldset",$o,[s("span",yo,g(r(e)("app backup")),1),s("ul",ko,[s("li",{class:j(n.value==2?"cbi-tab":"cbi-tab-disabled"),onClick:o[0]||(o[0]=u=>n.value=2)},[s("a",xo,g(r(e)("light backup")),1)],2),s("li",{class:j(n.value==3?"cbi-tab":"cbi-tab-disabled"),onClick:o[1]||(o[1]=u=>n.value=3)},[s("a",Co,g(r(e)("local backup")),1)],2)]),n.value==2?(d(),X(Ja,{key:0})):z("",!0),n.value==3?(d(),X(vo,{key:1})):z("",!0)])]))}};var Lo=E(So,[["__scopeId","data-v-1d5c62fe"]]);const Ao=Fe({history:Me(U.BasePage()),routes:[{path:"/",redirect:"/installed"},{path:"/installed",name:"Installed",component:Kn},{path:"/store",name:"Store",component:ga},{path:"/upload",name:"Upload",component:xa},{path:"/webapps",name:"Webapps",component:Ta},{path:"/maintance",name:"Maintance",component:Lo},{path:"/:pathMatch(.*)*",name:"notfound",redirect:"/"}]}),To={},Eo={width:"16px",height:"16px",viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},Io=s("path",{d:"M14.9234958,14.5525054 L10.84453,10.4679606 C11.8849284,9.46327833 12.5294813,8.07823887 12.5294813,6.55073066 C12.5294813,3.48989918 9.94358337,1 6.76474066,1 C3.58589795,1 1,3.48989918 1,6.55073066 C1,9.61156213 3.58589795,12.1014613 6.76474066,12.1014613 C8.16008242,12.1014613 9.44067838,11.621191 10.438802,10.8242646 L14.5276502,14.9188536 C14.5814545,14.9730393 14.6533765,15 14.725573,15 C14.7942009,15 14.8625542,14.9754182 14.9158095,14.9262546 C15.025065,14.8250198 15.0283592,14.6577049 14.9234958,14.5525054 Z M6.76474066,11.5728203 C3.8886841,11.5728203 1.54902292,9.32001661 1.54902292,6.55073066 C1.54902292,3.7814447 3.8886841,1.52864101 6.76474066,1.52864101 C9.64079723,1.52864101 11.9804584,3.7814447 11.9804584,6.55073066 C11.9804584,9.32001661 9.64052272,11.5728203 6.76474066,11.5728203 Z",id:"Shape",stroke:"#FFFFFF","stroke-width":"1.3"},null,-1),Do=[Io];function Po(t,e,n,a,o,u){return d(),_("svg",Eo,Do)}var Bo=E(To,[["render",Po]]);const Vo={},Fo={width:"12px",height:"12px",viewBox:"0 0 12 12",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},Mo=s("path",{d:"M10.171916,3.81818329 C10.6519813,3.81274681 11.1102149,4.01840688 11.4252438,4.38069009 C11.7402726,4.74297329 11.8803105,5.2253253 11.8081406,5.70080197 L11.0555552,10.608963 C10.9332063,11.4157454 10.2351606,12.0090843 9.42537185,12 L3.27269856,12 C2.97145497,12 2.7272488,11.7556885 2.7272488,11.454445 L2.7272488,5.4544976 C2.7272488,5.37817917 2.74326442,5.30271013 2.77426027,5.23296947 L4.95605931,0.323921631 C5.04360472,0.126944443 5.23894201,0 5.4544976,0 C6.65947193,0 7.63629663,0.976824702 7.63629663,2.18179904 L7.63629663,3.81815451 L10.171916,3.81818329 Z M3.81814832,10.9090654 L9.43153778,10.9090654 C9.70352269,10.9121048 9.93620458,10.7143252 9.97712277,10.4445109 L10.7297188,5.53628009 C10.7537339,5.3780602 10.7070546,5.2172762 10.602045,5.09651513 C10.4970353,4.97575406 10.3442908,4.9072007 10.1780925,4.90904784 L7.09084687,4.90904784 C6.78960329,4.90904784 6.54539711,4.66484166 6.54539711,4.36359808 L6.54539711,2.18179904 C6.54539711,1.69494967 6.22647822,1.2825878 5.78615711,1.14223013 L3.81814832,5.57024992 L3.81814832,10.9090654 Z M2.7272488,5.99994736 L1.63634928,5.99994736 C1.33510569,5.99994736 1.09089952,6.24415353 1.09089952,6.54539711 L1.09089952,10.3635454 C1.09089952,10.664789 1.33510569,10.9089952 1.63634928,10.9089952 L2.7272488,10.9089952 L2.7272488,5.99994736 Z M3.27269856,11.9998947 L1.63634928,11.9998947 C0.732618527,11.9998947 -1.03028697e-13,11.2672762 -1.03028697e-13,10.3635454 L-1.03028697e-13,6.54539711 C-1.03028697e-13,5.64166636 0.732618527,4.90904784 1.63634928,4.90904784 L3.27269856,4.90904784 C3.57394214,4.90904784 3.81814832,5.15325401 3.81814832,5.4544976 L3.81814832,11.454445 C3.81814832,11.7556885 3.57394214,11.9998947 3.27269856,11.9998947 Z",id:"Shape",fill:"#FFFFFF","fill-rule":"nonzero"},null,-1),zo=[Mo];function Uo(t,e,n,a,o,u){return d(),_("svg",Fo,zo)}var Oo=E(Vo,[["render",Uo]]);const Ro={},Go={width:"12px",height:"12px",viewBox:"0 0 12 12",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},No=s("path",{d:"M10.171916,3.81818329 C10.6519813,3.81274681 11.1102149,4.01840688 11.4252438,4.38069009 C11.7402726,4.74297329 11.8803105,5.2253253 11.8081406,5.70080197 L11.0555552,10.608963 C10.9332063,11.4157454 10.2351606,12.0090843 9.42537185,12 L3.27269856,12 C2.97145497,12 2.7272488,11.7556885 2.7272488,11.454445 L2.7272488,5.4544976 C2.7272488,5.37817917 2.74326442,5.30271013 2.77426027,5.23296947 L4.95605931,0.323921631 C5.04360472,0.126944443 5.23894201,0 5.4544976,0 C6.65947193,0 7.63629663,0.976824702 7.63629663,2.18179904 L7.63629663,3.81815451 L10.171916,3.81818329 Z M3.27269856,11.9998947 L1.63634928,11.9998947 C0.732618527,11.9998947 0,11.2672762 0,10.3635454 L0,6.54539711 C0,5.64166636 0.732618527,4.90904784 1.63634928,4.90904784 L3.27269856,4.90904784 C3.57394214,4.90904784 3.81814832,5.15325401 3.81814832,5.4544976 L3.81814832,11.454445 C3.81814832,11.7556885 3.57394214,11.9998947 3.27269856,11.9998947 Z",id:"Shape",fill:"#FFE45A","fill-rule":"nonzero"},null,-1),Ho=[No];function Ko(t,e,n,a,o,u){return d(),_("svg",Go,Ho)}var Wo=E(Ro,[["render",Ko]]);const Q=_e(Ht);Q.component("svg-search",Bo);Q.component("svg-star-on",Oo);Q.component("svg-star-off",Wo);const qo=()=>L(I,null,function*(){yield Ue(Q),Q.use(Ao).use(oe),Q.mount("#app")});qo()});export default Zo(); +${n("uninstall failed, error code")}: ${500}`)}).finally(()=>{f.setDisabled(!0);try{window.L.ui.menu.flushCache()}catch(C){}})},y=p=>L(this,null,function*(){H.Start();try{(yield T.postStarApp(p))&&o.dispatch("apps/incrAppStar",{name:p})}catch(b){}H.Stop()}),k=()=>{F(n("you have already liked"))},P=p=>a.value.installed?`/luci-static/resources/app-icons/${p}.png`:a.value.icon?T.getStoreAppIcon(a.value.icon):`/luci-static/resources/app-icons/${p}.png`,V=p=>{switch(window.vue_lang){case"zh-cn":case"zh-tw":return p.title}return p.title_en||p.title},w=p=>{switch(window.vue_lang){case"zh-cn":case"zh-tw":return p.description}return p.description_en||p.description};return(p,b)=>{var v,$,m,x,M,tt,q,J,et,S,nt;const f=st("svg-star-off"),C=st("svg-star-on");return d(),_("div",fn,[s("div",vn,[s("div",mn,[s("div",wn,[s("img",{alt:r(n)("Icon is gone")+"~",src:P(r(a).name)},null,8,bn)]),s("div",$n,[(d(!0),_(O,null,W(r(a).tags,G=>(d(),_(O,{key:G},[s("div",yn,[s("span",null,g(r(kt)(G)),1)]),kn],64))),128))])]),s("div",xn,[s("div",{class:"app-title",title:r(a).name},[s("span",Sn,g(V(r(a))),1),s("span",Ln,"v"+g(r(a).version),1)],8,Cn),s("div",An,[s("span",null,g(r(n)("%{name} downloads",{name:r(u)(($=(v=r(a))==null?void 0:v.expand)==null?void 0:$.downloadCount)})),1),Tn,s("span",null,g(r(n)("%{name} links",{name:r(u)((x=(m=r(a))==null?void 0:m.expand)==null?void 0:x.starCount)})),1),((M=r(a))==null?void 0:M.expand)!=null?(d(),_(O,{key:0},[(q=(tt=r(a))==null?void 0:tt.expand)!=null&&q.isStar?(d(),_("a",{key:0,class:"star-btn",title:r(n)("liked"),onClick:b[0]||(b[0]=G=>k())},[N(f)],8,En)):(d(),_("a",{key:1,class:"star-btn",title:r(n)("like"),onClick:b[1]||(b[1]=G=>y(r(a).name))},[N(C)],8,In))],64)):z("",!0)]),s("div",{class:"app-description cbi-value-description",title:w(r(a))},[s("span",null,g(w(r(a))),1)],8,Dn),s("div",Pn,[s("span",null,g(r(n)("author"))+": "+g(r(a).author||"null"),1)]),s("div",Bn,[s("span",null,g(r(n)("update date"))+": "+g(r(l)(r(a).time*1e3)||"null"),1)])])]),s("div",Vn,[r(a).website?(d(),_("a",{key:0,class:"app-btn cbi-button cbi-button-apply",target:"_blank",href:r(a).website},g(r(n)("website")),9,Mn)):z("",!0),Fn,r(a).installed?(d(),_(O,{key:1},[((J=r(a))==null?void 0:J.curVersion)!=((et=r(a))==null?void 0:et.lastVersion)||((S=r(a))==null?void 0:S.curRelease)!=((nt=r(a))==null?void 0:nt.lastRelease)?(d(),_("a",{key:0,class:"app-btn cbi-button cbi-button-reload",onClick:b[2]||(b[2]=G=>i(r(a).name))},g(r(n)("upgrade")),1)):z("",!0),zn,r(a).entry?(d(),_("a",{key:1,class:"app-btn cbi-button cbi-button-apply",href:r(a).entry},g(r(n)("open")),9,Un)):z("",!0),On,s("a",{class:"app-btn cbi-button cbi-button-remove",onClick:b[3]||(b[3]=G=>h(r(a).name))},g(r(n)("uninstall")),1)],64)):(d(),_("a",{key:2,class:"app-btn cbi-button cbi-button-add",onClick:b[4]||(b[4]=G=>c(r(a).name))},g(r(n)("install")),1))])])}}};var xt=E(Rn,[["__scopeId","data-v-54a5b850"]]);const Gn={class:"cbi-section"},Nn={class:"containers"},Hn={setup(e){const t=K(),n=B(()=>t.getters["apps/LocalApps"]);return(a,o)=>(d(),_("fieldset",Gn,[s("div",Nn,[(d(!0),_(O,null,W(r(n),l=>(d(),X(xt,{key:l.name,col:l},null,8,["col"]))),128))])]))}};var Kn=E(Hn,[["__scopeId","data-v-0046e0f2"]]);const Wn={class:"sort-container"},qn={class:"sort-title"},Zn={class:"sort-value"},Yn=["value","onClick"],Jn={setup(e){const{$gettext:t}=R(),n=A("default"),a=K(),o=A([{key:t("default"),value:"default"},{key:t("By download"),value:"download"},{key:t("By rating"),value:"star"}]),l=u=>{n.value=u,a.dispatch("apps/filterCurApps",{sort:u})};return(u,i)=>(d(),_("div",Wn,[s("div",qn,g(r(t)("order"))+":",1),s("div",Zn,[(d(!0),_(O,null,W(o.value,c=>(d(),_("input",{key:c.value,class:j(["cbi-button",{"cbi-button-apply":n.value==c.value}]),type:"button",value:c.key,onClick:h=>l(c.value)},null,10,Yn))),128))])]))}};var Qn=E(Jn,[["__scopeId","data-v-e3845a5c"]]);const Xn={class:"tags-container"},jn={class:"tags-title"},ta={class:"tags-value"},ea=["value"],na=["value","onClick"],aa={setup(e){const{$gettext:t}=R(),n=A("default"),a=K(),o=B(()=>a.getters["tags/Tags"]),l=u=>{n.value=u,a.dispatch("apps/filterCurApps",{tag:u})};return(u,i)=>(d(),_("div",Xn,[s("div",jn,g(r(t)("tag"))+": ",1),s("div",ta,[s("input",{class:j(["cbi-button",{"cbi-button-apply":n.value=="default"}]),type:"button",value:r(t)("default"),onClick:i[0]||(i[0]=c=>l("default"))},null,10,ea),(d(!0),_(O,null,W(r(o),c=>(d(),_("input",{key:c,class:j(["cbi-button",{"cbi-button-apply":n.value==c}]),type:"button",value:r(kt)(c),onClick:h=>l(c)},null,10,na))),128))])]))}};var oa=E(aa,[["__scopeId","data-v-07bccc36"]]);const sa=["onSubmit"],ra=["placeholder"],la={setup(e){const{$gettext:t}=R(),n=A(""),a=K(),o=()=>{a.dispatch("apps/filterCurApps",{search:n.value})};return(l,u)=>{const i=st("svg-search");return d(),_("form",{class:"search",onSubmit:$t(o,["prevent"])},[s("a",{class:"search-btn",onClick:o},[N(i)]),it(s("input",{type:"text",placeholder:r(t)("please enter the search keyword"),"onUpdate:modelValue":u[0]||(u[0]=c=>n.value=c)},null,8,ra),[[bt,n.value,void 0,{trim:!0}]])],40,sa)}}};var ca=E(la,[["__scopeId","data-v-c4e8a9f2"]]);const ia={class:"containers"},ua={key:1,style:{margin:"10px 0","text-align":"center",width:"100%"}},da={setup(e){const{$gettext:t}=R(),n=K(),a=B(()=>n.getters["apps/StoreApps"]),o=B(()=>n.state.apps.Load);return(l,u)=>(d(),_("div",ia,[r(o)?(d(!0),_(O,{key:0},W(r(a),i=>(d(),X(xt,{key:i.name,col:i},null,8,["col"]))),128)):(d(),_("span",ua,g(r(t)("loading data"))+"...",1))]))}};var pa=E(da,[["__scopeId","data-v-1b494368"]]);const _a={class:"cbi-section"},ha={setup(e){return(t,n)=>(d(),_("fieldset",_a,[N(ca),N(oa),N(Qn),N(pa)]))}};var ga=E(ha,[["__scopeId","data-v-74b0669f"]]);const fa=e=>(rt("data-v-9c880c04"),e=e(),lt(),e),va={class:"cbi-section"},ma={class:"container_msg cbi-map-descr"},wa=["onSubmit"],ba={class:"upload-file"},$a={class:"button"},ya=fa(()=>s("div",{class:"auto"},null,-1)),ka={setup(e){const{$gettext:t}=R(),n=A(null),a=A(null);mt(()=>{if(n.value){const i=n.value;i.addEventListener("dragenter",c=>{(c.fromElement===null||!i.contains(c.fromElement))&&console.log("dragenter")},!1),i.addEventListener("dragleave",c=>{(c.fromElement===null||!i.contains(c.fromElement))&&console.log("dragleave")},!1),i.addEventListener("dragover",c=>{c.preventDefault(),c.dataTransfer.dropEffect="link"},!1),i.addEventListener("drop",c=>{console.log("drop"),c.preventDefault(),o(c)},!1)}});const o=i=>{const c=i.dataTransfer.files;if(c&&c.length>0){const h=c[0];u(h);return}},l=i=>{const c=i.target.files;if(c&&c.length>0){const h=c[0];u(h);return}},u=i=>{if(i.name.endsWith(".run")||i.name.endsWith(".ipk")){const c=ut({title:t("uploading plugin"),description:t("do not refresh this page during plugin installation/uninstallation"),clearText:t("closed"),valueText:"",callback:()=>{location.reload()}});let h=new FormData;h.append(i.name,i),T.uploadAppIPK(h).then(y=>{let k=y.stdout,P=y.stderr;c.addValue(`${k} +${P}`),c.addValue(` +${t("offline installation is successful, please close the current window")}`)}).catch(y=>{c.addValue(`${y}`),c.addValue(` +${t("offline installation failed with error code")}: ${500}`)}).finally(()=>{c.setDisabled(!0);try{window.L.ui.menu.flushCache()}catch(y){}})}};return(i,c)=>{var h;return d(),_("fieldset",va,[s("div",ma,[s("span",null,g(r(t)("offline install")),1),s("span",null,"\xB7 "+g(r(t)("from this page, you can upload plugin packages to install plugins")),1),s("span",null,"\xB7 "+g(r(t)("support .ipk plug-in, .run self-extracting format")),1)]),s("form",{onSubmit:$t(u,["prevent"])},[s("div",{class:"flex",ref_key:"upl",ref:n},[s("label",ba,[s("span",null,g(((h=a.value)==null?void 0:h.name)||r(t)("no files selected")),1),s("input",{type:"file",name:"file",accept:".ipk, .run",hidden:"",onChange:l},null,32),s("div",$a,g(r(t)("select or drag and drop files")),1)]),ya],512)],40,wa)])}}};var xa=E(ka,[["__scopeId","data-v-9c880c04"]]);const Ca={class:"cbi-section"},Sa={class:"webapp-container"},La=["src"],Aa={setup(e){const t=B(()=>""),n=B(()=>""),a=B(()=>`${U.getIframeURL()}/#/apps?token=${n.value}&deviceId=${t.value}`);return(o,l)=>(d(),_("fieldset",Ca,[s("div",Sa,[s("iframe",{src:r(a),sandbox:"allow-scripts allow-same-origin allow-popups",seamless:""},null,8,La)])]))}};var Ta=E(Aa,[["__scopeId","data-v-8e330954"]]);const Ea={class:"log-containers"},Ia={key:0,class:"containers-tit"},Da={key:1,class:"containers-tit"},Pa=["value"],Ba={key:1},Va={setup(e){const{$gettext:t}=R(),n=K(),a=B(()=>n.state.version),o=B(()=>n.state.versionLoad),l=()=>{H.Start(`${t("updateing")}...`),T.selfUpdateIstore().then(({data:u})=>{if(u){const{stdout:i,stderr:c,code:h}=u;if(h==0){F(t("update success")),n.dispatch("istoreUpdated");return}else throw c||"unknown error"}throw"unknown error"}).catch(u=>{F(`${t("update error")}: ${u}`)}).finally(()=>{H.Stop()})};return(u,i)=>(d(),_("div",Ea,[r(o)?(d(),_("div",Da,[r(a)?(d(),_(O,{key:0},[s("span",null,g(r(t)("last version"))+":"+g(r(a)),1),s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:i[0]||(i[0]=c=>l()),value:r(t)("click to update")},null,8,Pa)],64)):(d(),_("span",Ba,g(r(t)("the is last version"))+"...",1))])):(d(),_("div",Ia,g(r(t)("checking for latest version")),1))]))}};var Ma=E(Va,[["__scopeId","data-v-8f2ad39a"]]),Fa={namespaced:!0,state:{Load:!1,LocalApps:[],StoreApps:[],Expand:{},Cur:{tag:"default",sort:"default",search:"",limit:30,offset:0},LocalAppsMap:{},StoreAppsMap:{}},mutations:{setExpand(e,t){e.Expand=t},setLocalApps(e,t){e.LocalApps=t||[],t.forEach(n=>{e.LocalAppsMap[n.name]=n})},setStoreApps(e,t){e.StoreApps=t||[],t.forEach(n=>{e.StoreAppsMap[n.name]=n})},setCur(e,t){for(const n in t)Object.hasOwnProperty.call(t,n)&&(e.Cur[n]=t[n])}},getters:{Cur(e){return e.Cur},LocalApps(e){let t=[...e.LocalApps],n=e.Expand;for(let a=0;a{p.tags&&p.tags.forEach(b=>{b==a&&w.push(p)})}),t=w}let o=e.Cur.search;if(o){let w=[];t.forEach(p=>{let b=JSON.stringify(p);new RegExp(o,"i").test(b)&&w.push(p)}),t=w}let l=t.length;switch(e.Cur.sort){case"download":for(let w=0;w{n.forEach(a=>{a.installed=!0}),t("setLocalApps",n)})},getStoreApps(e,t){const{state:n,commit:a,dispatch:o}=e;let l=[];T.getStoreAppList(t).then(u=>{u.apps&&(u.apps.forEach(i=>{l.push(i.name)}),o("getStoreAppsExpand",l),a("setStoreApps",u.apps)),n.Load=!0}).catch(u=>{console.log(u)})},getStoreAppsExpand(e,t){const{commit:n}=e;T.getAppExpandData(t).then(a=>{a&&n("setExpand",a)})}}},za={namespaced:!0,state:{Tags:[],Total:0},mutations:{},getters:{Tags(e){return e.Tags},Total(e){return e.Total}},actions:{getTags(e){const{state:t,commit:n}=e;T.getStoreTags().then(a=>{t.Tags=(a==null?void 0:a.tags)||[],t.Total=(a==null?void 0:a.total)||0})}}},Ua={namespaced:!0,state:{status:!1,action:"install",content:"",end:!1,exitCode:void 0},mutations:{setStatus(e,t){e.status=t.status,e.action=(t==null?void 0:t.action)||"install",e.content=(t==null?void 0:t.content)||"",e.end=(t==null?void 0:t.end)||!1,e.exitCode=void 0},setContent(e,t){e.content=t},setEnd(e,t){e.end=!0,e.exitCode=t}},getters:{},actions:{}},ot=Vt({state:{version:"",versionLoad:!1},mutations:{setVersion(e,t){e.version=t},setVersionLoad(e,t){e.versionLoad=t}},modules:{apps:Fa,tags:za,log:Ua},actions:{getData(e){const{dispatch:t}=e;t("tags/getTags"),t("apps/getApps"),t("getVersion")},getVersion(e){return L(this,null,function*(){const{commit:t}=e;try{const n=yield T.updateIstore(),{code:a,msg:o}=n==null?void 0:n.data;a==200&&t("setVersion",o)}catch(n){console.log(n)}t("setVersionLoad",!0)})},istoreUpdated(e){const{commit:t}=e;t("setVersion","")}}}),at={Start(e,t){ot.commit("log/setStatus",{status:!0,action:e,content:""})},Stop(){ot.commit("log/setStatus",{status:!1,action:"install",content:""})},Add(e){ot.commit("log/setContent",e)},End(e){ot.commit("log/setEnd",e)}};const Oa={class:"Lightweight"},Ra={class:"Lightweight-container"},Ga={class:"model"},Na={class:"Lightweight-container1"},Ha={class:"container1-center"},Ka={class:"Lightweight-tit"},Wa={class:"Lightweight-backup"},qa=["value"],Za=["value"],Ya={setup(e){const{$gettext:t}=R(),n=A(null),a=()=>{const i=t("backuping"),c=t("backup success"),h=t("backup fail"),y=t("click to download");H.Start(`${i}...`),T.lightBackup().then(k=>{if(k){const{msg:P,code:V}=k;if(V==200){F({content:`${c}\uFF0C${y}

`,keep:!0,html:!0});return}else throw P||"unknown error"}throw"unknown error"}).catch(k=>{F(`${h} : ${k}`)}).finally(()=>{H.Stop()})},o=i=>{const c=i.target.files;if(c&&c.length>0){const h=c[0];l(h);return}},l=i=>{let c=new FormData;c.append(i.name,i),at.Start("upload"),T.lightRestore(c).then(h=>{let y=h.stdout,k=h.stderr;at.Add(`${y} +${k}`),at.End(h.code)}).catch(h=>{at.Add(h),at.End(500)})},u=i=>{n.value.click(i),i.preventDefault()};return(i,c)=>(d(),_("div",Oa,[s("div",Ra,[s("div",Ga,g(r(t)("explain")),1),s("div",Na,[s("div",Ha,[s("div",Ka,[s("span",null,"\xB7 "+g(r(t)("backup now will download a list of iStore installed software")),1),s("span",null,"\xB7 "+g(r(t)("upload software list and install from iStore when restoring backup")),1)]),s("div",Wa,[s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:a,value:r(t)("backup now")},null,8,qa),s("input",{type:"file",name:"file",accept:".tar, .gz",hidden:"",onChange:o,ref_key:"upl",ref:n},null,544),s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:u,value:r(t)("restore backup")},null,8,Za)])])])])]))}};var Ja=E(Ya,[["__scopeId","data-v-0f5d170b"]]);const Qa={class:"local"},Xa={class:"local-container"},ja={class:"model"},to={class:"local-container1"},eo={class:"container1-center"},no={class:"local-tit"},ao={class:"local-device"},oo={class:"local-input"},so={value:"",disabled:""},ro=["value"],lo={value:"-"},co=["onKeyup","placeholder"],io={key:2,class:"local-btn"},uo=["value"],po=["value"],_o={key:0,class:"device-list"},ho=["value"],go=["value"],fo={setup(e){const{$gettext:t}=R(),n=t("backup now backs up installed software (unlimited installation sources) to external storage"),a=A([]),o=A("-");let l="-";const u=A(!1),i=A([]),c=A(""),h=A(""),y=A(),k=(v,$)=>{if(!($===""||$==="-"||v.find(m=>m.path===$))){let m;v.filter(x=>x.mount&&x.dev&&$.startsWith(x.mount)).forEach(x=>{m&&m.mount.length>x.mount.length||(m=x)}),v.push({path:$,size:m?m.size:void 0})}a.value=v,$!=="-"&&(o.value=$,P())};o.value=="-"&&(T.localBackupdirPath().then(v=>{if(v){const{code:$,msg:m}=v;$==200&&k(a.value,m)}}),T.getBlockDevices().then(v=>{if(v&&v.code==200){const $=v.data,m=[];for(let x in $){const M=$[x];M.mount&&M.mount!="/"&&M.mount!="/rom"&&M.mount!="/overlay"&&m.push(M)}m.forEach(x=>{x.path=x.mount+"/istore_backup"}),k(m,m.length>0&&o.value==="-"?"":o.value)}}));const P=v=>{u.value=!1,o.value==="-"?(l!="-"&&(h.value=l),y.value.focus()):l=o.value},V=v=>{h.value==""?l!="-"?o.value=l:o.value="":h.value.startsWith("/")?k(a.value,h.value):(F(t("please enter the path, give up the input, please clear the input box")),y.value.setSelectionRange(0,h.value.length),y.value.focus())},w=()=>o.value.length>1&&o.value.endsWith("/")?o.value.substring(0,o.value.length-1):o.value,p=()=>{let v=w();if(v==""){F(t("please fill in the external storage directory"));return}u.value=!1,T.backupFileList(v).then($=>{if($){const{code:m,msg:x}=$;if(m==200){let M=JSON.parse(x);M.length==0?(F(t("there are no backup files in this path")),u.value=!1):(i.value=M,u.value=!0);return}throw x||"unknown error"}throw"unknown error"}).catch($=>{F($)})},b=()=>{let v=w();if(v==""){F(t("please fill in the external storage directory"));return}H.Start(`${t("backuping")}...`),T.localBackup(v).then($=>{if($){const{msg:m,code:x,stderr:M}=$;if(x==0){F(t("backup success"));return}else throw x==500?m:M||"unknown error"}throw"unknown error"}).catch($=>{F(`${t("backup fail")}: ${$}`)}).finally(()=>{H.Stop()})},f=v=>o.value.endsWith("/")?o.value+v:o.value+"/"+v,C=()=>{if(c.value===""){F(t("please select a backup file to restore"));return}H.Start(`${t("restoring backup")}...`),T.localRestore(f(c.value)).then(v=>{if(v){const{msg:$,stderr:m,code:x}=v;if(x==0){F(t("the backup was restored success"));return}else throw $||m||"unknown error"}throw"unknown error"}).catch(v=>{F(`${t("the backup was restored fail")}: ${v}`)}).finally(()=>{H.Stop()})};return(v,$)=>(d(),_("div",Qa,[s("div",Xa,[s("div",ja,g(r(t)("explain")),1),s("div",to,[s("div",eo,[s("div",no,[s("span",null,"\xB7 "+g(r(t)(r(n))),1),s("span",null,"\xB7 "+g(r(t)("no internet required for recovery")),1)]),s("div",ao,g(r(t)("external storage directory"))+" \uFF1A ",1),s("div",oo,[o.value!="-"?it((d(),_("select",{key:0,class:"local-input-field",onChange:P,"onUpdate:modelValue":$[0]||($[0]=m=>o.value=m)},[s("option",so,g(r(t)("choose")),1),(d(!0),_(O,null,W(a.value,(m,x)=>(d(),_("option",{value:m.path,key:x},g(m.path+(m.size?"\uFF08"+m.size+"\uFF09":"")),9,ro))),128)),s("option",lo,g(r(t)("customize")),1)],544)),[[vt,o.value,void 0,{trim:!0}]]):it((d(),_("input",{key:1,class:"local-input-field",onBlur:V,onKeyup:Mt(V,["enter"]),placeholder:r(t)("please enter an absolute path starting with %{name}",{name:"/"}),type:"text","onUpdate:modelValue":$[1]||($[1]=m=>h.value=m),ref_key:"user_input",ref:y},null,40,co)),[[bt,h.value,void 0,{trim:!0}]]),o.value!="-"&&o.value!=""?(d(),_("div",io,[s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:b,value:r(t)("backup now")},null,8,uo),s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:p,value:r(t)("restore backup")},null,8,po)])):z("",!0)]),u.value?(d(),_("div",_o,[s("div",null,g(r(t)("choose backup file"))+" \uFF1A",1),it(s("select",{"onUpdate:modelValue":$[2]||($[2]=m=>c.value=m)},[(d(!0),_(O,null,W(i.value,m=>(d(),_("option",{key:m,value:m},g(m),9,ho))),128))],512),[[vt,c.value,void 0,{trim:!0}]]),s("input",{type:"button",class:"app-btn cbi-button cbi-button-apply",onClick:C,value:r(t)("restore now")},null,8,go)])):z("",!0)])])])]))}};var vo=E(fo,[["__scopeId","data-v-745c433e"]]);const mo={class:"cbi-map"},wo={class:"cbi-section"},bo={class:"panel-title"},$o={class:"cbi-section"},yo={class:"panel-title"},ko={class:"cbi-tabmenu"},xo={onclick:"false",href:"#"},Co={onclick:"false",href:"#"},So={setup(e){const{$gettext:t}=R(),n=A(2);return(a,o)=>(d(),_("div",mo,[s("fieldset",wo,[s("span",bo,g(r(t)("upgrade"))+" iStore",1),N(Ma)]),s("fieldset",$o,[s("span",yo,g(r(t)("app backup")),1),s("ul",ko,[s("li",{class:j(n.value==2?"cbi-tab":"cbi-tab-disabled"),onClick:o[0]||(o[0]=l=>n.value=2)},[s("a",xo,g(r(t)("light backup")),1)],2),s("li",{class:j(n.value==3?"cbi-tab":"cbi-tab-disabled"),onClick:o[1]||(o[1]=l=>n.value=3)},[s("a",Co,g(r(t)("local backup")),1)],2)]),n.value==2?(d(),X(Ja,{key:0})):z("",!0),n.value==3?(d(),X(vo,{key:1})):z("",!0)])]))}};var Lo=E(So,[["__scopeId","data-v-1d5c62fe"]]);const Ao=Ft({history:zt(U.BasePage()),routes:[{path:"/",redirect:"/installed"},{path:"/installed",name:"Installed",component:Kn},{path:"/store",name:"Store",component:ga},{path:"/upload",name:"Upload",component:xa},{path:"/webapps",name:"Webapps",component:Ta},{path:"/maintance",name:"Maintance",component:Lo},{path:"/:pathMatch(.*)*",name:"notfound",redirect:"/"}]}),To={},Eo={width:"16px",height:"16px",viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},Io=s("path",{d:"M14.9234958,14.5525054 L10.84453,10.4679606 C11.8849284,9.46327833 12.5294813,8.07823887 12.5294813,6.55073066 C12.5294813,3.48989918 9.94358337,1 6.76474066,1 C3.58589795,1 1,3.48989918 1,6.55073066 C1,9.61156213 3.58589795,12.1014613 6.76474066,12.1014613 C8.16008242,12.1014613 9.44067838,11.621191 10.438802,10.8242646 L14.5276502,14.9188536 C14.5814545,14.9730393 14.6533765,15 14.725573,15 C14.7942009,15 14.8625542,14.9754182 14.9158095,14.9262546 C15.025065,14.8250198 15.0283592,14.6577049 14.9234958,14.5525054 Z M6.76474066,11.5728203 C3.8886841,11.5728203 1.54902292,9.32001661 1.54902292,6.55073066 C1.54902292,3.7814447 3.8886841,1.52864101 6.76474066,1.52864101 C9.64079723,1.52864101 11.9804584,3.7814447 11.9804584,6.55073066 C11.9804584,9.32001661 9.64052272,11.5728203 6.76474066,11.5728203 Z",id:"Shape",stroke:"#FFFFFF","stroke-width":"1.3"},null,-1),Do=[Io];function Po(e,t,n,a,o,l){return d(),_("svg",Eo,Do)}var Bo=E(To,[["render",Po]]);const Vo={},Mo={width:"12px",height:"12px",viewBox:"0 0 12 12",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},Fo=s("path",{d:"M10.171916,3.81818329 C10.6519813,3.81274681 11.1102149,4.01840688 11.4252438,4.38069009 C11.7402726,4.74297329 11.8803105,5.2253253 11.8081406,5.70080197 L11.0555552,10.608963 C10.9332063,11.4157454 10.2351606,12.0090843 9.42537185,12 L3.27269856,12 C2.97145497,12 2.7272488,11.7556885 2.7272488,11.454445 L2.7272488,5.4544976 C2.7272488,5.37817917 2.74326442,5.30271013 2.77426027,5.23296947 L4.95605931,0.323921631 C5.04360472,0.126944443 5.23894201,0 5.4544976,0 C6.65947193,0 7.63629663,0.976824702 7.63629663,2.18179904 L7.63629663,3.81815451 L10.171916,3.81818329 Z M3.81814832,10.9090654 L9.43153778,10.9090654 C9.70352269,10.9121048 9.93620458,10.7143252 9.97712277,10.4445109 L10.7297188,5.53628009 C10.7537339,5.3780602 10.7070546,5.2172762 10.602045,5.09651513 C10.4970353,4.97575406 10.3442908,4.9072007 10.1780925,4.90904784 L7.09084687,4.90904784 C6.78960329,4.90904784 6.54539711,4.66484166 6.54539711,4.36359808 L6.54539711,2.18179904 C6.54539711,1.69494967 6.22647822,1.2825878 5.78615711,1.14223013 L3.81814832,5.57024992 L3.81814832,10.9090654 Z M2.7272488,5.99994736 L1.63634928,5.99994736 C1.33510569,5.99994736 1.09089952,6.24415353 1.09089952,6.54539711 L1.09089952,10.3635454 C1.09089952,10.664789 1.33510569,10.9089952 1.63634928,10.9089952 L2.7272488,10.9089952 L2.7272488,5.99994736 Z M3.27269856,11.9998947 L1.63634928,11.9998947 C0.732618527,11.9998947 -1.03028697e-13,11.2672762 -1.03028697e-13,10.3635454 L-1.03028697e-13,6.54539711 C-1.03028697e-13,5.64166636 0.732618527,4.90904784 1.63634928,4.90904784 L3.27269856,4.90904784 C3.57394214,4.90904784 3.81814832,5.15325401 3.81814832,5.4544976 L3.81814832,11.454445 C3.81814832,11.7556885 3.57394214,11.9998947 3.27269856,11.9998947 Z",id:"Shape",fill:"#FFFFFF","fill-rule":"nonzero"},null,-1),zo=[Fo];function Uo(e,t,n,a,o,l){return d(),_("svg",Mo,zo)}var Oo=E(Vo,[["render",Uo]]);const Ro={},Go={width:"12px",height:"12px",viewBox:"0 0 12 12",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},No=s("path",{d:"M10.171916,3.81818329 C10.6519813,3.81274681 11.1102149,4.01840688 11.4252438,4.38069009 C11.7402726,4.74297329 11.8803105,5.2253253 11.8081406,5.70080197 L11.0555552,10.608963 C10.9332063,11.4157454 10.2351606,12.0090843 9.42537185,12 L3.27269856,12 C2.97145497,12 2.7272488,11.7556885 2.7272488,11.454445 L2.7272488,5.4544976 C2.7272488,5.37817917 2.74326442,5.30271013 2.77426027,5.23296947 L4.95605931,0.323921631 C5.04360472,0.126944443 5.23894201,0 5.4544976,0 C6.65947193,0 7.63629663,0.976824702 7.63629663,2.18179904 L7.63629663,3.81815451 L10.171916,3.81818329 Z M3.27269856,11.9998947 L1.63634928,11.9998947 C0.732618527,11.9998947 0,11.2672762 0,10.3635454 L0,6.54539711 C0,5.64166636 0.732618527,4.90904784 1.63634928,4.90904784 L3.27269856,4.90904784 C3.57394214,4.90904784 3.81814832,5.15325401 3.81814832,5.4544976 L3.81814832,11.454445 C3.81814832,11.7556885 3.57394214,11.9998947 3.27269856,11.9998947 Z",id:"Shape",fill:"#FFE45A","fill-rule":"nonzero"},null,-1),Ho=[No];function Ko(e,t,n,a,o,l){return d(),_("svg",Go,Ho)}var Wo=E(Ro,[["render",Ko]]);const Q=_t(He);Q.component("svg-search",Bo);Q.component("svg-star-on",Oo);Q.component("svg-star-off",Wo);const qo=()=>L(I,null,function*(){yield Ot(Q),Q.use(Ao).use(ot),Q.mount("#app")});qo()});export default Zo(); diff --git a/app-store-ui/src/dist/luci-static/istore/style.css b/app-store-ui/src/dist/luci-static/istore/style.css index e174d342e..a824dccd2 100644 --- a/app-store-ui/src/dist/luci-static/istore/style.css +++ b/app-store-ui/src/dist/luci-static/istore/style.css @@ -1 +1 @@ -#app *[data-v-13251538]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}li[data-v-13251538]{position:relative}li span[data-v-13251538]{position:absolute;top:5px;right:5px;padding:3px;background-color:#fd1919;border-radius:50%}#app *{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}[lock-scroll=true]{overflow:hidden!important}#app *[data-v-6695545b]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.software-log_shade[data-v-6695545b]{width:100%;height:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;position:fixed;inset:0;z-index:99999}.software-log_shade .software-log_shade__bg[data-v-6695545b]{position:fixed;inset:0;background:rgba(68,79,83,.94) none repeat scroll 0 0!important;background-position:0 0;background-size:cover;opacity:.94}.software-log_shade .software-log_shade__pannel[data-v-6695545b]{width:800px;min-width:800px;border-radius:10px;z-index:100;box-shadow:3px 3px 10px #000;background:rgba(0,0,0,.9);padding:10px}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-title[data-v-6695545b]{text-align:center;font-size:18px;color:#9f0;padding:10px;font-weight:700}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-now i[data-v-6695545b]{color:#fc0;font-style:normal}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content[data-v-6695545b]{padding:10px;width:100%;text-align:center;overflow:hidden}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]{width:100%;border:0px solid #222;font-family:Lucida Console;font-size:11px;background:transparent;color:#fff;outline:none;overflow-x:hidden;resize:none;transition:.5s}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]:focus,.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]:hover{box-shadow:none;border-color:#fff0!important}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]::-webkit-scrollbar{width:5px;height:5px}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]::-webkit-scrollbar-thumb{height:30px;outline:none;border:none;border-radius:1rem;background-color:#4c595c;-webkit-border-radius:1rem}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]::-webkit-scrollbar-track-piece{background:none;-webkit-border-radius:0;border-radius:0}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-btn[data-v-6695545b]{width:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:center}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-btn button[data-v-6695545b]{visibility:visible;min-width:88px;font-weight:bolder;text-shadow:1px 1px 0px black;border-radius:8px;height:33px;font-family:Verdana,Microsoft Yahei UI,sans-serif;font-size:12px;padding:0 .7em;width:auto;min-width:122px;margin:0 10px;cursor:pointer;background:#090a0a!important;border:1px solid #fff!important;color:#fff!important;opacity:1!important}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-btn button[data-v-6695545b]:hover{opacity:.9!important}#app *[data-v-6a723585]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.toast[data-v-6a723585]{position:fixed;top:50%;left:50%;display:flex;flex-direction:column;align-items:center;justify-content:space-around;box-sizing:content-box;width:150px;max-width:70%;min-height:30px;padding:10px;color:#fff;font-size:14px;text-align:center;background-color:#000000b3;border-radius:8px;transform:translate3d(-50%,-50%,0);z-index:9999}.toast .toast-close[data-v-6a723585]{cursor:pointer;padding-bottom:36px;right:-61px;position:relative;font-size:20px}#app *[data-v-6d7664a4]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}@keyframes load-6d7664a4{0%{-webkit-transform:rotate(0deg)}25%{-webkit-transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg)}to{-webkit-transform:rotate(360deg)}}.loading[data-v-6d7664a4]{position:fixed;top:50%;left:50%;display:flex;flex-direction:column;align-items:center;justify-content:space-around;box-sizing:content-box;max-width:150px;padding:16px;color:#fff;font-size:14px;text-align:center;background-color:#000000b3;border-radius:8px;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);z-index:999999}.loading .icon[data-v-6d7664a4]{width:35px;height:35px;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:load-6d7664a4 1s linear infinite}.loading .msg[data-v-6d7664a4]{margin-top:10px;color:#fff}.app-container[data-v-c7ef5ab6]{flex:0 0 100%;max-width:calc(50% - 20px);padding:15px;background:#88888822;border-radius:.375rem;overflow:hidden;margin:10px}.app-container .app-info[data-v-c7ef5ab6]{display:flex;flex-wrap:wrap;width:100%;margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #999}.app-container .app-info .app-f[data-v-c7ef5ab6]{flex:0 0 100%;max-width:150px}.app-container .app-info .app-f .app-icon[data-v-c7ef5ab6]{width:100px;height:100px;margin:0 auto}.app-container .app-info .app-f .app-icon img[data-v-c7ef5ab6]{max-width:100%}.app-container .app-info .app-f .app-tags[data-v-c7ef5ab6]{width:100%;display:flex;align-items:center;padding:0 25px}.app-container .app-info .app-f .app-tags .tag[data-v-c7ef5ab6]{font-family:PingFangSC-Medium,PingFang SC;font-weight:500;line-height:12px;font-size:.8125rem;white-space:nowrap;padding:.5rem}.app-container .app-info .app-f .app-tags .block[data-v-c7ef5ab6]{font-size:12px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;margin:0 2px}.app-container .app-info .app-f .app-tags .block[data-v-c7ef5ab6]:last-child{display:none}.app-container .app-info .app-r[data-v-c7ef5ab6]{flex:0 0 100%;max-width:calc(100% - 150px);padding:0 15px}.app-container .app-info .app-r .app-title[data-v-c7ef5ab6]{width:100%;margin-bottom:10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:26px;padding-top:12px}.app-container .app-info .app-r .app-title .app-version[data-v-c7ef5ab6]{margin-left:10px;font-size:.8125rem}.app-container .app-info .app-r .app-as[data-v-c7ef5ab6]{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-bottom:10px}.app-container .app-info .app-r .app-as .star-btn[data-v-c7ef5ab6]{padding:0;margin:0 0 0 10px;width:30px;border:none!important;cursor:pointer;background:none;box-shadow:none}.app-container .app-info .app-r .app-as .star-btn[data-v-c7ef5ab6] svg path{fill:currentColor}.app-container .app-info .app-r .app-as .star-btn[data-v-c7ef5ab6]:hover svg path{filter:invert(.6)}.app-container .app-info .app-r .app-description[data-v-c7ef5ab6]{font-size:12px;height:36px;line-height:18px;margin-bottom:10px;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;padding:0}.app-container .app-info .app-r .app-description span[data-v-c7ef5ab6]{-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;display:-webkit-box}.app-container .app-info .app-r .app-author[data-v-c7ef5ab6],.app-container .app-info .app-r .app-date[data-v-c7ef5ab6]{width:100%;height:20px;line-height:20px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.app-container .app-btns[data-v-c7ef5ab6]{width:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end}.app-container .app-btns .auto[data-v-c7ef5ab6]{flex:auto}.app-container .app-btns .app-margin-left[data-v-c7ef5ab6]{margin:0 5px}.app-container .app-btns .app-btn[data-v-c7ef5ab6]{padding-top:5px;padding-bottom:5px;text-decoration:none}#app *[data-v-c7ef5ab6]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}@media screen and (max-width: 768px){.app-container[data-v-c7ef5ab6]{max-width:100%;margin:10px 0}}#app *[data-v-0046e0f2]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.cbi-section[data-v-0046e0f2]{padding:15px}.cbi-section .containers[data-v-0046e0f2]{width:100%;height:100%;display:flex;flex-wrap:wrap}#app *[data-v-e3845a5c]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.sort-container[data-v-e3845a5c]{display:flex;flex-wrap:wrap;align-items:flex-start;margin-bottom:10px}.sort-container .sort-title[data-v-e3845a5c]{width:50px;height:28px;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;line-height:28px}.sort-container .sort-value[data-v-e3845a5c]{display:flex;flex-wrap:wrap;flex:0 0 100%;max-width:calc(100% - 50px)}.sort-container .sort-value .cbi-button[data-v-e3845a5c]{margin-right:5px}#app *[data-v-3aaf04ee]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.tags-container[data-v-3aaf04ee]{display:flex;flex-wrap:wrap;align-items:flex-start;margin-bottom:10px}.tags-container .tags-title[data-v-3aaf04ee]{width:50px;height:28px;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;line-height:28px}.tags-container .tags-value[data-v-3aaf04ee]{display:flex;flex-wrap:wrap;flex:0 0 100%;max-width:calc(100% - 50px)}.tags-container .tags-value .cbi-button[data-v-3aaf04ee]{margin-right:5px}#app *[data-v-c4e8a9f2]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}form.search[data-v-c4e8a9f2]{width:100%;display:flex;flex-wrap:wrap;align-items:center;margin-bottom:10px;position:relative}form.search input[data-v-c4e8a9f2]{width:100%;height:36px;border-radius:19px;padding:0 40px}form.search .search-btn[data-v-c4e8a9f2]{position:absolute;left:20px;border:none!important;box-shadow:none!important;background:none!important;cursor:pointer;z-index:10;display:flex;flex-wrap:wrap;align-items:center;width:30px;padding:0;margin:0}form.search .search-btn[data-v-c4e8a9f2] svg path{stroke:currentColor}#app *[data-v-1b494368]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.containers[data-v-1b494368]{width:100%;height:100%;display:flex;flex-wrap:wrap}#app *[data-v-74b0669f]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.cbi-section[data-v-74b0669f]{padding:15px}.cbi-section[data-v-74b0669f] .cbi-value{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:10px}#app *[data-v-9c880c04]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.cbi-section[data-v-9c880c04]{padding:15px}.cbi-section .container_msg span[data-v-9c880c04]{display:block;width:100%;margin-bottom:5px}.cbi-section form[data-v-9c880c04]{width:100%;margin:30px 0}.cbi-section form .flex[data-v-9c880c04]{width:100%;display:flex;flex-wrap:wrap;align-items:center}.cbi-section form .flex label.upload-file[data-v-9c880c04]{width:100%;height:54px;background:linear-gradient(144deg,#009aff 0%,#0060ff 100%);border-radius:12px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:0 20px;cursor:pointer}.cbi-section form .flex label.upload-file span[data-v-9c880c04]{font-size:12px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;color:#fff;line-height:22px}.cbi-section form .flex label.upload-file .button[data-v-9c880c04]{min-width:116px;padding:0 10px;height:38px;background:rgba(255,255,255,.2);border-radius:6px;font-size:12px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;color:#fff;display:flex;flex-wrap:wrap;align-items:center;justify-content:center}.cbi-section form .flex label.upload-file input[data-v-9c880c04]{visibility:hidden}.cbi-section form .flex label.upload-file[data-v-9c880c04]:hover{opacity:.9}.cbi-section form button.upload-button[data-v-9c880c04]{width:118px;height:36px;display:flex;align-items:center;justify-content:center;background:linear-gradient(144deg,#009aff 0%,#0060ff 100%);border-radius:10px;font-size:14px;font-family:PingFangSC-Semibold,PingFang SC;font-weight:600;color:#fff}.cbi-section form button.upload-button[data-v-9c880c04]:hover{opacity:.9}#app *[data-v-8e330954]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.cbi-section[data-v-8e330954]{width:100%;min-height:400px;display:block;background:rgba(0,0,0,.9)}.cbi-section .webapp-container[data-v-8e330954]{width:100%;height:100%;min-height:inherit}.cbi-section .webapp-container iframe[data-v-8e330954]{width:100%;height:100%;min-height:inherit;border:none}#app *[data-v-8f2ad39a]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.log-containers[data-v-8f2ad39a]{display:flex;flex-wrap:wrap}.log-containers .model[data-v-8f2ad39a]{width:100%;flex:0 0 100%;display:block;margin-left:18px;margin-top:18px}.log-containers .containers-tit[data-v-8f2ad39a]{margin:1rem 0;display:flex;align-items:center;align-content:center;padding-left:16px}.log-containers .containers-tit .app-btn[data-v-8f2ad39a]{margin-left:3rem}em[data-v-8f2ad39a]{width:100%;display:block;border-bottom:1px solid #eee;margin:1rem 0}#app *[data-v-0f5d170b]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.Lightweight[data-v-0f5d170b]{margin-top:20px;margin-left:18px}.Lightweight .Lightweight-container .model[data-v-0f5d170b]{margin-bottom:10px}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .Lightweight-tit[data-v-0f5d170b]{margin-bottom:20px}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .Lightweight-tit span[data-v-0f5d170b]{display:block;line-height:24px}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .Lightweight-backup[data-v-0f5d170b]{display:flex}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .Lightweight-backup .app-btn[data-v-0f5d170b]{margin-left:14px}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .upload-file[data-v-0f5d170b]{color:#000}input[hidden][data-v-0f5d170b]{display:none!important}#app *[data-v-745c433e]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.local[data-v-745c433e]{margin-top:20px}.local .local-container[data-v-745c433e]{margin-left:18px}.local .local-container .model[data-v-745c433e]{margin-bottom:10px}.local .local-container .local-container1[data-v-745c433e]{width:800px;height:400px}.local .local-container .local-container1 .container1-center[data-v-745c433e]{text-align:left}.local .local-container .local-container1 .container1-center .local-tit span[data-v-745c433e]{display:block;line-height:24px}.local .local-container .local-container1 .container1-center .local-device[data-v-745c433e]{margin-top:20px;margin-bottom:10px}.local .local-container .local-container1 .container1-center .local-input[data-v-745c433e]{display:flex;align-items:center}.local .local-container .local-container1 .container1-center .local-input .app-btn[data-v-745c433e]{margin-left:14px}.local .local-container .local-container1 .container1-center .local-input .local-input-field[data-v-745c433e]{width:20rem}.local .local-container .local-container1 .container1-center .list[data-v-745c433e]{margin-top:20px;margin-bottom:10px}.local .local-container .local-container1 .container1-center .select[data-v-745c433e]{flex:0 0 100%;max-width:100%}#app *[data-v-1d5c62fe]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.log-containers[data-v-1d5c62fe]{width:100%;overflow:auto;margin-top:20px}.log-containers .model[data-v-1d5c62fe]{margin-top:18px;margin-bottom:10px}.log-containers .app-btn[data-v-1d5c62fe]{height:30px;line-height:30px}.log-containers .tabs[data-v-1d5c62fe]{padding-left:0}.log-containers textarea[data-v-1d5c62fe]{font-family:Lucida Console;font-size:14px;outline:none;width:100%;margin:0;resize:none;border-radius:.8rem;padding:15px} +#app *[data-v-13251538]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}li[data-v-13251538]{position:relative}li span[data-v-13251538]{position:absolute;top:5px;right:5px;padding:3px;background-color:#fd1919;border-radius:50%}#app *{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}[lock-scroll=true]{overflow:hidden!important}#app *[data-v-6695545b]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.software-log_shade[data-v-6695545b]{width:100%;height:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;position:fixed;inset:0;z-index:99999}.software-log_shade .software-log_shade__bg[data-v-6695545b]{position:fixed;inset:0;background:rgba(68,79,83,.94) none repeat scroll 0 0!important;background-position:0 0;background-size:cover;opacity:.94}.software-log_shade .software-log_shade__pannel[data-v-6695545b]{width:800px;min-width:800px;border-radius:10px;z-index:100;box-shadow:3px 3px 10px #000;background:rgba(0,0,0,.9);padding:10px}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-title[data-v-6695545b]{text-align:center;font-size:18px;color:#9f0;padding:10px;font-weight:700}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-now i[data-v-6695545b]{color:#fc0;font-style:normal}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content[data-v-6695545b]{padding:10px;width:100%;text-align:center;overflow:hidden}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]{width:100%;border:0px solid #222;font-family:Lucida Console;font-size:11px;background:transparent;color:#fff;outline:none;overflow-x:hidden;resize:none;transition:.5s}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]:focus,.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]:hover{box-shadow:none;border-color:#fff0!important}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]::-webkit-scrollbar{width:5px;height:5px}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]::-webkit-scrollbar-thumb{height:30px;outline:none;border:none;border-radius:1rem;background-color:#4c595c;-webkit-border-radius:1rem}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-content textarea[data-v-6695545b]::-webkit-scrollbar-track-piece{background:none;-webkit-border-radius:0;border-radius:0}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-btn[data-v-6695545b]{width:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:center}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-btn button[data-v-6695545b]{visibility:visible;min-width:88px;font-weight:bolder;text-shadow:1px 1px 0px black;border-radius:8px;height:33px;font-family:Verdana,Microsoft Yahei UI,sans-serif;font-size:12px;padding:0 .7em;width:auto;min-width:122px;margin:0 10px;cursor:pointer;background:#090a0a!important;border:1px solid #fff!important;color:#fff!important;opacity:1!important}.software-log_shade .software-log_shade__pannel .software-log_shade__pannel-btn button[data-v-6695545b]:hover{opacity:.9!important}#app *[data-v-6a723585]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.toast[data-v-6a723585]{position:fixed;top:50%;left:50%;display:flex;flex-direction:column;align-items:center;justify-content:space-around;box-sizing:content-box;width:150px;max-width:70%;min-height:30px;padding:10px;color:#fff;font-size:14px;text-align:center;background-color:#000000b3;border-radius:8px;transform:translate3d(-50%,-50%,0);z-index:9999}.toast .toast-close[data-v-6a723585]{cursor:pointer;padding-bottom:36px;right:-61px;position:relative;font-size:20px}#app *[data-v-6d7664a4]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}@keyframes load-6d7664a4{0%{-webkit-transform:rotate(0deg)}25%{-webkit-transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg)}to{-webkit-transform:rotate(360deg)}}.loading[data-v-6d7664a4]{position:fixed;top:50%;left:50%;display:flex;flex-direction:column;align-items:center;justify-content:space-around;box-sizing:content-box;max-width:150px;padding:16px;color:#fff;font-size:14px;text-align:center;background-color:#000000b3;border-radius:8px;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);z-index:999999}.loading .icon[data-v-6d7664a4]{width:35px;height:35px;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:load-6d7664a4 1s linear infinite}.loading .msg[data-v-6d7664a4]{margin-top:10px;color:#fff}.app-container[data-v-54a5b850]{flex:0 0 100%;max-width:calc(50% - 20px);padding:15px;background:#88888822;border-radius:.375rem;overflow:hidden;margin:10px}.app-container .app-info[data-v-54a5b850]{display:flex;flex-wrap:wrap;width:100%;margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #999}.app-container .app-info .app-f[data-v-54a5b850]{flex:0 0 100%;max-width:150px}.app-container .app-info .app-f .app-icon[data-v-54a5b850]{width:100px;height:100px;margin:0 auto}.app-container .app-info .app-f .app-icon img[data-v-54a5b850]{max-width:100%}.app-container .app-info .app-f .app-tags[data-v-54a5b850]{width:100%;display:flex;align-items:center;padding:0 25px}.app-container .app-info .app-f .app-tags .tag[data-v-54a5b850]{font-family:PingFangSC-Medium,PingFang SC;font-weight:500;line-height:12px;font-size:.8125rem;white-space:nowrap;padding:.5rem}.app-container .app-info .app-f .app-tags .block[data-v-54a5b850]{font-size:12px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;margin:0 2px}.app-container .app-info .app-f .app-tags .block[data-v-54a5b850]:last-child{display:none}.app-container .app-info .app-r[data-v-54a5b850]{flex:0 0 100%;max-width:calc(100% - 150px);padding:0 15px}.app-container .app-info .app-r .app-title[data-v-54a5b850]{width:100%;margin-bottom:10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:26px;padding-top:12px}.app-container .app-info .app-r .app-title .app-version[data-v-54a5b850]{margin-left:10px;font-size:.8125rem}.app-container .app-info .app-r .app-as[data-v-54a5b850]{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-bottom:10px}.app-container .app-info .app-r .app-as .star-btn[data-v-54a5b850]{padding:0;margin:0 0 0 10px;width:30px;border:none!important;cursor:pointer;background:none;box-shadow:none}.app-container .app-info .app-r .app-as .star-btn[data-v-54a5b850] svg path{fill:currentColor}.app-container .app-info .app-r .app-as .star-btn[data-v-54a5b850]:hover svg path{filter:invert(.6)}.app-container .app-info .app-r .app-description[data-v-54a5b850]{font-size:12px;height:36px;line-height:18px;margin-bottom:10px;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;padding:0}.app-container .app-info .app-r .app-description span[data-v-54a5b850]{-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;display:-webkit-box}.app-container .app-info .app-r .app-author[data-v-54a5b850],.app-container .app-info .app-r .app-date[data-v-54a5b850]{width:100%;height:20px;line-height:20px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.app-container .app-btns[data-v-54a5b850]{width:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end}.app-container .app-btns .auto[data-v-54a5b850]{flex:auto}.app-container .app-btns .app-margin-left[data-v-54a5b850]{margin:0 5px}.app-container .app-btns .app-btn[data-v-54a5b850]{padding-top:5px;padding-bottom:5px;text-decoration:none}#app *[data-v-54a5b850]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}@media screen and (max-width: 768px){.app-container[data-v-54a5b850]{max-width:100%;margin:10px 0}}#app *[data-v-0046e0f2]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.cbi-section[data-v-0046e0f2]{padding:15px}.cbi-section .containers[data-v-0046e0f2]{width:100%;height:100%;display:flex;flex-wrap:wrap}#app *[data-v-e3845a5c]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.sort-container[data-v-e3845a5c]{display:flex;flex-wrap:wrap;align-items:flex-start;margin-bottom:10px}.sort-container .sort-title[data-v-e3845a5c]{width:50px;height:28px;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;line-height:28px}.sort-container .sort-value[data-v-e3845a5c]{display:flex;flex-wrap:wrap;flex:0 0 100%;max-width:calc(100% - 50px)}.sort-container .sort-value .cbi-button[data-v-e3845a5c]{margin-right:5px}#app *[data-v-07bccc36]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.tags-container[data-v-07bccc36]{display:flex;flex-wrap:wrap;align-items:flex-start;margin-bottom:10px}.tags-container .tags-title[data-v-07bccc36]{width:50px;height:28px;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;line-height:28px}.tags-container .tags-value[data-v-07bccc36]{display:flex;flex-wrap:wrap;flex:0 0 100%;max-width:calc(100% - 50px)}.tags-container .tags-value .cbi-button[data-v-07bccc36]{margin-right:5px}#app *[data-v-c4e8a9f2]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}form.search[data-v-c4e8a9f2]{width:100%;display:flex;flex-wrap:wrap;align-items:center;margin-bottom:10px;position:relative}form.search input[data-v-c4e8a9f2]{width:100%;height:36px;border-radius:19px;padding:0 40px}form.search .search-btn[data-v-c4e8a9f2]{position:absolute;left:20px;border:none!important;box-shadow:none!important;background:none!important;cursor:pointer;z-index:10;display:flex;flex-wrap:wrap;align-items:center;width:30px;padding:0;margin:0}form.search .search-btn[data-v-c4e8a9f2] svg path{stroke:currentColor}#app *[data-v-1b494368]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.containers[data-v-1b494368]{width:100%;height:100%;display:flex;flex-wrap:wrap}#app *[data-v-74b0669f]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.cbi-section[data-v-74b0669f]{padding:15px}.cbi-section[data-v-74b0669f] .cbi-value{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:10px}#app *[data-v-9c880c04]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.cbi-section[data-v-9c880c04]{padding:15px}.cbi-section .container_msg span[data-v-9c880c04]{display:block;width:100%;margin-bottom:5px}.cbi-section form[data-v-9c880c04]{width:100%;margin:30px 0}.cbi-section form .flex[data-v-9c880c04]{width:100%;display:flex;flex-wrap:wrap;align-items:center}.cbi-section form .flex label.upload-file[data-v-9c880c04]{width:100%;height:54px;background:linear-gradient(144deg,#009aff 0%,#0060ff 100%);border-radius:12px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:0 20px;cursor:pointer}.cbi-section form .flex label.upload-file span[data-v-9c880c04]{font-size:12px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;color:#fff;line-height:22px}.cbi-section form .flex label.upload-file .button[data-v-9c880c04]{min-width:116px;padding:0 10px;height:38px;background:rgba(255,255,255,.2);border-radius:6px;font-size:12px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;color:#fff;display:flex;flex-wrap:wrap;align-items:center;justify-content:center}.cbi-section form .flex label.upload-file input[data-v-9c880c04]{visibility:hidden}.cbi-section form .flex label.upload-file[data-v-9c880c04]:hover{opacity:.9}.cbi-section form button.upload-button[data-v-9c880c04]{width:118px;height:36px;display:flex;align-items:center;justify-content:center;background:linear-gradient(144deg,#009aff 0%,#0060ff 100%);border-radius:10px;font-size:14px;font-family:PingFangSC-Semibold,PingFang SC;font-weight:600;color:#fff}.cbi-section form button.upload-button[data-v-9c880c04]:hover{opacity:.9}#app *[data-v-8e330954]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.cbi-section[data-v-8e330954]{width:100%;min-height:400px;display:block;background:rgba(0,0,0,.9)}.cbi-section .webapp-container[data-v-8e330954]{width:100%;height:100%;min-height:inherit}.cbi-section .webapp-container iframe[data-v-8e330954]{width:100%;height:100%;min-height:inherit;border:none}#app *[data-v-8f2ad39a]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.log-containers[data-v-8f2ad39a]{display:flex;flex-wrap:wrap}.log-containers .model[data-v-8f2ad39a]{width:100%;flex:0 0 100%;display:block;margin-left:18px;margin-top:18px}.log-containers .containers-tit[data-v-8f2ad39a]{margin:1rem 0;display:flex;align-items:center;align-content:center;padding-left:16px}.log-containers .containers-tit .app-btn[data-v-8f2ad39a]{margin-left:3rem}em[data-v-8f2ad39a]{width:100%;display:block;border-bottom:1px solid #eee;margin:1rem 0}#app *[data-v-0f5d170b]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.Lightweight[data-v-0f5d170b]{margin-top:20px;margin-left:18px}.Lightweight .Lightweight-container .model[data-v-0f5d170b]{margin-bottom:10px}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .Lightweight-tit[data-v-0f5d170b]{margin-bottom:20px}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .Lightweight-tit span[data-v-0f5d170b]{display:block;line-height:24px}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .Lightweight-backup[data-v-0f5d170b]{display:flex}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .Lightweight-backup .app-btn[data-v-0f5d170b]{margin-left:14px}.Lightweight .Lightweight-container .Lightweight-container1 .container1-center .upload-file[data-v-0f5d170b]{color:#000}input[hidden][data-v-0f5d170b]{display:none!important}#app *[data-v-745c433e]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.local[data-v-745c433e]{margin-top:20px}.local .local-container[data-v-745c433e]{margin-left:18px}.local .local-container .model[data-v-745c433e]{margin-bottom:10px}.local .local-container .local-container1[data-v-745c433e]{width:800px;height:400px}.local .local-container .local-container1 .container1-center[data-v-745c433e]{text-align:left}.local .local-container .local-container1 .container1-center .local-tit span[data-v-745c433e]{display:block;line-height:24px}.local .local-container .local-container1 .container1-center .local-device[data-v-745c433e]{margin-top:20px;margin-bottom:10px}.local .local-container .local-container1 .container1-center .local-input[data-v-745c433e]{display:flex;align-items:center}.local .local-container .local-container1 .container1-center .local-input .app-btn[data-v-745c433e]{margin-left:14px}.local .local-container .local-container1 .container1-center .local-input .local-input-field[data-v-745c433e]{width:20rem}.local .local-container .local-container1 .container1-center .list[data-v-745c433e]{margin-top:20px;margin-bottom:10px}.local .local-container .local-container1 .container1-center .select[data-v-745c433e]{flex:0 0 100%;max-width:100%}#app *[data-v-1d5c62fe]{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}.log-containers[data-v-1d5c62fe]{width:100%;overflow:auto;margin-top:20px}.log-containers .model[data-v-1d5c62fe]{margin-top:18px;margin-bottom:10px}.log-containers .app-btn[data-v-1d5c62fe]{height:30px;line-height:30px}.log-containers .tabs[data-v-1d5c62fe]{padding-left:0}.log-containers textarea[data-v-1d5c62fe]{font-family:Lucida Console;font-size:14px;outline:none;width:100%;margin:0;resize:none;border-radius:.8rem;padding:15px} diff --git a/luci-app-gpsysupgrade/luasrc/model/cbi/gpsysupgrade/sysupgrade.lua b/luci-app-gpsysupgrade/luasrc/model/cbi/gpsysupgrade/sysupgrade.lua index 8df8598d8..2d236d9b0 100644 --- a/luci-app-gpsysupgrade/luasrc/model/cbi/gpsysupgrade/sysupgrade.lua +++ b/luci-app-gpsysupgrade/luasrc/model/cbi/gpsysupgrade/sysupgrade.lua @@ -46,6 +46,10 @@ function to_check() model = "rockchip_armv8/nanopi-r4s" check_update() download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r4s-squashfs-sysupgrade.img.gz" + elseif model:match(".*R5S.*") then + model = "rockchip_armv8/nanopi-r5s" + check_update() + download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r5s_sd.img.gz" elseif model:match(".*R2C.*") then model = "rockchip_armv8/nanopi-r2c" check_update() @@ -122,6 +126,14 @@ function to_check() model = "ramips_mt7621/mi-ac2100" check_update() download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-ramips-mt7621-xiaomi_mi-ac2100-squashfs-sysupgrade.bin" + elseif model:match(".*RT-AC42U.*") then + model = "ipq40xx_generic/asus-rt-acrh17" + check_update() + download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-asus_rt-ac42u-squashfs-sysupgrade.bin" + elseif model:match(".*RT-AC58U.*") then + model = "ipq40xx_generic/asus-rt-ac58u" + check_update() + download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-asus_rt-ac58u-squashfs-sysupgrade.bin" else local needs_update = false return { diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 01698eac7..e1c228a19 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -46,6 +46,7 @@ LUCI_DEPENDS:=+coreutils +coreutils-base64 +coreutils-nohup +curl \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-redir \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server:shadowsocks-libev-ss-server \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client:shadowsocks-rust-sslocal \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server:shadowsocks-rust-ssserver \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-local \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-redir \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server:shadowsocksr-libev-ssr-server \ @@ -113,6 +114,11 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client depends on aarch64||arm||i386||mips||mipsel||x86_64 default y if aarch64 +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server + bool "Include Shadowsocks Rust Server" + depends on aarch64||arm||i386||mips||mipsel||x86_64 + default n + config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client bool "Include ShadowsocksR Libev Client" default y diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua index 521c2354c..efd7e7445 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua @@ -224,6 +224,7 @@ function gen_outbound(node, tag, proxy_table) method = node.method or nil, flow = node.flow or nil, ivCheck = (node.protocol == "shadowsocks") and node.iv_check == "1" or nil, + uot = (node.protocol == "shadowsocks") and node.uot == "1" or nil, password = node.password or "", users = (node.username and node.password) and { { diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua index e04896f8f..89b524b34 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua @@ -405,6 +405,9 @@ iv_check = s:option(Flag, "iv_check", translate("IV Check")) iv_check:depends({ type = "V2ray", protocol = "shadowsocks" }) iv_check:depends({ type = "Xray", protocol = "shadowsocks" }) +uot = s:option(Flag, "uot", translate("UDP over TCP"), translate("Need Xray server side with Shadowsocks-2022 protocol")) +uot:depends({ type = "Xray", protocol = "shadowsocks" }) + ssr_protocol = s:option(Value, "ssr_protocol", translate("Protocol")) for a, t in ipairs(ssr_protocol_list) do ssr_protocol:value(t) end ssr_protocol:depends("type", "SSR") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua index 402ba48ea..cc1f25a76 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua @@ -45,7 +45,7 @@ o.rows = 5 o.rmempty = false o = s:option(Flag, "allowInsecure", translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped.")) -o.default = "1" +o.default = "0" o.rmempty = false o = s:option(ListValue, "filter_keyword_mode", translate("Filter keyword Mode")) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua index 374deec9c..b2591ec25 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua @@ -19,7 +19,7 @@ o:value("https://fastly.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@relea o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt", translate("Loyalsoldier/v2ray-rules-dat")) o:value("https://fastly.jsdelivr.net/gh/Loukky/gfwlist-by-loukky/gfwlist.txt", translate("Loukky/gfwlist-by-loukky")) o:value("https://fastly.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt", translate("gfwlist/gfwlist")) -o.default = "https://fastly.jsdelivr.net/gh/Loukky/gfwlist-by-loukky/gfwlist.txt" +o.default = "https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt" ----chnroute URL o = s:option(DynamicList, "chnroute_url", translate("China IPs(chnroute) Update URL")) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua index 92693bdc7..ffc7c3bdb 100755 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua @@ -121,6 +121,9 @@ local function start() end type = type:lower() bin = ln_run("/usr/bin/" .. type .. "-server", type .. "-server", "-c " .. config_file .. " " .. udp_param, log_path) + elseif type == "SS-Rust" then + config = require(require_dir .. "shadowsocks").gen_config(user) + bin = ln_run("/usr/bin/ssserver", "ssserver", "-c " .. config_file, log_path) elseif type == "V2ray" then config = require(require_dir .. "v2ray").gen_config(user) bin = ln_run(api.get_v2ray_path(), "v2ray", "run -c " .. config_file, log_path) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua index fdd18e0e2..5b32c4645 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua @@ -1,13 +1,19 @@ module("luci.model.cbi.passwall.server.api.shadowsocks", package.seeall) function gen_config(user) local config = {} - config.server = {"[::0]", "0.0.0.0"} config.server_port = tonumber(user.port) config.password = user.password config.timeout = tonumber(user.timeout) config.fast_open = (user.tcp_fast_open and user.tcp_fast_open == "1") and true or false config.method = user.method + if user.type == "SS-Rust" then + config.server = "::" + config.mode = "tcp_and_udp" + else + config.server = {"[::0]", "0.0.0.0"} + end + if user.type == "SSR" then config.protocol = user.protocol config.protocol_param = user.protocol_param diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua index d0174e641..cc016c343 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua @@ -9,6 +9,12 @@ local ss_encrypt_method_list = { "xchacha20-ietf-poly1305" } +local ss_rust_encrypt_method_list = { + "plain", "none", + "aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", + "2022-blake3-aes-128-gcm","2022-blake3-aes-256-gcm","2022-blake3-chacha8-poly1305","2022-blake3-chacha20-poly1305" +} + local ssr_encrypt_method_list = { "none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", @@ -68,6 +74,9 @@ end if api.is_finded("ss-server") then type:value("SS", translate("Shadowsocks")) end +if api.is_finded("ssserver") then + type:value("SS-Rust", translate("Shadowsocks Rust")) +end if api.is_finded("ssr-server") then type:value("SSR", translate("ShadowsocksR")) end @@ -150,6 +159,7 @@ password = s:option(Value, "password", translate("Password")) password.password = true password:depends("auth", true) password:depends("type", "SS") +password:depends("type", "SS-Rust") password:depends("type", "SSR") password:depends("type", "Brook") password:depends({ type = "V2ray", protocol = "shadowsocks" }) @@ -245,6 +255,16 @@ function ss_encrypt_method.write(self, section, value) m:set(section, "method", value) end +ss_rust_encrypt_method = s:option(ListValue, "ss_rust_encrypt_method", translate("Encrypt Method")) +for a, t in ipairs(ss_rust_encrypt_method_list) do ss_rust_encrypt_method:value(t) end +ss_rust_encrypt_method:depends("type", "SS-Rust") +function ss_rust_encrypt_method.cfgvalue(self, section) + return m:get(section, "method") +end +function ss_rust_encrypt_method.write(self, section, value) + m:set(section, "method", value) +end + ssr_encrypt_method = s:option(ListValue, "ssr_encrypt_method", translate("Encrypt Method")) for a, t in ipairs(ssr_encrypt_method_list) do ssr_encrypt_method:value(t) end ssr_encrypt_method:depends("type", "SSR") @@ -311,6 +331,7 @@ timeout = s:option(Value, "timeout", translate("Connection Timeout")) timeout.datatype = "uinteger" timeout.default = 300 timeout:depends("type", "SS") +timeout:depends("type", "SS-Rust") timeout:depends("type", "SSR") udp_forward = s:option(Flag, "udp_forward", translate("UDP Forward")) @@ -617,6 +638,7 @@ ss_aead_pwd:depends("ss_aead", true) tcp_fast_open = s:option(Flag, "tcp_fast_open", translate("TCP Fast Open")) tcp_fast_open.default = "0" tcp_fast_open:depends("type", "SS") +tcp_fast_open:depends("type", "SS-Rust") tcp_fast_open:depends("type", "SSR") tcp_fast_open:depends("type", "Trojan") tcp_fast_open:depends("type", "Trojan-Plus") diff --git a/luci-app-passwall/po/zh-cn/passwall.po b/luci-app-passwall/po/zh-cn/passwall.po index e7036c0fe..71cc53065 100644 --- a/luci-app-passwall/po/zh-cn/passwall.po +++ b/luci-app-passwall/po/zh-cn/passwall.po @@ -994,6 +994,12 @@ msgstr "密码" msgid "IV Check" msgstr "IV 检查" +msgid "UDP over TCP" +msgstr "TCP封装UDP" + +msgid "Need Xray server side with Shadowsocks-2022 protocol" +msgstr "需要Xray作服务器端的Shadowsocks-2022协议" + msgid "Connection Timeout" msgstr "连接超时时间" diff --git a/luci-app-passwall/root/usr/share/passwall/0_default_config b/luci-app-passwall/root/usr/share/passwall/0_default_config index b40e210f4..5f1adda4c 100644 --- a/luci-app-passwall/root/usr/share/passwall/0_default_config +++ b/luci-app-passwall/root/usr/share/passwall/0_default_config @@ -48,7 +48,7 @@ config global_rules option gfwlist_update '1' option geosite_update '0' option geoip_update '0' - list gfwlist_url 'https://fastly.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@release/gfwlist.txt' + list gfwlist_url 'https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt' list chnroute_url 'https://ispip.clang.cn/all_cn.txt' list chnroute6_url 'https://ispip.clang.cn/all_cn_ipv6.txt' list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf' diff --git a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq_add.lua b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq_add.lua index 192886d15..3c61de030 100644 --- a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq_add.lua +++ b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq_add.lua @@ -1,3 +1,4 @@ +require "luci.sys" local api = require "luci.model.cbi.passwall.api.api" local var = api.get_args(arg) @@ -164,7 +165,8 @@ end local dnsmasq_default_dns local cache_text = "" -local new_text = TMP_DNSMASQ_PATH .. DNSMASQ_CONF_FILE .. DEFAULT_DNS .. LOCAL_DNS .. TUN_DNS .. REMOTE_FAKEDNS .. CHINADNS_DNS .. PROXY_MODE .. NO_PROXY_IPV6 +local new_rules = luci.sys.exec("echo -n $(find /usr/share/passwall/rules -type f | xargs md5sum)") +local new_text = TMP_DNSMASQ_PATH .. DNSMASQ_CONF_FILE .. DEFAULT_DNS .. LOCAL_DNS .. TUN_DNS .. REMOTE_FAKEDNS .. CHINADNS_DNS .. PROXY_MODE .. NO_PROXY_IPV6 .. new_rules if fs.access(CACHE_TEXT_FILE) then for line in io.lines(CACHE_TEXT_FILE) do cache_text = line diff --git a/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua b/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua index 39e0213e2..615268633 100644 --- a/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua +++ b/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua @@ -1,3 +1,4 @@ +require "luci.sys" local api = require "luci.model.cbi.passwall.api.api" local var = api.get_args(arg) @@ -145,7 +146,8 @@ local function check_excluded_domain(domain) end local cache_text = "" -local new_text = SMARTDNS_CONF .. LOCAL_GROUP .. REMOTE_GROUP .. REMOTE_FAKEDNS .. TUN_DNS .. PROXY_MODE .. NO_PROXY_IPV6 +local new_rules = luci.sys.exec("echo -n $(find /usr/share/passwall/rules -type f | xargs md5sum)") +local new_text = SMARTDNS_CONF .. LOCAL_GROUP .. REMOTE_GROUP .. REMOTE_FAKEDNS .. TUN_DNS .. PROXY_MODE .. NO_PROXY_IPV6 ..new_rules if fs.access(CACHE_TEXT_FILE) then for line in io.lines(CACHE_TEXT_FILE) do cache_text = line diff --git a/luci-app-passwall/root/usr/share/passwall/rule_update.lua b/luci-app-passwall/root/usr/share/passwall/rule_update.lua index ea60f7f9e..2784505c4 100755 --- a/luci-app-passwall/root/usr/share/passwall/rule_update.lua +++ b/luci-app-passwall/root/usr/share/passwall/rule_update.lua @@ -87,6 +87,14 @@ local function line_count(file_path) return num; end +local function non_file_check(file_path) + if nixio.fs.readfile(file_path, 1000) then + return nil; + else + return true; + end +end + --fetch rule local function fetch_rule(rule_name,rule_type,url,exclude_domain) local sret = 200 @@ -99,7 +107,10 @@ local function fetch_rule(rule_name,rule_type,url,exclude_domain) log(rule_name.. " 开始更新...") for k,v in ipairs(url) do sret_tmp = curl(v, download_file_tmp..k) - if sret_tmp == 200 then + if sret_tmp == 200 and non_file_check(download_file_tmp..k) then + sret = 0 + log(rule_name.. " 第" ..k.. "条规则:" ..v.. "下载文件读取出错,请检查网络或下载链接后重试!") + elseif sret_tmp == 200 then if rule_name == "gfwlist" then local domains = {} local gfwlist = io.open(download_file_tmp..k, "r") @@ -152,11 +163,11 @@ local function fetch_rule(rule_name,rule_type,url,exclude_domain) out:close() end - os.remove(download_file_tmp..k) else sret = 0 - log(rule_name.. " 第" ..k.. "条规则:" ..v.. "下载失败!") + log(rule_name.. " 第" ..k.. "条规则:" ..v.. "下载失败,请检查网络或下载链接后重试!") end + os.remove(download_file_tmp..k) end if sret == 200 then @@ -169,9 +180,7 @@ local function fetch_rule(rule_name,rule_type,url,exclude_domain) end luci.sys.call("cat " ..unsort_file_tmp.. " | sort -u > "..file_tmp) os.remove(unsort_file_tmp) - end - if sret == 200 then local old_md5 = luci.sys.exec("echo -n $(md5sum " .. rule_path .. "/" ..rule_name.. " | awk '{print $1}')") local new_md5 = luci.sys.exec("echo -n $([ -f '" ..file_tmp.. "' ] && md5sum " ..file_tmp.." | awk '{print $1}')") if old_md5 ~= new_md5 then diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua index e7f52c377..8425a416b 100755 --- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -27,7 +27,7 @@ local has_trojan_plus = api.is_finded("trojan-plus") local has_v2ray = api.is_finded("v2ray") local has_xray = api.is_finded("xray") local has_trojan_go = api.is_finded("trojan-go") -local allowInsecure_default = true +local allowInsecure_default = nil local ss_aead_type_default = uci:get(appname, "@global_subscribe[0]", "ss_aead_type") or "shadowsocks-libev" local trojan_type_default = uci:get(appname, "@global_subscribe[0]", "trojan_type") or "trojan-plus" -- 判断是否过滤节点关键字 @@ -555,16 +555,12 @@ local function processData(szType, content, add_mode, add_from) result.address = hostInfo and hostInfo[1] or Info[2] end local peer, sni = nil, "" - local allowInsecure = allowInsecure_default local query = split(Info[2], "?") local params = {} for _, v in pairs(split(query[2], '&')) do local t = split(v, '=') params[string.lower(t[1])] = UrlDecode(t[2]) end - if params.allowinsecure then - allowInsecure = params.allowinsecure - end if params.peer then peer = params.peer end sni = params.sni and params.sni or "" if params.ws and params.ws == "1" then @@ -586,7 +582,16 @@ local function processData(szType, content, add_mode, add_from) end result.tls = '1' result.tls_serverName = peer and peer or sni - result.tls_allowInsecure = allowInsecure and "1" or "0" + if params.allowinsecure then + if params.allowinsecure == "1" or params.allowinsecure == "0" then + result.tls_allowInsecure = params.allowinsecure + else + result.tls_allowInsecure = string.lower(params.allowinsecure) == "true" and "1" or "0" + end + log(result.remarks .. ' 使用节点AllowInsecure设定: '.. result.tls_allowInsecure) + else + result.tls_allowInsecure = allowInsecure_default and "1" or "0" + end end if trojan_type_default == "trojan-plus" and has_trojan_plus then result.type = "Trojan-Plus" @@ -787,8 +792,11 @@ local function processData(szType, content, add_mode, add_from) result.hysteria_auth_type = "string" result.hysteria_auth_password = params.auth result.tls_serverName = params.peer - if params.insecure and params.insecure == "1" then - result.tls_allowInsecure = "1" + if params.insecure and (params.insecure == "1" or params.insecure == "0") then + result.tls_allowInsecure = params.insecure + log(result.remarks ..' 使用节点AllowInsecure设定: '.. result.tls_allowInsecure) + else + result.tls_allowInsecure = allowInsecure_default and "1" or "0" end result.hysteria_alpn = params.alpn result.hysteria_up_mbps = params.upmbps @@ -1138,8 +1146,8 @@ local execute = function() local cfgid = value[".name"] local remark = value.remark local url = value.url - if value.allowInsecure and value.allowInsecure ~= "1" then - allowInsecure_default = nil + if value.allowInsecure and value.allowInsecure == "1" then + allowInsecure_default = true end local filter_keyword_mode = value.filter_keyword_mode or "5" if filter_keyword_mode == "0" then @@ -1180,7 +1188,7 @@ local execute = function() else retry[#retry + 1] = value end - allowInsecure_default = true + allowInsecure_default = nil filter_keyword_mode_default = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0" filter_keyword_discard_list_default = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {} filter_keyword_keep_list_default = uci:get(appname, "@global_subscribe[0]", "filter_keep_list") or {} diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index fc08bfba0..29e89e6d6 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -38,6 +38,7 @@ LUCI_DEPENDS:=+coreutils +coreutils-base64 +coreutils-nohup +curl \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-redir \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server:shadowsocks-libev-ss-server \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client:shadowsocks-rust-sslocal \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server:shadowsocks-rust-ssserver \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-local \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-redir \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server:shadowsocksr-libev-ssr-server \ @@ -92,6 +93,11 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client depends on aarch64||arm||i386||mips||mipsel||x86_64 default y if aarch64 +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server + bool "Include Shadowsocks Rust Server" + depends on aarch64||arm||i386||mips||mipsel||x86_64 + default n + config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client bool "Include ShadowsocksR Libev Client" default y diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/api/app.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/api/app.lua index 52ea71d57..1379bba8f 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/api/app.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/api/app.lua @@ -121,6 +121,9 @@ local function start() end type = type:lower() bin = ln_run("/usr/bin/" .. type .. "-server", type .. "-server", "-c " .. config_file .. " " .. udp_param, log_path) + elseif type == "SS-Rust" then + config = require(require_dir .. "shadowsocks").gen_config(user) + bin = ln_run("/usr/bin/ssserver", "ssserver", "-c " .. config_file, log_path) elseif type == "V2ray" then config = require(require_dir .. "v2ray").gen_config(user) bin = ln_run(api.get_v2ray_path(), "v2ray", "run -c " .. config_file, log_path) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/api/shadowsocks.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/api/shadowsocks.lua index 8afc4095a..b9bcd2a2f 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/api/shadowsocks.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/api/shadowsocks.lua @@ -1,13 +1,19 @@ module("luci.model.cbi.passwall2.server.api.shadowsocks", package.seeall) function gen_config(user) local config = {} - config.server = {"[::0]", "0.0.0.0"} config.server_port = tonumber(user.port) config.password = user.password config.timeout = tonumber(user.timeout) config.fast_open = (user.tcp_fast_open and user.tcp_fast_open == "1") and true or false config.method = user.method + if user.type == "SS-Rust" then + config.server = "::" + config.mode = "tcp_and_udp" + else + config.server = {"[::0]", "0.0.0.0"} + end + if user.type == "SSR" then config.protocol = user.protocol config.protocol_param = user.protocol_param diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua index 52e8b3495..8fe05208d 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua @@ -9,6 +9,12 @@ local ss_encrypt_method_list = { "xchacha20-ietf-poly1305" } +local ss_rust_encrypt_method_list = { + "plain", "none", + "aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", + "2022-blake3-aes-128-gcm","2022-blake3-aes-256-gcm","2022-blake3-chacha8-poly1305","2022-blake3-chacha20-poly1305" +} + local ssr_encrypt_method_list = { "none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", @@ -65,6 +71,9 @@ type = s:option(ListValue, "type", translate("Type")) if api.is_finded("ss-server") then type:value("SS", translate("Shadowsocks")) end +if api.is_finded("ssserver") then + type:value("SS-Rust", translate("Shadowsocks Rust")) +end if api.is_finded("ssr-server") then type:value("SSR", translate("ShadowsocksR")) end @@ -135,6 +144,7 @@ password = s:option(Value, "password", translate("Password")) password.password = true password:depends("auth", true) password:depends("type", "SS") +password:depends("type", "SS-Rust") password:depends("type", "SSR") password:depends("type", "Brook") password:depends({ type = "V2ray", protocol = "shadowsocks" }) @@ -230,6 +240,16 @@ function ss_encrypt_method.write(self, section, value) m:set(section, "method", value) end +ss_rust_encrypt_method = s:option(ListValue, "ss_rust_encrypt_method", translate("Encrypt Method")) +for a, t in ipairs(ss_rust_encrypt_method_list) do ss_rust_encrypt_method:value(t) end +ss_rust_encrypt_method:depends("type", "SS-Rust") +function ss_rust_encrypt_method.cfgvalue(self, section) + return m:get(section, "method") +end +function ss_rust_encrypt_method.write(self, section, value) + m:set(section, "method", value) +end + ssr_encrypt_method = s:option(ListValue, "ssr_encrypt_method", translate("Encrypt Method")) for a, t in ipairs(ssr_encrypt_method_list) do ssr_encrypt_method:value(t) end ssr_encrypt_method:depends("type", "SSR") @@ -296,6 +316,7 @@ timeout = s:option(Value, "timeout", translate("Connection Timeout")) timeout.datatype = "uinteger" timeout.default = 300 timeout:depends("type", "SS") +timeout:depends("type", "SS-Rust") timeout:depends("type", "SSR") udp_forward = s:option(Flag, "udp_forward", translate("UDP Forward")) @@ -542,6 +563,7 @@ fallback_list:depends("fallback", true) tcp_fast_open = s:option(Flag, "tcp_fast_open", translate("TCP Fast Open")) tcp_fast_open.default = "0" tcp_fast_open:depends("type", "SS") +tcp_fast_open:depends("type", "SS-Rust") tcp_fast_open:depends("type", "SSR") remote_address = s:option(Value, "remote_address", translate("Remote Address")) diff --git a/luci-app-store/Makefile b/luci-app-store/Makefile index fffc9dc9e..8bb39593a 100644 --- a/luci-app-store/Makefile +++ b/luci-app-store/Makefile @@ -10,13 +10,13 @@ LUCI_DESCRIPTION:=luci-app-store is a ipk store developed by LinkEase team LUCI_DEPENDS:=+curl +opkg +luci-base +tar +coreutils +coreutils-stat +libuci-lua +mount-utils LUCI_PKGARCH:=all -PKG_VERSION:=0.1.10-1 +PKG_VERSION:=0.1.10-3 # PKG_RELEASE MUST be empty for luci.mk PKG_RELEASE:= ISTORE_UI_VERSION:=0.1.9 -ISTORE_UI_RELEASE:=6 -PKG_HASH:=fd10902e790b1bc357cc6d78c3ece170ff55928a042d3242f947bc1adca351be +ISTORE_UI_RELEASE:=9 +PKG_HASH:=2069b4f4b78dcb10764e3f6245727ae6af672361d5558c3ce5eac082b5ff0a67 PKG_SOURCE_URL_FILE:=v$(ISTORE_UI_VERSION)-$(ISTORE_UI_RELEASE).tar.gz PKG_SOURCE:=istore-ui-$(PKG_SOURCE_URL_FILE) diff --git a/luci-app-store/src/po/zh-cn/iStore.po b/luci-app-store/src/po/zh-cn/iStore.po index 93eff8ccc..41ed620e4 100644 --- a/luci-app-store/src/po/zh-cn/iStore.po +++ b/luci-app-store/src/po/zh-cn/iStore.po @@ -5,4 +5,4 @@ msgid "istore_vue_lang" msgstr "zh-cn" msgid "iStore" -msgstr "应用商店" +msgstr "iStore" diff --git a/luci-app-store/src/po/zh-tw/iStore.po b/luci-app-store/src/po/zh-tw/iStore.po index 93eff8ccc..41ed620e4 100644 --- a/luci-app-store/src/po/zh-tw/iStore.po +++ b/luci-app-store/src/po/zh-tw/iStore.po @@ -5,4 +5,4 @@ msgid "istore_vue_lang" msgstr "zh-cn" msgid "iStore" -msgstr "应用商店" +msgstr "iStore" diff --git a/my-default-settings/target/ipq807x/files/etc/uci-defaults/zz-ipq-default-settings b/my-default-settings/target/ipq807x/files/etc/uci-defaults/zz-ipq-default-settings deleted file mode 100644 index 80a85483e..000000000 --- a/my-default-settings/target/ipq807x/files/etc/uci-defaults/zz-ipq-default-settings +++ /dev/null @@ -1,9 +0,0 @@ -version=`uci -q get base_config.@status[0].version` - -test $version -lt 3 && { -uci -q del turboacc.config.sw_flow -uci commit turboacc -} - -uci -q set base_config.@status[0].version=3 -uci commit base_config diff --git a/my-default-settings/target/rockchip/armv8/files/etc/hotplug.d/iface/12-rk3328 b/my-default-settings/target/rockchip/armv8/files/etc/hotplug.d/iface/12-rk3328 index 45a054240..5e38d10cb 100644 --- a/my-default-settings/target/rockchip/armv8/files/etc/hotplug.d/iface/12-rk3328 +++ b/my-default-settings/target/rockchip/armv8/files/etc/hotplug.d/iface/12-rk3328 @@ -2,15 +2,11 @@ ETHTOOL=/usr/sbin/ethtool -case "$(board_name)" in -friendlyelec,nanopi-r2s) - [ "$(uci get network.$INTERFACE.device)" = "eth1" ] && \ - [ "$ACTION" = "ifup" ] && \ - $ETHTOOL -K eth1 rx off tx off - ;; -friendlyelec,nanopi-r2c) - [ "$(uci get network.$INTERFACE.device)" = "br-lan" ] && \ - [ "$ACTION" = "ifup" ] && \ - $ETHTOOL -K eth1 rx off tx off - ;; -esac +$ETHTOOL -i eth0 | grep r8152 && \ +[ "$ACTION" = "ifup" ] && \ +$ETHTOOL -K eth0 rx off tx off + +$ETHTOOL -i eth1 | grep r8152 && \ +[ "$ACTION" = "ifup" ] && \ +$ETHTOOL -K eth1 rx off tx off +