xref: /MusicFree/src/core/musicSheet/migrate.ts (revision adf41771e5c3ca7c27879b461cece7e444d1dc58)
1740e3947S猫头猫import {getAppMeta, setAppMeta} from '@/core/appMeta.ts';
2740e3947S猫头猫import {getStorage as oldGetStorage} from '@/utils/storage';
3740e3947S猫头猫import storage from '@/core/musicSheet/storage.ts';
4740e3947S猫头猫import AsyncStorage from '@react-native-async-storage/async-storage';
5740e3947S猫头猫
6740e3947S猫头猫export default async function migrate() {
7740e3947S猫头猫    const dbUpdated = +(getAppMeta('MusicSheetVersion') || '0') > 1;
8740e3947S猫头猫    if (dbUpdated) {
9740e3947S猫头猫        return;
10740e3947S猫头猫    }
11740e3947S猫头猫    try {
12740e3947S猫头猫        // 原来的musicSheets
13740e3947S猫头猫        const musicSheets: IMusic.IMusicSheetItemBase[] = await oldGetStorage(
14740e3947S猫头猫            'music-sheets',
15740e3947S猫头猫        );
16740e3947S猫头猫        if (!musicSheets) {
17740e3947S猫头猫            setAppMeta('MusicSheetVersion', '1');
18740e3947S猫头猫            return;
19740e3947S猫头猫        }
20740e3947S猫头猫
21740e3947S猫头猫        await storage.setSheets(musicSheets);
22740e3947S猫头猫        await AsyncStorage.removeItem('music-sheets');
23740e3947S猫头猫        for (let sheet of musicSheets) {
24740e3947S猫头猫            const musicList = await oldGetStorage(sheet.id);
25740e3947S猫头猫            await storage.setMusicList(sheet.id, musicList);
26740e3947S猫头猫            await AsyncStorage.removeItem(sheet.id);
27740e3947S猫头猫        }
28740e3947S猫头猫        setAppMeta('MusicSheetVersion', '1');
29740e3947S猫头猫    } catch (e) {
30740e3947S猫头猫        console.warn('升级失败', e);
31740e3947S猫头猫    }
32740e3947S猫头猫}
33740e3947S猫头猫
34740e3947S猫头猫export const migrateV2 = {
35740e3947S猫头猫    migrate(sheetId: string, musicItems: IMusic.IMusicItem[]) {
36740e3947S猫头猫        const dbUpdated = getAppMeta('MusicSheetVersion') === '2';
37740e3947S猫头猫        if (dbUpdated) {
38740e3947S猫头猫            return;
39740e3947S猫头猫        }
40740e3947S猫头猫        let dirty = false;
41740e3947S猫头猫        const now = Date.now();
42740e3947S猫头猫        musicItems.forEach((it, index) => {
43740e3947S猫头猫            if (!it.$timestamp || it.$sortIndex === undefined) {
44740e3947S猫头猫                it.$timestamp = now;
45*adf41771S猫头猫                it.$sortIndex = index;
46740e3947S猫头猫                dirty = true;
47740e3947S猫头猫            }
48740e3947S猫头猫        });
49740e3947S猫头猫        if (dirty) {
50740e3947S猫头猫            storage.setMusicList(sheetId, musicItems);
51740e3947S猫头猫        }
52740e3947S猫头猫    },
53740e3947S猫头猫    done() {
54740e3947S猫头猫        setAppMeta('MusicSheetVersion', '2');
55740e3947S猫头猫    },
56740e3947S猫头猫};
57