From 00a8573030010e3d972ccb90679572bffb66bcbd Mon Sep 17 00:00:00 2001 From: Bjoern Kimminich Date: Mon, 13 Jul 2020 22:28:20 +0200 Subject: [PATCH] Add preliminary implementation of local backup service --- frontend/src/app/Models/backup.model.ts | 11 +++++ .../app/Services/local-backup.service.spec.ts | 19 ++++++++ .../src/app/Services/local-backup.service.ts | 47 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 frontend/src/app/Models/backup.model.ts create mode 100644 frontend/src/app/Services/local-backup.service.spec.ts create mode 100644 frontend/src/app/Services/local-backup.service.ts diff --git a/frontend/src/app/Models/backup.model.ts b/frontend/src/app/Models/backup.model.ts new file mode 100644 index 00000000000..c5a6adf5f45 --- /dev/null +++ b/frontend/src/app/Models/backup.model.ts @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2014-2020 Bjoern Kimminich. + * SPDX-License-Identifier: MIT + */ + +export interface Backup { + continueCode?: string + language?: string + banners?: { welcomeBannerStatus?: string; cookieConsentStatus?: string } + scoreBoard?: { showOnlyTutorialChallenges?: string; displayedChallengeCategories?: string; displayedDifficulties?: string; showDisabledChallenges?: string; showSolvedChallenges?: string } +} diff --git a/frontend/src/app/Services/local-backup.service.spec.ts b/frontend/src/app/Services/local-backup.service.spec.ts new file mode 100644 index 00000000000..0275dda902e --- /dev/null +++ b/frontend/src/app/Services/local-backup.service.spec.ts @@ -0,0 +1,19 @@ +import { inject, TestBed } from '@angular/core/testing' + +import { LocalBackupService } from './local-backup.service' +import { CookieService } from 'ngx-cookie-service' + +describe('LocalBackupService', () => { + let service: LocalBackupService + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [CookieService] + }) + service = TestBed.inject(LocalBackupService) + }) + + it('should be created', inject([CookieService], (service: LocalBackupService) => { + expect(service).toBeTruthy() + })) +}) diff --git a/frontend/src/app/Services/local-backup.service.ts b/frontend/src/app/Services/local-backup.service.ts new file mode 100644 index 00000000000..bec30dcb887 --- /dev/null +++ b/frontend/src/app/Services/local-backup.service.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core' +import { Backup } from '../Models/backup.model' +import { CookieService } from 'ngx-cookie-service' + +@Injectable({ + providedIn: 'root' +}) +export class LocalBackupService { + + constructor (private cookieService: CookieService) { } + + save () { + const backup: Backup = { } + + backup.scoreBoard = { + displayedDifficulties: localStorage.getItem('displayedDifficulties'), + showSolvedChallenges: localStorage.getItem('showSolvedChallenges'), + showDisabledChallenges: localStorage.getItem('showDisabledChallenges'), + showOnlyTutorialChallenges: localStorage.getItem('showOnlyTutorialChallenges'), + displayedChallengeCategories: localStorage.getItem('displayedChallengeCategories') + } + backup.banners = { + welcomeBannerStatus: this.cookieService.get('welcomebanner_status'), + cookieConsentStatus: this.cookieService.get('cookieconsent_status') + } + backup.language = this.cookieService.get('language') + backup.continueCode = this.cookieService.get('continueCode') + + return JSON.stringify(backup) + } + + restore (backupData: string) { + const backup: Backup = JSON.parse(backupData) + + localStorage.setItem('displayedDifficulties', JSON.stringify(backup.scoreBoard.displayedDifficulties)) + localStorage.setItem('showSolvedChallenges', JSON.stringify(backup.scoreBoard.showSolvedChallenges)) + localStorage.setItem('showDisabledChallenges', JSON.stringify(backup.scoreBoard.showDisabledChallenges)) + localStorage.setItem('showOnlyTutorialChallenges', JSON.stringify(backup.scoreBoard.showOnlyTutorialChallenges)) + localStorage.setItem('displayedChallengeCategories', JSON.stringify(backup.scoreBoard.displayedChallengeCategories)) + let expires = new Date() + expires.setFullYear(expires.getFullYear() + 1) + this.cookieService.set('welcomebanner_status', JSON.stringify(backup.banners.welcomeBannerStatus), expires, '/') + this.cookieService.set('cookieconsent_status', JSON.stringify(backup.banners.cookieConsentStatus), expires, '/') + this.cookieService.set('language', JSON.stringify(backup.language), expires, '/') + this.cookieService.set('continueCode', JSON.stringify(backup.continueCode), expires, '/') + } +}