From c4ee655d1548cd68257bcacfea83a44e29d71c65 Mon Sep 17 00:00:00 2001 From: Speng Reb Date: Wed, 20 May 2026 21:10:49 +0200 Subject: [PATCH] Shows playlist editor now shows media title instead of ID --- src/web/routes/api/shows.js | 41 ++++++++++++++++++++++++++++++++++ www/js/ui.js | 44 ++++++++++++++++++++++++++++++++++++- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/src/web/routes/api/shows.js b/src/web/routes/api/shows.js index bc1ef793..d66fad49 100644 --- a/src/web/routes/api/shows.js +++ b/src/web/routes/api/shows.js @@ -3,6 +3,7 @@ const webserver = require('../../webserver'); const showDB = require('../../../database/shows'); const shows = require('../../../shows'); const botDB = require('../../../database/bots'); +const infoGetter = require('../../../get-info'); const { getChannelRow, getUserEffectiveRank, hashToken } = require('./middleware'); const router = express.Router({ mergeParams: true }); @@ -186,6 +187,46 @@ router.get('/:id', async (req, res) => { res.json(show); }); +router.post('/resolve-media', async (req, res) => { + const auth = await authorizeChannel(req, res); + if (!auth) return; + + const items = Array.isArray(req.body && req.body.items) ? req.body.items : []; + if (items.length === 0) { + return res.json({ items: [] }); + } + + const capped = items.slice(0, 50).map(item => ({ + id: item && item.id ? String(item.id).trim() : '', + type: item && item.type ? String(item.type).trim() : '' + })).filter(item => item.id && item.type); + + const resolved = await Promise.all(capped.map(item => { + return new Promise(resolve => { + infoGetter.getMedia(item.id, item.type, (err, media) => { + if (err || !media) { + resolve({ + id: item.id, + type: item.type, + title: item.id, + ok: false + }); + return; + } + + resolve({ + id: item.id, + type: item.type, + title: media.title || item.id, + ok: true + }); + }); + }); + })); + + res.json({ items: resolved }); +}); + router.post('/', async (req, res) => { const auth = await authorizeChannel(req, res); if (!auth) return; diff --git a/www/js/ui.js b/www/js/ui.js index 13f864b9..b66f02df 100644 --- a/www/js/ui.js +++ b/www/js/ui.js @@ -1178,6 +1178,7 @@ var CSTShows = (function () { var selectedId = null; var draftPlaylist = []; var timezoneOptionsLoaded = false; + var resolvingTitles = false; function apiBase() { return '/api/v1/channels/' + CHANNEL.name + '/shows'; @@ -1234,7 +1235,7 @@ var CSTShows = (function () { draftPlaylist.forEach(function (item, idx) { var li = $('
  • ').attr('data-idx', idx); - var title = item.title || (item.type + ':' + item.id); + var title = item.title || item.id || (item.type + ':' + item.id); $('').text('[' + item.type + '] ' + title).appendTo(li); var controls = $('
    ').appendTo(li); $('