mirror of
https://github.com/ThaUnknown/miru.git
synced 2026-03-19 03:06:45 +00:00
59 lines
2 KiB
JavaScript
59 lines
2 KiB
JavaScript
import Dexie, { liveQuery } from 'dexie';
|
|
|
|
export const db = new Dexie('miru');
|
|
|
|
db.version(1).stores({
|
|
animeEpisodeProgress: '[mediaId+episode], currentTime, safeduration, createdAt, updatedAt', // mediaId and episode is the composite key
|
|
});
|
|
|
|
// Return an object with the progress of each episode in percent (0-100), keyed by episode number
|
|
export function liveAnimeProgress (mediaId){
|
|
return liveQuery(async () => {
|
|
if (!mediaId) return {}
|
|
const results = await db.animeEpisodeProgress.where({ mediaId }).toArray();
|
|
if (!results) return {}
|
|
// Return an object with the episode as the key and the progress as the value
|
|
return Object.fromEntries(results.map(result => [
|
|
result.episode,
|
|
Math.ceil(result.currentTime / result.safeduration * 100)
|
|
]))
|
|
});
|
|
}
|
|
|
|
// Return an individual episode's progress in percent (0-100)
|
|
export function liveAnimeEpisodeProgress (mediaId, episode) {
|
|
return liveQuery(async () => {
|
|
if (!mediaId || !episode) return 0
|
|
const result = await getAnimeProgress(mediaId, episode)
|
|
if (!result) return 0
|
|
return Math.ceil(result.currentTime / result.safeduration * 100)
|
|
});
|
|
}
|
|
|
|
// Return an individual episode's record { mediaId, episode, currentTime, safeduration, createdAt, updatedAt }
|
|
export function getAnimeProgress (mediaId, episode) {
|
|
return db.animeEpisodeProgress.where({ mediaId, episode }).first();
|
|
}
|
|
|
|
// Set an individual episode's progress
|
|
export async function setAnimeProgress ({mediaId, episode, currentTime, safeduration}) {
|
|
// If you want to update the record if it already exists:
|
|
const existing = await getAnimeProgress(mediaId, episode);
|
|
if (existing) {
|
|
return await db.animeEpisodeProgress.update([ mediaId, episode ], {
|
|
currentTime,
|
|
safeduration,
|
|
updatedAt: Date.now(),
|
|
});
|
|
}
|
|
|
|
// If you want to insert a new record if it does not exist:
|
|
return await db.animeEpisodeProgress.put({
|
|
mediaId,
|
|
episode,
|
|
currentTime,
|
|
safeduration,
|
|
createdAt: Date.now(),
|
|
updatedAt: Date.now(),
|
|
});
|
|
}
|