8000 feat(boxjs): store each backup separately · webdev123456/scripts@fd2cf20 · GitHub
[go: up one dir, main page]

Skip to content

Commit fd2cf20

Browse files
committed
feat(boxjs): store each backup separately
1 parent fd88680 commit fd2cf20

File tree

6 files changed

+233
-128
lines changed

6 files changed

+233
-128
lines changed
Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,6 +1139,7 @@ <h2 :style="appTitleStyle">{{curbak.name}}</h2>
11391139
<v-btn color="primary" small @click="copy(JSON.stringify(curbak.bak))"> {{ $t('base.cmd.cp') }} </v-btn>
11401140
</v-subheader>
11411141
<v-card-text>
1142+
<v-text-field :label="$t('bakDetail.id')" v-model="curbak.id" readonly> </v-text-field>
11421143
<v-text-field :label="$t('bakDetail.name')" v-model="curbak.name" @change="updateGlobalBak"> </v-text-field>
11431144
</v-card-text>
11441145
<v-divider></v-divider>
@@ -1412,6 +1413,7 @@ <h2 :class="version === ver.version ? 'primary--text' : undefined">v{{ver.versio
14121413
},
14131414
bakDetail: {
14141415
note: 'Note: ',
1416+
id: 'Backup Index',
14151417
name: 'Backup Name',
14161418
title: 'Backup Informations'
14171419
},
@@ -1542,6 +1544,7 @@ <h2 :class="version === ver.version ? 'primary--text' : undefined">v{{ver.versio
15421544
bakName: '全局备份'
15431545
},
15441546
bakDetail: {
1547+
id: '备份索引',
15451548
name: '备份名称',
15461549
title: '备份信息'
15471550
},
@@ -2175,11 +2178,9 @@ <h2 :class="version === ver.version ? 'primary--text' : undefined">v{{ver.versio
21752178
this.setHttpBackend()
21762179
})
21772180
}
2178-
// 获取全局备份
2179-
if (this.view === 'bak') {
2180-
this.loadGlobalBak()
2181-
}
2182-
this.getVersions()
2181+
2182+
// 延时执行, 避免多个请求抢占资源
2183+
setTimeout(this.getVersions, 3000)
21832184
this.loadTheme()
21842185
},
21852186
mounted() {
@@ -2205,6 +2206,11 @@ <h2 :class="version === ver.version ? 'primary--text' : undefined">v{{ver.versio
22052206
} else {
22062207
this.$i18n.locale = this.box.usercfgs.lang
22072208
}
2209+
2210+
if (this.path.includes('/#/bak/')) {
2211+
const [, backupId] = this.path.split('/#/bak/')
2212+
this.loadGlobalBak(backupId)
2213+
}
22082214
},
22092215
methods: {
22102216
reload() {
@@ -2307,9 +2313,9 @@ <h2 :class="version === ver.version ? 'primary--text' : undefined">v{{ver.versio
23072313
this.handleHistory(this.path)
23082314
},
23092315
// 切换备份视图
2310-
switchBakView(bakId) {
2311-
const path = `/#/bak/${bakId}`
2312-
this.loadGlobalBak().then((resp) => {
2316+
switchBakView(backupId) {
2317+
const path = `/#/bak/${backupId}`
2318+
this.loadGlobalBak(backupId).then((resp) => {
23132319
this.path = path
23142320
this.handleHistory(path)
23152321
})
@@ -2599,10 +2605,10 @@ <h2 :class="version === ver.version ? 'primary--text' : undefined">v{{ver.versio
25992605
})
26002606
},
26012607
// 加载完整的全局备份 (页面渲染时加载只是备份列表)
2602-
loadGlobalBak() {
2603-
return axios.get('/query/baks').then((resp) => {
2604-
delete resp.data.usercfgs
2605-
Object.assign(this.box, resp.data)
2608+
loadGlobalBak(backupId) {
2609+
return axios.get(`/query/baks/${backupId}`).then((resp) => {
2610+
const backup = this.box.globalbaks.find((backup) => backup.id === backupId)
2611+
backup.bak = resp.data
26062612
})
26072613
},
26082614
// 删除全局备份

box/chavy.boxjs.js

Lines changed: 93 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const $ = new Env('BoxJs')
33
// 为 eval 准备的上下文环境
44
const $eval_env = {}
55

6-
$.version = '0.7.87'
6+
$.version = '0.7.88'
77
$.versionType = 'beta'
88

99
// 发出的请求需要需要 Surge、QuanX 的 rewrite
@@ -23,8 +23,10 @@ $.KEY_sessions = 'chavy_boxjs_sessions'
2323
$.KEY_web_cache = 'chavy_boxjs_web_cache'
2424
// 存储`应用订阅缓存`
2525
$.KEY_app_subCaches = 'chavy_boxjs_app_subCaches'
26-
// 存储`全局备份`
26+
// 存储`全局备份` (弃用, 改用 `chavy_boxjs_backups`)
2727
$.KEY_globalBaks = 'chavy_boxjs_globalBaks'
28+
// 存储`备份索引`
29+
$.KEY_backups = 'chavy_boxjs_backups'
2830
// 存储`当前会话` (配合切换会话, 记录当前切换到哪个会话)
2931
$.KEY_cursessions = 'chavy_boxjs_cur_sessions'
3032

@@ -71,6 +73,8 @@ $.ver = `https://raw.githubusercontent.com/chavyleung/scripts/master/box/release
7173

7274
// 升级用户数据
7375
upgradeUserData()
76+
// 升级备份数据
77+
upgradeGlobalBaks()
7478

7579
// 处理预检请求
7680
if ($.isOptions) {
@@ -200,8 +204,9 @@ async function handleQuery() {
200204
if (/^\/boxdata/.test(query)) {
201205
$.json = getBoxData()
202206
} else if (/^\/baks/.test(query)) {
203-
const globalbaks = getGlobalBaks(true)
204-
$.json = { globalbaks }
207+
const [, backupId] = query.split('/baks/')
208+
console.log(backupId)
209+
$.json = $.getjson(backupId)
205210
} else if (/^\/versions$/.test(query)) {
206211
await getVersions(true)
207212
}
@@ -398,28 +403,20 @@ function getAppSubCaches() {
398403
}
399404

400405
/**
401-
* 获取全局备份
402-
* 默认只获取备份的基础信息, 如: id, name……
403-
*
404-
* @param {boolean} isComplete 是否获取完整的备份数据
406+
* 获取全局备份列表
405407
*/
406-
function getGlobalBaks(isComplete = false) {
407-
let globalbaks = $.getjson($.KEY_globalBaks, [])
408+
function getGlobalBaks() {
409+
let backups = $.getjson($.KEY_backups, [])
408410

409411
// 处理异常数据:删除所有为 null 的备份
410-
if (globalbaks.includes(null)) {
411-
globalbaks = globalbaks.filter((bak) => bak)
412-
$.setjson(globalbaks, $.KEY_globalBaks)
412+
if (backups.includes(null)) {
413+
backups = backups.filter((bak) => bak)
414+
$.setjson(backups, $.KEY_backups)
413415
}
414416

415-
if (isComplete) {
416-
return globalbaks
417-
} else {
418-
// isComplete === false: 不返回备份体
419-
globalbaks.forEach((bak) => delete bak.bak)
420-
return globalbaks
421-
}
417+
return backups
422418
}
419+
423420
/**
424421
* 获取版本清单
425422
*/
@@ -515,32 +512,32 @@ async function apiReloadAppSub() {
515512
}
516513

517514
async function apiDelGlobalBak() {
518-
const bak = $.toObj($request.body)
519-
const globalbaks = $.getjson($.KEY_globalBaks, [])
520-
const bakIdx = globalbaks.findIndex((b) => b.id === bak.id)
515+
const backup = $.toObj($request.body)
516+
const backups = $.getjson($.KEY_backups, [])
517+
const bakIdx = backups.findIndex((b) => b.id === backup.id)
521518
if (bakIdx > -1) {
522-
globalbaks.splice(bakIdx, 1)
523-
$.setjson(globalbaks, $.KEY_globalBaks)
519+
backups.splice(bakIdx, 1)
520+
$.setdata('', backup.id)
521+
$.setjson(backups, $.KEY_backups)
524522
}
525523
$.json = getBoxData()
526524
}
527525

528526
async function apiUpdateGlobalBak() {
529-
const { id: bakId, name: bakName } = $.toObj($request.body)
530-
const globalbaks = $.getjson($.KEY_globalBaks, [])
531-
const bak = globalbaks.find((b) => b.id === bakId)
532-
if (bak) {
533-
bak.name = bakName
534-
$.setjson(globalbaks, $.KEY_globalBaks)
527+
const { id: backupId, name: backupName } = $.toObj($request.body)
528+
const backups = $.getjson($.KEY_backups, [])
529+
const backup = backups.find((b) => b.id === backupId)
530+
if (backup) {
531+
backup.name = backupName
532+
$.setjson(backups, $.KEY_backups)
535533
}
536-
$.json = { globalbaks }
534+
$.json = getBoxData()
537535
}
538536

539537
async function apiRevertGlobalBak() {
540-
const { id: bakId } = $.toObj($request.body)
541-
const globalbaks = $.getjson($.KEY_globalBaks, [])
542-
const bak = globalbaks.find((b) => b.id === bakId)
543-
if (bak && bak.bak) {
538+
const { id: bakcupId } = $.toObj($request.body)
539+
const backup = $.getjson(bakcupId)
540+
if (backup) {
544541
const {
545542
chavy_boxjs_sysCfgs,
546543
chavy_boxjs_sysApps,
@@ -549,7 +546,7 @@ async function apiRevertGlobalBak() {
549546
chavy_boxjs_cur_sessions,
550547
chavy_boxjs_app_subCaches,
551548
...datas
552-
} = bak.bak
549+
} = backup
553550
$.setdata(JSON.stringify(chavy_boxjs_sessions), $.KEY_sessions)
554551
$.setdata(JSON.stringify(chavy_boxjs_userCfgs), $.KEY_usercfgs)
555552
$.setdata(JSON.stringify(chavy_boxjs_cur_sessions), $.KEY_cursessions)
@@ -558,34 +555,34 @@ async function apiRevertGlobalBak() {
558555
Object.keys(datas).forEach((datkey) => $.setdata(isNull(datas[datkey]) ? '' : `${datas[datkey]}`, datkey))
559556
}
560557
const boxdata = getBoxData()
561-
boxdata.globalbaks = globalbaks
562558
$.json = boxdata
563559
}
564560

565561
async function apiSaveGlobalBak() {
566-
let globalbaks = $.getjson($.KEY_globalBaks, [])
567-
const bak = $.toObj($request.body)
568-
const box = getBoxData()
569-
const bakdata = {}
570-
bakdata['chavy_boxjs_userCfgs'] = box.usercfgs
571-
bakdata['chavy_boxjs_sessions'] = box.sessions
572-
bakdata['chavy_boxjs_cur_sessions'] = box.curSessions
573-
bakdata['chavy_boxjs_app_subCaches'] = box.appSubCaches
574-
Object.assign(bakdata, box.datas)
575-
bak.bak = bakdata
576-
globalbaks.push(bak)
577-
if (!$.setjson(globalbaks, $.KEY_globalBaks)) {
578-
globalbaks = $.getjson($.KEY_globalBaks, [])
579-
}
580-
$.json = { globalbaks }
562+
const backups = $.getjson($.KEY_backups, [])
563+
const boxdata = getBoxData()
564+
const backup = $.toObj($request.body)
565+
const backupData = {}
566+
backupData['chavy_boxjs_userCfgs'] = boxdata.usercfgs
567+
backupData['chavy_boxjs_sessions'] = boxdata.sessions
568+
backupData['chavy_boxjs_cur_sessions'] = boxdata.curSessions
569+
backupData['chavy_boxjs_app_subCaches'] = boxdata.appSubCaches
570+
Object.assign(backupData, boxdata.datas)
571+
backups.push(backup)
572+
$.setjson(backups, $.KEY_backups)
573+
$.setjson(backupData, backup.id)
574+
$.json = getBoxData()
581575
}
582576

583577
async function apiImpGlobalBak() {
584-
let globalbaks = $.getjson($.KEY_globalBaks, [])
585-
const bak = $.toObj($request.body)
586-
globalbaks.push(bak)
587-
$.setjson(globalbaks, $.KEY_globalBaks)
588-
$.json = { globalbaks }
578+
const backups = $.getjson($.KEY_backups, [])
579+
const backup = $.toObj($request.body)
580+
const backupData = backup.bak
581+
delete backup.bak
582+
backups.push(backup)
583+
$.setjson(backups, $.KEY_backups)
584+
$.setjson(backupData, backup.id)
585+
$.json = getBoxData()
589586
}
590587

591588
async function apiRunScript() {
@@ -697,6 +694,44 @@ function upgradeUserData() {
697694
}
698695
}
699696

697+
/**
698+
* 升级备份数据
699+
*
700+
* 升级前: 把所有备份都存到一个持久化空间
701+
* 升级后: 把每个备份都独立存到一个空间, `$.KEY_backups` 仅记录必要的数据索引
702+
*/
703+
function upgradeGlobalBaks() {
704+
let oldbaks = $.getdata($.KEY_globalBaks)
705+
let newbaks = $.getjson($.KEY_backups, [])
706+
const isEmpty = (bak) => [undefined, null, ''].includes(bak)
707+
const isExistsInNew = (backupId) => newbaks.find((bak) => bak.id === backupId)
708+
709+
// 存在旧备份数据时, 升级备份数据格式
710+
if (!isEmpty(oldbaks)) {
711+
oldbaks = JSON.parse(oldbaks)
712+
oldbaks.forEach((bak) => {
713+
if (isEmpty(bak)) return
714+
if (isEmpty(bak.bak)) return
715+
if (isExistsInNew(bak.id)) return
716+
717+
console.log(`正在迁移: ${bak.name}`)
718+
const backupId = bak.id
719+
const backupData = bak.bak
720+
721+
// 删除旧的备份数据, 仅保留索引信息
722+
delete bak.bak
723+
newbaks.push(bak)
724+
725+
// 提取旧备份数据, 存入独立的持久化空间
726+
$.setjson(backupData, backupId)
727+
})
728+
$.setjson(newbaks, $.KEY_backups)
729+
}
730+
731+
// 清空所有旧备份的数据
732+
$.setdata('', $.KEY_globalBaks)
733+
}
734+
700735
/**
701736
* ===================================
702737
* 结束类函数

box/release/box.release.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
{
22
"releases": [
3+
{
4+
"version": "0.7.88",
5+
"tags": ["beta"],
6+
"author": "@chavyleung",
7+
"msg": "feat(boxjs): store each backup separately",
8+
"notes": [
9+
{
10+
"name": "优化",
11+
"descs": ["独立存储每份备份数据, 避免备份数据过大问题"]
12+
}
13+
]
14+
},
315
{
416
"version": "0.7.87",
517
"tags": ["beta"],

box/release/box.release.tf.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
{
22
"releases": [
3+
{
4+
"version": "0.7.88",
5+
"tags": ["beta"],
6+
"author": "@chavyleung",
7+
"msg": "feat(boxjs): store each backup separately",
8+
"notes": [
9+
{
10+
"name": "优化",
11+
"descs": ["独立存储每份备份数据, 避免备份数据过大问题"]
12+
}
13+
]
14+
},
315
{
416
"version": "0.7.87",
517
"tags": ["beta"],

box/scripts/boxjs.revert.baks.js

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
0