2 changed files with 81 additions and 80 deletions
@ -0,0 +1,78 @@ |
|||||||
|
import { MWMediaType } from "@/backend/metadata/types/mw"; |
||||||
|
import { ProgressMediaItem } from "@/stores/progress"; |
||||||
|
|
||||||
|
import { WatchedStoreData } from "../types"; |
||||||
|
|
||||||
|
export function migrateV4Videos(old: WatchedStoreData) { |
||||||
|
// Convert items
|
||||||
|
const newItems: Record<string, ProgressMediaItem> = {}; |
||||||
|
|
||||||
|
for (const oldItem of old.items) { |
||||||
|
if (oldItem.item.meta.type === MWMediaType.SERIES) { |
||||||
|
// Upsert
|
||||||
|
if (!newItems[oldItem.item.meta.id]) { |
||||||
|
newItems[oldItem.item.meta.id] = { |
||||||
|
type: "show", |
||||||
|
episodes: {}, |
||||||
|
seasons: {}, |
||||||
|
title: oldItem.item.meta.title, |
||||||
|
updatedAt: oldItem.watchedAt, |
||||||
|
poster: oldItem.item.meta.poster, |
||||||
|
year: Number(oldItem.item.meta.year), |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
// Add episodes
|
||||||
|
if ( |
||||||
|
oldItem.item.series && |
||||||
|
!newItems[oldItem.item.meta.id].episodes[oldItem.item.series.episodeId] |
||||||
|
) { |
||||||
|
// Find episode ID (barely ever works)
|
||||||
|
const episodeTitle = oldItem.item.meta.seasonData.episodes.find( |
||||||
|
(ep) => ep.number === oldItem.item.series?.episode |
||||||
|
)?.title; |
||||||
|
|
||||||
|
// Add season to season data
|
||||||
|
newItems[oldItem.item.meta.id].seasons[oldItem.item.series.seasonId] = { |
||||||
|
id: oldItem.item.series.seasonId, |
||||||
|
number: oldItem.item.series.season, |
||||||
|
title: |
||||||
|
oldItem.item.meta.seasons.find( |
||||||
|
(s) => s.number === oldItem.item.series?.season |
||||||
|
)?.title || "Unknown season", |
||||||
|
}; |
||||||
|
|
||||||
|
// Populate episode data
|
||||||
|
newItems[oldItem.item.meta.id].episodes[oldItem.item.series.episodeId] = |
||||||
|
{ |
||||||
|
title: episodeTitle || "Unknown", |
||||||
|
id: oldItem.item.series.episodeId, |
||||||
|
number: oldItem.item.series.episode, |
||||||
|
seasonId: oldItem.item.series.seasonId, |
||||||
|
updatedAt: oldItem.watchedAt, |
||||||
|
progress: { |
||||||
|
duration: (100 / oldItem.percentage) * oldItem.progress, |
||||||
|
watched: oldItem.progress, |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
||||||
|
} else { |
||||||
|
newItems[oldItem.item.meta.id] = { |
||||||
|
type: "movie", |
||||||
|
episodes: {}, |
||||||
|
seasons: {}, |
||||||
|
title: oldItem.item.meta.title, |
||||||
|
updatedAt: oldItem.watchedAt, |
||||||
|
year: Number(oldItem.item.meta.year), |
||||||
|
poster: oldItem.item.meta.poster, |
||||||
|
progress: { |
||||||
|
duration: (100 / oldItem.percentage) * oldItem.progress, |
||||||
|
watched: oldItem.progress, |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
console.log(newItems); |
||||||
|
return newItems; |
||||||
|
} |
Loading…
Reference in new issue