mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-15 21:03:52 +02:00
276 lines
9.4 KiB
JavaScript
276 lines
9.4 KiB
JavaScript
import configRepository from '../repository/config.js';
|
|
import { baseClass, $app, API, $t, $utils } from './baseClass.js';
|
|
|
|
export default class extends baseClass {
|
|
constructor(_app, _API, _t) {
|
|
super(_app, _API, _t);
|
|
}
|
|
|
|
init() {}
|
|
|
|
_data = {
|
|
registryBackupDialog: {
|
|
visible: false
|
|
},
|
|
|
|
registryBackupTable: {
|
|
data: [],
|
|
tableProps: {
|
|
stripe: true,
|
|
size: 'mini',
|
|
defaultSort: {
|
|
prop: 'date',
|
|
order: 'descending'
|
|
}
|
|
},
|
|
layout: 'table'
|
|
}
|
|
};
|
|
|
|
_methods = {
|
|
showRegistryBackupDialog() {
|
|
this.$nextTick(() =>
|
|
$app.adjustDialogZ(this.$refs.registryBackupDialog.$el)
|
|
);
|
|
var D = this.registryBackupDialog;
|
|
D.visible = true;
|
|
this.updateRegistryBackupDialog();
|
|
},
|
|
|
|
async updateRegistryBackupDialog() {
|
|
var D = this.registryBackupDialog;
|
|
this.registryBackupTable.data = [];
|
|
if (!D.visible) {
|
|
return;
|
|
}
|
|
var backupsJson = await configRepository.getString(
|
|
'VRCX_VRChatRegistryBackups'
|
|
);
|
|
if (!backupsJson) {
|
|
backupsJson = JSON.stringify([]);
|
|
}
|
|
this.registryBackupTable.data = JSON.parse(backupsJson);
|
|
},
|
|
|
|
async promptVrcRegistryBackupName() {
|
|
var name = await this.$prompt(
|
|
'Enter a name for the backup',
|
|
'Backup Name',
|
|
{
|
|
confirmButtonText: 'Confirm',
|
|
cancelButtonText: 'Cancel',
|
|
inputPattern: /\S+/,
|
|
inputErrorMessage: 'Name is required',
|
|
inputValue: 'Backup'
|
|
}
|
|
);
|
|
if (name.action === 'confirm') {
|
|
this.backupVrcRegistry(name.value);
|
|
}
|
|
},
|
|
|
|
async backupVrcRegistry(name) {
|
|
var regJson = await AppApi.GetVRChatRegistry();
|
|
var newBackup = {
|
|
name,
|
|
date: new Date().toJSON(),
|
|
data: regJson
|
|
};
|
|
var backupsJson = await configRepository.getString(
|
|
'VRCX_VRChatRegistryBackups'
|
|
);
|
|
if (!backupsJson) {
|
|
backupsJson = JSON.stringify([]);
|
|
}
|
|
var backups = JSON.parse(backupsJson);
|
|
backups.push(newBackup);
|
|
await configRepository.setString(
|
|
'VRCX_VRChatRegistryBackups',
|
|
JSON.stringify(backups)
|
|
);
|
|
await this.updateRegistryBackupDialog();
|
|
},
|
|
|
|
async deleteVrcRegistryBackup(row) {
|
|
var backups = this.registryBackupTable.data;
|
|
$app.removeFromArray(backups, row);
|
|
await configRepository.setString(
|
|
'VRCX_VRChatRegistryBackups',
|
|
JSON.stringify(backups)
|
|
);
|
|
await this.updateRegistryBackupDialog();
|
|
},
|
|
|
|
restoreVrcRegistryBackup(row) {
|
|
this.$confirm('Continue? Restore Backup', 'Confirm', {
|
|
confirmButtonText: 'Confirm',
|
|
cancelButtonText: 'Cancel',
|
|
type: 'warning',
|
|
callback: (action) => {
|
|
if (action !== 'confirm') {
|
|
return;
|
|
}
|
|
var data = JSON.stringify(row.data);
|
|
AppApi.SetVRChatRegistry(data)
|
|
.then(() => {
|
|
this.$message({
|
|
message: 'VRC registry settings restored',
|
|
type: 'success'
|
|
});
|
|
})
|
|
.catch((e) => {
|
|
console.error(e);
|
|
this.$message({
|
|
message: `Failed to restore VRC registry settings, check console for full error: ${e}`,
|
|
type: 'error'
|
|
});
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
saveVrcRegistryBackupToFile(row) {
|
|
this.downloadAndSaveJson(row.name, row.data);
|
|
},
|
|
|
|
restoreVrcRegistryFromFile(json) {
|
|
try {
|
|
var data = JSON.parse(json);
|
|
if (!data || typeof data !== 'object') {
|
|
throw new Error('Invalid JSON');
|
|
}
|
|
// quick check to make sure it's a valid registry backup
|
|
for (var key in data) {
|
|
var value = data[key];
|
|
if (
|
|
typeof value !== 'object' ||
|
|
typeof value.type !== 'number' ||
|
|
typeof value.data === 'undefined'
|
|
) {
|
|
throw new Error('Invalid JSON');
|
|
}
|
|
}
|
|
AppApi.SetVRChatRegistry(json)
|
|
.then(() => {
|
|
this.$message({
|
|
message: 'VRC registry settings restored',
|
|
type: 'success'
|
|
});
|
|
})
|
|
.catch((e) => {
|
|
console.error(e);
|
|
this.$message({
|
|
message: `Failed to restore VRC registry settings, check console for full error: ${e}`,
|
|
type: 'error'
|
|
});
|
|
});
|
|
} catch {
|
|
this.$message({
|
|
message: 'Invalid JSON',
|
|
type: 'error'
|
|
});
|
|
}
|
|
},
|
|
|
|
deleteVrcRegistry() {
|
|
this.$confirm('Continue? Delete VRC Registry Settings', 'Confirm', {
|
|
confirmButtonText: 'Confirm',
|
|
cancelButtonText: 'Cancel',
|
|
type: 'warning',
|
|
callback: (action) => {
|
|
if (action !== 'confirm') {
|
|
return;
|
|
}
|
|
AppApi.DeleteVRChatRegistryFolder().then(() => {
|
|
this.$message({
|
|
message: 'VRC registry settings deleted',
|
|
type: 'success'
|
|
});
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
clearVrcRegistryDialog() {
|
|
this.registryBackupTable.data = [];
|
|
},
|
|
|
|
async checkAutoBackupRestoreVrcRegistry() {
|
|
if (!this.vrcRegistryAutoBackup) {
|
|
return;
|
|
}
|
|
|
|
// check for auto restore
|
|
var hasVRChatRegistryFolder =
|
|
await AppApi.HasVRChatRegistryFolder();
|
|
if (!hasVRChatRegistryFolder) {
|
|
var lastBackupDate = await configRepository.getString(
|
|
'VRCX_VRChatRegistryLastBackupDate'
|
|
);
|
|
var lastRestoreCheck = await configRepository.getString(
|
|
'VRCX_VRChatRegistryLastRestoreCheck'
|
|
);
|
|
if (
|
|
!lastBackupDate ||
|
|
(lastRestoreCheck &&
|
|
lastBackupDate &&
|
|
lastRestoreCheck === lastBackupDate)
|
|
) {
|
|
// only ask to restore once and when backup is present
|
|
return;
|
|
}
|
|
// popup message about auto restore
|
|
this.$alert(
|
|
$t('dialog.registry_backup.restore_prompt'),
|
|
$t('dialog.registry_backup.header')
|
|
);
|
|
this.showRegistryBackupDialog();
|
|
await AppApi.FocusWindow();
|
|
await configRepository.setString(
|
|
'VRCX_VRChatRegistryLastRestoreCheck',
|
|
lastBackupDate
|
|
);
|
|
} else {
|
|
await this.autoBackupVrcRegistry();
|
|
}
|
|
},
|
|
|
|
async autoBackupVrcRegistry() {
|
|
var date = new Date();
|
|
var lastBackupDate = await configRepository.getString(
|
|
'VRCX_VRChatRegistryLastBackupDate'
|
|
);
|
|
if (lastBackupDate) {
|
|
var lastBackup = new Date(lastBackupDate);
|
|
var diff = date.getTime() - lastBackup.getTime();
|
|
var diffDays = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
if (diffDays < 7) {
|
|
return;
|
|
}
|
|
}
|
|
var backupsJson = await configRepository.getString(
|
|
'VRCX_VRChatRegistryBackups'
|
|
);
|
|
if (!backupsJson) {
|
|
backupsJson = JSON.stringify([]);
|
|
}
|
|
var backups = JSON.parse(backupsJson);
|
|
backups.forEach((backup) => {
|
|
if (backup.name === 'Auto Backup') {
|
|
// remove old auto backup
|
|
$app.removeFromArray(backups, backup);
|
|
}
|
|
});
|
|
await configRepository.setString(
|
|
'VRCX_VRChatRegistryBackups',
|
|
JSON.stringify(backups)
|
|
);
|
|
this.backupVrcRegistry('Auto Backup');
|
|
await configRepository.setString(
|
|
'VRCX_VRChatRegistryLastBackupDate',
|
|
date.toJSON()
|
|
);
|
|
}
|
|
};
|
|
}
|