Thumbnail fade effect and sync thumbnail loading.
This commit is contained in:
@@ -60,12 +60,12 @@
|
|||||||
ws?.send(JSON.stringify({ type: "select", infoHash: hash, index }));
|
ws?.send(JSON.stringify({ type: "select", infoHash: hash, index }));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removeTorrent(hash) {
|
async function removeTorrent(hash) {
|
||||||
if (!confirm("Bu transferi silmek istediğine emin misin?")) return;
|
if (!confirm("Bu transferi silmek istediğine emin misin?")) return;
|
||||||
await apiFetch(`/api/torrents/${hash}`, { method: "DELETE" });
|
await apiFetch(`/api/torrents/${hash}`, { method: "DELETE" });
|
||||||
torrents = torrents.filter(t => t.infoHash !== hash);
|
torrents = torrents.filter((t) => t.infoHash !== hash);
|
||||||
await list();
|
await list();
|
||||||
}
|
}
|
||||||
|
|
||||||
function streamURL(hash, index = 0) {
|
function streamURL(hash, index = 0) {
|
||||||
const token = localStorage.getItem("token");
|
const token = localStorage.getItem("token");
|
||||||
@@ -264,7 +264,12 @@ async function removeTorrent(hash) {
|
|||||||
{#each torrents as t (t.infoHash)}
|
{#each torrents as t (t.infoHash)}
|
||||||
<div class="torrent" on:click={() => openModal(t)}>
|
<div class="torrent" on:click={() => openModal(t)}>
|
||||||
{#if t.thumbnail}
|
{#if t.thumbnail}
|
||||||
<img src={`${API}${t.thumbnail}`} alt="thumb" class="thumb" />
|
<img
|
||||||
|
src={`${API}${t.thumbnail}?token=${localStorage.getItem("token")}`}
|
||||||
|
alt="thumb"
|
||||||
|
class="thumb"
|
||||||
|
on:load={(e) => e.target.classList.add("loaded")}
|
||||||
|
/>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="thumb placeholder">
|
<div class="thumb placeholder">
|
||||||
<i class="fa-regular fa-image"></i>
|
<i class="fa-regular fa-image"></i>
|
||||||
|
|||||||
@@ -450,6 +450,50 @@ body,
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 🌫️ Thumbnail fade-in + blur efekti */
|
||||||
|
/* 🌫️ Fade-in thumbnail efekti — sadece img'ler için geçerli */
|
||||||
|
img.thumb {
|
||||||
|
opacity: 0;
|
||||||
|
filter: blur(10px) brightness(0.9);
|
||||||
|
transform: scale(1.03);
|
||||||
|
transition: opacity 0.6s ease, filter 1s ease, transform 0.6s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.thumb.loaded {
|
||||||
|
opacity: 1;
|
||||||
|
filter: blur(0) brightness(1);
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 🪄 Placeholder her zaman görünür */
|
||||||
|
.thumb.placeholder {
|
||||||
|
opacity: 1 !important;
|
||||||
|
filter: none !important;
|
||||||
|
transform: none !important;
|
||||||
|
background: linear-gradient(100deg, #f0f0f0 20%, #e2e2e2 50%, #f0f0f0 80%);
|
||||||
|
background-size: 200% 100%;
|
||||||
|
animation: shimmer 1.4s infinite;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumb.placeholder i {
|
||||||
|
font-size: 28px;
|
||||||
|
color: #777;
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes shimmer {
|
||||||
|
0% {
|
||||||
|
background-position: -200% 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-position: 200% 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* =======================================================
|
/* =======================================================
|
||||||
📱 RESPONSIVE
|
📱 RESPONSIVE
|
||||||
======================================================= */
|
======================================================= */
|
||||||
|
|||||||
@@ -173,7 +173,14 @@ app.post("/api/transfer", requireAuth, upload.single("torrent"), (req, res) => {
|
|||||||
exec(cmd, (err) => {
|
exec(cmd, (err) => {
|
||||||
if (err)
|
if (err)
|
||||||
console.warn(`⚠️ Video thumbnail oluşturulamadı: ${err.message}`);
|
console.warn(`⚠️ Video thumbnail oluşturulamadı: ${err.message}`);
|
||||||
else console.log(`🎞️ Video thumbnail oluşturuldu: ${thumbnailPath}`);
|
else {
|
||||||
|
console.log(`🎞️ Video thumbnail oluşturuldu: ${thumbnailPath}`);
|
||||||
|
const data = JSON.stringify({
|
||||||
|
type: "fileUpdate",
|
||||||
|
path: path.relative(DOWNLOAD_DIR, entry.savePath)
|
||||||
|
});
|
||||||
|
wss.clients.forEach((c) => c.readyState === 1 && c.send(data));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// --- 2️⃣ Resimler için thumbnail oluştur ---
|
// --- 2️⃣ Resimler için thumbnail oluştur ---
|
||||||
|
|||||||
Reference in New Issue
Block a user