134a18328S猫头猫/** 备份与恢复 */ 234a18328S猫头猫/** 歌单、插件 */ 334a18328S猫头猫import {compare} from 'compare-versions'; 434a18328S猫头猫import PluginManager from './pluginManager'; 5*740e3947S猫头猫import MusicSheet from '@/core/musicSheet'; 634a18328S猫头猫 734a18328S猫头猫/** 834a18328S猫头猫 * 结果:一份大的json文件 934a18328S猫头猫 * { 1034a18328S猫头猫 * musicSheets: [], 1134a18328S猫头猫 * plugins: [], 1234a18328S猫头猫 * } 1334a18328S猫头猫 */ 1434a18328S猫头猫 1534a18328S猫头猫interface IBackJson { 16*740e3947S猫头猫 musicSheets: IMusic.IMusicSheetItem[]; 1734a18328S猫头猫 plugins: Array<{srcUrl: string; version: string}>; 1834a18328S猫头猫} 1934a18328S猫头猫 2034a18328S猫头猫function backup() { 21*740e3947S猫头猫 const musicSheets = MusicSheet.backupSheets(); 2234a18328S猫头猫 const plugins = PluginManager.getValidPlugins(); 2334a18328S猫头猫 const normalizedPlugins = plugins.map(_ => ({ 2434a18328S猫头猫 srcUrl: _.instance.srcUrl, 2534a18328S猫头猫 version: _.instance.version, 2634a18328S猫头猫 })); 2734a18328S猫头猫 2834a18328S猫头猫 return JSON.stringify({ 29*740e3947S猫头猫 musicSheets: musicSheets, 3034a18328S猫头猫 plugins: normalizedPlugins, 3134a18328S猫头猫 }); 3234a18328S猫头猫} 3334a18328S猫头猫 34a7b42a4cS猫头猫async function resume(raw: string | Object, overwrite?: boolean) { 3534a18328S猫头猫 let obj: IBackJson; 3634a18328S猫头猫 if (typeof raw === 'string') { 3734a18328S猫头猫 obj = JSON.parse(raw); 3834a18328S猫头猫 } else { 3934a18328S猫头猫 obj = raw as IBackJson; 4034a18328S猫头猫 } 41*740e3947S猫头猫 4234a18328S猫头猫 const {plugins, musicSheets} = obj ?? {}; 4334a18328S猫头猫 /** 恢复插件 */ 4434a18328S猫头猫 const validPlugins = PluginManager.getValidPlugins(); 4534a18328S猫头猫 const resumePlugins = plugins?.map(_ => { 4634a18328S猫头猫 // 校验是否安装过: 同源且本地版本更高就忽略掉 4734a18328S猫头猫 if ( 4834a18328S猫头猫 validPlugins.find( 4934a18328S猫头猫 plugin => 5034a18328S猫头猫 plugin.instance.srcUrl === _.srcUrl && 5134a18328S猫头猫 compare( 5234a18328S猫头猫 plugin.instance.version ?? '0.0.0', 5334a18328S猫头猫 _.version ?? '0.0.1', 5434a18328S猫头猫 '>=', 5534a18328S猫头猫 ), 5634a18328S猫头猫 ) 5734a18328S猫头猫 ) { 5834a18328S猫头猫 return; 5934a18328S猫头猫 } 6034a18328S猫头猫 return PluginManager.installPluginFromUrl(_.srcUrl); 6134a18328S猫头猫 }); 62*740e3947S猫头猫 6334a18328S猫头猫 /** 恢复歌单 */ 64a7b42a4cS猫头猫 const resumeMusicSheets = MusicSheet.resumeSheets(musicSheets, overwrite); 6534a18328S猫头猫 66d95a8544S猫头猫 return Promise.all([...(resumePlugins ?? []), resumeMusicSheets]); 6734a18328S猫头猫} 6834a18328S猫头猫 6934a18328S猫头猫const Backup = { 7034a18328S猫头猫 backup, 7134a18328S猫头猫 resume, 7234a18328S猫头猫}; 7334a18328S猫头猫export default Backup; 74