mirror of
https://github.com/xuthus83/pigallery2.git
synced 2025-01-14 14:43:17 +08:00
improving tasks settings
updating settings version bump
This commit is contained in:
parent
6c1ee97ed5
commit
1ddc73d461
@ -55,7 +55,7 @@ export class TaskManager implements ITaskManager {
|
|||||||
Config.Server.tasks.scheduled.forEach(schedule => {
|
Config.Server.tasks.scheduled.forEach(schedule => {
|
||||||
const nextDate = this.getDateFromSchedule(new Date(), schedule);
|
const nextDate = this.getDateFromSchedule(new Date(), schedule);
|
||||||
if (nextDate && nextDate.getTime() > Date.now()) {
|
if (nextDate && nextDate.getTime() > Date.now()) {
|
||||||
Logger.debug(LOG_TAG, 'running schedule: [' + schedule.id + '] ' + schedule.name +
|
Logger.debug(LOG_TAG, 'running schedule: ' + schedule.taskName +
|
||||||
' at ' + nextDate.toLocaleString(undefined, {hour12: false}));
|
' at ' + nextDate.toLocaleString(undefined, {hour12: false}));
|
||||||
|
|
||||||
const timer: NodeJS.Timeout = setTimeout(() => {
|
const timer: NodeJS.Timeout = setTimeout(() => {
|
||||||
@ -65,7 +65,7 @@ export class TaskManager implements ITaskManager {
|
|||||||
this.timers.push(timer);
|
this.timers.push(timer);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Logger.debug(LOG_TAG, 'skipping schedule: [' + schedule.id + '] ' + schedule.name);
|
Logger.debug(LOG_TAG, 'skipping schedule:' + schedule.taskName);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -27,4 +27,4 @@ export class TaskRepository {
|
|||||||
|
|
||||||
TaskRepository.Instance.register(new IndexingTask());
|
TaskRepository.Instance.register(new IndexingTask());
|
||||||
TaskRepository.Instance.register(new DBRestTask());
|
TaskRepository.Instance.register(new DBRestTask());
|
||||||
TaskRepository.Instance.register(new DummyTask());
|
// TaskRepository.Instance.register(new DummyTask());
|
||||||
|
@ -99,20 +99,6 @@ export class PrivateConfigClass extends PublicConfigClass implements IPrivateCon
|
|||||||
throw new Error('Unknown Server.log.level, found: ' + this.Server.log.sqlLevel);
|
throw new Error('Unknown Server.log.level, found: ' + this.Server.log.sqlLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
let updated = false;
|
|
||||||
Config.Server.tasks.scheduled.forEach((task: TaskScheduleDTO, i: number) => {
|
|
||||||
if (!task.id) {
|
|
||||||
task.id = Utils.GUID();
|
|
||||||
updated = true;
|
|
||||||
}
|
|
||||||
if (!task.name) {
|
|
||||||
task.name = task.taskName;
|
|
||||||
updated = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (updated) {
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public save() {
|
public save() {
|
||||||
|
@ -23,8 +23,6 @@ export interface PeriodicTaskTrigger extends TaskTrigger {
|
|||||||
|
|
||||||
export interface TaskScheduleDTO {
|
export interface TaskScheduleDTO {
|
||||||
priority: number;
|
priority: number;
|
||||||
name?: string;
|
|
||||||
id?: string;
|
|
||||||
taskName: string;
|
taskName: string;
|
||||||
config: any;
|
config: any;
|
||||||
trigger: NeverTaskTrigger | ScheduledTaskTrigger | PeriodicTaskTrigger;
|
trigger: NeverTaskTrigger | ScheduledTaskTrigger | PeriodicTaskTrigger;
|
||||||
|
@ -91,6 +91,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -64,6 +64,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
</select>
|
</select>
|
||||||
<small
|
<small
|
||||||
class="form-text text-muted"
|
class="form-text text-muted"
|
||||||
i18n>Set the reindexing sensitivity. High value check the folders for change more often
|
i18n>Set the reindexing sensitivity. High value check the folders for change more often.
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -55,6 +55,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
<br/>
|
<br/>
|
||||||
|
@ -114,6 +114,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -168,6 +168,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -73,6 +73,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -11,3 +11,11 @@
|
|||||||
margin-top: -5px;
|
margin-top: -5px;
|
||||||
margin-bottom: -5px;
|
margin-bottom: -5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.clickable {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator{
|
||||||
|
width: 2px;
|
||||||
|
}
|
||||||
|
@ -9,23 +9,45 @@
|
|||||||
|
|
||||||
<div *ngFor="let schedule of settings.scheduled; let i= index">
|
<div *ngFor="let schedule of settings.scheduled; let i= index">
|
||||||
<div class="card bg-light">
|
<div class="card bg-light">
|
||||||
<div class="card-header ">
|
<div class="card-header clickable" (click)="showDetails[i]=!showDetails[i]">
|
||||||
<div class="d-flex justify-content-between">
|
<div class="d-flex justify-content-between">
|
||||||
{{schedule.name}}
|
{{schedule.taskName}} @<!--
|
||||||
|
-->
|
||||||
|
<ng-container [ngSwitch]="schedule.trigger.type">
|
||||||
|
<ng-container *ngSwitchCase="TaskTriggerType.periodic">
|
||||||
|
<ng-container i18n>every</ng-container>
|
||||||
|
{{periods[schedule.trigger.periodicity]}} {{schedule.trigger.atTime | date:"HH:mm":"+0"}}
|
||||||
|
</ng-container>
|
||||||
|
<ng-container
|
||||||
|
*ngSwitchCase="TaskTriggerType.scheduled">{{schedule.trigger.time | date:"medium"}}</ng-container>
|
||||||
|
<ng-container *ngSwitchCase="TaskTriggerType.never" i18n>never</ng-container>
|
||||||
|
</ng-container>
|
||||||
<button class="btn btn-danger button-delete"
|
<button class="btn btn-danger button-delete"
|
||||||
(click)="remove(schedule.taskName)" i18n><span class="oi oi-trash"></span>
|
(click)="remove(i)" i18n><span class="oi oi-trash"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
|
||||||
<div class="d-flex justify-content-between">
|
<div class="card-body" [hidden]="!showDetails[i]">
|
||||||
<div>
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-md-9">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-md-2 control-label" [for]="'taskName'+i" i18n>Task:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
<select class="form-control" [(ngModel)]="schedule.taskName" [name]="'taskName'+i" required>
|
<select class="form-control" [(ngModel)]="schedule.taskName" [name]="'taskName'+i" required>
|
||||||
<option *ngFor="let availableTask of _settingsService.availableTasks | async"
|
<option *ngFor="let availableTask of _settingsService.availableTasks | async"
|
||||||
[ngValue]="availableTask.Name">{{availableTask.Name}}
|
[ngValue]="availableTask.Name">{{availableTask.Name}}
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
<div class="row">
|
<small class="form-text text-muted"
|
||||||
|
i18n>Select a task to schedule.
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-md-2 control-label" [for]="'repeatType'+i" i18n>Periodicity:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
<select class="form-control" [(ngModel)]="schedule.trigger.type"
|
<select class="form-control" [(ngModel)]="schedule.trigger.type"
|
||||||
(ngModelChange)="taskTriggerTypeChanged($event,schedule)"
|
(ngModelChange)="taskTriggerTypeChanged($event,schedule)"
|
||||||
[name]="'repeatType'+i" required>
|
[name]="'repeatType'+i" required>
|
||||||
@ -33,41 +55,53 @@
|
|||||||
[ngValue]="taskTrigger.key">{{taskTrigger.value}}
|
[ngValue]="taskTrigger.key">{{taskTrigger.value}}
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
|
<small class="form-text text-muted"
|
||||||
|
i18n>Set the time to run the task.
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group row" *ngIf="schedule.trigger.type == TaskTriggerType.scheduled">
|
||||||
|
<label class="col-md-2 control-label" [for]="'triggerTime'+i" i18n>At:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
<app-timestamp-datepicker
|
<app-timestamp-datepicker
|
||||||
[name]="'triggerTime'+i"
|
[name]="'triggerTime'+i"
|
||||||
*ngIf="schedule.trigger.type == TaskTriggerType.scheduled"
|
|
||||||
(timestampChange)="testSettingChanges()"
|
(timestampChange)="testSettingChanges()"
|
||||||
[(timestamp)]="schedule.trigger.time"></app-timestamp-datepicker>
|
[(timestamp)]="schedule.trigger.time"></app-timestamp-datepicker>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<select *ngIf="schedule.trigger.type == TaskTriggerType.periodic"
|
<div class="form-group row" *ngIf="schedule.trigger.type == TaskTriggerType.periodic">
|
||||||
class="form-control" [(ngModel)]="schedule.trigger.periodicity" [name]="'periodicity' + i"
|
<label class="col-md-2 control-label" [for]="'periodicity'+i" i18n>At:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<select
|
||||||
|
class="form-control" [(ngModel)]="schedule.trigger.periodicity"
|
||||||
|
[name]="'periodicity' + i"
|
||||||
required>
|
required>
|
||||||
<option *ngFor="let period of periods; let i = index"
|
<option *ngFor="let period of periods; let i = index"
|
||||||
[ngValue]="i">
|
[ngValue]="i">
|
||||||
<ng-container i18n>every</ng-container>
|
<ng-container i18n>every</ng-container>
|
||||||
<ng-container i18n>every</ng-container>
|
|
||||||
{{period}}
|
{{period}}
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<app-timestamp-timepicker
|
<app-timestamp-timepicker
|
||||||
[name]="'atTime'+i"
|
[name]="'atTime'+i"
|
||||||
(timestampChange)="testSettingChanges()"
|
(timestampChange)="testSettingChanges()"
|
||||||
*ngIf="schedule.trigger.type == TaskTriggerType.periodic"
|
|
||||||
[(timestamp)]="schedule.trigger.atTime"></app-timestamp-timepicker>
|
[(timestamp)]="schedule.trigger.atTime"></app-timestamp-timepicker>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
<div class="col-md-3">
|
||||||
</div>
|
<button class="btn btn-success float-right"
|
||||||
<div>
|
|
||||||
<button class="btn btn-success"
|
|
||||||
*ngIf="!tasksService.progress.value[schedule.taskName]"
|
*ngIf="!tasksService.progress.value[schedule.taskName]"
|
||||||
[disabled]="disableButtons"
|
[disabled]="disableButtons"
|
||||||
title="Trigger task run manually"
|
title="Trigger task run manually"
|
||||||
i18n-title
|
i18n-title
|
||||||
(click)="start(schedule)" i18n>Start now
|
(click)="start(schedule)" i18n>Start now
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary"
|
<button class="btn btn-secondary float-right"
|
||||||
*ngIf="tasksService.progress.value[schedule.taskName]"
|
*ngIf="tasksService.progress.value[schedule.taskName]"
|
||||||
[disabled]="disableButtons"
|
[disabled]="disableButtons"
|
||||||
(click)="stop(schedule)" i18n>Stop
|
(click)="stop(schedule)" i18n>Stop
|
||||||
@ -149,8 +183,12 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
|
<button class="btn btn-primary float-right"
|
||||||
|
(click)="addNewTask()" i18n>+ Add task
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -31,6 +31,7 @@ export class TasksSettingsComponent extends SettingsComponent<TaskConfig, TasksS
|
|||||||
taskTriggerType: { key: number, value: string }[];
|
taskTriggerType: { key: number, value: string }[];
|
||||||
TaskTriggerType = TaskTriggerType;
|
TaskTriggerType = TaskTriggerType;
|
||||||
periods: string[] = [];
|
periods: string[] = [];
|
||||||
|
showDetails: boolean[] = [];
|
||||||
|
|
||||||
constructor(_authService: AuthenticationService,
|
constructor(_authService: AuthenticationService,
|
||||||
_navigation: NavigationService,
|
_navigation: NavigationService,
|
||||||
@ -145,24 +146,20 @@ export class TasksSettingsComponent extends SettingsComponent<TaskConfig, TasksS
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
remove(id: string) {
|
remove(index: number) {
|
||||||
|
this.settings.scheduled.splice(index, 1);
|
||||||
}
|
|
||||||
/*
|
|
||||||
update($event: string, trigger: ScheduledTaskTrigger) {
|
|
||||||
if (!$event) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log(typeof $event);
|
|
||||||
console.log($event);
|
|
||||||
console.log(new Date($event));
|
|
||||||
console.log(new Date($event).getTime());
|
|
||||||
trigger.time = new Date($event).getTime();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
toDate(time: number) {
|
addNewTask() {
|
||||||
return new Date(time);
|
this.settings.scheduled.push({
|
||||||
}*/
|
taskName: this._settingsService.availableTasks.value[0].Name,
|
||||||
|
config: {},
|
||||||
|
priority: 0,
|
||||||
|
trigger: {
|
||||||
|
type: TaskTriggerType.never
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
taskTriggerTypeChanged(triggerType: TaskTriggerType, schedule: TaskScheduleDTO) {
|
taskTriggerTypeChanged(triggerType: TaskTriggerType, schedule: TaskScheduleDTO) {
|
||||||
schedule.trigger = <NeverTaskTrigger>{type: triggerType};
|
schedule.trigger = <NeverTaskTrigger>{type: triggerType};
|
||||||
|
@ -104,6 +104,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
(click)="save()" i18n>Save
|
(click)="save()" i18n>Save
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-secondary float-right"
|
<button class="btn btn-secondary float-right"
|
||||||
|
[disabled]=" !changed || inProgress"
|
||||||
(click)="reset()" i18n>Reset
|
(click)="reset()" i18n>Reset
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<timepicker
|
<timepicker
|
||||||
class="form-control"
|
|
||||||
[name]="name"
|
[name]="name"
|
||||||
[ngModel]="date"
|
[ngModel]="date"
|
||||||
[showSpinners]="false"
|
[showSpinners]="false"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pigallery2",
|
"name": "pigallery2",
|
||||||
"version": "1.7.0",
|
"version": "1.7.5",
|
||||||
"description": "This is a photo gallery optimised for running low resource servers (especially on raspberry pi)",
|
"description": "This is a photo gallery optimised for running low resource servers (especially on raspberry pi)",
|
||||||
"author": "Patrik J. Braun",
|
"author": "Patrik J. Braun",
|
||||||
"homepage": "https://github.com/bpatrik/PiGallery2",
|
"homepage": "https://github.com/bpatrik/PiGallery2",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user