mirror of
https://github.com/SteamFramelyHomebrew/framely.git
synced 2026-10-18 17:01:35 +02:00
11 lines
2.7 KiB
TypeScript
11 lines
2.7 KiB
TypeScript
const wait=(ms=50)=>new Promise(r=>setTimeout(r,ms));const until=async(f:()=>unknown)=>{for(let i=0;i<150;i++){if(f())return;await wait();}throw Error('Timed out '+document.body.innerText.slice(-500));};
|
|
history.replaceState(null,'','/manager');let language='en-US',event:any=null;
|
|
const app={id:'test/com.example.app',context:'test',metadata:{name:'Example',package:'com.example.app',version:'1.0',versionCode:1,activities:['com.example.app.Main'],declaredActivities:['com.example.app.Main'],abis:[],vr:false,minSdk:24},installed:true,size:42};
|
|
window.fetch=async(_url,init)=>{const{method}=JSON.parse(String(init?.body));let result:any=true;
|
|
if(method==='status')result={version:'0.4.3',database:{language,plugins:{},sources:[],safeMode:false},agreement:{version:'1',accepted:true},notifications:[],running:[]};
|
|
else if(method==='language.list')result={packs:[]};else if(method==='ui.events'){result={cursor:1,events:event?[event]:[]};event=null;}
|
|
else if(method==='apk.list.start')result={job:'list'};else if(method==='job.status')result={phase:'done',result:{apps:[app],containers:[{id:'test',name:'test',baked:'/test',managed:false}],roots:[],warnings:[],available:true}};else if(method==='apk.cleanup.list')result=[];
|
|
return new Response(JSON.stringify({result}));};
|
|
const button=(name:string)=>Array.from(document.querySelectorAll<HTMLButtonElement>('button')).find(b=>b.textContent?.trim()===name)!;
|
|
(async()=>{await import('../ui/src/main');await until(()=>button('APK Manager'));if(document.querySelector('.apk-manager')||button('Plugin Manager')?.getAttribute('aria-pressed')!=='true')throw Error('Default is not Plugin Manager');button('APK Manager').click();await until(()=>document.querySelector('.apk-row'));if(document.querySelector('nav button')?.textContent?.trim()!=='Apps')throw Error('APK navigation not isolated');button('Containers').click();await until(()=>document.querySelector('.apk-container'));button('Apps').click();await until(()=>document.querySelector('.apk-row'));await wait(250);console.log('FRAMELY_PREVIEW_INSTALL_APK_PANEL_EN');button('Plugin Manager').click();await until(()=>!document.querySelector('.apk-manager'));if(location.hash)throw Error('Plugin switch retained APK hash');location.hash='apk';await until(()=>document.querySelector('.apk-manager'));event={kind:'apk.selection',app:app.id};await until(()=>document.querySelector('.apk-dialog'));button('Done').click();language='zh-CN';await until(()=>button('插件管理'));await wait(250);console.log('FRAMELY_PREVIEW_INSTALL_APK_PANEL_ZH');button('插件管理').click();await until(()=>!document.querySelector('.apk-manager'));console.log('FRAMELY_BRIDGE_PASS');})().catch(e=>console.error('FRAMELY_BRIDGE_FAIL '+e));
|