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}