Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4c9985e01a | |||
| fecb96b04e | |||
| c98b81c8bd | |||
| 90bf411e0c | |||
| 867e86615e | |||
| 2cbe3c6b76 | |||
| 59adcbc36e | |||
| 6865b860bc | |||
| 9aaff5c368 | |||
| ce6f9b0459 | |||
| 976d6527b6 | |||
| 6a8ca90fd3 | |||
| 2d5958006c | |||
| 9faf8c0ea3 |
@@ -6,6 +6,22 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [1.2.2] - 2026-05-17
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **Header logo** — uses the higher-resolution 192px favicon source rendered at 56px for better visual balance alongside the title text.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [1.2.1] - 2026-05-17
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- **Version footer** — the dashboard footer now displays the running app version (e.g. `sofarr v1.2.1`), fetched from the `/health` endpoint on page load.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [1.2.0] - 2025-05-17
|
## [1.2.0] - 2025-05-17
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "sofarr",
|
"name": "sofarr",
|
||||||
"version": "1.2.0",
|
"version": "1.2.2",
|
||||||
"description": "A personal media download dashboard that shows your downloads 'so far' while you relax on the sofa waiting for your *arr services to finish",
|
"description": "A personal media download dashboard that shows your downloads 'so far' while you relax on the sofa waiting for your *arr services to finish",
|
||||||
"main": "server/index.js",
|
"main": "server/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
initThemeSwitcher();
|
initThemeSwitcher();
|
||||||
initTabs();
|
initTabs();
|
||||||
initHistoryControls();
|
initHistoryControls();
|
||||||
|
loadAppVersion();
|
||||||
|
|
||||||
document.getElementById('login-form').addEventListener('submit', handleLogin);
|
document.getElementById('login-form').addEventListener('submit', handleLogin);
|
||||||
document.getElementById('logout-btn').addEventListener('click', handleLogout);
|
document.getElementById('logout-btn').addEventListener('click', handleLogout);
|
||||||
@@ -34,6 +35,17 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
document.getElementById('status-btn').addEventListener('click', toggleStatusPanel);
|
document.getElementById('status-btn').addEventListener('click', toggleStatusPanel);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function loadAppVersion() {
|
||||||
|
fetch('/health')
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.version) {
|
||||||
|
document.getElementById('app-version').textContent = `sofarr v${data.version}`;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
}
|
||||||
|
|
||||||
function initThemeSwitcher() {
|
function initThemeSwitcher() {
|
||||||
const saved = localStorage.getItem('sofarr-theme') || 'light';
|
const saved = localStorage.getItem('sofarr-theme') || 'light';
|
||||||
document.querySelectorAll('.theme-btn').forEach(btn => {
|
document.querySelectorAll('.theme-btn').forEach(btn => {
|
||||||
|
|||||||
+2
-1
@@ -46,7 +46,7 @@
|
|||||||
<!-- Dashboard -->
|
<!-- Dashboard -->
|
||||||
<div id="dashboard-container" class="dashboard-container" style="display: none;">
|
<div id="dashboard-container" class="dashboard-container" style="display: none;">
|
||||||
<header class="app-header">
|
<header class="app-header">
|
||||||
<h1>sofarr</h1>
|
<h1><a href="https://git.i3omb.com/Gandalf/sofarr" target="_blank" rel="noopener noreferrer" class="title-link"><img src="favicon-192.png" alt="" class="title-logo">sofarr</a></h1>
|
||||||
<div class="header-controls">
|
<div class="header-controls">
|
||||||
<div class="theme-switcher">
|
<div class="theme-switcher">
|
||||||
<button class="theme-btn active" data-theme="light">Light</button>
|
<button class="theme-btn active" data-theme="light">Light</button>
|
||||||
@@ -112,6 +112,7 @@
|
|||||||
|
|
||||||
<footer class="app-footer">
|
<footer class="app-footer">
|
||||||
<p>Ensure your media is tagged with your username in Sonarr/Radarr to match downloads to users.</p>
|
<p>Ensure your media is tagged with your username in Sonarr/Radarr to match downloads to users.</p>
|
||||||
|
<p class="app-version" id="app-version"></p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -866,6 +866,32 @@ body {
|
|||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-version {
|
||||||
|
font-size: 0.72rem;
|
||||||
|
opacity: 0.5;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-link {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-link:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-logo {
|
||||||
|
width: 56px;
|
||||||
|
height: 56px;
|
||||||
|
display: block;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* ===== Login ===== */
|
/* ===== Login ===== */
|
||||||
.login-container {
|
.login-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
+1
-1
@@ -197,7 +197,7 @@ app.use(express.json({ limit: '64kb' })); // prevent oversized JSON payloads
|
|||||||
// Used by Docker HEALTHCHECK and orchestrators.
|
// Used by Docker HEALTHCHECK and orchestrators.
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
app.get('/health', (req, res) => {
|
app.get('/health', (req, res) => {
|
||||||
res.json({ status: 'ok', uptime: process.uptime() });
|
res.json({ status: 'ok', uptime: process.uptime(), version });
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/ready', (req, res) => {
|
app.get('/ready', (req, res) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user