1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2025-01-14 14:43:17 +08:00

implementing other settings

This commit is contained in:
Braun Patrik 2017-07-15 16:31:43 +02:00
parent 9745ab216f
commit 836f20eea4
11 changed files with 219 additions and 2 deletions

View File

@ -8,6 +8,7 @@ import {Config} from "../../common/config/private/Config";
import {ConfigDiagnostics} from "../model/ConfigDiagnostics";
import {ClientConfig} from "../../common/config/public/ConfigClass";
import {BasicConfigDTO} from "../../common/entities/settings/BasicConfigDTO";
import {OtherConfigDTO} from "../../common/entities/settings/OtherConfigDTO";
import set = Reflect.set;
@ -199,4 +200,32 @@ export class AdminMWs {
}
public static async updateOtherSettings(req: Request, res: Response, next: NextFunction) {
if ((typeof req.body === 'undefined') || (typeof req.body.settings === 'undefined')) {
return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, "settings is needed"));
}
try {
const settings: OtherConfigDTO = req.body.settings;
Config.Client.enableCache = settings.enableCache;
Config.Client.enableOnScrollRendering = settings.enableOnScrollRendering;
Config.Client.enableOnScrollThumbnailPrioritising = settings.enableOnScrollThumbnailPrioritising;
//only updating explicitly set config (not saving config set by the diagnostics)
const original = Config.original();
original.Client.enableCache = settings.enableCache;
original.Client.enableOnScrollRendering = settings.enableOnScrollRendering;
original.Client.enableOnScrollThumbnailPrioritising = settings.enableOnScrollThumbnailPrioritising;
original.Server.enableThreading = settings.enableThreading;
original.save();
await ConfigDiagnostics.runDiagnostics();
Logger.info(LOG_TAG, "new config:");
Logger.info(LOG_TAG, JSON.stringify(Config, null, '\t'));
return next();
} catch (err) {
return next(new ErrorDTO(ErrorCodes.SETTINGS_ERROR, "Settings error: " + JSON.stringify(err, null, ' '), err));
}
}
}

View File

@ -79,6 +79,12 @@ export class AdminRouter {
AdminMWs.updateBasicSettings,
RenderingMWs.renderOK
);
app.put("/api/settings/other",
AuthenticationMWs.authenticate,
AuthenticationMWs.authorise(UserRoles.Admin),
AdminMWs.updateOtherSettings,
RenderingMWs.renderOK
);
};

View File

@ -0,0 +1,6 @@
export interface OtherConfigDTO {
enableCache: boolean;
enableOnScrollRendering: boolean;
enableOnScrollThumbnailPrioritising: boolean;
enableThreading: boolean;
}

View File

@ -28,5 +28,6 @@
<settings-search></settings-search>
<settings-share></settings-share>
<settings-map></settings-map>
<settings-other></settings-other>
</div>
</app-frame>

View File

@ -52,6 +52,7 @@ import {SearchSettingsComponent} from "./settings/search/search.settings.compone
import {SettingsService} from "./settings/settings.service";
import {ShareSettingsComponent} from "./settings/share/share.settings.component";
import {BasicSettingsComponent} from "./settings/basic/basic.settings.component";
import {OtherSettingsComponent} from "./settings/other/other.settings.component";
@Injectable()
export class GoogleMapsConfig {
apiKey: string;
@ -104,6 +105,7 @@ export class GoogleMapsConfig {
SearchSettingsComponent,
ShareSettingsComponent,
BasicSettingsComponent,
OtherSettingsComponent,
StringifyRole],
providers: [
{provide: LAZY_MAPS_API_CONFIG, useClass: GoogleMapsConfig},

View File

@ -20,7 +20,7 @@ export abstract class SettingsComponent<T> implements OnInit, OnDestroy {
private _authService: AuthenticationService,
private _navigation: NavigationService,
public _settingsService: AbstractSettingsService<T>,
private notification: NotificationService) {
protected notification: NotificationService) {
}
ngOnInit() {
@ -59,14 +59,17 @@ export abstract class SettingsComponent<T> implements OnInit, OnDestroy {
await this._settingsService.updateSettings(this._settingsService.settings);
await this.getSettings();
this.notification.success(this.name + ' settings saved', "Success");
this.inProgress = false;
return true;
} catch (err) {
console.log(err);
if (err.message) {
this.error = (<ErrorDTO>err).message;
}
}
this.inProgress = false;
this.inProgress = false;
return false;
}
}

View File

@ -24,6 +24,15 @@ export class BasicSettingsComponent extends SettingsComponent<BasicConfigDTO> {
super("Basic", _authService, _navigation, _settingsService, notification);
}
public async save(): Promise<boolean> {
const val = await super.save();
if (val == true) {
this.notification.info('Restart the server to apply the new settings');
}
return val;
}
}

