From aabb29ad0515196993a05b7792e4fdbb187744fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Wed, 23 Feb 2022 14:58:33 +0000 Subject: [PATCH] Resolve "Error: Database not created" --- src/app/app.component.ts | 12 +++++----- src/app/app.module.ts | 2 -- .../schedule/schedule-sync.service.ts | 22 +++++++++-------- .../page/calendar-sync-settings-keys.ts | 24 +++++++++++++++++++ .../page/calendar-sync-settings.component.ts | 17 +++++++------ 5 files changed, 50 insertions(+), 27 deletions(-) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index e7b98b3c..2a43b6f6 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -18,10 +18,10 @@ import {App, URLOpenListenerEvent} from '@capacitor/app'; import {Platform, ToastController} from '@ionic/angular'; import {SettingsProvider} from './modules/settings/settings.provider'; import {AuthHelperService} from './modules/auth/auth-helper.service'; -import {ScheduleSyncService} from './modules/background/schedule/schedule-sync.service'; import {environment} from '../environments/environment'; import {StatusBar, Style} from '@capacitor/status-bar'; import {Capacitor} from '@capacitor/core'; +import {ScheduleSyncService} from './modules/background/schedule/schedule-sync.service'; /** * TODO @@ -53,7 +53,6 @@ export class AppComponent implements AfterContentInit { * @param zone The angular zone * @param authHelper Helper service for OAuth providers * @param toastController Toast controller - * @param scheduleSync TODO */ constructor( private readonly platform: Platform, @@ -62,13 +61,14 @@ export class AppComponent implements AfterContentInit { private readonly zone: NgZone, private readonly authHelper: AuthHelperService, private readonly toastController: ToastController, - private readonly scheduleSync: ScheduleSyncService, + private readonly scheduleSyncService: ScheduleSyncService, ) { void this.initializeApp(); } - ngAfterContentInit() { - void this.scheduleSync.enable(); + ngAfterContentInit(): void { + this.scheduleSyncService.init(); + void this.scheduleSyncService.enable(); } /** @@ -86,10 +86,10 @@ export class AppComponent implements AfterContentInit { }); }); this.platform.ready().then(async () => { - await this.authInit(); if (Capacitor.isNativePlatform()) { await StatusBar.setStyle({style: Style.Dark}); } + await this.authInit(); // set order of categories in settings this.settingsProvider.setCategoriesOrder([ diff --git a/src/app/app.module.ts b/src/app/app.module.ts index a117f6f4..dd3ad7ab 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -60,7 +60,6 @@ import {DebugDataCollectorService} from './modules/data/debug-data-collector.ser import {Browser} from './util/browser.factory'; import {browserFactory} from './util/browser.factory'; import {AuthModule} from './modules/auth/auth.module'; -import {ScheduleSyncService} from './modules/background/schedule/schedule-sync.service'; import {BackgroundModule} from './modules/background/background.module'; import {LibraryModule} from './modules/library/library.module'; import {StorageProvider} from './modules/storage/storage.provider'; @@ -190,7 +189,6 @@ export function createTranslateLoader(http: HttpClient) { SettingsProvider, ConfigProvider, TranslateService, - ScheduleSyncService, ], useFactory: initializerFactory, }, diff --git a/src/app/modules/background/schedule/schedule-sync.service.ts b/src/app/modules/background/schedule/schedule-sync.service.ts index ac69eb11..173d5d80 100644 --- a/src/app/modules/background/schedule/schedule-sync.service.ts +++ b/src/app/modules/background/schedule/schedule-sync.service.ts @@ -35,7 +35,7 @@ import {hashStringToInt} from './hash'; import { CALENDAR_NOTIFICATIONS_ENABLED_KEY, CALENDAR_SYNC_ENABLED_KEY, - CALENDAR_SYNC_SETTINGS_KEY, + getCalendarSetting, } from '../../settings/page/calendar-sync-settings-keys'; import {filter} from 'rxjs/operators'; import {Capacitor} from '@capacitor/core'; @@ -49,7 +49,9 @@ export class ScheduleSyncService implements OnDestroy { private dateFormatPipe: DateFormatPipe, private durationFormatPipe: DurationPipe, private calendar: CalendarService, - ) { + ) {} + + init() { this.scheduleProvider.uuids$ .pipe(filter(uuids => uuids?.length > 0)) .subscribe(uuids => { @@ -67,14 +69,13 @@ export class ScheduleSyncService implements OnDestroy { } private async isSyncEnabled(): Promise { - return await this.storageProvider.get( - `${CALENDAR_SYNC_SETTINGS_KEY}.${CALENDAR_SYNC_ENABLED_KEY}`, - ); + return getCalendarSetting(this.storageProvider, CALENDAR_SYNC_ENABLED_KEY); } private async isNotificationsEnabled(): Promise { - return await this.storageProvider.get( - `${CALENDAR_SYNC_SETTINGS_KEY}.${CALENDAR_NOTIFICATIONS_ENABLED_KEY}`, + return getCalendarSetting( + this.storageProvider, + CALENDAR_NOTIFICATIONS_ENABLED_KEY, ); } @@ -84,9 +85,10 @@ export class ScheduleSyncService implements OnDestroy { await BackgroundFetch.stop(); if ( - [this.isSyncEnabled, this.isNotificationsEnabled].some( - async it => await it(), - ) + [ + this.isSyncEnabled.bind(this), + this.isNotificationsEnabled.bind(this), + ].some(async it => await it()) ) { const status = await BackgroundFetch.configure( { diff --git a/src/app/modules/settings/page/calendar-sync-settings-keys.ts b/src/app/modules/settings/page/calendar-sync-settings-keys.ts index 95258c58..6affba83 100644 --- a/src/app/modules/settings/page/calendar-sync-settings-keys.ts +++ b/src/app/modules/settings/page/calendar-sync-settings-keys.ts @@ -13,9 +13,33 @@ * this program. If not, see . */ +import {StorageProvider} from '../../storage/storage.provider'; + export const CALENDAR_SYNC_SETTINGS_KEY = 'calendarSettings'; export const CALENDAR_SYNC_ENABLED_KEY = 'sync'; export const CALENDAR_NOTIFICATIONS_ENABLED_KEY = 'notifications'; export type CALENDAR_SYNC_KEYS = | typeof CALENDAR_SYNC_ENABLED_KEY | typeof CALENDAR_NOTIFICATIONS_ENABLED_KEY; + +/** + * + */ +export async function getCalendarSetting( + storageProvider: StorageProvider, + key: CALENDAR_SYNC_KEYS, + defaultValue = false, +): Promise { + try { + return await storageProvider.get(calendarSettingStorageKey(key)); + } catch { + return defaultValue; + } +} + +/** + * + */ +export function calendarSettingStorageKey(key: string): string { + return `${CALENDAR_SYNC_SETTINGS_KEY}.${key}`; +} diff --git a/src/app/modules/settings/page/calendar-sync-settings.component.ts b/src/app/modules/settings/page/calendar-sync-settings.component.ts index e324ab6e..a5738198 100644 --- a/src/app/modules/settings/page/calendar-sync-settings.component.ts +++ b/src/app/modules/settings/page/calendar-sync-settings.component.ts @@ -33,7 +33,8 @@ import { CALENDAR_NOTIFICATIONS_ENABLED_KEY, CALENDAR_SYNC_ENABLED_KEY, CALENDAR_SYNC_KEYS, - CALENDAR_SYNC_SETTINGS_KEY, + calendarSettingStorageKey, + getCalendarSetting, } from './calendar-sync-settings-keys'; @Component({ @@ -71,10 +72,11 @@ export class CalendarSyncSettingsComponent implements OnInit { ); } - async getSetting(key: CALENDAR_SYNC_KEYS) { - return (await this.storageProvider.get( - `${CALENDAR_SYNC_SETTINGS_KEY}.${key}`, - )) as boolean; + async getSetting( + key: CALENDAR_SYNC_KEYS, + defaultValue = false, + ): Promise { + return getCalendarSetting(this.storageProvider, key, defaultValue); } async syncCalendar(sync: boolean) { @@ -98,10 +100,7 @@ export class CalendarSyncSettingsComponent implements OnInit { async setSetting(settings: Partial>) { await Promise.all( map(settings, (setting, key) => - this.storageProvider.put( - `${CALENDAR_SYNC_SETTINGS_KEY}.${key}`, - setting, - ), + this.storageProvider.put(calendarSettingStorageKey(key), setting), ), );