diff --git a/backend/src/users/play-state/play-state.entity.ts b/backend/src/users/play-state/play-state.entity.ts index dee4476..498d208 100644 --- a/backend/src/users/play-state/play-state.entity.ts +++ b/backend/src/users/play-state/play-state.entity.ts @@ -65,7 +65,10 @@ export class PlayState { @UpdateDateColumn() lastPlayedAt: Date; - @ManyToOne(() => LibraryItem, (libraryItem) => libraryItem.playStates) + @ManyToOne(() => LibraryItem, (libraryItem) => libraryItem.playStates, { + nullable: true, + createForeignKeyConstraints: false, + }) @JoinColumn([ { name: 'tmdbId', referencedColumnName: 'tmdbId' }, { name: 'userId', referencedColumnName: 'userId' }, diff --git a/src/lib/components/VideoPlayer/MovieVideoPlayerModal.svelte b/src/lib/components/VideoPlayer/MovieVideoPlayerModal.svelte index e15cdc0..b34cb63 100644 --- a/src/lib/components/VideoPlayer/MovieVideoPlayerModal.svelte +++ b/src/lib/components/VideoPlayer/MovieVideoPlayerModal.svelte @@ -52,9 +52,9 @@ }); function reportProgress() { - if (video?.readyState === 4 && progressTime > 0 && videoDuration > 0) + if (video?.readyState === 4 && video?.currentTime > 0 && video?.duration > 0) reiverrApiNew.users.updateMoviePlayStateByTmdbId($user?.id as string, tmdbId, { - progress: progressTime / videoDuration, + progress: video.currentTime / video?.duration, watched: progressTime > 0.9 }); } @@ -135,7 +135,7 @@ // ? `${$user?.settings.jellyfin.baseUrl}/Items/${item?.Id}/Images/Backdrop?quality=100&tag=${item?.BackdropImageTags?.[0]}` // : '', - startTime: stream.progress * stream.duration + progress: stream.progress // (options.playbackPosition || 0) / 10_000_000 || // (item?.UserData?.PlaybackPositionTicks || 0) / 10_000_000 || // undefined diff --git a/src/lib/components/VideoPlayer/VideoElement.svelte b/src/lib/components/VideoPlayer/VideoElement.svelte index e48d1bb..722bb8a 100644 --- a/src/lib/components/VideoPlayer/VideoElement.svelte +++ b/src/lib/components/VideoPlayer/VideoElement.svelte @@ -28,7 +28,7 @@ // video.srcObject = null; // hls?.destroy(); - const { playbackUrl, directPlay, backdrop, startTime } = playbackInfo; + const { playbackUrl, directPlay, backdrop, progress } = playbackInfo; if (backdrop) { video.poster = backdrop; @@ -55,9 +55,9 @@ video.src = playbackUrl; } - if (startTime) { - progressTime = startTime; - } + // if (progress) { + // progressTime = startTime; + // } } function handleProgress() { @@ -104,8 +104,14 @@ on:timeupdate={() => (progressTime = !seeking && videoDidLoad ? video.currentTime : progressTime)} on:progress={handleProgress} on:loadeddata={() => { - video.currentTime = progressTime; + // console.log('video loaded', video.currentTime, video.duration, playbackInfo?.progress); + // video.currentTime = progressTime; videoDidLoad = true; + + if (video.currentTime < video.duration * (playbackInfo?.progress || 0)) { + video.currentTime = video.duration * (playbackInfo?.progress || 0); + } + console.log('Video loaded'); }} on:waiting={() => (buffering = true)} diff --git a/src/lib/components/VideoPlayer/VideoPlayer.ts b/src/lib/components/VideoPlayer/VideoPlayer.ts index 1a7909a..a8c4c6c 100644 --- a/src/lib/components/VideoPlayer/VideoPlayer.ts +++ b/src/lib/components/VideoPlayer/VideoPlayer.ts @@ -36,7 +36,7 @@ export type PlaybackInfo = { playbackUrl: string; directPlay: boolean; backdrop?: string; - startTime?: number; + progress?: number; audioStreamIndex: number; audioTracks: AudioTrack[];