11<script lang="ts" setup>
2- import { JeTransparentButton } from ' jetv-ui'
2+ import { JeLink , JeLoader , JeTransparentButton } from ' jetv-ui'
33import { useI18n } from ' vue-i18n'
44
55import { useProjectsStore } from ' ~/stores/projectsStore'
@@ -9,10 +9,43 @@ import { version } from '../../../../package.json'
99const { t } = useI18n ()
1010const projects = useProjectsStore ()
1111
12+ const checking = ref (false )
13+ const updateInfo = ref <{
14+ hasUpdate: boolean
15+ currentVersion: string
16+ latestVersion? : string
17+ url? : string
18+ name? : string
19+ notes? : string
20+ publishedAt? : string
21+ error? : string
22+ } | null >(null )
23+
1224function openGithub() {
1325 window .api .openExternal (' https://github.com/MidnightCrowing/CodeNest' )
1426}
1527
28+ function openRelease(url ? : string ) {
29+ const target = url || ' https://github.com/MidnightCrowing/CodeNest/releases/latest'
30+ window .api .openExternal (target )
31+ }
32+
33+ async function onCheckUpdate() {
34+ if (checking .value )
35+ return
36+ checking .value = true
37+ try {
38+ const res = await window .api .checkUpdate ()
39+ updateInfo .value = res
40+ }
41+ catch (e ) {
42+ updateInfo .value = { hasUpdate: false , currentVersion: version , error: String (e ) }
43+ }
44+ finally {
45+ checking .value = false
46+ }
47+ }
48+
1649async function importProjects() {
1750 await window .api .importProject ()
1851 await projects .loadProjects ()
@@ -32,9 +65,44 @@ function exportProjects() {
3265 {{ t('settings.about.title') }}
3366 </h3 >
3467
35- <div p =" y-5px" flex =" ~ items-center" gap =" 5px" >
36- <strong >{{ t('settings.about.version') }}: </strong >
37- <span > v{{ version }}</span >
68+ <div p =" y-5px" flex =" ~ row" gap =" 5px" >
69+ <strong >{{ t('settings.about.version.title') }}: </strong >
70+
71+ <div flex =" ~ col" gap =" 5px" >
72+ <span > v{{ version }}</span >
73+
74+ <div flex =" ~ row items-center" gap =" 8px" >
75+ <JeLink
76+ type =" internal"
77+ :disabled =" checking"
78+ @click =" onCheckUpdate"
79+ >
80+ {{ t('settings.about.version.check_update') }}
81+ </JeLink >
82+
83+ <template v-if =" checking " >
84+ <div flex =" ~ row items-center" gap =" 2px" >
85+ <JeLoader />
86+ <span text =" secondary" >{{ t('settings.about.version.checking_update') }}</span >
87+ </div >
88+ </template >
89+
90+ <template v-else-if =" updateInfo && ! updateInfo .hasUpdate && ! updateInfo .error " >
91+ <span text =" secondary" >{{ t('settings.about.version.is_latest') }}</span >
92+ </template >
93+
94+ <template v-else-if =" updateInfo && updateInfo .hasUpdate " >
95+ <JeLink type =" internal" @click =" openRelease(updateInfo.url)" >
96+ {{ t('settings.about.version.found_new') }}
97+ <span v-if =" updateInfo.latestVersion" >: v{{ updateInfo.latestVersion }}</span >
98+ </JeLink >
99+ </template >
100+
101+ <template v-else-if =" updateInfo && updateInfo .error " >
102+ <span text =" light:$red-5 dark:$red-5" >{{ updateInfo.error }}</span >
103+ </template >
104+ </div >
105+ </div >
38106 </div >
39107
40108 <div p =" y-5px" flex =" ~ items-center" gap =" 5px" >
@@ -44,7 +112,7 @@ function exportProjects() {
44112 flex =" ~ items-center" gap =" 5px"
45113 @click =" openGithub"
46114 >
47- <span i-custom:github text =" 17px" />
115+ <span class = " i-custom:github" text =" 17px" />
48116 GitHub
49117 </JeTransparentButton >
50118 </div >
@@ -57,15 +125,15 @@ function exportProjects() {
57125 flex =" ~ items-center" gap =" 5px"
58126 @click =" importProjects"
59127 >
60- <span i-custom:import text =" 17px" />
128+ <span class = " i-custom:import" text =" 17px" />
61129 {{ t('settings.about.import_export.import_desc') }}
62130 </JeTransparentButton >
63131 <JeTransparentButton
64132 type =" subtle"
65133 flex =" ~ items-center" gap =" 5px"
66134 @click =" exportProjects"
67135 >
68- <span i-custom:export text =" 17px" />
136+ <span class = " i-custom:export" text =" 17px" />
69137 {{ t('settings.about.import_export.export_desc') }}
70138 </JeTransparentButton >
71139 </div >
0 commit comments