disable avatar DB log cleanup UI and functionality

This commit is contained in:
pa
2026-03-17 21:53:07 +09:00
parent ded9ce6da2
commit 1a16a2116a
5 changed files with 168 additions and 152 deletions

View File

@@ -839,7 +839,8 @@ export const useAuthStore = defineStore('Auth', () => {
*/
async function loginComplete() {
await database.initUserTables(userStore.currentUser.id);
advancedSettingsStore.runAvatarAutoCleanup(userStore.currentUser.id);
// [Disabled] Avatar DB log auto-cleanup on login
// advancedSettingsStore.runAvatarAutoCleanup(userStore.currentUser.id);
watchState.isLoggedIn = true;
AppApi.CheckGameRunning(); // restore state from hot-reload
}

View File

@@ -529,100 +529,103 @@ export const useAdvancedSettingsStore = defineStore('AdvancedSettings', () => {
);
}
async function setAvatarAutoCleanup(value) {
avatarAutoCleanup.value = value;
await configRepository.setString('VRCX_avatarAutoCleanup', value);
}
// [Disabled] Avatar DB log cleanup - setAvatarAutoCleanup
// async function setAvatarAutoCleanup(value) {
// avatarAutoCleanup.value = value;
// await configRepository.setString('VRCX_avatarAutoCleanup', value);
// }
/**
* @param {number|null} days - Number of days to keep. Null means delete all.
*/
async function purgeAvatarFeedData(days) {
let cutoffDate = null;
if (days !== null) {
const cutoff = new Date();
cutoff.setDate(cutoff.getDate() - days);
cutoffDate = cutoff.toJSON();
}
// /**
// * @param {number|null} days - Number of days to keep. Null means delete all.
// */
// [Disabled] Avatar DB log cleanup - purgeAvatarFeedData
// async function purgeAvatarFeedData(days) {
// let cutoffDate = null;
// if (days !== null) {
// const cutoff = new Date();
// cutoff.setDate(cutoff.getDate() - days);
// cutoffDate = cutoff.toJSON();
// }
//
// purgeInProgress.value = true;
// const msgBox = toast.warning(
// t(
// 'view.settings.advanced.advanced.database_cleanup.purge_in_progress'
// ),
// { duration: Infinity }
// );
//
// try {
// await database.purgeAvatarFeedData(cutoffDate);
// await database.vacuum();
// toast.dismiss(msgBox);
// toast.success(
// t(
// 'view.settings.advanced.advanced.database_cleanup.purge_complete'
// )
// );
// // Brief delay before restart to show success message
// await new Promise((resolve) =>
// setTimeout(resolve, 1500)
// );
// VRCXUpdaterStore.restartVRCX(false);
// } catch (err) {
// console.error(err);
// toast.dismiss(msgBox);
// toast.error(t('view.settings.advanced.advanced.database_cleanup.purge_failed', { error: err }));
// } finally {
// purgeInProgress.value = false;
// }
// }
purgeInProgress.value = true;
const msgBox = toast.warning(
t(
'view.settings.advanced.advanced.database_cleanup.purge_in_progress'
),
{ duration: Infinity }
);
try {
await database.purgeAvatarFeedData(cutoffDate);
await database.vacuum();
toast.dismiss(msgBox);
toast.success(
t(
'view.settings.advanced.advanced.database_cleanup.purge_complete'
)
);
// Brief delay before restart to show success message
await new Promise((resolve) =>
setTimeout(resolve, 1500)
);
VRCXUpdaterStore.restartVRCX(false);
} catch (err) {
console.error(err);
toast.dismiss(msgBox);
toast.error(t('view.settings.advanced.advanced.database_cleanup.purge_failed', { error: err }));
} finally {
purgeInProgress.value = false;
}
}
/**
* Run auto-cleanup on startup if configured and enough time has passed.
* Reads config directly from configRepository to avoid race condition
* with initAdvancedSettings not having completed yet.
* @param {string} userId - Current user ID for per-user cleanup tracking.
*/
async function runAvatarAutoCleanup(userId) {
const cleanupSetting = await configRepository.getString(
'VRCX_avatarAutoCleanup',
'Off'
);
if (cleanupSetting === 'Off') return;
const configKey = `VRCX_lastAvatarCleanupDate_${userId}`;
const lastCleanupStr = await configRepository.getString(
configKey,
''
);
const now = new Date();
if (lastCleanupStr) {
const lastCleanup = new Date(lastCleanupStr);
const daysSinceLastCleanup =
(now - lastCleanup) / (1000 * 60 * 60 * 24);
if (daysSinceLastCleanup < 7) return;
}
const days = parseInt(cleanupSetting, 10);
if (isNaN(days) || days <= 0) return;
const cutoff = new Date();
cutoff.setDate(cutoff.getDate() - days);
const cutoffDate = cutoff.toJSON();
try {
await database.purgeAvatarFeedData(cutoffDate);
await configRepository.setString(
configKey,
now.toJSON()
);
console.log(
`Auto-cleaned avatar feed data older than ${days} days`
);
} catch (err) {
console.error('Avatar auto-cleanup failed:', err);
}
}
// /**
// * Run auto-cleanup on startup if configured and enough time has passed.
// * Reads config directly from configRepository to avoid race condition
// * with initAdvancedSettings not having completed yet.
// * @param {string} userId - Current user ID for per-user cleanup tracking.
// */
// [Disabled] Avatar DB log cleanup - runAvatarAutoCleanup
// async function runAvatarAutoCleanup(userId) {
// const cleanupSetting = await configRepository.getString(
// 'VRCX_avatarAutoCleanup',
// 'Off'
// );
// if (cleanupSetting === 'Off') return;
//
// const configKey = `VRCX_lastAvatarCleanupDate_${userId}`;
// const lastCleanupStr = await configRepository.getString(
// configKey,
// ''
// );
// const now = new Date();
//
// if (lastCleanupStr) {
// const lastCleanup = new Date(lastCleanupStr);
// const daysSinceLastCleanup =
// (now - lastCleanup) / (1000 * 60 * 60 * 24);
// if (daysSinceLastCleanup < 7) return;
// }
//
// const days = parseInt(cleanupSetting, 10);
// if (isNaN(days) || days <= 0) return;
//
// const cutoff = new Date();
// cutoff.setDate(cutoff.getDate() - days);
// const cutoffDate = cutoff.toJSON();
//
// try {
// await database.purgeAvatarFeedData(cutoffDate);
// await configRepository.setString(
// configKey,
// now.toJSON()
// );
// console.log(
// `Auto-cleaned avatar feed data older than ${days} days`
// );
// } catch (err) {
// console.error('Avatar auto-cleanup failed:', err);
// }
// }
async function setSaveInstanceEmoji() {
saveInstanceEmoji.value = !saveInstanceEmoji.value;
@@ -1171,9 +1174,10 @@ export const useAdvancedSettingsStore = defineStore('AdvancedSettings', () => {
setProgressPieFilter,
setShowConfirmationOnSwitchAvatar,
setGameLogDisabled,
setAvatarAutoCleanup,
purgeAvatarFeedData,
runAvatarAutoCleanup,
// [Disabled] Avatar DB log cleanup exports
// setAvatarAutoCleanup,
// purgeAvatarFeedData,
// runAvatarAutoCleanup,
setUGCFolderPath,
cropPrintsChanged,
setAutoDeleteOldPrints,

View File

@@ -165,6 +165,7 @@
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.event') }} <span v-text="sqliteTableSizes.event"></span></span>
</div>
<!-- [Disabled] Avatar DB log cleanup UI - auto cleanup select & purge button & dialog
<SettingsItem
:label="t('view.settings.advanced.advanced.database_cleanup.auto_cleanup')"
:description="t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_description')">
@@ -190,8 +191,10 @@
{{ t('view.settings.advanced.advanced.database_cleanup.purge') }}
</Button>
</SettingsItem>
-->
</SettingsGroup>
<!-- [Disabled] Avatar DB log cleanup - purge dialog
<Dialog :open="isPurgeDialogVisible" @update:open="(open) => { if (!open) isPurgeDialogVisible = false; }">
<DialogContent class="x-dialog sm:max-w-md">
<DialogHeader>
@@ -236,6 +239,7 @@
</DialogFooter>
</DialogContent>
</Dialog>
-->
<SettingsGroup :title="t('view.settings.advanced_groups.diagnostics.header')">
<SettingsGroup :title="t('view.profile.game_info.header')">
@@ -294,13 +298,16 @@
</template>
<script setup>
import { RefreshCcw, Trash2, TriangleAlert } from 'lucide-vue-next';
import { RefreshCcw, Trash2 } from 'lucide-vue-next';
// [Disabled] Avatar DB log cleanup - unused imports
// import { TriangleAlert } from 'lucide-vue-next';
import { computed, reactive, ref } from 'vue';
import { Button } from '@/components/ui/button';
import { Switch } from '@/components/ui/switch';
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { Alert, AlertDescription } from '@/components/ui/alert';
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog';
// [Disabled] Avatar DB log cleanup - unused imports
// import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
// import { Alert, AlertDescription } from '@/components/ui/alert';
// import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -372,8 +379,9 @@
showConfirmationOnSwitchAvatar,
gameLogDisabled,
sqliteTableSizes,
avatarAutoCleanup,
purgeInProgress,
// [Disabled] Avatar DB log cleanup
// avatarAutoCleanup,
// purgeInProgress,
sentryErrorReporting
} = storeToRefs(advancedSettingsStore);
@@ -387,16 +395,18 @@
setEnableAppLauncherRunProcessOnce,
setShowConfirmationOnSwitchAvatar,
getSqliteTableSizes,
setAvatarAutoCleanup,
purgeAvatarFeedData,
// [Disabled] Avatar DB log cleanup
// setAvatarAutoCleanup,
// purgeAvatarFeedData,
promptAutoClearVRCXCacheFrequency,
setSentryErrorReporting
} = advancedSettingsStore;
const configTreeData = ref({});
const visits = ref(0);
const selectedPurgePeriod = ref('180');
const isPurgeDialogVisible = ref(false);
// [Disabled] Avatar DB log cleanup
// const selectedPurgePeriod = ref('180');
// const isPurgeDialogVisible = ref(false);
const cacheSize = reactive({
cachedUsers: 0,
@@ -409,14 +419,15 @@
const isLinux = computed(() => LINUX);
function handlePurge() {
const days =
selectedPurgePeriod.value === 'all'
? null
: parseInt(selectedPurgePeriod.value, 10);
isPurgeDialogVisible.value = false;
purgeAvatarFeedData(days);
}
// [Disabled] Avatar DB log cleanup - handlePurge
// function handlePurge() {
// const days =
// selectedPurgePeriod.value === 'all'
// ? null
// : parseInt(selectedPurgePeriod.value, 10);
// isPurgeDialogVisible.value = false;
// purgeAvatarFeedData(days);
// }
/**
*