mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-19 14:53:50 +02:00
move some shortcuts to tools
This commit is contained in:
@@ -442,6 +442,24 @@
|
|||||||
"inventory": "VRC+ Images & Inventory Management",
|
"inventory": "VRC+ Images & Inventory Management",
|
||||||
"inventory_description": "Manage VRC+ Images & Inventory"
|
"inventory_description": "Manage VRC+ Images & Inventory"
|
||||||
},
|
},
|
||||||
|
"shortcuts": {
|
||||||
|
"header": "Shortcuts",
|
||||||
|
"vrcx_data": "VRCX Data",
|
||||||
|
"vrcx_data_description": "Open the VRCX data folder",
|
||||||
|
"vrchat_data": "VRChat Data",
|
||||||
|
"vrchat_data_description": "Open the VRChat data folder",
|
||||||
|
"crash_dumps": "Crash Dumps",
|
||||||
|
"crash_dumps_description": "Open the VRChat crash dumps folder"
|
||||||
|
},
|
||||||
|
"system_tools": {
|
||||||
|
"header": "System Tools",
|
||||||
|
"vrchat_config": "VRChat Config",
|
||||||
|
"vrchat_config_description": "Open VRChat config.json settings",
|
||||||
|
"launch_options": "Launch Options",
|
||||||
|
"launch_options_description": "Edit VRChat launch options",
|
||||||
|
"registry_backup": "VRChat Registry Backup",
|
||||||
|
"registry_backup_description": "Create or restore a VRChat registry backup"
|
||||||
|
},
|
||||||
"other": {
|
"other": {
|
||||||
"header": "Other",
|
"header": "Other",
|
||||||
"edit_invite_message": "Edit Invite Messages",
|
"edit_invite_message": "Edit Invite Messages",
|
||||||
|
|||||||
@@ -19,25 +19,6 @@
|
|||||||
</ButtonGroup>
|
</ButtonGroup>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="options-container">
|
|
||||||
<span class="header">{{ t('view.settings.advanced.advanced.common_folders') }}</span>
|
|
||||||
<div class="options-container-item" style="margin-top: 15px">
|
|
||||||
<ButtonGroup>
|
|
||||||
<Button variant="outline" size="sm" @click="openVrcxAppDataFolder()">
|
|
||||||
<Folder />
|
|
||||||
VRCX Data
|
|
||||||
</Button>
|
|
||||||
<Button variant="outline" size="sm" @click="openVrcAppDataFolder()">
|
|
||||||
<Folder />
|
|
||||||
VRChat Data
|
|
||||||
</Button>
|
|
||||||
<Button variant="outline" size="sm" @click="openCrashVrcCrashDumps()">
|
|
||||||
<Folder />
|
|
||||||
Crash Dumps
|
|
||||||
</Button>
|
|
||||||
</ButtonGroup>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="options-container">
|
<div class="options-container">
|
||||||
<span class="sub-header">{{ t('view.settings.advanced.advanced.primary_password.header') }}</span>
|
<span class="sub-header">{{ t('view.settings.advanced.advanced.primary_password.header') }}</span>
|
||||||
<simple-switch
|
<simple-switch
|
||||||
@@ -384,12 +365,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Folder, Languages, Package, RefreshCcw, Settings, Trash2 } from 'lucide-vue-next';
|
import { Languages, Package, RefreshCcw, Settings, Trash2 } from 'lucide-vue-next';
|
||||||
import { computed, reactive, ref } from 'vue';
|
import { computed, reactive, ref } from 'vue';
|
||||||
import { Button } from '@/components/ui/button';
|
import { Button } from '@/components/ui/button';
|
||||||
import { ButtonGroup } from '@/components/ui/button-group';
|
import { ButtonGroup } from '@/components/ui/button-group';
|
||||||
import { storeToRefs } from 'pinia';
|
import { storeToRefs } from 'pinia';
|
||||||
import { toast } from 'vue-sonner';
|
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import VueJsonPretty from 'vue-json-pretty';
|
import VueJsonPretty from 'vue-json-pretty';
|
||||||
@@ -502,36 +482,6 @@
|
|||||||
|
|
||||||
const isLinux = computed(() => LINUX);
|
const isLinux = computed(() => LINUX);
|
||||||
|
|
||||||
function openVrcxAppDataFolder() {
|
|
||||||
AppApi.OpenVrcxAppDataFolder().then((result) => {
|
|
||||||
if (result) {
|
|
||||||
toast.success('Folder opened');
|
|
||||||
} else {
|
|
||||||
toast.error(t('message.file.folder_missing'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function openVrcAppDataFolder() {
|
|
||||||
AppApi.OpenVrcAppDataFolder().then((result) => {
|
|
||||||
if (result) {
|
|
||||||
toast.success('Folder opened');
|
|
||||||
} else {
|
|
||||||
toast.error(t('message.file.folder_missing'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function openCrashVrcCrashDumps() {
|
|
||||||
AppApi.OpenCrashVrcCrashDumps().then((result) => {
|
|
||||||
if (result) {
|
|
||||||
toast.success('Folder opened');
|
|
||||||
} else {
|
|
||||||
toast.error(t('message.file.folder_missing'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function openShortcutFolder() {
|
function openShortcutFolder() {
|
||||||
AppApi.OpenShortcutFolder();
|
AppApi.OpenShortcutFolder();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,28 +4,6 @@
|
|||||||
<span class="header">{{ t('view.tools.header') }}</span>
|
<span class="header">{{ t('view.tools.header') }}</span>
|
||||||
|
|
||||||
<div class="tool-categories">
|
<div class="tool-categories">
|
||||||
<div class="tool-category">
|
|
||||||
<div class="category-header" @click="toggleCategory('group')">
|
|
||||||
<ChevronDown
|
|
||||||
class="rotation-transition"
|
|
||||||
:class="{ 'is-rotated': categoryCollapsed['group'] }" />
|
|
||||||
<span class="category-title">{{ t('view.tools.group.header') }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="tools-grid" v-show="!categoryCollapsed['group']">
|
|
||||||
<Card class="tool-card p-0 gap-0">
|
|
||||||
<div class="tool-content" @click="showGroupCalendarDialog">
|
|
||||||
<div class="tool-icon text-2xl">
|
|
||||||
<CalendarDays />
|
|
||||||
</div>
|
|
||||||
<div class="tool-info">
|
|
||||||
<div class="tool-name">{{ t('view.tools.group.calendar') }}</div>
|
|
||||||
<div class="tool-description">{{ t('view.tools.group.calendar_description') }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tool-category">
|
<div class="tool-category">
|
||||||
<div class="category-header text-2xl" @click="toggleCategory('image')">
|
<div class="category-header text-2xl" @click="toggleCategory('image')">
|
||||||
<ChevronDown
|
<ChevronDown
|
||||||
@@ -60,6 +38,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tool-category">
|
||||||
|
<div class="category-header" @click="toggleCategory('shortcuts')">
|
||||||
|
<ChevronDown
|
||||||
|
class="rotation-transition"
|
||||||
|
:class="{ 'is-rotated': categoryCollapsed['shortcuts'] }" />
|
||||||
|
<span class="category-title">{{ t('view.tools.shortcuts.header') }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="tools-grid" v-show="!categoryCollapsed['shortcuts']">
|
||||||
<Card class="tool-card p-0 gap-0">
|
<Card class="tool-card p-0 gap-0">
|
||||||
<div class="tool-content" @click="openVrcPhotosFolder">
|
<div class="tool-content" @click="openVrcPhotosFolder">
|
||||||
<div class="tool-icon text-2xl">
|
<div class="tool-icon text-2xl">
|
||||||
@@ -88,6 +77,117 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
|
<Card class="tool-card p-0 gap-0">
|
||||||
|
<div class="tool-content" @click="openVrcxAppDataFolder">
|
||||||
|
<div class="tool-icon text-2xl">
|
||||||
|
<Folder />
|
||||||
|
</div>
|
||||||
|
<div class="tool-info">
|
||||||
|
<div class="tool-name">{{ t('view.tools.shortcuts.vrcx_data') }}</div>
|
||||||
|
<div class="tool-description">
|
||||||
|
{{ t('view.tools.shortcuts.vrcx_data_description') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
<Card class="tool-card p-0 gap-0">
|
||||||
|
<div class="tool-content" @click="openVrcAppDataFolder">
|
||||||
|
<div class="tool-icon text-2xl">
|
||||||
|
<Folder />
|
||||||
|
</div>
|
||||||
|
<div class="tool-info">
|
||||||
|
<div class="tool-name">{{ t('view.tools.shortcuts.vrchat_data') }}</div>
|
||||||
|
<div class="tool-description">
|
||||||
|
{{ t('view.tools.shortcuts.vrchat_data_description') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
<Card class="tool-card p-0 gap-0">
|
||||||
|
<div class="tool-content" @click="openCrashVrcCrashDumps">
|
||||||
|
<div class="tool-icon text-2xl">
|
||||||
|
<Folder />
|
||||||
|
</div>
|
||||||
|
<div class="tool-info">
|
||||||
|
<div class="tool-name">{{ t('view.tools.shortcuts.crash_dumps') }}</div>
|
||||||
|
<div class="tool-description">
|
||||||
|
{{ t('view.tools.shortcuts.crash_dumps_description') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tool-category">
|
||||||
|
<div class="category-header" @click="toggleCategory('system')">
|
||||||
|
<ChevronDown
|
||||||
|
class="rotation-transition"
|
||||||
|
:class="{ 'is-rotated': categoryCollapsed['system'] }" />
|
||||||
|
<span class="category-title">{{ t('view.tools.system_tools.header') }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="tools-grid" v-show="!categoryCollapsed['system']">
|
||||||
|
<Card class="tool-card p-0 gap-0">
|
||||||
|
<div class="tool-content" @click="showVRChatConfig">
|
||||||
|
<div class="tool-icon text-2xl">
|
||||||
|
<Settings />
|
||||||
|
</div>
|
||||||
|
<div class="tool-info">
|
||||||
|
<div class="tool-name">{{ t('view.tools.system_tools.vrchat_config') }}</div>
|
||||||
|
<div class="tool-description">
|
||||||
|
{{ t('view.tools.system_tools.vrchat_config_description') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
<Card class="tool-card p-0 gap-0">
|
||||||
|
<div class="tool-content" @click="showLaunchOptions">
|
||||||
|
<div class="tool-icon text-2xl">
|
||||||
|
<Settings />
|
||||||
|
</div>
|
||||||
|
<div class="tool-info">
|
||||||
|
<div class="tool-name">{{ t('view.tools.system_tools.launch_options') }}</div>
|
||||||
|
<div class="tool-description">
|
||||||
|
{{ t('view.tools.system_tools.launch_options_description') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
<Card class="tool-card p-0 gap-0">
|
||||||
|
<div class="tool-content" @click="showRegistryBackupDialog">
|
||||||
|
<div class="tool-icon text-2xl">
|
||||||
|
<Package />
|
||||||
|
</div>
|
||||||
|
<div class="tool-info">
|
||||||
|
<div class="tool-name">{{ t('view.tools.system_tools.registry_backup') }}</div>
|
||||||
|
<div class="tool-description">
|
||||||
|
{{ t('view.tools.system_tools.registry_backup_description') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tool-category">
|
||||||
|
<div class="category-header" @click="toggleCategory('group')">
|
||||||
|
<ChevronDown
|
||||||
|
class="rotation-transition"
|
||||||
|
:class="{ 'is-rotated': categoryCollapsed['group'] }" />
|
||||||
|
<span class="category-title">{{ t('view.tools.group.header') }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="tools-grid" v-show="!categoryCollapsed['group']">
|
||||||
|
<Card class="tool-card p-0 gap-0">
|
||||||
|
<div class="tool-content" @click="showGroupCalendarDialog">
|
||||||
|
<div class="tool-icon text-2xl">
|
||||||
|
<CalendarDays />
|
||||||
|
</div>
|
||||||
|
<div class="tool-info">
|
||||||
|
<div class="tool-name">{{ t('view.tools.group.calendar') }}</div>
|
||||||
|
<div class="tool-description">{{ t('view.tools.group.calendar_description') }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -205,9 +305,12 @@
|
|||||||
CalendarDays,
|
CalendarDays,
|
||||||
Camera,
|
Camera,
|
||||||
ChevronDown,
|
ChevronDown,
|
||||||
|
Folder,
|
||||||
FolderOpen,
|
FolderOpen,
|
||||||
Images,
|
Images,
|
||||||
MessageSquare,
|
MessageSquare,
|
||||||
|
Package,
|
||||||
|
Settings,
|
||||||
SquarePen,
|
SquarePen,
|
||||||
UserCheck
|
UserCheck
|
||||||
} from 'lucide-vue-next';
|
} from 'lucide-vue-next';
|
||||||
@@ -219,6 +322,9 @@
|
|||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import { useFriendStore, useGalleryStore } from '../../stores';
|
import { useFriendStore, useGalleryStore } from '../../stores';
|
||||||
|
import { useAdvancedSettingsStore } from '../../stores/settings/advanced';
|
||||||
|
import { useLaunchStore } from '../../stores/launch';
|
||||||
|
import { useVrcxStore } from '../../stores/vrcx';
|
||||||
|
|
||||||
const GroupCalendarDialog = defineAsyncComponent(() => import('./dialogs/GroupCalendarDialog.vue'));
|
const GroupCalendarDialog = defineAsyncComponent(() => import('./dialogs/GroupCalendarDialog.vue'));
|
||||||
const NoteExportDialog = defineAsyncComponent(() => import('./dialogs/NoteExportDialog.vue'));
|
const NoteExportDialog = defineAsyncComponent(() => import('./dialogs/NoteExportDialog.vue'));
|
||||||
@@ -233,10 +339,15 @@
|
|||||||
|
|
||||||
const { showGalleryPage } = useGalleryStore();
|
const { showGalleryPage } = useGalleryStore();
|
||||||
const { friends } = storeToRefs(useFriendStore());
|
const { friends } = storeToRefs(useFriendStore());
|
||||||
|
const { showVRChatConfig } = useAdvancedSettingsStore();
|
||||||
|
const { showLaunchOptions } = useLaunchStore();
|
||||||
|
const { showRegistryBackupDialog } = useVrcxStore();
|
||||||
|
|
||||||
const categoryCollapsed = ref({
|
const categoryCollapsed = ref({
|
||||||
group: false,
|
group: false,
|
||||||
image: false,
|
image: false,
|
||||||
|
shortcuts: false,
|
||||||
|
system: false,
|
||||||
user: false,
|
user: false,
|
||||||
other: false
|
other: false
|
||||||
});
|
});
|
||||||
@@ -300,6 +411,36 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openVrcxAppDataFolder() {
|
||||||
|
AppApi.OpenVrcxAppDataFolder().then((result) => {
|
||||||
|
if (result) {
|
||||||
|
toast.success('Folder opened');
|
||||||
|
} else {
|
||||||
|
toast.error(t('message.file.folder_missing'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function openVrcAppDataFolder() {
|
||||||
|
AppApi.OpenVrcAppDataFolder().then((result) => {
|
||||||
|
if (result) {
|
||||||
|
toast.success('Folder opened');
|
||||||
|
} else {
|
||||||
|
toast.error(t('message.file.folder_missing'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function openCrashVrcCrashDumps() {
|
||||||
|
AppApi.OpenCrashVrcCrashDumps().then((result) => {
|
||||||
|
if (result) {
|
||||||
|
toast.success('Folder opened');
|
||||||
|
} else {
|
||||||
|
toast.error(t('message.file.folder_missing'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
Reference in New Issue
Block a user