134a18328S猫头猫/** 备份与恢复 */ 234a18328S猫头猫/** 歌单、插件 */ 334a18328S猫头猫import {trimInternalData} from '@/utils/mediaItem'; 434a18328S猫头猫import {compare} from 'compare-versions'; 534a18328S猫头猫import MusicSheet from './musicSheet'; 634a18328S猫头猫import PluginManager from './pluginManager'; 734a18328S猫头猫 834a18328S猫头猫/** 934a18328S猫头猫 * 结果:一份大的json文件 1034a18328S猫头猫 * { 1134a18328S猫头猫 * musicSheets: [], 1234a18328S猫头猫 * plugins: [], 1334a18328S猫头猫 * } 1434a18328S猫头猫 */ 1534a18328S猫头猫 1634a18328S猫头猫interface IBackJson { 1734a18328S猫头猫 musicSheets: ICommon.WithMusicList<IMusic.IMusicSheetItemBase>[]; 1834a18328S猫头猫 plugins: Array<{srcUrl: string; version: string}>; 1934a18328S猫头猫} 2034a18328S猫头猫 2134a18328S猫头猫function backup() { 2234a18328S猫头猫 const {musicSheets, sheetMusicMap} = MusicSheet.getSheets(); 2334a18328S猫头猫 const normalizedSheets = musicSheets.map(_ => ({ 2434a18328S猫头猫 ..._, 2534a18328S猫头猫 musicList: (sheetMusicMap[_.id] ?? []).map(trimInternalData), 2634a18328S猫头猫 coverImg: undefined, 2734a18328S猫头猫 })); 2834a18328S猫头猫 const plugins = PluginManager.getValidPlugins(); 2934a18328S猫头猫 const normalizedPlugins = plugins.map(_ => ({ 3034a18328S猫头猫 srcUrl: _.instance.srcUrl, 3134a18328S猫头猫 version: _.instance.version, 3234a18328S猫头猫 })); 3334a18328S猫头猫 3434a18328S猫头猫 return JSON.stringify({ 3534a18328S猫头猫 musicSheets: normalizedSheets, 3634a18328S猫头猫 plugins: normalizedPlugins, 3734a18328S猫头猫 }); 3834a18328S猫头猫} 3934a18328S猫头猫 40*a7b42a4cS猫头猫async function resume(raw: string | Object, overwrite?: boolean) { 4134a18328S猫头猫 let obj: IBackJson; 4234a18328S猫头猫 if (typeof raw === 'string') { 4334a18328S猫头猫 obj = JSON.parse(raw); 4434a18328S猫头猫 } else { 4534a18328S猫头猫 obj = raw as IBackJson; 4634a18328S猫头猫 } 4734a18328S猫头猫 const {plugins, musicSheets} = obj ?? {}; 4834a18328S猫头猫 /** 恢复插件 */ 4934a18328S猫头猫 const validPlugins = PluginManager.getValidPlugins(); 5034a18328S猫头猫 const resumePlugins = plugins?.map(_ => { 5134a18328S猫头猫 // 校验是否安装过: 同源且本地版本更高就忽略掉 5234a18328S猫头猫 if ( 5334a18328S猫头猫 validPlugins.find( 5434a18328S猫头猫 plugin => 5534a18328S猫头猫 plugin.instance.srcUrl === _.srcUrl && 5634a18328S猫头猫 compare( 5734a18328S猫头猫 plugin.instance.version ?? '0.0.0', 5834a18328S猫头猫 _.version ?? '0.0.1', 5934a18328S猫头猫 '>=', 6034a18328S猫头猫 ), 6134a18328S猫头猫 ) 6234a18328S猫头猫 ) { 6334a18328S猫头猫 return; 6434a18328S猫头猫 } 6534a18328S猫头猫 return PluginManager.installPluginFromUrl(_.srcUrl); 6634a18328S猫头猫 }); 6734a18328S猫头猫 /** 恢复歌单 */ 68*a7b42a4cS猫头猫 const resumeMusicSheets = MusicSheet.resumeSheets(musicSheets, overwrite); 6934a18328S猫头猫 70d95a8544S猫头猫 return Promise.all([...(resumePlugins ?? []), resumeMusicSheets]); 7134a18328S猫头猫} 7234a18328S猫头猫 7334a18328S猫头猫const Backup = { 7434a18328S猫头猫 backup, 7534a18328S猫头猫 resume, 7634a18328S猫头猫}; 7734a18328S猫头猫export default Backup; 78