Update platform status and HLS previews
build-push / docker (push) Successful in 4m20s

This commit is contained in:
AI Assistant
2026-03-13 16:19:08 +09:00
parent ad8afd5f92
commit cceb040a29
2 changed files with 33 additions and 8 deletions
+32 -7
View File
@@ -37,6 +37,7 @@ let cropEnd = 0;
let cropMax = 0; let cropMax = 0;
let activeThumb = null; let activeThumb = null;
const activePlatforms = new Set(["envato", "artgrid", "google video"]); const activePlatforms = new Set(["envato", "artgrid", "google video"]);
const hlsInstances = new WeakMap();
function setStatus(label, progress) { function setStatus(label, progress) {
statusLabel.textContent = label; statusLabel.textContent = label;
@@ -140,6 +141,31 @@ async function api(path, options = {}) {
return data; return data;
} }
function attachVideoSource(video, src) {
detachVideoSource(video);
if (!src) {
return;
}
if (src.endsWith(".m3u8") && window.Hls && window.Hls.isSupported()) {
const hls = new window.Hls({ enableWorker: false });
hls.loadSource(src);
hls.attachMedia(video);
hlsInstances.set(video, hls);
return;
}
video.src = src;
}
function detachVideoSource(video) {
const existing = hlsInstances.get(video);
if (existing) {
existing.destroy();
hlsInstances.delete(video);
}
video.removeAttribute("src");
video.load();
}
function renderResults(results) { function renderResults(results) {
searchResults.innerHTML = ""; searchResults.innerHTML = "";
if (!results.length) { if (!results.length) {
@@ -158,7 +184,7 @@ function renderResults(results) {
node.querySelector("p").textContent = item.reason; node.querySelector("p").textContent = item.reason;
node.querySelector(".source-badge").textContent = item.source; node.querySelector(".source-badge").textContent = item.source;
if (item.previewVideoUrl) { if (item.previewVideoUrl) {
previewVideo.src = item.previewVideoUrl; attachVideoSource(previewVideo, item.previewVideoUrl);
previewVideo.poster = item.thumbnailUrl || ""; previewVideo.poster = item.thumbnailUrl || "";
const mediaArea = node.querySelector(".relative"); const mediaArea = node.querySelector(".relative");
mediaArea.addEventListener("mouseenter", () => { mediaArea.addEventListener("mouseenter", () => {
@@ -218,11 +244,10 @@ function openPreviewModal(preview) {
previewThumbnail.src = preview.thumbnail; previewThumbnail.src = preview.thumbnail;
previewThumbnail.alt = preview.title; previewThumbnail.alt = preview.title;
previewVideo.pause(); previewVideo.pause();
previewVideo.removeAttribute("src"); detachVideoSource(previewVideo);
previewVideo.load();
previewMediaFrame.style.aspectRatio = ""; previewMediaFrame.style.aspectRatio = "";
if (preview.previewStreamUrl) { if (preview.previewStreamUrl) {
previewVideo.src = preview.previewStreamUrl; attachVideoSource(previewVideo, preview.previewStreamUrl);
previewVideo.classList.remove("hidden"); previewVideo.classList.remove("hidden");
previewThumbnail.classList.add("hidden"); previewThumbnail.classList.add("hidden");
} else { } else {
@@ -247,8 +272,7 @@ function openPreviewModal(preview) {
function closeModal() { function closeModal() {
previewVideo.pause(); previewVideo.pause();
previewVideo.removeAttribute("src"); detachVideoSource(previewVideo);
previewVideo.load();
previewMediaFrame.style.aspectRatio = ""; previewMediaFrame.style.aspectRatio = "";
previewModal.classList.add("hidden"); previewModal.classList.add("hidden");
previewModal.classList.remove("flex"); previewModal.classList.remove("flex");
@@ -393,9 +417,10 @@ for (const button of platformToggles) {
activePlatforms.add(platform); activePlatforms.add(platform);
} }
syncPlatformButtons(); syncPlatformButtons();
setStatus(`active platforms: ${Array.from(activePlatforms).join(", ")}`, 0);
}); });
} }
connectWS(); connectWS();
syncPlatformButtons(); syncPlatformButtons();
setStatus("idle", 0); setStatus(`active platforms: ${Array.from(activePlatforms).join(", ")}`, 0);
+1 -1
View File
@@ -144,6 +144,6 @@
</a> </a>
</template> </template>
<script src="/app.js?v=20260313g" defer></script> <script src="/app.js?v=20260313h" defer></script>
</body> </body>
</html> </html>