diff --git a/backend/middlewares/AdminMWs.ts b/backend/middlewares/AdminMWs.ts index 6e4ed263..1cadb8d0 100644 --- a/backend/middlewares/AdminMWs.ts +++ b/backend/middlewares/AdminMWs.ts @@ -32,6 +32,10 @@ export class AdminMWs { //only updating explicitly set config (not saving config set by the diagnostics) const original = Config.original(); original.Server.database = databaseSettings; + if (databaseSettings.type == DatabaseType.memory) { + original.Client.Sharing.enabled = false; + original.Client.Search.enabled = false; + } original.save(); await ConfigDiagnostics.runDiagnostics(); Logger.info(LOG_TAG, "new config:"); @@ -46,7 +50,10 @@ export class AdminMWs { return next(); } catch (err) { - return next(new ErrorDTO(ErrorCodes.SETTINGS_ERROR, "ErrorDTO saving database settings", err)); + if (err instanceof Error) { + return next(new ErrorDTO(ErrorCodes.SETTINGS_ERROR, "Error while saving database settings: " + err.toString(), err)); + } + return next(new ErrorDTO(ErrorCodes.SETTINGS_ERROR, "Error while saving database settings", err)); } } diff --git a/backend/middlewares/GalleryMWs.ts b/backend/middlewares/GalleryMWs.ts index 952960e7..cbd5c7bd 100644 --- a/backend/middlewares/GalleryMWs.ts +++ b/backend/middlewares/GalleryMWs.ts @@ -37,7 +37,7 @@ export class GalleryMWs { return next(); } catch (err) { - return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "ErrorDTO during listing the directory", err)); + return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "Error during listing the directory", err)); } } @@ -108,7 +108,7 @@ export class GalleryMWs { req.resultPipe = new ContentWrapper(null, result); return next(); } catch (err) { - return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "ErrorDTO during searching", err)); + return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "Error during searching", err)); } } @@ -128,7 +128,7 @@ export class GalleryMWs { req.resultPipe = new ContentWrapper(null, result); return next(); } catch (err) { - return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "ErrorDTO during searching", err)); + return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "Error during searching", err)); } } @@ -144,7 +144,7 @@ export class GalleryMWs { req.resultPipe = await ObjectManagerRepository.getInstance().SearchManager.autocomplete(req.params.text); return next(); } catch (err) { - return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "ErrorDTO during searching", err)); + return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "Error during searching", err)); } } diff --git a/backend/middlewares/SharingMWs.ts b/backend/middlewares/SharingMWs.ts index 67e1b123..b4f40706 100644 --- a/backend/middlewares/SharingMWs.ts +++ b/backend/middlewares/SharingMWs.ts @@ -26,7 +26,7 @@ export class SharingMWs { return next(); } catch (err) { - return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "ErrorDTO during retrieving sharing link", err)); + return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "Error during retrieving sharing link", err)); } } @@ -68,7 +68,7 @@ export class SharingMWs { return next(); } catch (err) { - return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "ErrorDTO during creating sharing link", err)); + return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "Error during creating sharing link", err)); } } @@ -95,7 +95,7 @@ export class SharingMWs { return next(); } catch (err) { - return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "ErrorDTO during creating sharing link", err)); + return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, "Error during creating sharing link", err)); } } diff --git a/backend/middlewares/thumbnail/ThumbnailGeneratorMWs.ts b/backend/middlewares/thumbnail/ThumbnailGeneratorMWs.ts index 0dbe000e..4de320ea 100644 --- a/backend/middlewares/thumbnail/ThumbnailGeneratorMWs.ts +++ b/backend/middlewares/thumbnail/ThumbnailGeneratorMWs.ts @@ -162,7 +162,7 @@ export class ThumbnailGeneratorMWs { return next(); } } catch (error) { - return next(new ErrorDTO(ErrorCodes.THUMBNAIL_GENERATION_ERROR, "ErrorDTO during generating thumbnail", error)); + return next(new ErrorDTO(ErrorCodes.THUMBNAIL_GENERATION_ERROR, "Error during generating thumbnail", error)); } } diff --git a/backend/model/ConfigDiagnostics.ts b/backend/model/ConfigDiagnostics.ts index 5e7cfc8e..40d33d02 100644 --- a/backend/model/ConfigDiagnostics.ts +++ b/backend/model/ConfigDiagnostics.ts @@ -47,7 +47,7 @@ export class ConfigDiagnostics { await new Promise((resolve, reject) => { fs.access(folder, fs.constants.W_OK, (err) => { if (err) { - reject({message: "ErrorDTO during getting write access to temp folder", error: err.toString()}); + reject({message: "Error during getting write access to temp folder", error: err.toString()}); } }); resolve(); @@ -61,7 +61,7 @@ export class ConfigDiagnostics { } fs.access(folder, fs.constants.R_OK, (err) => { if (err) { - reject({message: "ErrorDTO during getting read access to images folder", error: err.toString()}); + reject({message: "Error during getting read access to images folder", error: err.toString()}); } }); resolve(); @@ -117,8 +117,8 @@ export class ConfigDiagnostics { await ConfigDiagnostics.testDatabase(Config.Server.database); } catch (err) { Logger.warn(LOG_TAG, "[MYSQL error]", err); - Logger.warn(LOG_TAG, "ErrorDTO during initializing mysql falling back temporally to memory DB"); - NotificationManager.warning("ErrorDTO during initializing mysql falling back temporally to memory DB", err); + Logger.warn(LOG_TAG, "Error during initializing mysql falling back temporally to memory DB"); + NotificationManager.warning("Error during initializing mysql falling back temporally to memory DB", err); Config.setDatabaseType(DatabaseType.memory); } } diff --git a/common/config/private/PrivateConfigClass.ts b/common/config/private/PrivateConfigClass.ts index 6897ef45..ee577f45 100644 --- a/common/config/private/PrivateConfigClass.ts +++ b/common/config/private/PrivateConfigClass.ts @@ -37,8 +37,6 @@ export class PrivateConfigClass extends PublicConfigClass implements IPrivateCon this.Server.database.type = type; if (type === DatabaseType.memory) { this.Client.Search.enabled = false; - this.Client.Search.instantSearchEnabled = false; - this.Client.Search.autocompleteEnabled = false; this.Client.Sharing.enabled = false; } } diff --git a/frontend/app/admin/admin.component.html b/frontend/app/admin/admin.component.html index d976fcf0..a59ab382 100644 --- a/frontend/app/admin/admin.component.html +++ b/frontend/app/admin/admin.component.html @@ -20,14 +20,35 @@ To dismiss these notifications, restart the server. - - +
+
+ +
+ + +
+
+
+ - - - - - - + + + + + + diff --git a/frontend/app/admin/admin.component.ts b/frontend/app/admin/admin.component.ts index 5c678925..a1e7b40d 100644 --- a/frontend/app/admin/admin.component.ts +++ b/frontend/app/admin/admin.component.ts @@ -11,6 +11,8 @@ import {NavigationService} from "../model/navigation.service"; }) export class AdminComponent implements OnInit { + simplifiedMode = true; + constructor(private _authService: AuthenticationService, private _navigation: NavigationService, public notificationService: NotificationService) { diff --git a/frontend/app/settings/_abstract/abstract.settings.component.ts b/frontend/app/settings/_abstract/abstract.settings.component.ts index abcee424..0b273ae2 100644 --- a/frontend/app/settings/_abstract/abstract.settings.component.ts +++ b/frontend/app/settings/_abstract/abstract.settings.component.ts @@ -1,4 +1,4 @@ -import {OnDestroy, OnInit, ViewChild} from "@angular/core"; +import {Input, OnChanges, OnDestroy, OnInit, Output, ViewChild} from "@angular/core"; import {AuthenticationService} from "../../model/network/authentication.service"; import {UserRoles} from "../../../../common/entities/UserDTO"; import {Utils} from "../../../../common/Utils"; @@ -6,23 +6,44 @@ import {ErrorDTO} from "../../../../common/entities/Error"; import {NotificationService} from "../../model/notification.service"; import {NavigationService} from "../../model/navigation.service"; import {AbstractSettingsService} from "./abstract.settings.service"; +import {IPrivateConfig} from "../../../../common/config/private/IPrivateConfig"; -export abstract class SettingsComponent implements OnInit, OnDestroy { +export abstract class SettingsComponent implements OnInit, OnDestroy, OnChanges { + + @Input() + public simplifiedMode: boolean = true; + + @ViewChild('settingsForm') + form: HTMLFormElement; + + @Output('hasAvailableSettings') + hasAvailableSettings: boolean = true; - @ViewChild('settingsForm') form; public inProgress = false; public error: string = null; public changed: boolean = false; private subscription = null; + public settings: T = {}; + public original: T = {}; + constructor(private name, private _authService: AuthenticationService, private _navigation: NavigationService, public _settingsService: AbstractSettingsService, - protected notification: NotificationService) { + protected notification: NotificationService, + private sliceFN: (s: IPrivateConfig) => T) { + this._settingsService.Settings.subscribe(this.onNewSettings); + this.onNewSettings(this._settingsService._settingsService.settings.value); } + onNewSettings = (s) => { + this.settings = Utils.clone(this.sliceFN(s)); + this.original = Utils.clone(this.settings); + this.ngOnChanges(); + }; + ngOnInit() { if (!this._authService.isAuthenticated() || this._authService.user.value.role < UserRoles.Admin) { @@ -32,10 +53,16 @@ export abstract class SettingsComponent implements OnInit, OnDestroy { this.getSettings(); this.subscription = this.form.valueChanges.subscribe((data) => { - this.changed = !Utils.equalsFilter(this._settingsService.settings, this._settingsService.original); + this.changed = !Utils.equalsFilter(this.settings, this.original); }); + } + ngOnChanges(): void { + this.hasAvailableSettings = (this._settingsService.isSupported() || !this.simplifiedMode); + } + + ngOnDestroy() { if (this.subscription != null) { this.subscription.unsubscribe(); @@ -56,7 +83,7 @@ export abstract class SettingsComponent implements OnInit, OnDestroy { this.inProgress = true; this.error = ""; try { - await this._settingsService.updateSettings(this._settingsService.settings); + await this._settingsService.updateSettings(this.settings); await this.getSettings(); this.notification.success(this.name + ' settings saved', "Success"); this.inProgress = false; diff --git a/frontend/app/settings/_abstract/abstract.settings.service.ts b/frontend/app/settings/_abstract/abstract.settings.service.ts index bec2cfa7..129e5684 100644 --- a/frontend/app/settings/_abstract/abstract.settings.service.ts +++ b/frontend/app/settings/_abstract/abstract.settings.service.ts @@ -1,20 +1,13 @@ -import {Utils} from "../../../../common/Utils"; import {SettingsService} from "../settings.service"; -import {IPrivateConfig} from "../../../../common/config/private/IPrivateConfig"; export abstract class AbstractSettingsService { - public settings: T = {}; - public original: T = {}; - constructor(protected _settingsService: SettingsService, private sliceFN: (s: IPrivateConfig) => T) { - this.original = Utils.clone(this.settings); - this._settingsService.settings.subscribe(this.onNewSettings); - this.onNewSettings(this._settingsService.settings.value); + constructor(public _settingsService: SettingsService) { + } - onNewSettings = (s) => { - this.settings = Utils.clone(this.sliceFN(s)); - this.original = Utils.clone(this.settings); - }; + get Settings() { + return this._settingsService.settings; + } public getSettings(): Promise { diff --git a/frontend/app/settings/basic/basic.settings.component.html b/frontend/app/settings/basic/basic.settings.component.html index 2fc600a5..25bcb2dd 100644 --- a/frontend/app/settings/basic/basic.settings.component.html +++ b/frontend/app/settings/basic/basic.settings.component.html @@ -7,16 +7,16 @@ -
+
-
+
Port number. Port 80 is usually what you need.
@@ -35,18 +35,18 @@
Images are loaded from this folder (read permission required)
-
+
If you access the page form local network its good to know the public url for creating sharing link
diff --git a/frontend/app/settings/basic/basic.settings.component.ts b/frontend/app/settings/basic/basic.settings.component.ts index ad837f6c..40716549 100644 --- a/frontend/app/settings/basic/basic.settings.component.ts +++ b/frontend/app/settings/basic/basic.settings.component.ts @@ -21,7 +21,12 @@ export class BasicSettingsComponent extends SettingsComponent { _navigation: NavigationService, _settingsService: BasicSettingsService, notification: NotificationService) { - super("Basic", _authService, _navigation, _settingsService, notification); + super("Basic", _authService, _navigation, _settingsService, notification, s => ({ + port: s.Server.port, + imagesFolder: s.Server.imagesFolder, + applicationTitle: s.Client.applicationTitle, + publicUrl: s.Client.publicUrl + })); } public async save(): Promise { diff --git a/frontend/app/settings/basic/basic.settings.service.ts b/frontend/app/settings/basic/basic.settings.service.ts index cb294f1b..7b4b4c0a 100644 --- a/frontend/app/settings/basic/basic.settings.service.ts +++ b/frontend/app/settings/basic/basic.settings.service.ts @@ -8,12 +8,7 @@ import {BasicConfigDTO} from "../../../../common/entities/settings/BasicConfigDT export class BasicSettingsService extends AbstractSettingsService { constructor(private _networkService: NetworkService, _settingsService: SettingsService) { - super(_settingsService, s => ({ - port: s.Server.port, - imagesFolder: s.Server.imagesFolder, - applicationTitle: s.Client.applicationTitle, - publicUrl: s.Client.publicUrl - })); + super(_settingsService); } diff --git a/frontend/app/settings/database/database.settings.component.html b/frontend/app/settings/database/database.settings.component.html index b00baf4d..b269161d 100644 --- a/frontend/app/settings/database/database.settings.component.html +++ b/frontend/app/settings/database/database.settings.component.html @@ -6,20 +6,20 @@

Type:

- - +

MySQL settings:

+ [(ngModel)]="settings.mysql.host" name="host" required> + [(ngModel)]="settings.mysql.database" name="database" required> + [(ngModel)]="settings.mysql.username" name="username"> + [(ngModel)]="settings.mysql.password" name="password">
diff --git a/frontend/app/settings/database/database.settings.component.ts b/frontend/app/settings/database/database.settings.component.ts index 8d411be6..1ee3b81c 100644 --- a/frontend/app/settings/database/database.settings.component.ts +++ b/frontend/app/settings/database/database.settings.component.ts @@ -23,7 +23,7 @@ export class DatabaseSettingsComponent extends SettingsComponent _navigation: NavigationService, _settingsService: DatabaseSettingsService, notification: NotificationService) { - super("Database", _authService, _navigation, _settingsService, notification); + super("Database", _authService, _navigation, _settingsService, notification, s => s.Server.database); } ngOnInit() { diff --git a/frontend/app/settings/database/database.settings.service.ts b/frontend/app/settings/database/database.settings.service.ts index 75f7eacd..10642405 100644 --- a/frontend/app/settings/database/database.settings.service.ts +++ b/frontend/app/settings/database/database.settings.service.ts @@ -8,7 +8,7 @@ import {SettingsService} from "../settings.service"; export class DatabaseSettingsService extends AbstractSettingsService { constructor(private _networkService: NetworkService, _settingsService: SettingsService) { - super(_settingsService, s => s.Server.database); + super(_settingsService); } diff --git a/frontend/app/settings/map/map.settings.component.html b/frontend/app/settings/map/map.settings.component.html index a8662bd5..b078f251 100644 --- a/frontend/app/settings/map/map.settings.component.html +++ b/frontend/app/settings/map/map.settings.component.html @@ -13,7 +13,7 @@ [switch-disabled]="inProgress" [switch-handle-width]="'100'" [switch-label-width]="'20'" - [(ngModel)]="_settingsService.settings.enabled"> + [(ngModel)]="settings.enabled">
@@ -22,8 +22,8 @@ To show the images on a map, google api key is need diff --git a/frontend/app/settings/map/map.settings.component.ts b/frontend/app/settings/map/map.settings.component.ts index 4fd90de3..1fe83ccc 100644 --- a/frontend/app/settings/map/map.settings.component.ts +++ b/frontend/app/settings/map/map.settings.component.ts @@ -19,7 +19,7 @@ export class MapSettingsComponent extends SettingsComponent_settingsService, notification); + super("Map", _authService, _navigation, _settingsService, notification, s => s.Client.Map); } diff --git a/frontend/app/settings/map/map.settings.service.ts b/frontend/app/settings/map/map.settings.service.ts index 25410431..7e7b10cd 100644 --- a/frontend/app/settings/map/map.settings.service.ts +++ b/frontend/app/settings/map/map.settings.service.ts @@ -8,7 +8,7 @@ import {AbstractSettingsService} from "../_abstract/abstract.settings.service"; export class MapSettingsService extends AbstractSettingsService { constructor(private _networkService: NetworkService, _settingsService: SettingsService) { - super(_settingsService, s => s.Client.Map); + super(_settingsService); } diff --git a/frontend/app/settings/other/other.settings.component.html b/frontend/app/settings/other/other.settings.component.html index 7f930b99..c4ee8376 100644 --- a/frontend/app/settings/other/other.settings.component.html +++ b/frontend/app/settings/other/other.settings.component.html @@ -20,7 +20,7 @@ [switch-on-text]="'Enabled'" [switch-handle-width]="'100'" [switch-label-width]="'20'" - [(ngModel)]="_settingsService.settings.enableThreading"> + [(ngModel)]="settings.enableThreading"> Runs directory scanning and thumbnail generation (only for Jimp) in a different thread
@@ -40,7 +40,7 @@ [switch-on-text]="'Enabled'" [switch-handle-width]="'100'" [switch-label-width]="'20'" - [(ngModel)]="_settingsService.settings.enableOnScrollThumbnailPrioritising"> + [(ngModel)]="settings.enableOnScrollThumbnailPrioritising"> Those thumbnails get higher priority that are visible on the screen
@@ -59,7 +59,7 @@ [switch-on-text]="'Enabled'" [switch-handle-width]="'100'" [switch-label-width]="'20'" - [(ngModel)]="_settingsService.settings.enableOnScrollRendering"> + [(ngModel)]="settings.enableOnScrollRendering"> Shows only the required amount of photos at once. Renders more if page bottom is reached @@ -79,7 +79,7 @@ [switch-on-text]="'Enabled'" [switch-handle-width]="'100'" [switch-label-width]="'20'" - [(ngModel)]="_settingsService.settings.enableCache"> + [(ngModel)]="settings.enableCache"> Caches directory contents and search results for better performance diff --git a/frontend/app/settings/other/other.settings.component.ts b/frontend/app/settings/other/other.settings.component.ts index 0baa89e8..b9de4c7a 100644 --- a/frontend/app/settings/other/other.settings.component.ts +++ b/frontend/app/settings/other/other.settings.component.ts @@ -1,4 +1,4 @@ -import {Component} from "@angular/core"; +import {Component, OnChanges} from "@angular/core"; import {SettingsComponent} from "../_abstract/abstract.settings.component"; import {AuthenticationService} from "../../model/network/authentication.service"; import {NavigationService} from "../../model/navigation.service"; @@ -13,13 +13,22 @@ import {OtherConfigDTO} from "../../../../common/entities/settings/OtherConfigDT './../_abstract/abstract.settings.component.css'], providers: [OtherSettingsService], }) -export class OtherSettingsComponent extends SettingsComponent { +export class OtherSettingsComponent extends SettingsComponent implements OnChanges { constructor(_authService: AuthenticationService, _navigation: NavigationService, _settingsService: OtherSettingsService, notification: NotificationService) { - super("Other", _authService, _navigation, _settingsService, notification); + super("Other", _authService, _navigation, _settingsService, notification, s => ({ + enableThreading: s.Server.enableThreading, + enableOnScrollThumbnailPrioritising: s.Client.enableOnScrollThumbnailPrioritising, + enableOnScrollRendering: s.Client.enableOnScrollRendering, + enableCache: s.Client.enableCache + })); + } + + ngOnChanges(): void { + this.hasAvailableSettings = !this.simplifiedMode; } diff --git a/frontend/app/settings/other/other.settings.service.ts b/frontend/app/settings/other/other.settings.service.ts index 12c0feee..f0b3462a 100644 --- a/frontend/app/settings/other/other.settings.service.ts +++ b/frontend/app/settings/other/other.settings.service.ts @@ -8,12 +8,7 @@ import {OtherConfigDTO} from "../../../../common/entities/settings/OtherConfigDT export class OtherSettingsService extends AbstractSettingsService { constructor(private _networkService: NetworkService, _settingsService: SettingsService) { - super(_settingsService, s => ({ - enableThreading: s.Server.enableThreading, - enableOnScrollThumbnailPrioritising: s.Client.enableOnScrollThumbnailPrioritising, - enableOnScrollRendering: s.Client.enableOnScrollRendering, - enableCache: s.Client.enableCache - })); + super(_settingsService); } diff --git a/frontend/app/settings/search/search.settings.component.html b/frontend/app/settings/search/search.settings.component.html index 8707b824..3a1959d8 100644 --- a/frontend/app/settings/search/search.settings.component.html +++ b/frontend/app/settings/search/search.settings.component.html @@ -1,6 +1,6 @@
+ [ngClass]="settings.enabled && !_settingsService.isSupported()?'panel-warning':''">

Search settings

@@ -11,17 +11,17 @@ [switch-inverse]="'inverse'" [switch-off-text]="'Disabled'" [switch-on-text]="'Enabled'" - [switch-disabled]="inProgress || (!_settingsService.settings.enabled && !_settingsService.isSupported())" + [switch-disabled]="inProgress || (!settings.enabled && !_settingsService.isSupported())" [switch-handle-width]="'100'" [switch-label-width]="'20'" - [(ngModel)]="_settingsService.settings.enabled"> + [(ngModel)]="settings.enabled">
- +
@@ -31,13 +31,13 @@ class="switch" name="autocompleteEnabled" [switch-on-color]="'primary'" - [switch-disabled]="!_settingsService.settings.enabled" + [switch-disabled]="!settings.enabled" [switch-inverse]="'inverse'" [switch-off-text]="'Disabled'" [switch-on-text]="'Enabled'" [switch-handle-width]="'100'" [switch-label-width]="'20'" - [(ngModel)]="_settingsService.settings.autocompleteEnabled"> + [(ngModel)]="settings.autocompleteEnabled">
@@ -51,19 +51,19 @@ class="switch" name="instantSearchEnabled" [switch-on-color]="'primary'" - [switch-disabled]="!_settingsService.settings.enabled" + [switch-disabled]="!settings.enabled" [switch-inverse]="'inverse'" [switch-off-text]="'Disabled'" [switch-on-text]="'Enabled'" [switch-handle-width]="'100'" [switch-label-width]="'20'" - [(ngModel)]="_settingsService.settings.instantSearchEnabled"> + [(ngModel)]="settings.instantSearchEnabled">
-
+
Search is not supported with these settings
- @@ -14,14 +14,14 @@
- - Make sure that sharp node module is installed (npm install sharp) - Make sure that gm node module and GraphicsMagick are installed (npm install sharp) @@ -33,13 +33,13 @@
Thumbnails will be saved in this folder. Write access is required
-
+
+ [(ngModel)]="settings.server.qualityPriority"> High quality may be slow. Especially with Jimp.
-
+
-
+
({ + client: s.Client.Thumbnail, + server: s.Server.thumbnail + })); } get ThumbnailSizes(): string { - return this._settingsService.settings.client.thumbnailSizes.join("; "); + return this.settings.client.thumbnailSizes.join("; "); } set ThumbnailSizes(value: string) { value = value.replace(new RegExp(',', 'g'), ";"); value = value.replace(new RegExp(' ', 'g'), ";"); - this._settingsService.settings.client.thumbnailSizes = value.split(";").map(s => parseInt(s)).filter(i => !isNaN(i) && i > 0); + this.settings.client.thumbnailSizes = value.split(";").map(s => parseInt(s)).filter(i => !isNaN(i) && i > 0); } ngOnInit() { diff --git a/frontend/app/settings/thumbnail/thumbanil.settings.service.ts b/frontend/app/settings/thumbnail/thumbanil.settings.service.ts index f6a3bd11..d527f75f 100644 --- a/frontend/app/settings/thumbnail/thumbanil.settings.service.ts +++ b/frontend/app/settings/thumbnail/thumbanil.settings.service.ts @@ -9,7 +9,7 @@ import {SettingsService} from "../settings.service"; export class ThumbnailSettingsService extends AbstractSettingsService<{ server: ThumbnailConfig, client: ClientConfig.ThumbnailConfig }> { constructor(private _networkService: NetworkService, _settingsService: SettingsService) { - super(_settingsService, s => ({client: s.Client.Thumbnail, server: s.Server.thumbnail})); + super(_settingsService); }