Release v2.2.0

This commit is contained in:
2026-08-01 21:41:44 +01:00
parent c643d2fb07
commit d6417b667c
673 changed files with 146752 additions and 7389 deletions
+60
View File
@@ -1,3 +1,5 @@
// Screen slug helpers and screen lookup utilities.
function slugify(value) {
return String(value || '')
.toLowerCase()
@@ -7,6 +9,60 @@ function slugify(value) {
.replace(/-{2,}/g, '-');
}
function normalizePlayerBaseUrl(value) {
return String(value || '').trim().replace(/\/$/, '');
}
function buildScreenPlayerUrl(screen, fallbackBaseUrl) {
const slug = String(screen && screen.slug || '').trim();
if (!slug) {
return null;
}
const baseUrl = normalizePlayerBaseUrl(fallbackBaseUrl);
if (!baseUrl) {
return null;
}
return `${baseUrl}/screen/${encodeURIComponent(slug)}`;
}
async function fetchScreenPlayerUrls(pool) {
const [rows] = await pool.query(`
SELECT s.slug, p.public_base_url
FROM d_screens s
LEFT JOIN d_players p ON p.device_id = s.player_id
WHERE p.public_base_url IS NOT NULL
AND TRIM(p.public_base_url) <> ''
ORDER BY p.modified_at DESC, s.slug ASC
`);
const playerUrls = {};
rows.forEach(function (row) {
const slug = String(row && row.slug || '').trim();
const publicBaseUrl = normalizePlayerBaseUrl(row && row.public_base_url);
const playerUrl = buildScreenPlayerUrl({ slug: slug }, publicBaseUrl);
if (slug && playerUrl && !playerUrls[slug]) {
playerUrls[slug] = playerUrl;
}
});
return playerUrls;
}
async function fetchScreenPlayerRecord(pool, slug) {
const [rows] = await pool.query(`
SELECT p.device_id, p.public_base_url, p.internal_base_url, p.last_seen_at
FROM d_screens s
JOIN d_players p ON p.device_id = s.player_id
WHERE s.slug = ?
ORDER BY p.modified_at DESC, p.device_id ASC
LIMIT 1
`, [slug]);
return rows[0] || null;
}
async function uniqueScreenSlug(pool, baseSlug, excludeId) {
const start = baseSlug || `screen-${Date.now()}`;
let candidate = start;
@@ -44,6 +100,10 @@ async function fetchScreenEditData(pool) {
module.exports = {
slugify,
normalizePlayerBaseUrl,
buildScreenPlayerUrl,
fetchScreenPlayerUrls,
fetchScreenPlayerRecord,
uniqueScreenSlug,
fetchScreenById,
fetchScreenEditData