diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml index f6899f2..da64930 100644 --- a/.forgejo/workflows/build.yaml +++ b/.forgejo/workflows/build.yaml @@ -39,7 +39,6 @@ jobs: submodules: recursive - uses: actions/setup-node@v4 with: - token: ${{ secrets.GH_TOKEN }} node-version: lts/* cache: yarn cache-dependency-path: '**/yarn.lock' @@ -50,6 +49,9 @@ jobs: ~/node_modules ~/.cache/ms-playwright key: ${{ runner.os }}-pio-playwright-${{ hashFiles('**/yarn.lock') }} + - uses: actions/setup-python@v5 + with: + python-version: '>=3.10' - name: Get current date id: dateAndTime run: echo "dateAndTime=$(date +'%Y-%m-%d-%H:%M')" >> $GITHUB_OUTPUT @@ -118,7 +120,7 @@ jobs: output/littlefs.bin - name: Create release if: github.event_name == 'push' && github.ref == 'refs/heads/main' - uses: https://code.forgejo.org/actions/forgejo-release@v2.6.0 + uses: https://code.forgejo.org/actions/forgejo-release@v2.5.1 with: url: 'https://git.btclock.dev/' repo: '${{ github.repository }}' diff --git a/doc/screenshot-dark.webp b/doc/screenshot-dark.webp index 64f26d2..ed7ae3c 100644 Binary files a/doc/screenshot-dark.webp and b/doc/screenshot-dark.webp differ diff --git a/doc/screenshot-light.webp b/doc/screenshot-light.webp index d5fad73..4309e88 100644 Binary files a/doc/screenshot-light.webp and b/doc/screenshot-light.webp differ diff --git a/package.json b/package.json index 8596a5c..f2bd1b0 100644 --- a/package.json +++ b/package.json @@ -69,5 +69,6 @@ "es5-ext": ">=0.10.64", "ws": ">=8.18.0", "micromatch": ">=4.0.8" - } + }, + "packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72" } diff --git a/patches/@sveltejs+kit+2.16.0+001+initial.patch b/patches/@sveltejs+kit+2.15.0+001+initial.patch similarity index 52% rename from patches/@sveltejs+kit+2.16.0+001+initial.patch rename to patches/@sveltejs+kit+2.15.0+001+initial.patch index 7fb98b1..0f933b2 100644 --- a/patches/@sveltejs+kit+2.16.0+001+initial.patch +++ b/patches/@sveltejs+kit+2.15.0+001+initial.patch @@ -1,17 +1,30 @@ diff --git a/node_modules/@sveltejs/kit/src/exports/vite/index.js b/node_modules/@sveltejs/kit/src/exports/vite/index.js -index ddbe746..1d926a4 100644 +index 21bc3d4..eef2db3 100644 --- a/node_modules/@sveltejs/kit/src/exports/vite/index.js +++ b/node_modules/@sveltejs/kit/src/exports/vite/index.js -@@ -658,9 +658,9 @@ async function kit({ svelte_config }) { +@@ -648,9 +648,9 @@ async function kit({ svelte_config }) { output: { format: inline ? 'iife' : 'esm', name: `__sveltekit_${version_hash}.app`, - entryFileNames: ssr ? '[name].js' : `${prefix}/[name].[hash].${ext}`, -- chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/chunks/[hash].${ext}`, +- chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/chunks/[name].[hash].${ext}`, - assetFileNames: `${prefix}/assets/[name].[hash][extname]`, + entryFileNames: ssr ? '[name].js' : `${prefix}/[hash].${ext}`, -+ chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/c[hash].${ext}`, -+ assetFileNames: `${prefix}/a[hash][extname]`, ++ chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/chunks/[hash].${ext}`, ++ assetFileNames: `${prefix}/assets/[hash][extname]`, hoistTransitiveImports: false, sourcemapIgnoreList, manualChunks: split ? undefined : () => 'bundle', +@@ -665,9 +665,9 @@ async function kit({ svelte_config }) { + worker: { + rollupOptions: { + output: { +- entryFileNames: `${prefix}/workers/[name]-[hash].js`, +- chunkFileNames: `${prefix}/workers/chunks/[name]-[hash].js`, +- assetFileNames: `${prefix}/workers/assets/[name]-[hash][extname]`, ++ entryFileNames: `${prefix}/workers/[hash].js`, ++ chunkFileNames: `${prefix}/workers/chunks/[hash].js`, ++ assetFileNames: `${prefix}/workers/assets/[hash][extname]`, + hoistTransitiveImports: false + } + } diff --git a/src/lib/components/SettingsInput.svelte b/src/lib/components/SettingsInput.svelte index 01738e6..a298ba1 100644 --- a/src/lib/components/SettingsInput.svelte +++ b/src/lib/components/SettingsInput.svelte @@ -25,10 +25,10 @@ export let invalid: boolean | undefined = undefined; export let minlength: string | undefined = undefined; export let onChange: (() => void) | undefined = undefined; - export let onInput: ((e: Event) => void) | undefined = undefined; + export let onInput: (() => void) | undefined = undefined; - const onInputHandler = (e: Event) => { - onInput?.(e); + const onInputHandler = () => { + onInput?.(); }; diff --git a/src/lib/components/settings/DisplaySettings.svelte b/src/lib/components/settings/DisplaySettings.svelte index 0edaad0..7653298 100644 --- a/src/lib/components/settings/DisplaySettings.svelte +++ b/src/lib/components/settings/DisplaySettings.svelte @@ -33,8 +33,6 @@ : font.charAt(0).toUpperCase() + font.slice(1), font ]); - - let timePerScreen = $settings.timePerScreen; @@ -63,8 +61,7 @@ ($settings.timePerScreen = Number(e.target.value))} + bind:value={$settings.timePerScreen} type="number" min={1} step={1} @@ -72,6 +69,7 @@ suffix={$_('time.minutes')} size={$uiSettings.inputSize} /> + - {#if $settings.hasLightLevel} - - {/if} + {/if} diff --git a/src/lib/components/settings/ExtraFeaturesSettings.svelte b/src/lib/components/settings/ExtraFeaturesSettings.svelte index 95cc470..bea0033 100644 --- a/src/lib/components/settings/ExtraFeaturesSettings.svelte +++ b/src/lib/components/settings/ExtraFeaturesSettings.svelte @@ -13,7 +13,6 @@ export let miningPoolMap: Map; let validBitaxe = false; - let validLocalPool = false; const testBitaxe = async () => { try { const response = await fetch(`http://${$settings.bitaxeHostname}/api/system/info`); @@ -62,49 +61,6 @@ miningPoolMap.get(pool) || pool, pool ]); - - const testLocalPool = async () => { - try { - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), 1000); - - const response = await fetch( - `http://${$settings.localPoolEndpoint}/api/client/${$settings.miningPoolUser}`, - { signal: controller.signal } - ); - clearTimeout(timeoutId); - - if (!response.ok) { - dispatch('showToast', { - color: 'danger', - text: `Failed to connect to local pool! status: ${response.status}` - }); - validLocalPool = false; - throw new Error(); - } - - const poolInfo = await response.json(); - dispatch('showToast', { - color: 'success', - text: `Can connect to local public pool, ${poolInfo.workersCount} workers` - }); - validLocalPool = true; - } catch (error) { - if (error.name === 'AbortError') { - dispatch('showToast', { - color: 'danger', - text: `Connection to local pool timed out after 1 second` - }); - } else { - dispatch('showToast', { - color: 'danger', - text: `Failed to connect to local pool, check the endpoint and make sure you are connected to the same network.` - }); - } - console.error('Failed to fetch local pool info:', error); - validLocalPool = false; - } - }; @@ -222,21 +178,6 @@ size={$uiSettings.inputSize} selectClass={$uiSettings.selectClass} /> - {#if $settings.miningPoolName === 'local_public_pool'} - - - - {/if} {/if} - - - - {#if $settings.actCurrencies && $settings.dataSource == DataSourceType.BTCLOCK_SOURCE} + {#if $settings.actCurrencies && $settings.useNostr !== true}
{$_('section.settings.currencies')}
{$_('restartRequired')} diff --git a/src/lib/components/settings/SystemSettings.svelte b/src/lib/components/settings/SystemSettings.svelte index f774c8f..5f12e2d 100644 --- a/src/lib/components/settings/SystemSettings.svelte +++ b/src/lib/components/settings/SystemSettings.svelte @@ -6,21 +6,36 @@ import { uiSettings } from '$lib/uiSettings'; import EyeIcon from 'svelte-bootstrap-icons/lib/Eye.svelte'; import EyeSlashIcon from 'svelte-bootstrap-icons/lib/EyeSlash.svelte'; - import TimezoneSelector from './TimezoneSelector.svelte'; export let settings; export let isOpen = false; let showPassword = false; + + const getTzOffsetFromSystem = () => { + const dt = new Date(); + let diffTZ = dt.getTimezoneOffset(); + $settings.tzOffset = diffTZ * -1; + }; - ($settings.tzString = value)} + + > + + {#if $settings.httpAuthEnabled} - import { _ } from 'svelte-i18n'; - import { Row, Button, Col, Label, InputGroup, Input, FormText } from '@sveltestrap/sveltestrap'; - import { onMount } from 'svelte'; - - export let value: string; - export let onChange: (value: string) => void; - export let size: string = 'sm'; - - let timezones: string[] = []; - let selectedTimezone: string = ''; - - onMount(async () => { - const response = await fetch('/zones.json'); - const zones = await response.json(); - - // Convert zones data into array of {name, offset} objects - timezones = Object.keys(zones); - - // Set the selected timezone to the current value - selectedTimezone = value; - }); - - function handleTimezoneChange(event: Event) { - const select = event.target as HTMLSelectElement; - onChange(select.value); - } - - function getTzOffsetFromSystem() { - const detectedTzString = Intl.DateTimeFormat().resolvedOptions().timeZone; - - onChange(detectedTzString); - selectedTimezone = detectedTzString; - } - - - - - - - - {#each timezones as tz} - - {/each} - - - - {$_('section.settings.tzOffsetHelpText')} - - diff --git a/src/lib/locales/de.json b/src/lib/locales/de.json index 6671619..2044e49 100644 --- a/src/lib/locales/de.json +++ b/src/lib/locales/de.json @@ -73,8 +73,7 @@ "dndStartHour": "Startstunde", "dndStartMinute": "Startminute", "dndEndHour": "Endstunde", - "dndEndMinute": "Schlussminute", - "screenRestoreZap": "Vorherigen Bildschirmzustand nach Zap wieder herstellen (Verwendet {setting} Einstellung)" + "dndEndMinute": "Schlussminute" }, "control": { "systemInfo": "Systeminfo", @@ -89,8 +88,7 @@ "hostname": "Hostname", "frontlight": "Displaybeleuchtung", "turnOn": "Einschalten", - "flashFrontlight": "Blinken", - "fwCommitMismatch": "Die Firmware -Version unterscheidet sich von der WebUI -Version, dies kann zu Problemen führen." + "flashFrontlight": "Blinken" }, "status": { "title": "Status", diff --git a/src/lib/locales/en.json b/src/lib/locales/en.json index 40476d8..302de09 100644 --- a/src/lib/locales/en.json +++ b/src/lib/locales/en.json @@ -78,7 +78,7 @@ "dataSource": { "label": "Data Source", "btclock": "BTClock Data Source", - "thirdParty": "mempool.space/Kraken", + "thirdParty": "mempool.space/coincap.io", "nostr": "Nostr publisher", "custom": "Custom Endpoint" }, @@ -90,8 +90,7 @@ "dndStartHour": "Start hour", "dndStartMinute": "Start minute", "dndEndHour": "End hour", - "dndEndMinute": "End minute", - "screenRestoreZap": "Restore previous screen state after zap (Uses {setting} setting)" + "dndEndMinute": "End minute" }, "control": { "systemInfo": "System info", @@ -108,8 +107,7 @@ "turnOn": "Turn on", "flashFrontlight": "Flash", "firmwareUpdate": "Firmware update", - "fwCommit": "Firmware commit", - "fwCommitMismatch": "The firmware version is different from the WebUI version, this might cause problems. " + "fwCommit": "Firmware commit" }, "status": { "title": "Status", diff --git a/src/lib/locales/es.json b/src/lib/locales/es.json index e9edba5..4033cab 100644 --- a/src/lib/locales/es.json +++ b/src/lib/locales/es.json @@ -47,7 +47,7 @@ "section": { "displaysAndLed": "Pantallas y LED", "screenSettings": "Específico de la pantalla", - "dataSource": "Fuente de datos", + "dataSource": "fuente de datos", "extraFeatures": "Funciones adicionales", "system": "Sistema" }, @@ -72,8 +72,7 @@ "dndStartHour": "Hora de inicio", "dndStartMinute": "Minuto de inicio", "dndEndHour": "Hora final", - "dndEndMinute": "Minuto final", - "screenRestoreZap": "Restaurar el estado de pantalla anterior después de Zap (Usa la configuración {setting})" + "dndEndMinute": "Minuto final" }, "control": { "turnOff": "Apagar", @@ -88,8 +87,7 @@ "hostname": "Nombre del host", "turnOn": "Encender", "frontlight": "Luz de la pantalla", - "flashFrontlight": "Luz intermitente", - "fwCommitMismatch": "La versión de firmware es diferente de la versión WebUI, esto podría causar problemas." + "flashFrontlight": "Luz intermitente" }, "status": { "memoryFree": "Memoria RAM libre", diff --git a/src/lib/locales/nl.json b/src/lib/locales/nl.json index 8b6bd64..b239905 100644 --- a/src/lib/locales/nl.json +++ b/src/lib/locales/nl.json @@ -64,8 +64,7 @@ "dndStartHour": "Begin uur", "dndStartMinute": "Beginminuut", "dndEndHour": "Eind uur", - "dndEndMinute": "Einde minuut", - "screenRestoreZap": "Herstel vorige schermstatus na zap (Gebruikt {setting} instelling)" + "dndEndMinute": "Einde minuut" }, "control": { "systemInfo": "Systeeminformatie", @@ -79,8 +78,7 @@ "title": "Besturing", "frontlight": "Displaylicht", "turnOn": "Aanzetten", - "flashFrontlight": "Knipper", - "fwCommitMismatch": "De firmwareversie verschilt van de WebUI -versie, dit kan problemen veroorzaken." + "flashFrontlight": "Knipper" }, "status": { "title": "Status", diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5971a12..8199c48 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -13,8 +13,9 @@ import { uiSettings } from '$lib/uiSettings'; let settings = writable({ - isLoaded: false, - timePerScreen: 0 + fgColor: '0', + bgColor: '0', + isLoaded: false }); let status = writable({ diff --git a/src/routes/Control.svelte b/src/routes/Control.svelte index c4e96c1..fc3d76e 100644 --- a/src/routes/Control.svelte +++ b/src/routes/Control.svelte @@ -13,8 +13,7 @@ Form, Input, Label, - Row, - Alert + Row } from '@sveltestrap/sveltestrap'; import FirmwareUpdater from './FirmwareUpdater.svelte'; import { uiSettings } from '$lib/uiSettings'; @@ -227,11 +226,6 @@
  • WebUI commit:
  • {$_('section.control.hostname')}:
  • - {#if $settings.gitRev != $settings.fsRev} - - ⚠️ {$_('warning')}: {$_('section.control.fwCommitMismatch')} - - {/if}