openvibers/openvibe.network Commits

The launcher and history call OpenRestream 'Restream' among their short names (the product keeps its full name everywhere else) (#367)

OP OpenVibers committed 16 days ago · ca2e7a3c31 · 4 files, +10 −4

Changes

ddiff --git a/server/frame/service.js b/server/frame/service.js
iindex 1c7b643e..38ec4e86 100644
---- a/server/frame/service.js
++++ b/server/frame/service.js
@@@ -20,7 +20,7 @@
// ═══════════════════════════════════════════════════════════════
const express = require('express');
const crypto = require('crypto');
--const { SITES, siteForHost, GROUPS, groupOf, PRODUCTS, ICON_ALIAS, MENU_LINE } = require('./sites');
++const { SITES, siteForHost, GROUPS, groupOf, PRODUCTS, ICON_ALIAS, MENU_LINE, MENU_NAME } = require('./sites');
const toolsCatalog = require('../domains/catalog');
const RANK_MS = 30 * 60_000, COPY_MS = 24 * 60 * 60_000;
@@@ -165,7 +165,7 @@ async function createFrameService(db, config, analytics, { privateKey = null, is
return {
updated: new Date(version).toISOString(), site: { id: site.id, name: site.name, host: site.host, status: site.status, state: site.state },
// Every open site, most used first, each followed by the products it serves on their own domains (`of`).
-- nav: open.flatMap(s => [s, ...PRODUCTS.filter(p => p.of === s.id)]).map(s => ({ id: s.id, name: s.name, url: `https://${s.host}/`, icon: ICON_ALIAS[s.icon] || s.icon, tagline: MENU_LINE[s.id] || s.tagline, group: groupOf(s.id), ...(s.of ? { of: s.of } : {}) })),
++ nav: open.flatMap(s => [s, ...PRODUCTS.filter(p => p.of === s.id)]).map(s => ({ id: s.id, name: MENU_NAME[s.id] || s.name, url: `https://${s.host}/`, icon: ICON_ALIAS[s.icon] || s.icon, tagline: MENU_LINE[s.id] || s.tagline, group: groupOf(s.id), ...(s.of ? { of: s.of } : {}) })),
groups: GROUPS.map(g => ({ id: g.id, name: g.name })),
// state: 'internal' (runs on loopback, the domain still shows a placeholder) or 'placeholder' (planned).
soon: SITES.filter(s => s.status === 'soon').map(s => ({ id: s.id, name: s.name, url: `https://${s.host}/`, icon: s.icon, state: s.state })),
ddiff --git a/server/frame/sites.js b/server/frame/sites.js
iindex a0fc427f..a746428d 100644
---- a/server/frame/sites.js
++++ b/server/frame/sites.js
@@@ -61,6 +61,11 @@ const MENU_LINE = {
services: 'APIs and SDK', ai: 'AI models API', run: 'Run jobs anywhere', zone: 'S3 storage', events: 'Event streams', media: 'Media API', play: 'Game services',
};
++// A site's name in the menus, where the rows are short words (Pics, Download, VIP, Tips): the product keeps its full name
++// everywhere else (its own site, page titles, sign-in). The owner, 2026-10-28: "label it simply Restream… it does look
++// a little weird" next to the others.
++const MENU_NAME = { stream: 'Restream' };
++
const groupOf = (id) => (GROUPS.find(g => g.sites.includes(id)) || GROUPS[GROUPS.length - 1]).id;
// Products with a domain of their own that another service serves (its manifest lists the domain): in the menu
@@@ -81,4 +86,4 @@ function siteForHost(hostname) {
return null;
}
--module.exports = { SITES, siteForHost, GROUPS, groupOf, PRODUCTS, ICON_ALIAS, MENU_LINE };
++module.exports = { SITES, siteForHost, GROUPS, groupOf, PRODUCTS, ICON_ALIAS, MENU_LINE, MENU_NAME };
ddiff --git a/server/history/routes.js b/server/history/routes.js
iindex 8c8a6d47..5a931441 100644
---- a/server/history/routes.js
++++ b/server/history/routes.js
@@@ -18,7 +18,7 @@ const TYPES = new Set(['tool', 'stream', 'vod', 'clip', 'paste', 'game', 'page',
const SERVICE_LABELS = {
live: 'Live', tools: 'Tools', games: 'Games', media: 'Media', network: 'Network', community: 'Community', space: 'Space',
chat: 'Chat', codes: 'Codes', blog: 'Blog', wiki: 'Wiki', news: 'News', reviews: 'Reviews', tips: 'Tips',
-- vip: 'VIP', trade: 'Trade', host: 'Host', deals: 'Deals', coupons: 'Coupons', openre: 'OpenRestream',
++ vip: 'VIP', trade: 'Trade', host: 'Host', deals: 'Deals', coupons: 'Coupons', openre: 'Restream',
};
async function ensureSchema(db) { /* the schema is migrations/NNNN_*.sql (plan T2); nothing is created at runtime */ }
ddiff --git a/test/frame.test.js b/test/frame.test.js
iindex b46d2c5d..65886f44 100644
---- a/test/frame.test.js
++++ b/test/frame.test.js
@@@ -29,6 +29,7 @@ assert.deepStrictEqual(['actor', 'bot', 'run', 'zone'].map((id) => p.nav[at(id)]
[['games', 'play'], ['quest', 'play'], ['inventory', 'you'], ['watch', 'everyday'], ['download', 'watch']]
.filter(([id]) => at(id) >= 0).forEach(([id, group]) => assert.strictEqual(p.nav[at(id)].group, group, `${id} is in ${group}`));
assert.strictEqual(p.nav.length, 40);
++assert.deepStrictEqual([p.nav[at('stream')].name, p.nav[at('pics')].name], ['Restream', 'Pics'], 'OpenRestream is "Restream" among the menu\'s short names (owner, 2026-10-28)');
assert.strictEqual(p.nav.find(n => n.id === 'space').url, 'https://openvibe.space/', 'Space keeps its own home (the forum returned to Community, 0.118.0)');
assert.strictEqual(p.nav.find(n => n.id === 'community').url, 'https://openvibe.community/', 'Community: the forum, pastes and Pulse');
assert.equal(p.footer.legal.dmca, 'https://openvibe.media/dmca', 'legal links stay on the site\'s own domain');