diff --git a/nextcloud_backup/backend/.vscode/settings.json b/nextcloud_backup/backend/.vscode/settings.json index 3553e38..fb7c830 100644 --- a/nextcloud_backup/backend/.vscode/settings.json +++ b/nextcloud_backup/backend/.vscode/settings.json @@ -8,4 +8,5 @@ "javascript.inlayHints.propertyDeclarationTypes.enabled": true, "javascript.inlayHints.parameterNames.suppressWhenArgumentMatchesName": true, "javascript.inlayHints.parameterNames.enabled": "literals", -} \ No newline at end of file + "editor.formatOnSave": true +} diff --git a/nextcloud_backup/frontend/.vscode/extensions.json b/nextcloud_backup/frontend/.vscode/extensions.json index c0a6e5a..a7cea0b 100644 --- a/nextcloud_backup/frontend/.vscode/extensions.json +++ b/nextcloud_backup/frontend/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] + "recommendations": ["Vue.volar"] } diff --git a/nextcloud_backup/frontend/components.d.ts b/nextcloud_backup/frontend/components.d.ts index bb0df4b..dfaebcb 100644 --- a/nextcloud_backup/frontend/components.d.ts +++ b/nextcloud_backup/frontend/components.d.ts @@ -26,6 +26,7 @@ declare module 'vue' { NavbarComponent: typeof import('./src/components/NavbarComponent.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] + StatusComponent: typeof import('./src/components/StatusComponent.vue')['default'] WebdavConfigForm: typeof import('./src/components/settings/WebdavConfigForm.vue')['default'] WebdavConfigMenu: typeof import('./src/components/settings/WebdavConfigMenu.vue')['default'] } diff --git a/nextcloud_backup/frontend/package.json b/nextcloud_backup/frontend/package.json index abcb725..8b74d08 100644 --- a/nextcloud_backup/frontend/package.json +++ b/nextcloud_backup/frontend/package.json @@ -21,6 +21,7 @@ }, "devDependencies": { "@babel/types": "^7.23.0", + "@types/luxon": "^3.4.2", "@types/node": "^20.10.0", "@vitejs/plugin-vue": "^4.5.0", "@vue/eslint-config-typescript": "^12.0.0", @@ -46,4 +47,4 @@ "vue-tsc": "^1.8.0" }, "packageManager": "pnpm@8.15.3" -} +} \ No newline at end of file diff --git a/nextcloud_backup/frontend/pnpm-lock.yaml b/nextcloud_backup/frontend/pnpm-lock.yaml index 7b1d4f1..ad98dbf 100644 --- a/nextcloud_backup/frontend/pnpm-lock.yaml +++ b/nextcloud_backup/frontend/pnpm-lock.yaml @@ -37,6 +37,9 @@ devDependencies: '@babel/types': specifier: ^7.23.0 version: 7.23.9 + '@types/luxon': + specifier: ^3.4.2 + version: 3.4.2 '@types/node': specifier: ^20.10.0 version: 20.11.19 @@ -526,6 +529,10 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true + /@types/luxon@3.4.2: + resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} + dev: true + /@types/node@20.11.19: resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} dependencies: diff --git a/nextcloud_backup/frontend/src/App.vue b/nextcloud_backup/frontend/src/App.vue index 50cc6f7..8e19274 100644 --- a/nextcloud_backup/frontend/src/App.vue +++ b/nextcloud_backup/frontend/src/App.vue @@ -6,6 +6,11 @@ + + + + + diff --git a/nextcloud_backup/frontend/src/components/AlertManager.vue b/nextcloud_backup/frontend/src/components/AlertManager.vue index 160b031..bdd66de 100644 --- a/nextcloud_backup/frontend/src/components/AlertManager.vue +++ b/nextcloud_backup/frontend/src/components/AlertManager.vue @@ -11,9 +11,7 @@ class="mb-2" > - - {{ alert.message }} - + alertList.value.length > 0); z-index: 99999; } -@/store/alert \ No newline at end of file +@/store/alert diff --git a/nextcloud_backup/frontend/src/components/StatusComponent.vue b/nextcloud_backup/frontend/src/components/StatusComponent.vue new file mode 100644 index 0000000..c853201 --- /dev/null +++ b/nextcloud_backup/frontend/src/components/StatusComponent.vue @@ -0,0 +1,130 @@ + + + diff --git a/nextcloud_backup/frontend/src/components/homeAssistant/HaList.vue b/nextcloud_backup/frontend/src/components/homeAssistant/HaList.vue index c05d893..802b849 100644 --- a/nextcloud_backup/frontend/src/components/homeAssistant/HaList.vue +++ b/nextcloud_backup/frontend/src/components/homeAssistant/HaList.vue @@ -63,7 +63,9 @@ function refreshBackup() { getBackups().then((value) => { backups.value = value; loading.value = false; - }); + }).catch(()=> { + loading.value = false; + }) } refreshBackup(); diff --git a/nextcloud_backup/frontend/src/services/statusService.ts b/nextcloud_backup/frontend/src/services/statusService.ts new file mode 100644 index 0000000..ce62dea --- /dev/null +++ b/nextcloud_backup/frontend/src/services/statusService.ts @@ -0,0 +1,7 @@ +import type { WebdavBackup } from "@/types/webdav"; +import kyClient from "./kyClient"; +import { Status } from "@/types/status"; + +export function getStatus() { + return kyClient.get("status").json(); +} diff --git a/nextcloud_backup/frontend/src/types/status.ts b/nextcloud_backup/frontend/src/types/status.ts new file mode 100644 index 0000000..ac4bf32 --- /dev/null +++ b/nextcloud_backup/frontend/src/types/status.ts @@ -0,0 +1,32 @@ +import type { DateTime } from "luxon"; + +export enum States { + IDLE = "IDLE", + BKUP_CREATION = "BKUP_CREATION", + BKUP_DOWNLOAD_HA = "BKUP_DOWNLOAD_HA", + BKUP_DOWNLOAD_CLOUD = "BKUP_DOWNLOAD_CLOUD", + BKUP_UPLOAD_HA = "BKUP_UPLOAD_HA", + BKUP_UPLOAD_CLOUD = "BKUP_UPLOAD_CLOUD", + STOP_ADDON = "STOP_ADDON", + START_ADDON = "START_ADDON", +} + +export interface Status { + status: States; + progress?: number; + last_backup: { + success?: boolean; + last_success?: string; + message?: string; + }; + next_backup?: string; + webdav: { + logged_in: boolean; + folder_created: boolean; + last_check: string; + }; + hass: { + ok: boolean; + last_check: string; + }; +}