diff --git a/src/backend/accounts/user.ts b/src/backend/accounts/user.ts index aaa1b227..cd701395 100644 --- a/src/backend/accounts/user.ts +++ b/src/backend/accounts/user.ts @@ -87,6 +87,11 @@ export function progressResponsesToEntries(responses: ProgressResponse[]) { } const item = items[v.tmdbId]; + // Update the item only if the new update is more recent than the current one + if (new Date(v.updatedAt).getTime() > item.updatedAt) { + item.updatedAt = new Date(v.updatedAt).getTime(); + } + if (item.type === "movie") { item.progress = { duration: Number(v.duration), @@ -95,22 +100,29 @@ export function progressResponsesToEntries(responses: ProgressResponse[]) { } if (item.type === "show" && v.season.id && v.episode.id) { - item.seasons[v.season.id] = { - id: v.season.id, - number: v.season.number ?? 0, - title: "", - }; - item.episodes[v.episode.id] = { - id: v.episode.id, - number: v.episode.number ?? 0, - title: "", - progress: { - duration: Number(v.duration), - watched: Number(v.watched), - }, - seasonId: v.season.id, - updatedAt: new Date(v.updatedAt).getTime(), - }; + if ( + !item.seasons[v.season.id] || + (item.episodes[v.episode.id] && + new Date(v.updatedAt).getTime() > + item.episodes[v.episode.id].updatedAt) + ) { + item.seasons[v.season.id] = { + id: v.season.id, + number: v.season.number ?? 0, + title: "", + }; + item.episodes[v.episode.id] = { + id: v.episode.id, + number: v.episode.number ?? 0, + title: "", + progress: { + duration: Number(v.duration), + watched: Number(v.watched), + }, + seasonId: v.season.id, + updatedAt: new Date(v.updatedAt).getTime(), + }; + } } });