A small web app for watching movies and shows easily
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

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;
}