View File

@ -0,0 +1,100 @@
<form #settingsForm="ngForm" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Other settings</h3>
</div>
<div class="panel-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="enableThreading">Threading</label>
<div class="col-sm-10">
<bSwitch
id="enableThreading"
class="switch"
name="enableThreading"
[switch-on-color]="'primary'"
[switch-inverse]="'inverse'"
[switch-off-text]="'Disabled'"
[switch-on-text]="'Enabled'"
[switch-handle-width]="'100'"
[switch-label-width]="'20'"
[(ngModel)]="_settingsService.settings.enableThreading">
</bSwitch>
<span class="help-block">Runs directory scanning and thumbnail generation (only for Jimp) in a different thread</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="enableOnScrollThumbnailPrioritising">Scroll based thumbnail
generation</label>
<div class="col-sm-10">
<bSwitch
id="enableOnScrollThumbnailPrioritising"
class="switch"
name="enableOnScrollThumbnailPrioritising"
[switch-on-color]="'primary'"
[switch-inverse]="'inverse'"
[switch-off-text]="'Disabled'"
[switch-on-text]="'Enabled'"
[switch-handle-width]="'100'"
[switch-label-width]="'20'"
[(ngModel)]="_settingsService.settings.enableOnScrollThumbnailPrioritising">
</bSwitch>
<span class="help-block">Those thumbnails get higher priority that are visible on the screen</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="enableOnScrollRendering">Lazy image rendering</label>
<div class="col-sm-10">
<bSwitch
id="enableOnScrollRendering"
class="switch"
name="enableOnScrollRendering"
[switch-on-color]="'primary'"
[switch-inverse]="'inverse'"
[switch-off-text]="'Disabled'"
[switch-on-text]="'Enabled'"
[switch-handle-width]="'100'"
[switch-label-width]="'20'"
[(ngModel)]="_settingsService.settings.enableOnScrollRendering">
</bSwitch>
<span class="help-block">Shows only the required amount of photos at once. Renders more if page bottom is reached</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="enableCache">Cache</label>
<div class="col-sm-10">
<bSwitch
id="enableCache"
class="switch"
name="enableCache"
[switch-on-color]="'primary'"
[switch-inverse]="'inverse'"
[switch-off-text]="'Disabled'"
[switch-on-text]="'Enabled'"
[switch-handle-width]="'100'"
[switch-label-width]="'20'"
[(ngModel)]="_settingsService.settings.enableCache">
</bSwitch>
<span class="help-block">Caches directory contents and search results for better performance</span>
</div>
</div>
<button class="btn btn-success pull-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()">Save
</button>
<button class="btn btn-default pull-right"
(click)="reset()">Reset
</button>
</div>
</div>
</form>

View File

@ -0,0 +1,37 @@
import {Component} from "@angular/core";
import {SettingsComponent} from "../_abstract/abstract.settings.component";
import {AuthenticationService} from "../../model/network/authentication.service";
import {NavigationService} from "../../model/navigation.service";
import {NotificationService} from "../../model/notification.service";
import {OtherSettingsService} from "./other.settings.service";
import {OtherConfigDTO} from "../../../../common/entities/settings/OtherConfigDTO";
@Component({
selector: 'settings-other',
templateUrl: './other.settings.component.html',
styleUrls: ['./other.settings.component.css',
'./../_abstract/abstract.settings.component.css'],
providers: [OtherSettingsService],
})
export class OtherSettingsComponent extends SettingsComponent<OtherConfigDTO> {
constructor(_authService: AuthenticationService,
_navigation: NavigationService,
_settingsService: OtherSettingsService,
notification: NotificationService) {
super("Other", _authService, _navigation, _settingsService, notification);
}
public async save(): Promise<boolean> {
const val = await super.save();
if (val == true) {
this.notification.info('Restart the server to apply the new settings', "Info");
}
return val;
}
}

View File

@ -0,0 +1,24 @@
import {Injectable} from "@angular/core";
import {NetworkService} from "../../model/network/network.service";
import {AbstractSettingsService} from "../_abstract/abstract.settings.service";
import {SettingsService} from "../settings.service";
import {OtherConfigDTO} from "../../../../common/entities/settings/OtherConfigDTO";
@Injectable()
export class OtherSettingsService extends AbstractSettingsService<OtherConfigDTO> {
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
}));
}
public updateSettings(settings: OtherConfigDTO): Promise<void> {
return this._networkService.putJson("/settings/other", {settings: settings});
}
}