Add LoraBell app support and enhance package management in mock backend
- Introduced LoraBell as a static demo app in the mock backend, preventing its uninstallation. - Merged static dev apps with Docker container data for improved package management. - Updated app details and URLs for LoraBell in the Apps and AppDetails views. - Enhanced the dummyApps utility to include LoraBell's configuration for consistent app representation.
This commit is contained in:
@@ -484,6 +484,9 @@ async function uninstallPackage(id) {
|
||||
console.log(`[Package] 🗑️ Uninstalling ${id}...`)
|
||||
|
||||
try {
|
||||
if (staticDevApps[id]) {
|
||||
throw new Error(`${id} is a demo app and cannot be uninstalled`)
|
||||
}
|
||||
if (!mockData['package-data'][id]) {
|
||||
throw new Error(`Package ${id} is not installed`)
|
||||
}
|
||||
@@ -566,20 +569,74 @@ const mockData = {
|
||||
},
|
||||
}
|
||||
|
||||
// Static dev apps (always shown in My Apps when using mock backend)
|
||||
const staticDevApps = {
|
||||
'lorabell': {
|
||||
title: 'LoraBell',
|
||||
version: '1.0.0',
|
||||
status: 'running',
|
||||
state: 'running',
|
||||
'static-files': {
|
||||
license: 'MIT',
|
||||
instructions: 'A LoRa based doorbell',
|
||||
icon: '/assets/img/app-icons/lorabell.png'
|
||||
},
|
||||
manifest: {
|
||||
id: 'lorabell',
|
||||
title: 'LoraBell',
|
||||
version: '1.0.0',
|
||||
description: {
|
||||
short: 'A LoRa based doorbell',
|
||||
long: 'A LoRa based doorbell - receive doorbell notifications over LoRa radio.'
|
||||
},
|
||||
'release-notes': 'Initial release',
|
||||
license: 'MIT',
|
||||
'wrapper-repo': '#',
|
||||
'upstream-repo': '#',
|
||||
'support-site': '#',
|
||||
'marketing-site': '#',
|
||||
'donation-url': null,
|
||||
interfaces: {
|
||||
main: {
|
||||
name: 'Web Interface',
|
||||
description: 'LoraBell web interface',
|
||||
ui: true
|
||||
}
|
||||
}
|
||||
},
|
||||
installed: {
|
||||
'current-dependents': {},
|
||||
'current-dependencies': {},
|
||||
'last-backup': null,
|
||||
'interface-addresses': {
|
||||
main: {
|
||||
'tor-address': 'lorabell.onion',
|
||||
'lan-address': '/lorabell-info.html'
|
||||
}
|
||||
},
|
||||
status: 'running'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mergePackageData(dockerApps) {
|
||||
return { ...dockerApps, ...staticDevApps }
|
||||
}
|
||||
|
||||
// Initialize package data from Docker on startup
|
||||
async function initializePackageData() {
|
||||
console.log('[Docker] Querying running containers...')
|
||||
const dockerApps = await getDockerContainers()
|
||||
mockData['package-data'] = dockerApps
|
||||
mockData['package-data'] = mergePackageData(dockerApps)
|
||||
|
||||
const appCount = Object.keys(dockerApps).length
|
||||
const runningCount = Object.values(dockerApps).filter(app => app.state === 'running').length
|
||||
const appCount = Object.keys(mockData['package-data']).length
|
||||
const runningCount = Object.values(mockData['package-data']).filter(app => app.state === 'running').length
|
||||
|
||||
console.log(`[Docker] Found ${appCount} containers (${runningCount} running)`)
|
||||
|
||||
if (appCount > 0) {
|
||||
console.log('[Docker] Apps detected:')
|
||||
Object.entries(dockerApps).forEach(([id, app]) => {
|
||||
Object.entries(mockData['package-data']).forEach(([id, app]) => {
|
||||
const port = app.installed?.['interface-addresses']?.main?.['lan-address']
|
||||
console.log(` - ${app.title} (${app.state})${port ? ` → ${port}` : ''}`)
|
||||
})
|
||||
@@ -884,17 +941,17 @@ server.listen(PORT, '0.0.0.0', async () => {
|
||||
`)
|
||||
console.log('Mock backend is running. Press Ctrl+C to stop.\n')
|
||||
|
||||
// Periodically update package data from Docker
|
||||
// Periodically update package data from Docker (merge with static dev apps)
|
||||
setInterval(async () => {
|
||||
const dockerApps = await getDockerContainers()
|
||||
mockData['package-data'] = dockerApps
|
||||
mockData['package-data'] = mergePackageData(dockerApps)
|
||||
|
||||
// Broadcast update to connected clients
|
||||
broadcastUpdate([
|
||||
{
|
||||
op: 'replace',
|
||||
path: '/package-data',
|
||||
value: dockerApps
|
||||
value: mockData['package-data']
|
||||
}
|
||||
])
|
||||
}, 5000) // Update every 5 seconds
|
||||
|
||||
Reference in New Issue
Block a user