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