Flesh out volume data
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
export * from './progress'
|
||||
export * from './volume-data'
|
||||
export * from './settings'
|
||||
@@ -1,24 +0,0 @@
|
||||
import { browser } from '$app/environment';
|
||||
import { writable } from 'svelte/store';
|
||||
|
||||
type Progress = Record<string, number> | undefined;
|
||||
|
||||
const stored = browser ? window.localStorage.getItem('progress') : undefined;
|
||||
const initial: Progress = stored && browser ? JSON.parse(stored) : undefined;
|
||||
|
||||
export const progress = writable<Progress>(initial);
|
||||
|
||||
export function updateProgress(volume: string, value: number) {
|
||||
progress.update((prev) => {
|
||||
return {
|
||||
...prev,
|
||||
[volume]: value
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
progress.subscribe((progress) => {
|
||||
if (browser) {
|
||||
window.localStorage.setItem('progress', progress ? JSON.stringify(progress) : '');
|
||||
}
|
||||
});
|
||||
77
src/lib/settings/volume-data.ts
Normal file
77
src/lib/settings/volume-data.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { browser } from '$app/environment';
|
||||
import { derived, get, writable } from 'svelte/store';
|
||||
import { settings } from './settings';
|
||||
|
||||
type VolumeSettings = {
|
||||
rightToLeft: boolean;
|
||||
singlePageView: boolean;
|
||||
hasCover: boolean;
|
||||
}
|
||||
|
||||
type Progress = Record<string, number> | undefined;
|
||||
|
||||
type VolumeData = {
|
||||
progress: number;
|
||||
chars: number;
|
||||
settings: VolumeSettings;
|
||||
completed: boolean;
|
||||
}
|
||||
|
||||
type Volumes = Record<string, VolumeData>;
|
||||
|
||||
|
||||
const stored = browser ? window.localStorage.getItem('volumes') : undefined;
|
||||
const initial: Volumes = stored && browser ? JSON.parse(stored) : undefined;
|
||||
|
||||
export const volumes = writable<Volumes>(initial);
|
||||
|
||||
export function initializeVolume(volume: string) {
|
||||
const { hasCover, rightToLeft, singlePageView } = get(settings)
|
||||
volumes.update((prev) => {
|
||||
return {
|
||||
...prev,
|
||||
[volume]: {
|
||||
chars: 0,
|
||||
completed: false,
|
||||
progress: 0,
|
||||
settings: {
|
||||
hasCover,
|
||||
rightToLeft,
|
||||
singlePageView
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
export function updateProgress(volume: string, progress: number, chars: number, completed = false) {
|
||||
volumes.update((prev) => {
|
||||
return {
|
||||
...prev,
|
||||
[volume]: {
|
||||
...prev?.[volume],
|
||||
progress,
|
||||
chars,
|
||||
completed
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
volumes.subscribe((volumes) => {
|
||||
if (browser) {
|
||||
window.localStorage.setItem('volumes', volumes ? JSON.stringify(volumes) : '');
|
||||
}
|
||||
});
|
||||
|
||||
export const progress = derived(volumes, ($volumes) => {
|
||||
const progress: Progress = {}
|
||||
|
||||
if ($volumes) {
|
||||
Object.keys($volumes).forEach((key) => {
|
||||
progress[key] = $volumes[key].progress
|
||||
});
|
||||
}
|
||||
|
||||
return progress
|
||||
})
|
||||
Reference in New Issue
Block a user