You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.5 KiB
78 lines
2.5 KiB
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; |
|
}
|
|
|