Refactor how NickelMenu is set up
All checks were successful
Build and test project / build-and-test (push) Successful in 1m32s
All checks were successful
Build and test project / build-and-test (push) Successful in 1m32s
This commit is contained in:
42
web/src/nickelmenu/features/koreader/index.js
Normal file
42
web/src/nickelmenu/features/koreader/index.js
Normal file
@@ -0,0 +1,42 @@
|
||||
import JSZip from 'jszip';
|
||||
|
||||
export default {
|
||||
id: 'koreader',
|
||||
title: 'Install KOReader',
|
||||
description: 'Installs KOReader, an alternative e-book reader with advanced features like PDF reflow, customizable fonts, and more.',
|
||||
default: false,
|
||||
available: false, // set to true at runtime if KOReader assets exist
|
||||
|
||||
async install(ctx) {
|
||||
ctx.progress('Fetching KOReader release info...');
|
||||
const metaResp = await fetch('/koreader/release.json');
|
||||
if (!metaResp.ok) throw new Error('KOReader assets not available (run koreader/setup.sh)');
|
||||
const meta = await metaResp.json();
|
||||
|
||||
ctx.progress('Downloading KOReader ' + meta.version + '...');
|
||||
const zipResp = await fetch('/koreader/koreader-kobo.zip');
|
||||
if (!zipResp.ok) throw new Error('Failed to download KOReader: HTTP ' + zipResp.status);
|
||||
const zip = await JSZip.loadAsync(await zipResp.arrayBuffer());
|
||||
|
||||
ctx.progress('Extracting KOReader...');
|
||||
const files = [];
|
||||
for (const [relativePath, entry] of Object.entries(zip.files)) {
|
||||
if (entry.dir) continue;
|
||||
const devicePath = relativePath.startsWith('koreader/')
|
||||
? '.adds/' + relativePath
|
||||
: '.adds/koreader/' + relativePath;
|
||||
files.push({
|
||||
path: devicePath,
|
||||
data: new Uint8Array(await entry.async('arraybuffer')),
|
||||
});
|
||||
}
|
||||
|
||||
// Add NickelMenu launcher config
|
||||
files.push({
|
||||
path: '.adds/nm/koreader',
|
||||
data: 'menu_item:main:KOReader:cmd_spawn:quiet:exec /mnt/onboard/.adds/koreader/koreader.sh\n',
|
||||
});
|
||||
|
||||
return files;
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user