2023-06-27 15:53:29 +08:00
|
|
|
<script setup>
|
2023-07-02 03:25:57 +08:00
|
|
|
import ConnectionDialog from './components/dialogs/ConnectionDialog.vue'
|
2023-06-27 15:53:29 +08:00
|
|
|
import NewKeyDialog from './components/dialogs/NewKeyDialog.vue'
|
|
|
|
import PreferencesDialog from './components/dialogs/PreferencesDialog.vue'
|
|
|
|
import RenameKeyDialog from './components/dialogs/RenameKeyDialog.vue'
|
|
|
|
import SetTtlDialog from './components/dialogs/SetTtlDialog.vue'
|
|
|
|
import AddFieldsDialog from './components/dialogs/AddFieldsDialog.vue'
|
2023-06-28 00:47:44 +08:00
|
|
|
import AppContent from './AppContent.vue'
|
2023-07-02 16:52:07 +08:00
|
|
|
import GroupDialog from './components/dialogs/GroupDialog.vue'
|
2023-07-06 01:22:14 +08:00
|
|
|
import DeleteKeyDialog from './components/dialogs/DeleteKeyDialog.vue'
|
2024-03-14 00:40:39 +08:00
|
|
|
import { h, onMounted, ref, watch } from 'vue'
|
2023-07-13 15:46:12 +08:00
|
|
|
import usePreferencesStore from './stores/preferences.js'
|
|
|
|
import useConnectionStore from './stores/connections.js'
|
|
|
|
import { useI18n } from 'vue-i18n'
|
2024-03-14 00:40:39 +08:00
|
|
|
import { darkTheme, NButton, NSpace } from 'naive-ui'
|
2023-07-17 17:17:52 +08:00
|
|
|
import KeyFilterDialog from './components/dialogs/KeyFilterDialog.vue'
|
2023-08-02 17:57:39 +08:00
|
|
|
import { WindowSetDarkTheme, WindowSetLightTheme } from 'wailsjs/runtime/runtime.js'
|
2023-10-28 22:22:48 +08:00
|
|
|
import { darkThemeOverrides, themeOverrides } from '@/utils/theme.js'
|
2023-09-22 18:31:50 +08:00
|
|
|
import AboutDialog from '@/components/dialogs/AboutDialog.vue'
|
2023-11-02 18:17:54 +08:00
|
|
|
import FlushDbDialog from '@/components/dialogs/FlushDbDialog.vue'
|
2023-12-18 00:58:20 +08:00
|
|
|
import ExportKeyDialog from '@/components/dialogs/ExportKeyDialog.vue'
|
2023-12-27 15:44:08 +08:00
|
|
|
import ImportKeyDialog from '@/components/dialogs/ImportKeyDialog.vue'
|
2024-01-26 00:07:25 +08:00
|
|
|
import { Info } from 'wailsjs/go/services/systemService.js'
|
2024-02-03 15:06:23 +08:00
|
|
|
import DecoderDialog from '@/components/dialogs/DecoderDialog.vue'
|
2024-03-14 00:40:39 +08:00
|
|
|
import { enableTrack, loadModule, trackEvent } from '@/utils/analytics.js'
|
|
|
|
import { endsWith } from 'lodash'
|
2023-06-27 15:53:29 +08:00
|
|
|
|
2023-07-13 15:46:12 +08:00
|
|
|
const prefStore = usePreferencesStore()
|
|
|
|
const connectionStore = useConnectionStore()
|
|
|
|
const i18n = useI18n()
|
2023-09-05 14:43:43 +08:00
|
|
|
const initializing = ref(true)
|
2023-08-24 00:44:19 +08:00
|
|
|
onMounted(async () => {
|
2023-07-13 15:46:12 +08:00
|
|
|
try {
|
|
|
|
initializing.value = true
|
2023-08-28 11:38:09 +08:00
|
|
|
await prefStore.loadFontList()
|
2024-02-20 10:55:46 +08:00
|
|
|
await prefStore.loadBuildInDecoder()
|
2023-07-13 15:46:12 +08:00
|
|
|
await connectionStore.initConnections()
|
2023-08-20 15:45:20 +08:00
|
|
|
if (prefStore.autoCheckUpdate) {
|
|
|
|
prefStore.checkForUpdate()
|
|
|
|
}
|
2024-03-14 00:40:39 +08:00
|
|
|
loadModule(prefStore.general.allowTrack !== false).then(() => {
|
|
|
|
Info().then(({ data }) => {
|
|
|
|
if (endsWith(data.version, 'dev')) {
|
|
|
|
enableTrack(false)
|
|
|
|
} else {
|
|
|
|
trackEvent('startup', data, true)
|
|
|
|
}
|
|
|
|
})
|
2024-01-26 00:07:25 +08:00
|
|
|
})
|
2024-03-14 00:40:39 +08:00
|
|
|
|
|
|
|
// show greetings and user behavior tracking statements
|
|
|
|
if (!!!prefStore.behavior.welcomed) {
|
|
|
|
const n = $notification.show({
|
|
|
|
title: i18n.t('dialogue.welcome.title'),
|
|
|
|
content: i18n.t('preferences.general.track_tip') + '\n\n' + i18n.t('dialogue.welcome.content'),
|
|
|
|
// duration: 5000,
|
|
|
|
keepAliveOnHover: true,
|
|
|
|
closable: false,
|
|
|
|
meta: ' ',
|
|
|
|
action: () =>
|
|
|
|
h(
|
|
|
|
NSpace,
|
|
|
|
{},
|
|
|
|
{
|
|
|
|
default: () => [
|
|
|
|
h(
|
|
|
|
NButton,
|
|
|
|
{
|
|
|
|
secondary: true,
|
|
|
|
type: 'tertiary',
|
|
|
|
onClick: () => {
|
|
|
|
prefStore.setAsWelcomed(false)
|
|
|
|
n.destroy()
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
default: () => i18n.t('dialogue.welcome.reject'),
|
|
|
|
},
|
|
|
|
),
|
|
|
|
h(
|
|
|
|
NButton,
|
|
|
|
{
|
|
|
|
secondary: true,
|
|
|
|
type: 'primary',
|
|
|
|
onClick: () => {
|
|
|
|
prefStore.setAsWelcomed(true)
|
|
|
|
n.destroy()
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
default: () => i18n.t('dialogue.welcome.accept'),
|
|
|
|
},
|
|
|
|
),
|
|
|
|
],
|
|
|
|
},
|
|
|
|
),
|
|
|
|
})
|
|
|
|
}
|
2023-07-13 15:46:12 +08:00
|
|
|
} finally {
|
|
|
|
initializing.value = false
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2023-08-26 00:49:44 +08:00
|
|
|
// watch theme and dynamically switch
|
2023-08-24 00:44:19 +08:00
|
|
|
watch(
|
|
|
|
() => prefStore.isDark,
|
|
|
|
(isDark) => (isDark ? WindowSetDarkTheme() : WindowSetLightTheme()),
|
|
|
|
)
|
2023-08-26 00:49:44 +08:00
|
|
|
|
|
|
|
// watch language and dynamically switch
|
|
|
|
watch(
|
|
|
|
() => prefStore.general.language,
|
|
|
|
(lang) => (i18n.locale.value = prefStore.currentLanguage),
|
|
|
|
)
|
2023-06-27 15:53:29 +08:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
2023-07-13 15:46:12 +08:00
|
|
|
<n-config-provider
|
|
|
|
:inline-theme-disabled="true"
|
2023-09-22 18:31:50 +08:00
|
|
|
:locale="prefStore.themeLocale"
|
2023-08-24 00:44:19 +08:00
|
|
|
:theme="prefStore.isDark ? darkTheme : undefined"
|
2023-10-28 22:22:48 +08:00
|
|
|
:theme-overrides="prefStore.isDark ? darkThemeOverrides : themeOverrides"
|
2023-08-24 15:23:25 +08:00
|
|
|
class="fill-height">
|
2023-08-20 14:42:36 +08:00
|
|
|
<n-dialog-provider>
|
2023-09-05 14:43:43 +08:00
|
|
|
<app-content :loading="initializing" />
|
2023-06-27 15:53:29 +08:00
|
|
|
|
2023-08-20 14:42:36 +08:00
|
|
|
<!-- top modal dialogs -->
|
|
|
|
<connection-dialog />
|
|
|
|
<group-dialog />
|
|
|
|
<new-key-dialog />
|
|
|
|
<key-filter-dialog />
|
|
|
|
<add-fields-dialog />
|
|
|
|
<rename-key-dialog />
|
|
|
|
<delete-key-dialog />
|
2023-12-18 00:58:20 +08:00
|
|
|
<export-key-dialog />
|
2023-12-27 15:44:08 +08:00
|
|
|
<import-key-dialog />
|
2023-11-02 18:17:54 +08:00
|
|
|
<flush-db-dialog />
|
2023-08-20 14:42:36 +08:00
|
|
|
<set-ttl-dialog />
|
|
|
|
<preferences-dialog />
|
2024-02-03 15:06:23 +08:00
|
|
|
<decoder-dialog />
|
2023-09-22 18:31:50 +08:00
|
|
|
<about-dialog />
|
2023-08-20 14:42:36 +08:00
|
|
|
</n-dialog-provider>
|
2023-06-27 15:53:29 +08:00
|
|
|
</n-config-provider>
|
|
|
|
</template>
|
|
|
|
|
2023-09-05 14:43:43 +08:00
|
|
|
<style lang="scss"></style>
|