diff --git a/components.d.ts b/components.d.ts index dd1589584a..6cacfb3216 100644 --- a/components.d.ts +++ b/components.d.ts @@ -1,10 +1,10 @@ /* eslint-disable */ -/* prettier-ignore */ // @ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 export {} +/* prettier-ignore */ declare module 'vue' { export interface GlobalComponents { ActionCommandPromptDialog: typeof import('./src/components/common/ActionCommandPromptDialog.vue')['default'] @@ -85,22 +85,15 @@ declare module 'vue' { VDialog: typeof import('vuetify/lib')['VDialog'] VDivider: typeof import('vuetify/lib')['VDivider'] VExpandTransition: typeof import('vuetify/lib')['VExpandTransition'] - VExpansionPanel: typeof import('vuetify/lib')['VExpansionPanel'] - VExpansionPanelContent: typeof import('vuetify/lib')['VExpansionPanelContent'] - VExpansionPanelHeader: typeof import('vuetify/lib')['VExpansionPanelHeader'] - VExpansionPanels: typeof import('vuetify/lib')['VExpansionPanels'] - VFadeTransition: typeof import('vuetify/lib')['VFadeTransition'] VFooter: typeof import('vuetify/lib')['VFooter'] VForm: typeof import('vuetify/lib')['VForm'] VIcon: typeof import('vuetify/lib')['VIcon'] - VItemGroup: typeof import('vuetify/lib')['VItemGroup'] VLayout: typeof import('vuetify/lib')['VLayout'] VList: typeof import('vuetify/lib')['VList'] VListGroup: typeof import('vuetify/lib')['VListGroup'] VListItem: typeof import('vuetify/lib')['VListItem'] VListItemAction: typeof import('vuetify/lib')['VListItemAction'] VListItemContent: typeof import('vuetify/lib')['VListItemContent'] - VListItemGroup: typeof import('vuetify/lib')['VListItemGroup'] VListItemIcon: typeof import('vuetify/lib')['VListItemIcon'] VListItemSubtitle: typeof import('vuetify/lib')['VListItemSubtitle'] VListItemTitle: typeof import('vuetify/lib')['VListItemTitle'] @@ -115,7 +108,6 @@ declare module 'vue' { VRow: typeof import('vuetify/lib')['VRow'] VSelect: typeof import('vuetify/lib')['VSelect'] VSheet: typeof import('vuetify/lib')['VSheet'] - VSimpleCheckbox: typeof import('vuetify/lib')['VSimpleCheckbox'] VSimpleTable: typeof import('vuetify/lib')['VSimpleTable'] VSlider: typeof import('vuetify/lib')['VSlider'] VSnackbar: typeof import('vuetify/lib')['VSnackbar'] @@ -133,12 +125,8 @@ declare module 'vue' { VTabsItems: typeof import('vuetify/lib')['VTabsItems'] VTextarea: typeof import('vuetify/lib')['VTextarea'] VTextField: typeof import('vuetify/lib')['VTextField'] - VTimeline: typeof import('vuetify/lib')['VTimeline'] - VTimelineItem: typeof import('vuetify/lib')['VTimelineItem'] VToolbar: typeof import('vuetify/lib')['VToolbar'] - VToolbarItems: typeof import('vuetify/lib')['VToolbarItems'] VToolbarTitle: typeof import('vuetify/lib')['VToolbarTitle'] VTooltip: typeof import('vuetify/lib')['VTooltip'] - VVirtualScroll: typeof import('vuetify/lib')['VVirtualScroll'] } } diff --git a/src/init.ts b/src/init.ts index 6d1add72e1..272a866fec 100644 --- a/src/init.ts +++ b/src/init.ts @@ -10,6 +10,7 @@ import sanitizeEndpoint from './util/sanitize-endpoint' import webSocketWrapper from './util/web-socket-wrapper' import promiseAny from './util/promise-any' import sleep from './util/sleep' +import { isFluiddContent } from '@/util/fluidd-content' // Load API configuration /** @@ -176,6 +177,7 @@ export const appInit = async (apiConfig?: ApiConfig, hostConfig?: HostConfig): P // Load any configuration we may have in moonrakers db let apiConnected = true let apiAuthenticated = true + let configLoaded = false for (const { NAMESPACE, ROOTS } of Object.values(Globals.MOONRAKER_DB)) { if (!apiConnected && !apiAuthenticated) { break @@ -207,6 +209,7 @@ export const appInit = async (apiConfig?: ApiConfig, hostConfig?: HostConfig): P if (!value) { try { await httpClientActions.serverDatabaseItemPost(NAMESPACE, root.name, {}) + configLoaded = true } catch (e) { consola.debug('Error creating database item', e) } @@ -219,6 +222,36 @@ export const appInit = async (apiConfig?: ApiConfig, hostConfig?: HostConfig): P await Promise.all(promises) } + // if no moonraker config has been loaded check for a default template inside .fluidd-theme folder + if (!configLoaded) { + try { + const defaultTemplateFile = apiConfig.apiUrl + '/server/files/config/.fluidd-theme/default.json' + if (defaultTemplateFile?.length > 0) { + const backupData = await (await fetch(defaultTemplateFile)).json() + if (backupData) { + if (isFluiddContent>('settings-backup', backupData)) { + for (const key in backupData.data) { + if (key !== 'webcams') { + await httpClientActions.serverDatabaseItemPost('fluidd', key, backupData.data[key]) + if (key === 'charts') await store.dispatch(Globals.MOONRAKER_DB.fluidd.ROOTS.charts.dispatch, backupData.data[key] || {}) + if (key === 'console') await store.dispatch(Globals.MOONRAKER_DB.fluidd.ROOTS.console.dispatch, backupData.data[key] || {}) + if (key === 'layout') await store.dispatch(Globals.MOONRAKER_DB.fluidd.ROOTS.layout.dispatch, backupData.data[key] || {}) + if (key === 'macros') await store.dispatch(Globals.MOONRAKER_DB.fluidd.ROOTS.macros.dispatch, backupData.data[key] || {}) + if (key === 'uiSettings') await store.dispatch(Globals.MOONRAKER_DB.fluidd.ROOTS.uiSettings.dispatch, backupData.data[key] || {}) + } + } + } else { + console.error('Error loading default settings') + } + } else { + console.error('Error loading default settings') + } + } + } catch (e) { + console.error('Error loading default settings: ' + e) + } + } + // apiConfig could have empty strings, meaning we have no valid connection. await store.dispatch('init', { apiConfig, hostConfig, apiConnected })