xref: /MusicFree/src/core/musicSheet/migrate.ts (revision d1a36a67ac3d03c61d8bafd8ac2bc121ea4f6f3e)
1import {getAppMeta, setAppMeta} from '@/core/appMeta.ts';
2import {getStorage as oldGetStorage} from '@/utils/storage';
3import storage from '@/core/musicSheet/storage.ts';
4import AsyncStorage from '@react-native-async-storage/async-storage';
5
6export default async function migrate() {
7    const dbUpdated = +(getAppMeta('MusicSheetVersion') || '0') > 1;
8    if (dbUpdated) {
9        return;
10    }
11    try {
12        // 原来的musicSheets
13        const musicSheets: IMusic.IMusicSheetItemBase[] = await oldGetStorage(
14            'music-sheets',
15        );
16        if (!musicSheets) {
17            setAppMeta('MusicSheetVersion', '1');
18            return;
19        }
20
21        await storage.setSheets(musicSheets);
22        await AsyncStorage.removeItem('music-sheets');
23        for (let sheet of musicSheets) {
24            const musicList = await oldGetStorage(sheet.id);
25            await storage.setMusicList(sheet.id, musicList);
26            await AsyncStorage.removeItem(sheet.id);
27        }
28        setAppMeta('MusicSheetVersion', '1');
29    } catch (e) {
30        console.warn('升级失败', e);
31    }
32}
33
34export const migrateV2 = {
35    migrate(sheetId: string, musicItems: IMusic.IMusicItem[]) {
36        const dbUpdated = getAppMeta('MusicSheetVersion') === '2';
37        if (dbUpdated) {
38            return;
39        }
40        let dirty = false;
41        const now = Date.now();
42        musicItems.forEach((it, index) => {
43            if (!it.$timestamp || it.$sortIndex === undefined) {
44                it.$timestamp = now;
45                it.$sortIndex = index;
46                dirty = true;
47            }
48        });
49        if (dirty) {
50            storage.setMusicList(sheetId, musicItems);
51        }
52    },
53    done() {
54        setAppMeta('MusicSheetVersion', '2');
55    },
56};
57