openvibers/openvibe.live Commits

Live: a channel's Videos tab links the channel on OpenVibe.Video (#105)

OP OpenVibers committed 12 Oct 2026 · 15e9e559c1 · 2 files, +10 −0

A channel's Videos tab gets an "On OpenVibe.Video" button. It opens `https://openvibe.video/@<username>`: the channel's recordings and clips with AI chapters, captions, chat replay and playlists (MediaHub#28–#31).

It shows only once the channel has recordings and its username is one Video's channel pages take (`[A-Za-z0-9_]{1,32}`). The href is set through a DOM property. Frontend only, so it deploys without a restart. Follows Live#104, which linked each VOD and clip.

Changes

ddiff --git a/public/fragments/channel.html b/public/fragments/channel.html
iindex ddab5a83..1db57827 100644
---- a/public/fragments/channel.html
++++ b/public/fragments/channel.html
@@@ -375,6 +375,7 @@
<div class="ch-tab-panel active" id="ch-panel-videos" role="tabpanel">
<div class="ch-panel-bar">
<div id="ch-vods-filter-bar" class="ch-vods-filter-bar" style="display:none"></div>
++ <a id="ch-vods-video-link" class="btn btn-small btn-outline" href="#" style="display:none" title="This channel's recordings and clips on OpenVibe.Video, with AI chapters, captions and playlists"><i class="fa-solid fa-film"></i> On OpenVibe.Video</a>
<button class="btn btn-small btn-outline sel-all-btn" data-sel-container="ch-vods-grid" style="display:none" onclick="_selAllToggle(this.dataset.selContainer)"><i class="fa-solid fa-check-double"></i> <span class="sel-all-label">Select all</span></button>
</div>
<div class="stream-grid" id="ch-vods-grid"><p class="muted">No videos yet</p></div>
ddiff --git a/public/js/app-channel.js b/public/js/app-channel.js
iindex f579470b..cbc6d71b 100644
---- a/public/js/app-channel.js
++++ b/public/js/app-channel.js
@@@ -92,6 +92,15 @@ async function renderChannelVodsSection(username, liveStreams, vods, meta = {})
filterBar.style.display = 'none';
}
++ // The same channel on OpenVibe.Video (its recordings and clips with AI chapters, captions and playlists), once it
++ // has any; Video's channel pages take the usernames Live's links do.
++ const videoLink = document.getElementById('ch-vods-video-link');
++ if (videoLink) {
++ const ok = /^[A-Za-z0-9_]{1,32}$/.test(String(username || '')) && Array.isArray(vods) && vods.length > 0;
++ videoLink.style.display = ok ? '' : 'none';
++ if (ok) videoLink.href = `https://openvibe.video/@${username}`;
++ }
++
const pageSize = meta.limit || CHANNEL_VODS_PAGE_SIZE;
const offset = meta.offset || 0;
const total = meta.total || vods.length;