3 changed files with 101 additions and 0 deletions
@ -0,0 +1,87 @@ |
|||||||
|
import { getLegacyMetaFromId } from "@/backend/metadata/getmeta"; |
||||||
|
import { getMovieFromExternalId } from "@/backend/metadata/tmdb"; |
||||||
|
import { MWMediaType } from "@/backend/metadata/types/mw"; |
||||||
|
|
||||||
|
import { WatchedStoreData } from "../types"; |
||||||
|
|
||||||
|
async function migrateId( |
||||||
|
id: number, |
||||||
|
type: MWMediaType |
||||||
|
): Promise<string | undefined> { |
||||||
|
console.log("migrating id", id, type); |
||||||
|
const meta = await getLegacyMetaFromId(type, id.toString()); |
||||||
|
console.log("migrating id", meta); |
||||||
|
|
||||||
|
if (!meta) return undefined; |
||||||
|
const { tmdbId, imdbId } = meta; |
||||||
|
if (!tmdbId && !imdbId) return undefined; |
||||||
|
|
||||||
|
// movies always have an imdb id on tmdb
|
||||||
|
if (imdbId && type === MWMediaType.MOVIE) { |
||||||
|
const movieId = await getMovieFromExternalId(imdbId); |
||||||
|
if (movieId) return movieId; |
||||||
|
} |
||||||
|
|
||||||
|
if (tmdbId) { |
||||||
|
return tmdbId; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export async function migrateV2Bookmarks(old: any) { |
||||||
|
const oldData = old; |
||||||
|
if (!oldData) return; |
||||||
|
|
||||||
|
const updatedBookmarks = oldData.bookmarks.map( |
||||||
|
async (item: { id: number; type: MWMediaType }) => ({ |
||||||
|
...item, |
||||||
|
mediaId: await migrateId(item.id, item.type), |
||||||
|
}) |
||||||
|
); |
||||||
|
|
||||||
|
return { |
||||||
|
bookmarks: (await Promise.all(updatedBookmarks)).filter( |
||||||
|
(item) => item.mediaId |
||||||
|
), |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
export async function migrateV3Videos(old: any) { |
||||||
|
console.log("migrating watched"); |
||||||
|
const oldData = old; |
||||||
|
if (!oldData) return; |
||||||
|
console.log(oldData); |
||||||
|
|
||||||
|
const updatedItems = await Promise.all( |
||||||
|
oldData.items.map(async (item: any) => { |
||||||
|
const migratedId = await migrateId( |
||||||
|
item.item.meta.id, |
||||||
|
item.item.meta.type |
||||||
|
); |
||||||
|
|
||||||
|
const migratedItem = { |
||||||
|
...item, |
||||||
|
item: { |
||||||
|
...item.item, |
||||||
|
meta: { |
||||||
|
...item.item.meta, |
||||||
|
id: migratedId, |
||||||
|
}, |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
return { |
||||||
|
...item, |
||||||
|
item: migratedId ? migratedItem : item.item, |
||||||
|
}; |
||||||
|
}) |
||||||
|
); |
||||||
|
|
||||||
|
const newData: WatchedStoreData = { |
||||||
|
items: updatedItems.map((item) => item.item), // Extract the "item" object
|
||||||
|
}; |
||||||
|
|
||||||
|
return { |
||||||
|
...oldData, |
||||||
|
items: newData.items, |
||||||
|
}; |
||||||
|
} |
Loading…
Reference in new issue