+
+
+
+ {{ $t('dialog.server_stop.dialog_title') }}
+
+
+
+
+ {{ $t('dialog.server_stop.confirmation_message') }}
+
+
+
+
+
+
+ {{ $t('dialog.server_stop.button_cancel') }}
+ {{ $t('dialog.server_stop.button_confirm') }}
+
+
+
+
+
+ {{ snackText }}
+ {{ $t('common.close') }}
+
+
+
+
+
+
+
+
diff --git a/komga-webui/src/locales/en.json b/komga-webui/src/locales/en.json
index d5c9a8e52..315e676f4 100644
--- a/komga-webui/src/locales/en.json
+++ b/komga-webui/src/locales/en.json
@@ -313,6 +313,12 @@
"field_repeat_password": "Repeat new password",
"field_repeat_password_error": "Passwords must be identical."
},
+ "server_stop": {
+ "button_cancel": "Cancel",
+ "button_confirm": "Stop",
+ "confirmation_message": "Are you sure you want to stop Komga?",
+ "dialog_title": "Shutdown server"
+ },
"shortcut_help": {
"label_description": "Description",
"label_key": "Key"
@@ -417,6 +423,13 @@
"searchbox": {
"no_results": "No results"
},
+ "server": {
+ "server_management": {
+ "button_shutdown": "Shutdown",
+ "section_title": "Server Management"
+ },
+ "tab_title": "Server"
+ },
"server_settings": {
"server_settings": "Server Settings"
},
diff --git a/komga-webui/src/router.ts b/komga-webui/src/router.ts
index d53433791..a5302a8cb 100644
--- a/komga-webui/src/router.ts
+++ b/komga-webui/src/router.ts
@@ -62,7 +62,13 @@ const router = new Router({
path: '/settings/analysis',
name: 'settings-analysis',
beforeEnter: adminGuard,
- component: () => import(/* webpackChunkName: "settings-users" */ './views/SettingsMediaAnalysis.vue'),
+ component: () => import(/* webpackChunkName: "settings-analysis" */ './views/SettingsMediaAnalysis.vue'),
+ },
+ {
+ path: '/settings/server',
+ name: 'settings-server',
+ beforeEnter: adminGuard,
+ component: () => import(/* webpackChunkName: "settings-server" */ './views/SettingsServer.vue'),
},
],
},
diff --git a/komga-webui/src/services/actuator.service.ts b/komga-webui/src/services/actuator.service.ts
index f8232fe3d..0578b78da 100644
--- a/komga-webui/src/services/actuator.service.ts
+++ b/komga-webui/src/services/actuator.service.ts
@@ -1,4 +1,4 @@
-import { AxiosInstance } from 'axios'
+import {AxiosInstance} from 'axios'
const API_ACTUATOR = '/actuator'
@@ -20,4 +20,16 @@ export default class ActuatorService {
throw new Error(msg)
}
}
+
+ async shutdown () {
+ try {
+ await this.http.post(`${API_ACTUATOR}/shutdown`)
+ } catch (e) {
+ let msg = 'An error occurred while trying to shutdown server'
+ if (e.response.data.message) {
+ msg += `: ${e.response.data.message}`
+ }
+ throw new Error(msg)
+ }
+ }
}
diff --git a/komga-webui/src/views/Settings.vue b/komga-webui/src/views/Settings.vue
index 674a75c1d..b7bb84ad4 100644
--- a/komga-webui/src/views/Settings.vue
+++ b/komga-webui/src/views/Settings.vue
@@ -3,6 +3,7 @@