diff --git a/packages/frontend/src/routes/videos/+page.svelte b/packages/frontend/src/routes/videos/+page.svelte index 1e36991..e2d27ed 100644 --- a/packages/frontend/src/routes/videos/+page.svelte +++ b/packages/frontend/src/routes/videos/+page.svelte @@ -238,13 +238,15 @@ const filteredVideos = $derived(() => { {/if} - - + + {#if video.plays_count} +
+ + {video.plays_count} +
+ {/if} (null); +let lastTrackedTime = $state(0); const relatedVideos = [ { @@ -63,8 +69,30 @@ const relatedVideos = [ }, ]; -function handleLike() { - isLiked = !isLiked; +async function handleLike() { + if (!data.authStatus.authenticated) { + toast.error("Please sign in to like videos"); + return; + } + + try { + isLikeLoading = true; + if (isLiked) { + const result = await unlikeVideo(data.video.id); + likesCount = result.likes_count; + isLiked = false; + toast.success("Removed from liked videos"); + } else { + const result = await likeVideo(data.video.id); + likesCount = result.likes_count; + isLiked = true; + toast.success("Added to liked videos"); + } + } catch (error: any) { + toast.error(error.message || "Failed to update like"); + } finally { + isLikeLoading = false; + } } function handleBookmark() { @@ -90,9 +118,29 @@ async function handleComment(e: Event) { } } -let showPlayer = $state(false); +async function handlePlay() { + showPlayer = true; + try { + const result = await recordVideoPlay(data.video.id); + currentPlayId = result.play_id; + } catch (error) { + console.error("Failed to record play:", error); + } +} -const { data } = $props(); +function handleTimeUpdate(e: Event) { + const video = e.target as HTMLVideoElement; + const currentTime = Math.floor(video.currentTime); + + // Update every 10 seconds + if (currentPlayId && currentTime - lastTrackedTime >= 10) { + lastTrackedTime = currentTime; + const completed = video.currentTime >= video.duration * 0.9; // 90% watched = completed + updateVideoPlay(data.video.id, currentPlayId, currentTime, completed).catch(console.error); + } +} + +let showPlayer = $state(false); @@ -155,6 +204,21 @@ const { data } = $props(); > +
@@ -196,16 +260,17 @@ const { data } = $props();
- + + {likesCount} + - + Save -->