134a18328S猫头猫/** 备份与恢复 */ 234a18328S猫头猫/** 歌单、插件 */ 334a18328S猫头猫import {compare} from 'compare-versions'; 434a18328S猫头猫import PluginManager from './pluginManager'; 5740e3947S猫头猫import MusicSheet from '@/core/musicSheet'; 6*adf41771S猫头猫import {ResumeMode} from '@/constants/commonConst.ts'; 734a18328S猫头猫 834a18328S猫头猫/** 934a18328S猫头猫 * 结果:一份大的json文件 1034a18328S猫头猫 * { 1134a18328S猫头猫 * musicSheets: [], 1234a18328S猫头猫 * plugins: [], 1334a18328S猫头猫 * } 1434a18328S猫头猫 */ 1534a18328S猫头猫 1634a18328S猫头猫interface IBackJson { 17740e3947S猫头猫 musicSheets: IMusic.IMusicSheetItem[]; 1834a18328S猫头猫 plugins: Array<{srcUrl: string; version: string}>; 1934a18328S猫头猫} 2034a18328S猫头猫 2134a18328S猫头猫function backup() { 22740e3947S猫头猫 const musicSheets = MusicSheet.backupSheets(); 2334a18328S猫头猫 const plugins = PluginManager.getValidPlugins(); 2434a18328S猫头猫 const normalizedPlugins = plugins.map(_ => ({ 2534a18328S猫头猫 srcUrl: _.instance.srcUrl, 2634a18328S猫头猫 version: _.instance.version, 2734a18328S猫头猫 })); 2834a18328S猫头猫 2934a18328S猫头猫 return JSON.stringify({ 30740e3947S猫头猫 musicSheets: musicSheets, 3134a18328S猫头猫 plugins: normalizedPlugins, 3234a18328S猫头猫 }); 3334a18328S猫头猫} 3434a18328S猫头猫 35*adf41771S猫头猫async function resume( 36*adf41771S猫头猫 raw: string | Object, 37*adf41771S猫头猫 resumeMode: ResumeMode = ResumeMode.Append, 38*adf41771S猫头猫) { 3934a18328S猫头猫 let obj: IBackJson; 4034a18328S猫头猫 if (typeof raw === 'string') { 4134a18328S猫头猫 obj = JSON.parse(raw); 4234a18328S猫头猫 } else { 4334a18328S猫头猫 obj = raw as IBackJson; 4434a18328S猫头猫 } 45740e3947S猫头猫 4634a18328S猫头猫 const {plugins, musicSheets} = obj ?? {}; 4734a18328S猫头猫 /** 恢复插件 */ 4834a18328S猫头猫 const validPlugins = PluginManager.getValidPlugins(); 4934a18328S猫头猫 const resumePlugins = plugins?.map(_ => { 5034a18328S猫头猫 // 校验是否安装过: 同源且本地版本更高就忽略掉 5134a18328S猫头猫 if ( 5234a18328S猫头猫 validPlugins.find( 5334a18328S猫头猫 plugin => 5434a18328S猫头猫 plugin.instance.srcUrl === _.srcUrl && 5534a18328S猫头猫 compare( 5634a18328S猫头猫 plugin.instance.version ?? '0.0.0', 5734a18328S猫头猫 _.version ?? '0.0.1', 5834a18328S猫头猫 '>=', 5934a18328S猫头猫 ), 6034a18328S猫头猫 ) 6134a18328S猫头猫 ) { 6234a18328S猫头猫 return; 6334a18328S猫头猫 } 6434a18328S猫头猫 return PluginManager.installPluginFromUrl(_.srcUrl); 6534a18328S猫头猫 }); 66740e3947S猫头猫 6734a18328S猫头猫 /** 恢复歌单 */ 68*adf41771S猫头猫 const resumeMusicSheets = MusicSheet.resumeSheets(musicSheets, resumeMode); 6934a18328S猫头猫 70d95a8544S猫头猫 return Promise.all([...(resumePlugins ?? []), resumeMusicSheets]); 7134a18328S猫头猫} 7234a18328S猫头猫 7334a18328S猫头猫const Backup = { 7434a18328S猫头猫 backup, 7534a18328S猫头猫 resume, 7634a18328S猫头猫}; 7734a18328S猫头猫export default Backup; 78