Release 1.5.3

This commit is contained in:
2026-07-25 15:11:41 +01:00
parent 9ee938fd2f
commit 0e89892c94
89 changed files with 7660 additions and 542 deletions
+2 -1
View File
@@ -5,7 +5,8 @@ module.exports = function renderPlaylistFormPage(message, currentUser) {
title: 'Create playlist',
active: 'playlists',
playlist: {
fade_between_slides: false
fade_between_slides: false,
skip_unavailable_rtmp: false
},
message: message,
currentUser: currentUser || null
+2 -1
View File
@@ -102,6 +102,7 @@ module.exports = function renderPlaylistEditPage(playlist, data, message, curren
currentUser: currentUser || null,
playlist: playlist,
playlistFadeBetweenSlides: Boolean(playlist.fade_between_slides),
playlistSkipUnavailableRtmp: Boolean(playlist.skip_unavailable_rtmp),
playlistSlides: playlistSlides,
slides: data.slides || [],
hasSlides: (data.slides || []).length > 0,
@@ -110,6 +111,6 @@ module.exports = function renderPlaylistEditPage(playlist, data, message, curren
selectableSlides: selectableSlides,
playlistCanvasSignature: playlistCanvasSignature,
playlistCanvasMismatch: playlistCanvasMismatch,
scripts: ['js/vendor/sortable.min.js', 'js/playlists/playlist-schedule.js']
scripts: ['js/lib/modal.js', 'js/vendor/sortable.min.js', 'js/playlists/playlist-schedule.js']
});
};
+5 -3
View File
@@ -1,9 +1,10 @@
const { renderView } = require('../../../view');
module.exports = function renderPlaylistsPage(data, message, currentUser) {
const playlistSlides = data.playlistSlides || [];
const playlists = (data.playlists || []).map((playlist) => {
const slideCount = playlistSlides.filter((item) => item.playlist_id === playlist.id).length;
const slideCount = playlist.slide_count !== undefined
? Number(playlist.slide_count) || 0
: (data.playlistSlides || []).filter((item) => item.playlist_id === playlist.id).length;
return Object.assign({}, playlist, {
slideCount: slideCount,
slideCountIsOne: slideCount === 1
@@ -15,7 +16,8 @@ module.exports = function renderPlaylistsPage(data, message, currentUser) {
active: 'playlists',
message: message,
currentUser: currentUser || null,
playlists: playlists
playlists: playlists,
pagination: data.pagination || null
});
};
+10 -2
View File
@@ -2,8 +2,11 @@ module.exports = function registerPlaylistsRoutes(app, deps) {
const pool = deps.pool;
const common = deps.common;
const pages = deps.pages;
const { buildPagination } = require('../../../lib/pagination');
const requirePermission = deps.requirePermission;
const LIST_PAGE_SIZE = 10;
function requireQueryPermission(readPermissionKey, editPermissionKey) {
return function (req, res, next) {
const permissionKey = req.query && req.query.edit ? editPermissionKey : readPermissionKey;
@@ -13,15 +16,20 @@ module.exports = function registerPlaylistsRoutes(app, deps) {
app.get('/playlists', requireQueryPermission('playlists.read', 'playlists.update'), async function (req, res, next) {
try {
const data = await common.fetchAdminData(pool);
const page = Math.max(1, Math.floor(Number(req.query.page) || 1));
if (req.query.edit) {
const data = await common.fetchAdminData(pool);
const playlist = await common.fetchPlaylistById(pool, Number(req.query.edit));
if (!playlist) {
return res.status(404).send('Playlist not found');
}
return res.send(pages.renderPlaylistEditPage(playlist, data, req.query.message ? String(req.query.message) : '', req.currentUser));
}
res.send(pages.renderPlaylistsPage(data, req.query.message ? String(req.query.message) : '', req.currentUser));
const data = await common.fetchPlaylistsPage(pool, page, LIST_PAGE_SIZE);
res.send(pages.renderPlaylistsPage({
playlists: data.playlists || [],
pagination: buildPagination(data.totalItems, data.currentPage, 'page', {}, LIST_PAGE_SIZE, 'playlists', 'Playlist pages')
}, req.query.message ? String(req.query.message) : '', req.currentUser));
} catch (error) {
next(error);
}
@@ -74,6 +74,6 @@ module.exports = function renderPlaylistSlideConfigPage(playlist, playlistSlide,
...day,
checked: selectedDays.has(day.value)
})),
scripts: ['js/playlists/playlist-schedule.js']
scripts: ['js/lib/modal.js', 'js/playlists/playlist-schedule.js']
});
};