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

renaming tasks to jobs

This commit is contained in:
Patrik J. Braun 2019-12-24 12:22:25 +01:00
parent f8b06be700
commit 5ec9171ddf
53 changed files with 1345 additions and 1377 deletions

View File

@ -50,56 +50,56 @@ export class AdminMWs {
}
}
public static async startTask(req: Request, res: Response, next: NextFunction) {
public static async startJob(req: Request, res: Response, next: NextFunction) {
try {
const id = req.params.id;
const taskConfig: any = req.body.config;
await ObjectManagers.getInstance().TaskManager.run(id, taskConfig);
const JobConfig: any = req.body.config;
await ObjectManagers.getInstance().JobManager.run(id, JobConfig);
req.resultPipe = 'ok';
return next();
} catch (err) {
if (err instanceof Error) {
return next(new ErrorDTO(ErrorCodes.TASK_ERROR, 'Task error: ' + err.toString(), err));
return next(new ErrorDTO(ErrorCodes.JOB_ERROR, 'Job error: ' + err.toString(), err));
}
return next(new ErrorDTO(ErrorCodes.TASK_ERROR, 'Task error: ' + JSON.stringify(err, null, ' '), err));
return next(new ErrorDTO(ErrorCodes.JOB_ERROR, 'Job error: ' + JSON.stringify(err, null, ' '), err));
}
}
public static stopTask(req: Request, res: Response, next: NextFunction) {
public static stopJob(req: Request, res: Response, next: NextFunction) {
try {
const id = req.params.id;
ObjectManagers.getInstance().TaskManager.stop(id);
ObjectManagers.getInstance().JobManager.stop(id);
req.resultPipe = 'ok';
return next();
} catch (err) {
if (err instanceof Error) {
return next(new ErrorDTO(ErrorCodes.TASK_ERROR, 'Task error: ' + err.toString(), err));
return next(new ErrorDTO(ErrorCodes.JOB_ERROR, 'Job error: ' + err.toString(), err));
}
return next(new ErrorDTO(ErrorCodes.TASK_ERROR, 'Task error: ' + JSON.stringify(err, null, ' '), err));
return next(new ErrorDTO(ErrorCodes.JOB_ERROR, 'Job error: ' + JSON.stringify(err, null, ' '), err));
}
}
public static getAvailableTasks(req: Request, res: Response, next: NextFunction) {
public static getAvailableJobs(req: Request, res: Response, next: NextFunction) {
try {
req.resultPipe = ObjectManagers.getInstance().TaskManager.getAvailableTasks();
req.resultPipe = ObjectManagers.getInstance().JobManager.getAvailableJobs();
return next();
} catch (err) {
if (err instanceof Error) {
return next(new ErrorDTO(ErrorCodes.TASK_ERROR, 'Task error: ' + err.toString(), err));
return next(new ErrorDTO(ErrorCodes.JOB_ERROR, 'Job error: ' + err.toString(), err));
}
return next(new ErrorDTO(ErrorCodes.TASK_ERROR, 'Task error: ' + JSON.stringify(err, null, ' '), err));
return next(new ErrorDTO(ErrorCodes.JOB_ERROR, 'Job error: ' + JSON.stringify(err, null, ' '), err));
}
}
public static getTaskProgresses(req: Request, res: Response, next: NextFunction) {
public static getJobProgresses(req: Request, res: Response, next: NextFunction) {
try {
req.resultPipe = ObjectManagers.getInstance().TaskManager.getProgresses();
req.resultPipe = ObjectManagers.getInstance().JobManager.getProgresses();
return next();
} catch (err) {
if (err instanceof Error) {
return next(new ErrorDTO(ErrorCodes.TASK_ERROR, 'Task error: ' + err.toString(), err));
return next(new ErrorDTO(ErrorCodes.JOB_ERROR, 'Job error: ' + err.toString(), err));
}
return next(new ErrorDTO(ErrorCodes.TASK_ERROR, 'Task error: ' + JSON.stringify(err, null, ' '), err));
return next(new ErrorDTO(ErrorCodes.JOB_ERROR, 'Job error: ' + JSON.stringify(err, null, ' '), err));
}
}
}

View File

@ -444,16 +444,16 @@ export class SettingsMWs {
try {
// only updating explicitly set config (not saving config set by the diagnostics)
const settings: ServerConfig.TaskConfig = req.body.settings;
const settings: ServerConfig.JobConfig = req.body.settings;
const original = Config.original();
await ConfigDiagnostics.testTasksConfig(settings, original);
Config.Server.Tasks = settings;
original.Server.Tasks = settings;
Config.Server.Jobs = settings;
original.Server.Jobs = settings;
original.save();
await ConfigDiagnostics.runDiagnostics();
ObjectManagers.getInstance().TaskManager.runSchedules();
ObjectManagers.getInstance().JobManager.runSchedules();
Logger.info(LOG_TAG, 'new config:');
Logger.info(LOG_TAG, JSON.stringify(Config, null, '\t'));
return next();

View File

@ -7,7 +7,7 @@ import {Logger} from '../Logger';
import {IIndexingManager} from './database/interfaces/IIndexingManager';
import {IPersonManager} from './database/interfaces/IPersonManager';
import {IVersionManager} from './database/interfaces/IVersionManager';
import {ITaskManager} from './database/interfaces/ITaskManager';
import {IJobManager} from './database/interfaces/IJobManager';
export class ObjectManagers {
@ -20,7 +20,7 @@ export class ObjectManagers {
private _indexingManager: IIndexingManager;
private _personManager: IPersonManager;
private _versionManager: IVersionManager;
private _taskManager: ITaskManager;
private _jobManager: IJobManager;
get VersionManager(): IVersionManager {
@ -80,12 +80,12 @@ export class ObjectManagers {
this._sharingManager = value;
}
get TaskManager(): ITaskManager {
return this._taskManager;
get JobManager(): IJobManager {
return this._jobManager;
}
set TaskManager(value: ITaskManager) {
this._taskManager = value;
set JobManager(value: IJobManager) {
this._jobManager = value;
}
public static getInstance() {
@ -96,8 +96,8 @@ export class ObjectManagers {
}
public static async reset() {
if (ObjectManagers.getInstance().TaskManager) {
ObjectManagers.getInstance().TaskManager.stopSchedules();
if (ObjectManagers.getInstance().JobManager) {
ObjectManagers.getInstance().JobManager.stopSchedules();
}
await SQLConnection.close();
this._instance = null;
@ -105,8 +105,8 @@ export class ObjectManagers {
public static async InitCommonManagers() {
const TaskManager = require('./tasks/TaskManager').TaskManager;
ObjectManagers.getInstance().TaskManager = new TaskManager();
const JobManager = require('./jobs/JobManager').JobManager;
ObjectManagers.getInstance().JobManager = new JobManager();
}
public static async InitMemoryManagers() {

View File

@ -0,0 +1,18 @@
import {JobProgressDTO} from '../../../../common/entities/settings/JobProgressDTO';
import {JobDTO} from '../../../../common/entities/job/JobDTO';
export interface IJobManager {
run(jobId: string, config: any): Promise<void>;
stop(jobId: string): void;
getProgresses(): { [key: string]: JobProgressDTO };
getAvailableJobs(): JobDTO[];
stopSchedules(): void;
runSchedules(): void;
}

View File

@ -1,18 +0,0 @@
import {TaskProgressDTO} from '../../../../common/entities/settings/TaskProgressDTO';
import {TaskDTO} from '../../../../common/entities/task/TaskDTO';
export interface ITaskManager {
run(taskId: string, config: any): Promise<void>;
stop(taskId: string): void;
getProgresses(): { [key: string]: TaskProgressDTO };
getAvailableTasks(): TaskDTO[];
stopSchedules(): void;
runSchedules(): void;
}

View File

@ -158,7 +158,7 @@ export class ConfigDiagnostics {
}
static async testTasksConfig(task: ServerConfig.TaskConfig, config: IPrivateConfig) {
static async testTasksConfig(task: ServerConfig.JobConfig, config: IPrivateConfig) {
}
@ -319,7 +319,7 @@ export class ConfigDiagnostics {
try {
await ConfigDiagnostics.testTasksConfig(Config.Server.Tasks, Config);
await ConfigDiagnostics.testTasksConfig(Config.Server.Jobs, Config);
} catch (ex) {
const err: Error = ex;
NotificationManager.warning('Some Tasks are not supported with these settings. Disabling temporally. ' +

View File

@ -1,26 +1,26 @@
import {ITaskManager} from '../database/interfaces/ITaskManager';
import {TaskProgressDTO} from '../../../common/entities/settings/TaskProgressDTO';
import {ITask} from './tasks/ITask';
import {TaskRepository} from './TaskRepository';
import {IJobManager} from '../database/interfaces/IJobManager';
import {JobProgressDTO} from '../../../common/entities/settings/JobProgressDTO';
import {IJob} from './jobs/IJob';
import {JobRepository} from './JobRepository';
import {Config} from '../../../common/config/private/Config';
import {TaskScheduleDTO, TaskTriggerType} from '../../../common/entities/task/TaskScheduleDTO';
import {JobScheduleDTO, JobTriggerType} from '../../../common/entities/job/JobScheduleDTO';
import {Logger} from '../../Logger';
declare var global: NodeJS.Global;
const LOG_TAG = '[TaskManager]';
const LOG_TAG = '[JobManager]';
export class TaskManager implements ITaskManager {
export class JobManager implements IJobManager {
protected timers: { schedule: TaskScheduleDTO, timer: NodeJS.Timeout }[] = [];
protected timers: { schedule: JobScheduleDTO, timer: NodeJS.Timeout }[] = [];
constructor() {
this.runSchedules();
}
getProgresses(): { [id: string]: TaskProgressDTO } {
const m: { [id: string]: TaskProgressDTO } = {};
TaskRepository.Instance.getAvailableTasks()
getProgresses(): { [id: string]: JobProgressDTO } {
const m: { [id: string]: JobProgressDTO } = {};
JobRepository.Instance.getAvailableJobs()
.filter(t => t.Progress)
.forEach(t => {
t.Progress.time.current = Date.now();
@ -29,29 +29,29 @@ export class TaskManager implements ITaskManager {
return m;
}
async run<T>(taskName: string, config: T): Promise<void> {
const t = this.findTask(taskName);
async run<T>(jobName: string, config: T): Promise<void> {
const t = this.findJob(jobName);
if (t) {
await t.start(config);
} else {
Logger.warn(LOG_TAG, 'cannot find task to start:' + taskName);
Logger.warn(LOG_TAG, 'cannot find job to start:' + jobName);
}
}
stop(taskName: string): void {
const t = this.findTask(taskName);
stop(jobName: string): void {
const t = this.findJob(jobName);
if (t) {
t.stop();
if (global.gc) {
global.gc();
}
} else {
Logger.warn(LOG_TAG, 'cannot find task to stop:' + taskName);
Logger.warn(LOG_TAG, 'cannot find job to stop:' + jobName);
}
}
getAvailableTasks(): ITask<any>[] {
return TaskRepository.Instance.getAvailableTasks();
getAvailableJobs(): IJob<any>[] {
return JobRepository.Instance.getAvailableJobs();
}
public stopSchedules(): void {
@ -61,8 +61,8 @@ export class TaskManager implements ITaskManager {
public runSchedules(): void {
this.stopSchedules();
Logger.info(LOG_TAG, 'Running task schedules');
Config.Server.Tasks.scheduled.forEach(s => this.runSchedule(s));
Logger.info(LOG_TAG, 'Running job schedules');
Config.Server.Jobs.scheduled.forEach(s => this.runSchedule(s));
}
protected getNextDayOfTheWeek(refDate: Date, dayOfWeek: number) {
@ -89,12 +89,12 @@ export class TaskManager implements ITaskManager {
return date;
}
protected getDateFromSchedule(refDate: Date, schedule: TaskScheduleDTO): Date {
protected getDateFromSchedule(refDate: Date, schedule: JobScheduleDTO): Date {
switch (schedule.trigger.type) {
case TaskTriggerType.scheduled:
case JobTriggerType.scheduled:
return new Date(schedule.trigger.time);
case TaskTriggerType.periodic:
case JobTriggerType.periodic:
const hour = Math.floor(schedule.trigger.atTime / 1000 / (60 * 60));
@ -111,25 +111,25 @@ export class TaskManager implements ITaskManager {
return null;
}
protected findTask<T = any>(taskName: string): ITask<T> {
return this.getAvailableTasks().find(t => t.Name === taskName);
protected findJob<T = any>(jobName: string): IJob<T> {
return this.getAvailableJobs().find(t => t.Name === jobName);
}
private runSchedule(schedule: TaskScheduleDTO) {
private runSchedule(schedule: JobScheduleDTO) {
const nextDate = this.getDateFromSchedule(new Date(), schedule);
if (nextDate && nextDate.getTime() > Date.now()) {
Logger.debug(LOG_TAG, 'running schedule: ' + schedule.taskName +
Logger.debug(LOG_TAG, 'running schedule: ' + schedule.jobName +
' at ' + nextDate.toLocaleString(undefined, {hour12: false}));
const timer: NodeJS.Timeout = setTimeout(async () => {
this.timers = this.timers.filter(t => t.timer !== timer);
await this.run(schedule.taskName, schedule.config);
await this.run(schedule.jobName, schedule.config);
this.runSchedule(schedule);
}, nextDate.getTime() - Date.now());
this.timers.push({schedule: schedule, timer: timer});
} else {
Logger.debug(LOG_TAG, 'skipping schedule:' + schedule.taskName);
Logger.debug(LOG_TAG, 'skipping schedule:' + schedule.jobName);
}
}

View File

@ -0,0 +1,34 @@
import {IJob} from './jobs/IJob';
import {IndexingJob} from './jobs/IndexingJob';
import {DBRestJob} from './jobs/DBResetJob';
import {VideoConvertingJob} from './jobs/VideoConvertingJob';
import {PhotoConvertingJob} from './jobs/PhotoConvertingJob';
import {ThumbnailGenerationJob} from './jobs/ThumbnailGenerationJob';
export class JobRepository {
private static instance: JobRepository = null;
availableJobs: { [key: string]: IJob<any> } = {};
public static get Instance(): JobRepository {
if (JobRepository.instance == null) {
JobRepository.instance = new JobRepository();
}
return JobRepository.instance;
}
getAvailableJobs(): IJob<any>[] {
return Object.values(this.availableJobs).filter(t => t.Supported);
}
register(job: IJob<any>) {
this.availableJobs[job.Name] = job;
}
}
JobRepository.Instance.register(new IndexingJob());
JobRepository.Instance.register(new DBRestJob());
JobRepository.Instance.register(new VideoConvertingJob());
JobRepository.Instance.register(new PhotoConvertingJob());
JobRepository.Instance.register(new ThumbnailGenerationJob());

View File

@ -1,14 +1,14 @@
import {TaskProgressDTO} from '../../../../common/entities/settings/TaskProgressDTO';
import {JobProgressDTO} from '../../../../common/entities/settings/JobProgressDTO';
import {ObjectManagers} from '../../ObjectManagers';
import {Config} from '../../../../common/config/private/Config';
import {ConfigTemplateEntry, DefaultsTasks} from '../../../../common/entities/task/TaskDTO';
import {Task} from './Task';
import {ConfigTemplateEntry, DefaultsJobs} from '../../../../common/entities/job/JobDTO';
import {Job} from './Job';
import {ServerConfig} from '../../../../common/config/private/IPrivateConfig';
const LOG_TAG = '[DBRestTask]';
const LOG_TAG = '[DBRestJob]';
export class DBRestTask extends Task {
public readonly Name = DefaultsTasks[DefaultsTasks['Database Reset']];
export class DBRestJob extends Job {
public readonly Name = DefaultsJobs[DefaultsJobs['Database Reset']];
public readonly ConfigTemplate: ConfigTemplateEntry[] = null;
protected readonly IsInstant = true;
@ -19,7 +19,7 @@ export class DBRestTask extends Task {
protected async init() {
}
protected async step(): Promise<TaskProgressDTO> {
protected async step(): Promise<JobProgressDTO> {
await ObjectManagers.getInstance().IndexingManager.resetDB();
return null;
}

View File

@ -1,6 +1,6 @@
import {TaskProgressDTO, TaskState} from '../../../../common/entities/settings/TaskProgressDTO';
import {ConfigTemplateEntry} from '../../../../common/entities/task/TaskDTO';
import {Task} from './Task';
import {JobProgressDTO, JobState} from '../../../../common/entities/settings/JobProgressDTO';
import {ConfigTemplateEntry} from '../../../../common/entities/job/JobDTO';
import {Job} from './Job';
import * as path from 'path';
import {DiskManager} from '../../DiskManger';
import {DiskMangerWorker} from '../../threading/DiskMangerWorker';
@ -14,7 +14,7 @@ declare var global: NodeJS.Global;
const LOG_TAG = '[FileTask]';
export abstract class FileTask<T, S = void> extends Task<S> {
export abstract class FileJob<T, S = void> extends Job<S> {
public readonly ConfigTemplate: ConfigTemplateEntry[] = null;
directoryQueue: string[] = [];
fileQueue: T[] = [];
@ -34,9 +34,9 @@ export abstract class FileTask<T, S = void> extends Task<S> {
protected abstract async processFile(file: T): Promise<void>;
protected async step(): Promise<TaskProgressDTO> {
protected async step(): Promise<JobProgressDTO> {
if ((this.directoryQueue.length === 0 && this.fileQueue.length === 0)
|| this.state !== TaskState.running) {
|| this.state !== JobState.running) {
if (global.gc) {
global.gc();
}

View File

@ -0,0 +1,14 @@
import {JobProgressDTO} from '../../../../common/entities/settings/JobProgressDTO';
import {JobDTO} from '../../../../common/entities/job/JobDTO';
export interface IJob<T> extends JobDTO {
Name: string;
Supported: boolean;
Progress: JobProgressDTO;
start(config: T): Promise<void>;
stop(): void;
toJSON(): JobDTO;
}

View File

@ -1,16 +1,16 @@
import {TaskProgressDTO, TaskState} from '../../../../common/entities/settings/TaskProgressDTO';
import {JobProgressDTO, JobState} from '../../../../common/entities/settings/JobProgressDTO';
import {ObjectManagers} from '../../ObjectManagers';
import * as path from 'path';
import {Config} from '../../../../common/config/private/Config';
import {Task} from './Task';
import {ConfigTemplateEntry, DefaultsTasks} from '../../../../common/entities/task/TaskDTO';
import {Job} from './Job';
import {ConfigTemplateEntry, DefaultsJobs} from '../../../../common/entities/job/JobDTO';
import {ServerConfig} from '../../../../common/config/private/IPrivateConfig';
declare var global: NodeJS.Global;
const LOG_TAG = '[IndexingTask]';
const LOG_TAG = '[IndexingJob]';
export class IndexingTask extends Task {
public readonly Name = DefaultsTasks[DefaultsTasks.Indexing];
export class IndexingJob extends Job {
public readonly Name = DefaultsJobs[DefaultsJobs.Indexing];
directoriesToIndex: string[] = [];
public readonly ConfigTemplate: ConfigTemplateEntry[] = null;
@ -23,7 +23,7 @@ export class IndexingTask extends Task {
this.directoriesToIndex.push('/');
}
protected async step(): Promise<TaskProgressDTO> {
protected async step(): Promise<JobProgressDTO> {
if (this.directoriesToIndex.length === 0) {
if (global.gc) {
global.gc();
@ -34,7 +34,7 @@ export class IndexingTask extends Task {
this.progress.comment = directory;
this.progress.left = this.directoriesToIndex.length;
const scanned = await ObjectManagers.getInstance().IndexingManager.indexDirectory(directory);
if (this.state !== TaskState.running) {
if (this.state !== JobState.running) {
return null;
}
this.progress.progress++;

View File

@ -1,14 +1,16 @@
import {TaskProgressDTO, TaskState} from '../../../../common/entities/settings/TaskProgressDTO';
import {JobProgressDTO, JobState} from '../../../../common/entities/settings/JobProgressDTO';
import {Logger} from '../../../Logger';
import {ITask} from './ITask';
import {ConfigTemplateEntry, TaskDTO} from '../../../../common/entities/task/TaskDTO';
import {IJob} from './IJob';
import {ConfigTemplateEntry, JobDTO} from '../../../../common/entities/job/JobDTO';
declare const process: any;
export abstract class Task<T = void> implements ITask<T> {
const LOG_TAG = '[JOB]';
protected progress: TaskProgressDTO = null;
protected state = TaskState.idle;
export abstract class Job<T = void> implements IJob<T> {
protected progress: JobProgressDTO = null;
protected state = JobState.idle;
protected config: T;
protected prResolve: () => void;
protected IsInstant = false;
@ -22,19 +24,19 @@ export abstract class Task<T = void> implements ITask<T> {
public abstract get ConfigTemplate(): ConfigTemplateEntry[];
public get Progress(): TaskProgressDTO {
public get Progress(): JobProgressDTO {
return this.progress;
}
public start(config: T): Promise<void> {
if (this.state === TaskState.idle && this.Supported) {
Logger.info('[Task]', 'Running task: ' + this.Name);
if (this.state === JobState.idle && this.Supported) {
Logger.info(LOG_TAG, 'Running job: ' + this.Name);
this.config = config;
this.progress = {
progress: 0,
left: 0,
comment: '',
state: TaskState.running,
state: JobState.running,
time: {
start: Date.now(),
current: Date.now()
@ -44,38 +46,38 @@ export abstract class Task<T = void> implements ITask<T> {
this.prResolve = resolve;
});
this.init().catch(console.error);
this.state = TaskState.running;
this.state = JobState.running;
this.run();
if (!this.IsInstant) { // if instant, wait for execution, otherwise, return right away
return Promise.resolve();
}
return pr;
} else {
Logger.info('[Task]', 'Task already running: ' + this.Name);
Logger.info(LOG_TAG, 'Job already running: ' + this.Name);
return Promise.reject();
}
}
public stop(): void {
Logger.info('[Task]', 'Stopping task: ' + this.Name);
this.state = TaskState.stopping;
this.progress.state = TaskState.stopping;
Logger.info(LOG_TAG, 'Stopping job: ' + this.Name);
this.state = JobState.stopping;
this.progress.state = JobState.stopping;
}
public toJSON(): TaskDTO {
public toJSON(): JobDTO {
return {
Name: this.Name,
ConfigTemplate: this.ConfigTemplate
};
}
protected abstract async step(): Promise<TaskProgressDTO>;
protected abstract async step(): Promise<JobProgressDTO>;
protected abstract async init(): Promise<void>;
private onFinish(): void {
this.progress = null;
Logger.info('[Task]', 'Task finished: ' + this.Name);
Logger.info(LOG_TAG, 'Job finished: ' + this.Name);
if (this.IsInstant) {
this.prResolve();
}
@ -84,19 +86,19 @@ export abstract class Task<T = void> implements ITask<T> {
private run() {
process.nextTick(async () => {
try {
if (this.state === TaskState.idle) {
if (this.state === JobState.idle) {
this.progress = null;
return;
}
this.progress = await this.step();
if (this.progress == null) { // finished
this.state = TaskState.idle;
this.state = JobState.idle;
this.onFinish();
return;
}
this.run();
} catch (e) {
Logger.error('[Task]', e);
Logger.error(LOG_TAG, e);
}
});
}

View File

@ -1,20 +1,19 @@
import {Config} from '../../../../common/config/private/Config';
import {DefaultsTasks} from '../../../../common/entities/task/TaskDTO';
import {DefaultsJobs} from '../../../../common/entities/job/JobDTO';
import {ProjectPath} from '../../../ProjectPath';
import * as path from 'path';
import * as fs from 'fs';
import * as util from 'util';
import {FileTask} from './FileTask';
import {FileJob} from './FileJob';
import {DirectoryDTO} from '../../../../common/entities/DirectoryDTO';
import {PhotoProcessing} from '../../fileprocessing/PhotoProcessing';
import {ThumbnailSourceType} from '../../threading/ThumbnailWorker';
const LOG_TAG = '[PhotoConvertingTask]';
const LOG_TAG = '[PhotoConvertingJob]';
const existsPr = util.promisify(fs.exists);
export class PhotoConvertingTask extends FileTask<string> {
public readonly Name = DefaultsTasks[DefaultsTasks['Photo Converting']];
export class PhotoConvertingJob extends FileJob<string> {
public readonly Name = DefaultsJobs[DefaultsJobs['Photo Converting']];
constructor() {
super({noVideo: true, noMetaFile: true});

View File

@ -1,21 +1,21 @@
import {Config} from '../../../../common/config/private/Config';
import {ConfigTemplateEntry, DefaultsTasks} from '../../../../common/entities/task/TaskDTO';
import {ConfigTemplateEntry, DefaultsJobs} from '../../../../common/entities/job/JobDTO';
import {ProjectPath} from '../../../ProjectPath';
import * as path from 'path';
import * as fs from 'fs';
import * as util from 'util';
import {FileTask} from './FileTask';
import {FileJob} from './FileJob';
import {DirectoryDTO} from '../../../../common/entities/DirectoryDTO';
import {PhotoProcessing} from '../../fileprocessing/PhotoProcessing';
import {ThumbnailSourceType} from '../../threading/ThumbnailWorker';
import {MediaDTO} from '../../../../common/entities/MediaDTO';
const LOG_TAG = '[ThumbnailGenerationTask]';
const LOG_TAG = '[ThumbnailGenerationJob]';
const existsPr = util.promisify(fs.exists);
export class ThumbnailGenerationTask extends FileTask<MediaDTO, { sizes: number[] }> {
public readonly Name = DefaultsTasks[DefaultsTasks['Thumbnail Generation']];
export class ThumbnailGenerationJob extends FileJob<MediaDTO, { sizes: number[] }> {
public readonly Name = DefaultsJobs[DefaultsJobs['Thumbnail Generation']];
public readonly ConfigTemplate: ConfigTemplateEntry[] = [{
id: 'sizes',
type: 'number-array',

View File

@ -1,19 +1,19 @@
import {Config} from '../../../../common/config/private/Config';
import {DefaultsTasks} from '../../../../common/entities/task/TaskDTO';
import {DefaultsJobs} from '../../../../common/entities/job/JobDTO';
import {ProjectPath} from '../../../ProjectPath';
import * as path from 'path';
import * as fs from 'fs';
import * as util from 'util';
import {FileTask} from './FileTask';
import {FileJob} from './FileJob';
import {DirectoryDTO} from '../../../../common/entities/DirectoryDTO';
import {VideoProcessing} from '../../fileprocessing/VideoProcessing';
const LOG_TAG = '[VideoConvertingTask]';
const LOG_TAG = '[VideoConvertingJob]';
const existsPr = util.promisify(fs.exists);
export class VideoConvertingTask extends FileTask<string> {
public readonly Name = DefaultsTasks[DefaultsTasks['Video Converting']];
export class VideoConvertingJob extends FileJob<string> {
public readonly Name = DefaultsJobs[DefaultsJobs['Video Converting']];
constructor() {
super({noPhoto: true, noMetaFile: true});

View File

@ -1,34 +0,0 @@
import {ITask} from './tasks/ITask';
import {IndexingTask} from './tasks/IndexingTask';
import {DBRestTask} from './tasks/DBResetTask';
import {VideoConvertingTask} from './tasks/VideoConvertingTask';
import {PhotoConvertingTask} from './tasks/PhotoConvertingTask';
import {ThumbnailGenerationTask} from './tasks/ThumbnailGenerationTask';
export class TaskRepository {
private static instance: TaskRepository = null;
availableTasks: { [key: string]: ITask<any> } = {};
public static get Instance(): TaskRepository {
if (TaskRepository.instance == null) {
TaskRepository.instance = new TaskRepository();
}
return TaskRepository.instance;
}
getAvailableTasks(): ITask<any>[] {
return Object.values(this.availableTasks).filter(t => t.Supported);
}
register(task: ITask<any>) {
this.availableTasks[task.Name] = task;
}
}
TaskRepository.Instance.register(new IndexingTask());
TaskRepository.Instance.register(new DBRestTask());
TaskRepository.Instance.register(new VideoConvertingTask());
TaskRepository.Instance.register(new PhotoConvertingTask());
TaskRepository.Instance.register(new ThumbnailGenerationTask());

View File

@ -1,14 +0,0 @@
import {TaskProgressDTO} from '../../../../common/entities/settings/TaskProgressDTO';
import {TaskDTO} from '../../../../common/entities/task/TaskDTO';
export interface ITask<T> extends TaskDTO {
Name: string;
Supported: boolean;
Progress: TaskProgressDTO;
start(config: T): Promise<void>;
stop(): void;
toJSON(): TaskDTO;
}

View File

@ -11,7 +11,7 @@ import {MetadataLoader} from './MetadataLoader';
import {Logger} from '../../Logger';
import {SupportedFormats} from '../../../common/SupportedFormats';
const LOG_TAG = '[DiskManagerTask]';
const LOG_TAG = '[DiskMangerWorker]';
export class DiskMangerWorker {

View File

@ -9,7 +9,7 @@ export class AdminRouter {
this.addGetStatistic(app);
this.addGetDuplicates(app);
this.addTasks(app);
this.addJobs(app);
}
private static addGetStatistic(app: Express) {
@ -30,29 +30,29 @@ export class AdminRouter {
);
}
private static addTasks(app: Express) {
app.get('/api/admin/tasks/available',
private static addJobs(app: Express) {
app.get('/api/admin/jobs/available',
AuthenticationMWs.authenticate,
AuthenticationMWs.authorise(UserRoles.Admin),
AdminMWs.getAvailableTasks,
AdminMWs.getAvailableJobs,
RenderingMWs.renderResult
);
app.get('/api/admin/tasks/scheduled/progress',
app.get('/api/admin/jobs/scheduled/progress',
AuthenticationMWs.authenticate,
AuthenticationMWs.authorise(UserRoles.Admin),
AdminMWs.getTaskProgresses,
AdminMWs.getJobProgresses,
RenderingMWs.renderResult
);
app.post('/api/admin/tasks/scheduled/:id/start',
app.post('/api/admin/jobs/scheduled/:id/start',
AuthenticationMWs.authenticate,
AuthenticationMWs.authorise(UserRoles.Admin),
AdminMWs.startTask,
AdminMWs.startJob,
RenderingMWs.renderResult
);
app.post('/api/admin/tasks/scheduled/:id/stop',
app.post('/api/admin/jobs/scheduled/:id/stop',
AuthenticationMWs.authenticate,
AuthenticationMWs.authorise(UserRoles.Admin),
AdminMWs.stopTask,
AdminMWs.stopJob,
RenderingMWs.renderResult
);
}

View File

@ -1,5 +1,5 @@
import {ClientConfig} from '../public/ConfigClass';
import {TaskScheduleDTO} from '../../entities/task/TaskScheduleDTO';
import {JobScheduleDTO} from '../../entities/job/JobScheduleDTO';
export module ServerConfig {
export enum DatabaseType {
@ -77,8 +77,8 @@ export module ServerConfig {
sqlLevel: SQLLogLevel;
}
export interface TaskConfig {
scheduled: TaskScheduleDTO[];
export interface JobConfig {
scheduled: JobScheduleDTO[];
}
export type codecType = 'libvpx-vp9' | 'libx264' | 'libvpx' | 'libx265';
@ -125,7 +125,7 @@ export module ServerConfig {
photoMetadataSize: number; // only this many bites will be loaded when scanning photo for metadata
Duplicates: DuplicatesConfig;
Log: LogConfig;
Tasks: TaskConfig;
Jobs: JobConfig;
}
}

View File

@ -1,7 +1,7 @@
import {PublicConfigClass} from '../public/ConfigClass';
import {IPrivateConfig, ServerConfig} from './IPrivateConfig';
import {TaskTriggerType} from '../../entities/task/TaskScheduleDTO';
import {DefaultsTasks} from '../../entities/task/TaskDTO';
import {JobTriggerType} from '../../entities/job/JobScheduleDTO';
import {DefaultsJobs} from '../../entities/job/JobDTO';
/**
* This configuration will be only at backend
@ -74,19 +74,19 @@ export class PrivateConfigDefaultsClass extends PublicConfigClass implements IPr
Duplicates: {
listingLimit: 1000
},
Tasks: {
Jobs: {
scheduled: [{
taskName: DefaultsTasks[DefaultsTasks['Database Reset']],
jobName: DefaultsJobs[DefaultsJobs['Database Reset']],
config: {},
trigger: {type: TaskTriggerType.never}
trigger: {type: JobTriggerType.never}
}, {
taskName: DefaultsTasks[DefaultsTasks.Indexing],
jobName: DefaultsJobs[DefaultsJobs.Indexing],
config: {},
trigger: {type: TaskTriggerType.never}
trigger: {type: JobTriggerType.never}
}, {
taskName: DefaultsTasks[DefaultsTasks['Video Converting']],
jobName: DefaultsJobs[DefaultsJobs['Video Converting']],
config: {},
trigger: {type: TaskTriggerType.never}
trigger: {type: JobTriggerType.never}
}]
}
};

View File

@ -19,7 +19,8 @@ export enum ErrorCodes {
INPUT_ERROR = 12,
SETTINGS_ERROR = 13,
TASK_ERROR = 14
TASK_ERROR = 14,
JOB_ERROR = 15
}
export class ErrorDTO {

View File

@ -1,7 +1,7 @@
export type fieldType = 'string' | 'number' | 'boolean' | 'number-array';
export enum DefaultsTasks {
export enum DefaultsJobs {
Indexing = 1, 'Database Reset' = 2, 'Video Converting' = 3, 'Photo Converting' = 4, 'Thumbnail Generation' = 5
}
@ -12,7 +12,7 @@ export interface ConfigTemplateEntry {
defaultValue: any;
}
export interface TaskDTO {
export interface JobDTO {
Name: string;
ConfigTemplate: ConfigTemplateEntry[];
}

View File

@ -0,0 +1,28 @@
export enum JobTriggerType {
never = 1, scheduled = 2, periodic = 3
}
export interface JobTrigger {
type: JobTriggerType;
}
export interface NeverJobTrigger {
type: JobTriggerType.never;
}
export interface ScheduledJobTrigger extends JobTrigger {
type: JobTriggerType.scheduled;
time: number; // data time
}
export interface PeriodicJobTrigger extends JobTrigger {
type: JobTriggerType.periodic;
periodicity: number; // 0-6: week days 7 every day
atTime: number; // day time
}
export interface JobScheduleDTO {
jobName: string;
config: any;
trigger: NeverJobTrigger | ScheduledJobTrigger | PeriodicJobTrigger;
}

View File

@ -1,12 +1,12 @@
export enum TaskState {
export enum JobState {
idle = 1, running = 2, stopping = 3
}
export interface TaskProgressDTO {
export interface JobProgressDTO {
progress: number;
left: number;
state: TaskState;
state: JobState;
comment: string;
time: {
start: number,

View File

@ -1,28 +0,0 @@
export enum TaskTriggerType {
never = 1, scheduled = 2, periodic = 3
}
export interface TaskTrigger {
type: TaskTriggerType;
}
export interface NeverTaskTrigger {
type: TaskTriggerType.never;
}
export interface ScheduledTaskTrigger extends TaskTrigger {
type: TaskTriggerType.scheduled;
time: number; // data time
}
export interface PeriodicTaskTrigger extends TaskTrigger {
type: TaskTriggerType.periodic;
periodicity: number; // 0-6: week days 7 every day
atTime: number; // day time
}
export interface TaskScheduleDTO {
taskName: string;
config: any;
trigger: NeverTaskTrigger | ScheduledTaskTrigger | PeriodicTaskTrigger;
}

View File

@ -81,14 +81,13 @@ import {VersionService} from './model/version.service';
import {DirectoriesComponent} from './ui/gallery/directories/directories.component';
import {ControlsLightboxComponent} from './ui/gallery/lightbox/controls/controls.lightbox.gallery.component';
import {FacesSettingsComponent} from './ui/settings/faces/faces.settings.component';
import {TasksSettingsComponent} from './ui/settings/tasks/tasks.settings.component';
import {ScheduledTasksService} from './ui/settings/scheduled-tasks.service';
import {TimepickerModule} from 'ngx-bootstrap/timepicker';
import {TimeStampDatePickerComponent} from './ui/utils/timestamp-datepicker/datepicker.component';
import {TimeStampTimePickerComponent} from './ui/utils/timestamp-timepicker/timepicker.component';
import {TasksProgressComponent} from './ui/settings/tasks/progress/progress.tasks.settings.component';
import {PhotoSettingsComponent} from './ui/settings/photo/photo.settings.component';
import {JobProgressComponent} from './ui/settings/jobs/progress/job-progress.settings.component';
import {JobsSettingsComponent} from './ui/settings/jobs/jobs.settings.component';
import {ScheduledJobsService} from './ui/settings/scheduled-jobs.service';
@Injectable()
@ -198,8 +197,8 @@ export function translationsFactory(locale: string) {
FacesSettingsComponent,
OtherSettingsComponent,
IndexingSettingsComponent,
TasksProgressComponent,
TasksSettingsComponent,
JobProgressComponent,
JobsSettingsComponent,
// Pipes
StringifyRole,
IconizeSortingMethod,
@ -230,7 +229,7 @@ export function translationsFactory(locale: string) {
DuplicateService,
FacesService,
VersionService,
ScheduledTasksService,
ScheduledJobsService,
{
provide: TRANSLATIONS,
useFactory: translationsFactory,

View File

@ -105,9 +105,9 @@
<app-settings-indexing #setting #indexing
[hidden]="!indexing.HasAvailableSettings"
[simplifiedMode]="simplifiedMode"></app-settings-indexing>
<app-settings-tasks #setting #tasks
[hidden]="!tasks.HasAvailableSettings"
[simplifiedMode]="simplifiedMode"></app-settings-tasks>
<app-settings-jobs #setting #jobs
[hidden]="!jobs.HasAvailableSettings"
[simplifiedMode]="simplifiedMode"></app-settings-jobs>
</div>
</div>
</div>

View File

@ -108,7 +108,7 @@
<div *ngIf="Progress != null">
<app-settings-tasks-progress [progress]="Progress"></app-settings-tasks-progress>
<app-settings-job-progress [progress]="Progress"></app-settings-job-progress>
</div>
@ -123,7 +123,7 @@
</button>
<button class="btn btn-secondary ml-0"
*ngIf="Progress != null"
[disabled]="inProgress || Progress.state !== TaskState.running"
[disabled]="inProgress || Progress.state !== JobState.running"
(click)="cancelIndexing()" i18n>Cancel converting
</button>
<button class="btn btn-danger ml-2"

View File

@ -7,10 +7,10 @@ import {ErrorDTO} from '../../../../../common/entities/Error';
import {SettingsComponent} from '../_abstract/abstract.settings.component';
import {Utils} from '../../../../../common/Utils';
import {I18n} from '@ngx-translate/i18n-polyfill';
import {ScheduledTasksService} from '../scheduled-tasks.service';
import {DefaultsTasks} from '../../../../../common/entities/task/TaskDTO';
import {ScheduledJobsService} from '../scheduled-jobs.service';
import {DefaultsJobs} from '../../../../../common/entities/job/JobDTO';
import {ServerConfig} from '../../../../../common/config/private/IPrivateConfig';
import {TaskState} from '../../../../../common/entities/settings/TaskProgressDTO';
import {JobState} from '../../../../../common/entities/settings/JobProgressDTO';
@Component({
selector: 'app-settings-indexing',
@ -24,12 +24,12 @@ export class IndexingSettingsComponent extends SettingsComponent<ServerConfig.In
types: { key: number; value: string }[] = [];
TaskState = TaskState;
JobState = JobState;
constructor(_authService: AuthenticationService,
_navigation: NavigationService,
_settingsService: IndexingSettingsService,
public tasksService: ScheduledTasksService,
public jobsService: ScheduledJobsService,
notification: NotificationService,
i18n: I18n) {
@ -44,7 +44,7 @@ export class IndexingSettingsComponent extends SettingsComponent<ServerConfig.In
}
get Progress() {
return this.tasksService.progress.value[DefaultsTasks[DefaultsTasks.Indexing]];
return this.jobsService.progress.value[DefaultsJobs[DefaultsJobs.Indexing]];
}
get excludeFolderList(): string {
@ -65,12 +65,12 @@ export class IndexingSettingsComponent extends SettingsComponent<ServerConfig.In
ngOnDestroy() {
super.ngOnDestroy();
this.tasksService.unsubscribeFromProgress();
this.jobsService.unsubscribeFromProgress();
}
async ngOnInit() {
super.ngOnInit();
this.tasksService.subscribeToProgress();
this.jobsService.subscribeToProgress();
this.types = Utils
.enumToArray(ServerConfig.ReIndexingSensitivity);
this.types.forEach(v => {
@ -93,7 +93,7 @@ export class IndexingSettingsComponent extends SettingsComponent<ServerConfig.In
this.inProgress = true;
this.error = '';
try {
await this.tasksService.start(DefaultsTasks[DefaultsTasks.Indexing]);
await this.jobsService.start(DefaultsJobs[DefaultsJobs.Indexing]);
this.notification.info(this.i18n('Folder indexing started'));
this.inProgress = false;
return true;
@ -112,7 +112,7 @@ export class IndexingSettingsComponent extends SettingsComponent<ServerConfig.In
this.inProgress = true;
this.error = '';
try {
await this.tasksService.stop(DefaultsTasks[DefaultsTasks.Indexing]);
await this.jobsService.stop(DefaultsJobs[DefaultsJobs.Indexing]);
this.notification.info(this.i18n('Folder indexing interrupted'));
this.inProgress = false;
return true;
@ -131,7 +131,7 @@ export class IndexingSettingsComponent extends SettingsComponent<ServerConfig.In
this.inProgress = true;
this.error = '';
try {
await this.tasksService.start(DefaultsTasks[DefaultsTasks['Database Reset']]);
await this.jobsService.start(DefaultsJobs[DefaultsJobs['Database Reset']]);
this.notification.info(this.i18n('Resetting database'));
this.inProgress = false;
return true;

View File

@ -4,8 +4,8 @@ import {SettingsService} from '../settings.service';
import {AbstractSettingsService} from '../_abstract/abstract.settings.service';
import {BehaviorSubject} from 'rxjs';
import {StatisticDTO} from '../../../../../common/entities/settings/StatisticDTO';
import {ScheduledTasksService} from '../scheduled-tasks.service';
import {DefaultsTasks} from '../../../../../common/entities/task/TaskDTO';
import {ScheduledJobsService} from '../scheduled-jobs.service';
import {DefaultsJobs} from '../../../../../common/entities/job/JobDTO';
import {ServerConfig} from '../../../../../common/config/private/IPrivateConfig';
import {first} from 'rxjs/operators';
@ -16,7 +16,7 @@ export class IndexingSettingsService extends AbstractSettingsService<ServerConfi
public statistic: BehaviorSubject<StatisticDTO>;
constructor(private _networkService: NetworkService,
private _tasksService: ScheduledTasksService,
private _jobsService: ScheduledJobsService,
_settingsService: SettingsService) {
super(_settingsService);
this.statistic = new BehaviorSubject(null);
@ -25,9 +25,9 @@ export class IndexingSettingsService extends AbstractSettingsService<ServerConfi
this.loadStatistic();
}
});
this._tasksService.onTaskFinish.subscribe((taskName: string) => {
if (taskName === DefaultsTasks[DefaultsTasks.Indexing] ||
taskName === DefaultsTasks[DefaultsTasks['Database Reset']]) {
this._jobsService.onJobFinish.subscribe((jobName: string) => {
if (jobName === DefaultsJobs[DefaultsJobs.Indexing] ||
jobName === DefaultsJobs[DefaultsJobs['Database Reset']]) {
if (this.isSupported()) {
this.loadStatistic();
}

View File

@ -10,16 +10,16 @@
<div class="card bg-light">
<div class="card-header clickable" (click)="showDetails[i]=!showDetails[i]">
<div class="d-flex justify-content-between">
{{schedule.taskName}} @<!--
{{schedule.jobName}} @<!--
-->
<ng-container [ngSwitch]="schedule.trigger.type">
<ng-container *ngSwitchCase="TaskTriggerType.periodic">
<ng-container *ngSwitchCase="JobTriggerType.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>
*ngSwitchCase="JobTriggerType.scheduled">{{schedule.trigger.time | date:"medium"}}</ng-container>
<ng-container *ngSwitchCase="JobTriggerType.never" i18n>never</ng-container>
</ng-container>
<button class="btn btn-danger button-delete" (click)="remove(i)"><span class="oi oi-trash"></span>
</button>
@ -31,16 +31,16 @@
<div class="col-md-9">
<div class="form-group row">
<label class="col-md-2 control-label" [for]="'taskName'+i" i18n>Task:</label>
<label class="col-md-2 control-label" [for]="'jobName'+i" i18n>Job:</label>
<div class="col-md-10">
<select class="form-control" (change)="taskTypeChanged(schedule)" [(ngModel)]="schedule.taskName"
[name]="'taskName'+i" required>
<option *ngFor="let availableTask of _settingsService.availableTasks | async"
[ngValue]="availableTask.Name">{{availableTask.Name}}
<select class="form-control" (change)="jobTypeChanged(schedule)" [(ngModel)]="schedule.jobName"
[name]="'jobName'+i" required>
<option *ngFor="let availableJob of _settingsService.availableJobs | async"
[ngValue]="availableJob.Name">{{availableJob.Name}}
</option>
</select>
<small class="form-text text-muted"
i18n>Select a task to schedule.
i18n>Select a job to schedule.
</small>
</div>
</div>
@ -48,20 +48,20 @@
<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"
(ngModelChange)="taskTriggerTypeChanged($event,schedule)"
(ngModelChange)="jobTriggerTypeChanged($event,schedule)"
[name]="'repeatType'+i" required>
<option *ngFor="let taskTrigger of taskTriggerType"
[ngValue]="taskTrigger.key">{{taskTrigger.value}}
<option *ngFor="let jobTrigger of JobTriggerTypeMap"
[ngValue]="jobTrigger.key">{{jobTrigger.value}}
</option>
</select>
<small class="form-text text-muted"
i18n>Set the time to run the task.
i18n>Set the time to run the job.
</small>
</div>
</div>
<div class="form-group row" *ngIf="schedule.trigger.type == TaskTriggerType.scheduled">
<div class="form-group row" *ngIf="schedule.trigger.type == JobTriggerType.scheduled">
<label class="col-md-2 control-label" [for]="'triggerTime'+i" i18n>At:</label>
<div class="col-md-10">
<app-timestamp-datepicker
@ -71,7 +71,7 @@
</div>
</div>
<div class="form-group row" *ngIf="schedule.trigger.type == TaskTriggerType.periodic">
<div class="form-group row" *ngIf="schedule.trigger.type == JobTriggerType.periodic">
<label class="col-md-2 control-label" [for]="'periodicity'+i" i18n>At:</label>
<div class="col-md-10">
<select
@ -94,23 +94,23 @@
<div class="col-md-3">
<button class="btn btn-success float-right"
*ngIf="!tasksService.progress.value[schedule.taskName]"
*ngIf="!jobsService.progress.value[schedule.jobName]"
[disabled]="disableButtons"
title="Trigger task run manually"
title="Trigger job run manually"
i18n-title
(click)="start(schedule)" i18n>Start now
</button>
<button class="btn btn-secondary float-right"
*ngIf="tasksService.progress.value[schedule.taskName]"
[disabled]="disableButtons || tasksService.progress.value[schedule.taskName].state !== TaskState.running"
*ngIf="jobsService.progress.value[schedule.jobName]"
[disabled]="disableButtons || jobsService.progress.value[schedule.jobName].state !== JobState.running"
(click)="stop(schedule)" i18n>Stop
</button>
</div>
</div>
<ng-container *ngIf="getConfigTemplate(schedule.taskName) ">
<ng-container *ngIf="getConfigTemplate(schedule.jobName) ">
<hr/>
<div *ngFor="let configEntry of getConfigTemplate(schedule.taskName)">
<div *ngFor="let configEntry of getConfigTemplate(schedule.jobName)">
<ng-container [ngSwitch]="configEntry.type">
<ng-container *ngSwitchCase="'boolean'">
<div class="form-group row">
@ -175,10 +175,10 @@
</div>
</ng-container>
</div>
<app-settings-tasks-progress
<app-settings-job-progress
class="card-footer bg-transparent"
[progress]="tasksService.progress.value[schedule.taskName]">
</app-settings-tasks-progress>
[progress]="jobsService.progress.value[schedule.jobName]">
</app-settings-job-progress>
</div>
</div>
@ -191,7 +191,7 @@
(click)="reset()" i18n>Reset
</button>
<button class="btn btn-primary float-right"
(click)="addNewTask()" i18n>+ Add task
(click)="addNewJob()" i18n>+ Add Job
</button>
</div>

View File

@ -1,58 +1,58 @@
import {Component, OnChanges, OnDestroy, OnInit} from '@angular/core';
import {TasksSettingsService} from './tasks.settings.service';
import {JobsSettingsService} from './jobs.settings.service';
import {AuthenticationService} from '../../../model/network/authentication.service';
import {NavigationService} from '../../../model/navigation.service';
import {NotificationService} from '../../../model/notification.service';
import {SettingsComponent} from '../_abstract/abstract.settings.component';
import {I18n} from '@ngx-translate/i18n-polyfill';
import {ErrorDTO} from '../../../../../common/entities/Error';
import {ScheduledTasksService} from '../scheduled-tasks.service';
import {ScheduledJobsService} from '../scheduled-jobs.service';
import {
NeverTaskTrigger,
PeriodicTaskTrigger,
ScheduledTaskTrigger,
TaskScheduleDTO,
TaskTriggerType
} from '../../../../../common/entities/task/TaskScheduleDTO';
NeverJobTrigger,
PeriodicJobTrigger,
ScheduledJobTrigger,
JobScheduleDTO,
JobTriggerType
} from '../../../../../common/entities/job/JobScheduleDTO';
import {Utils} from '../../../../../common/Utils';
import {ServerConfig} from '../../../../../common/config/private/IPrivateConfig';
import {ConfigTemplateEntry} from '../../../../../common/entities/task/TaskDTO';
import {TaskState} from '../../../../../common/entities/settings/TaskProgressDTO';
import {ConfigTemplateEntry} from '../../../../../common/entities/job/JobDTO';
import {JobState} from '../../../../../common/entities/settings/JobProgressDTO';
@Component({
selector: 'app-settings-tasks',
templateUrl: './tasks.settings.component.html',
styleUrls: ['./tasks.settings.component.css',
selector: 'app-settings-jobs',
templateUrl: './jobs.settings.component.html',
styleUrls: ['./jobs.settings.component.css',
'../_abstract/abstract.settings.component.css'],
providers: [TasksSettingsService]
providers: [JobsSettingsService]
})
export class TasksSettingsComponent extends SettingsComponent<ServerConfig.TaskConfig, TasksSettingsService>
export class JobsSettingsComponent extends SettingsComponent<ServerConfig.JobConfig, JobsSettingsService>
implements OnInit, OnDestroy, OnChanges {
disableButtons = false;
taskTriggerType: { key: number, value: string }[];
TaskTriggerType = TaskTriggerType;
JobTriggerTypeMap: { key: number, value: string }[];
JobTriggerType = JobTriggerType;
periods: string[] = [];
showDetails: boolean[] = [];
TaskState = TaskState;
JobState = JobState;
constructor(_authService: AuthenticationService,
_navigation: NavigationService,
_settingsService: TasksSettingsService,
public tasksService: ScheduledTasksService,
_settingsService: JobsSettingsService,
public jobsService: ScheduledJobsService,
notification: NotificationService,
i18n: I18n) {
super(i18n('Tasks'),
super(i18n('Jobs'),
_authService,
_navigation,
_settingsService,
notification,
i18n,
s => s.Server.Tasks);
s => s.Server.Jobs);
this.hasAvailableSettings = !this.simplifiedMode;
this.taskTriggerType = Utils.enumToArray(TaskTriggerType);
this.JobTriggerTypeMap = Utils.enumToArray(JobTriggerType);
this.periods = [this.i18n('Monday'), // 0
this.i18n('Tuesday'), // 1
this.i18n('Wednesday'), // 2
@ -65,32 +65,32 @@ export class TasksSettingsComponent extends SettingsComponent<ServerConfig.TaskC
getConfigTemplate(taskName: string): ConfigTemplateEntry[] {
const task = this._settingsService.availableTasks.value.find(t => t.Name === taskName);
if (task && task.ConfigTemplate && task.ConfigTemplate.length > 0) {
return task.ConfigTemplate;
getConfigTemplate(JobName: string): ConfigTemplateEntry[] {
const job = this._settingsService.availableJobs.value.find(t => t.Name === JobName);
if (job && job.ConfigTemplate && job.ConfigTemplate.length > 0) {
return job.ConfigTemplate;
}
return null;
}
ngOnInit() {
super.ngOnInit();
this.tasksService.subscribeToProgress();
this._settingsService.getAvailableTasks();
this.jobsService.subscribeToProgress();
this._settingsService.getAvailableJobs();
}
ngOnDestroy() {
super.ngOnDestroy();
this.tasksService.unsubscribeFromProgress();
this.jobsService.unsubscribeFromProgress();
}
public async start(schedule: TaskScheduleDTO) {
public async start(schedule: JobScheduleDTO) {
this.error = '';
try {
this.disableButtons = true;
await this.tasksService.start(schedule.taskName, schedule.config);
this.notification.info(this.i18n('Task') + ' ' + schedule.taskName + ' ' + this.i18n('started'));
await this.jobsService.start(schedule.jobName, schedule.config);
this.notification.info(this.i18n('Job') + ' ' + schedule.jobName + ' ' + this.i18n('started'));
return true;
} catch (err) {
console.log(err);
@ -104,12 +104,12 @@ export class TasksSettingsComponent extends SettingsComponent<ServerConfig.TaskC
return false;
}
public async stop(schedule: TaskScheduleDTO) {
public async stop(schedule: JobScheduleDTO) {
this.error = '';
try {
this.disableButtons = true;
await this.tasksService.stop(schedule.taskName);
this.notification.info(this.i18n('Task') + ' ' + schedule.taskName + ' ' + this.i18n('stopped'));
await this.jobsService.stop(schedule.jobName);
this.notification.info(this.i18n('Job') + ' ' + schedule.jobName + ' ' + this.i18n('stopped'));
return true;
} catch (err) {
console.log(err);
@ -128,38 +128,38 @@ export class TasksSettingsComponent extends SettingsComponent<ServerConfig.TaskC
}
taskTypeChanged(schedule: TaskScheduleDTO) {
const task = this._settingsService.availableTasks.value.find(t => t.Name === schedule.taskName);
jobTypeChanged(schedule: JobScheduleDTO) {
const job = this._settingsService.availableJobs.value.find(t => t.Name === schedule.jobName);
schedule.config = schedule.config || {};
task.ConfigTemplate.forEach(ct => schedule.config[ct.id] = ct.defaultValue);
job.ConfigTemplate.forEach(ct => schedule.config[ct.id] = ct.defaultValue);
}
addNewTask() {
const taskName = this._settingsService.availableTasks.value[0].Name;
const newSchedule: TaskScheduleDTO = {
taskName: taskName,
addNewJob() {
const jobName = this._settingsService.availableJobs.value[0].Name;
const newSchedule: JobScheduleDTO = {
jobName: jobName,
config: <any>{},
trigger: {
type: TaskTriggerType.never
type: JobTriggerType.never
}
};
const task = this._settingsService.availableTasks.value.find(t => t.Name === taskName);
const job = this._settingsService.availableJobs.value.find(t => t.Name === jobName);
newSchedule.config = newSchedule.config || {};
task.ConfigTemplate.forEach(ct => newSchedule.config[ct.id] = ct.defaultValue);
job.ConfigTemplate.forEach(ct => newSchedule.config[ct.id] = ct.defaultValue);
this.settings.scheduled.push(newSchedule);
}
taskTriggerTypeChanged(triggerType: TaskTriggerType, schedule: TaskScheduleDTO) {
schedule.trigger = <NeverTaskTrigger>{type: triggerType};
jobTriggerTypeChanged(triggerType: JobTriggerType, schedule: JobScheduleDTO) {
schedule.trigger = <NeverJobTrigger>{type: triggerType};
switch (triggerType) {
case TaskTriggerType.scheduled:
(<ScheduledTaskTrigger><unknown>schedule.trigger).time = (Date.now());
case JobTriggerType.scheduled:
(<ScheduledJobTrigger><unknown>schedule.trigger).time = (Date.now());
break;
case TaskTriggerType.periodic:
(<PeriodicTaskTrigger><unknown>schedule.trigger).periodicity = null;
(<PeriodicTaskTrigger><unknown>schedule.trigger).atTime = null;
case JobTriggerType.periodic:
(<PeriodicJobTrigger><unknown>schedule.trigger).periodicity = null;
(<PeriodicJobTrigger><unknown>schedule.trigger).atTime = null;
break;
}
}

View File

@ -3,23 +3,23 @@ import {NetworkService} from '../../../model/network/network.service';
import {SettingsService} from '../settings.service';
import {AbstractSettingsService} from '../_abstract/abstract.settings.service';
import {BehaviorSubject} from 'rxjs';
import {TaskDTO} from '../../../../../common/entities/task/TaskDTO';
import {JobDTO} from '../../../../../common/entities/job/JobDTO';
import {ServerConfig} from '../../../../../common/config/private/IPrivateConfig';
@Injectable()
export class TasksSettingsService extends AbstractSettingsService<ServerConfig.TaskConfig> {
export class JobsSettingsService extends AbstractSettingsService<ServerConfig.JobConfig> {
public availableTasks: BehaviorSubject<TaskDTO[]>;
public availableJobs: BehaviorSubject<JobDTO[]>;
constructor(private _networkService: NetworkService,
_settingsService: SettingsService) {
super(_settingsService);
this.availableTasks = new BehaviorSubject([]);
this.availableJobs = new BehaviorSubject([]);
}
public updateSettings(settings: ServerConfig.TaskConfig): Promise<void> {
return this._networkService.putJson('/settings/tasks', {settings: settings});
public updateSettings(settings: ServerConfig.JobConfig): Promise<void> {
return this._networkService.putJson('/settings/jobs', {settings: settings});
}
@ -32,8 +32,8 @@ export class TasksSettingsService extends AbstractSettingsService<ServerConfig.T
}
public async getAvailableTasks() {
this.availableTasks.next(await this._networkService.getJson<TaskDTO[]>('/admin/tasks/available'));
public async getAvailableJobs() {
this.availableJobs.next(await this._networkService.getJson<JobDTO[]>('/admin/jobs/available'));
}
}

View File

@ -2,9 +2,9 @@
<div class="form-group row">
<div class="col-md-12">
<input *ngIf="progress.state === TaskState.running" type="text" class="form-control" disabled
<input *ngIf="progress.state === JobState.running" type="text" class="form-control" disabled
[ngModel]="progress.comment" name="details">
<input *ngIf="progress.state === TaskState.stopping" type="text" class="form-control" disabled value="Stopping"
<input *ngIf="progress.state === JobState.stopping" type="text" class="form-control" disabled value="Stopping"
i18n-value name="details">
</div>
</div>
@ -15,7 +15,7 @@
<div class="progress col-10 ">
<div
*ngIf="progress.progress + progress.left >0"
class="progress-bar d-inline-block progress-bar-success {{progress.state === TaskState.stopping ? 'bg-secondary' : ''}}"
class="progress-bar d-inline-block progress-bar-success {{progress.state === JobState.stopping ? 'bg-secondary' : ''}}"
role="progressbar"
aria-valuenow="2"
aria-valuemin="0"
@ -26,7 +26,7 @@
</div>
<div
*ngIf="progress.progress + progress.left === 0"
class="progress-bar d-inline-block progress-bar-success progress-bar-striped progress-bar-animated {{progress.state === TaskState.stopping ? 'bg-secondary' : ''}}"
class="progress-bar d-inline-block progress-bar-success progress-bar-striped progress-bar-animated {{progress.state === JobState.stopping ? 'bg-secondary' : ''}}"
role="progressbar" aria-valuenow="100"
aria-valuemin="0" aria-valuemax="100" style="width: 100%">
</div>

View File

@ -1,16 +1,16 @@
import {Component, Input, OnChanges, OnDestroy} from '@angular/core';
import {TaskProgressDTO, TaskState} from '../../../../../../common/entities/settings/TaskProgressDTO';
import {JobProgressDTO, JobState} from '../../../../../../common/entities/settings/JobProgressDTO';
import {Subscription, timer} from 'rxjs';
@Component({
selector: 'app-settings-tasks-progress',
templateUrl: './progress.tasks.settings.component.html',
styleUrls: ['./progress.tasks.settings.component.css']
selector: 'app-settings-job-progress',
templateUrl: './job-progress.settings.component.html',
styleUrls: ['./job-progress.settings.component.css']
})
export class TasksProgressComponent implements OnDestroy, OnChanges {
export class JobProgressComponent implements OnDestroy, OnChanges {
@Input() progress: TaskProgressDTO;
TaskState = TaskState;
@Input() progress: JobProgressDTO;
JobState = JobState;
timeCurrentCopy: number;
private timerSub: Subscription;

View File

@ -110,7 +110,7 @@
</button>
<button class="btn btn-secondary float-left ml-0"
*ngIf="Progress != null"
[disabled]="inProgress || Progress.state !== TaskState.running"
[disabled]="inProgress || Progress.state !== JobState.running"
(click)="cancelPhotoConverting()" i18n>Cancel converting
</button>
@ -118,7 +118,7 @@
<ng-container *ngIf="Progress != null">
<br/>
<hr/>
<app-settings-tasks-progress [progress]="Progress"></app-settings-tasks-progress>
<app-settings-job-progress [progress]="Progress"></app-settings-job-progress>
</ng-container>
</div>

View File

@ -6,12 +6,12 @@ import {NavigationService} from '../../../model/navigation.service';
import {NotificationService} from '../../../model/notification.service';
import {ClientConfig} from '../../../../../common/config/public/ConfigClass';
import {I18n} from '@ngx-translate/i18n-polyfill';
import {ScheduledTasksService} from '../scheduled-tasks.service';
import {ScheduledJobsService} from '../scheduled-jobs.service';
import {ServerConfig} from '../../../../../common/config/private/IPrivateConfig';
import {Utils} from '../../../../../common/Utils';
import {DefaultsTasks} from '../../../../../common/entities/task/TaskDTO';
import {DefaultsJobs} from '../../../../../common/entities/job/JobDTO';
import {ErrorDTO} from '../../../../../common/entities/Error';
import {TaskState} from '../../../../../common/entities/settings/TaskProgressDTO';
import {JobState} from '../../../../../common/entities/settings/JobProgressDTO';
@Component({
@ -28,7 +28,7 @@ export class PhotoSettingsComponent extends SettingsComponent<{
}> {
resolutions = [720, 1080, 1440, 2160, 4320];
PhotoProcessingLib = ServerConfig.PhotoProcessingLib;
TaskState = TaskState;
JobState = JobState;
libTypes = Utils
.enumToArray(ServerConfig.PhotoProcessingLib).map((v) => {
@ -43,7 +43,7 @@ export class PhotoSettingsComponent extends SettingsComponent<{
constructor(_authService: AuthenticationService,
_navigation: NavigationService,
_settingsService: PhotoSettingsService,
public tasksService: ScheduledTasksService,
public jobsService: ScheduledJobsService,
notification: NotificationService,
i18n: I18n) {
super(i18n('Photo'), _authService, _navigation, _settingsService, notification, i18n, s => ({
@ -59,14 +59,14 @@ export class PhotoSettingsComponent extends SettingsComponent<{
get Progress() {
return this.tasksService.progress.value[DefaultsTasks[DefaultsTasks['Photo Converting']]];
return this.jobsService.progress.value[DefaultsJobs[DefaultsJobs['Photo Converting']]];
}
async convertPhoto() {
this.inProgress = true;
this.error = '';
try {
await this.tasksService.start(DefaultsTasks[DefaultsTasks['Photo Converting']]);
await this.jobsService.start(DefaultsJobs[DefaultsJobs['Photo Converting']]);
this.notification.info(this.i18n('Photo converting started'));
return true;
} catch (err) {
@ -85,7 +85,7 @@ export class PhotoSettingsComponent extends SettingsComponent<{
this.inProgress = true;
this.error = '';
try {
await this.tasksService.stop(DefaultsTasks[DefaultsTasks['Photo Converting']]);
await this.jobsService.stop(DefaultsJobs[DefaultsJobs['Photo Converting']]);
this.notification.info(this.i18n('Photo converting interrupted'));
return true;
} catch (err) {

View File

@ -1,14 +1,14 @@
import {EventEmitter, Injectable} from '@angular/core';
import {BehaviorSubject} from 'rxjs';
import {TaskProgressDTO} from '../../../../common/entities/settings/TaskProgressDTO';
import {JobProgressDTO} from '../../../../common/entities/settings/JobProgressDTO';
import {NetworkService} from '../../model/network/network.service';
@Injectable()
export class ScheduledTasksService {
export class ScheduledJobsService {
public progress: BehaviorSubject<{ [key: string]: TaskProgressDTO }>;
public onTaskFinish: EventEmitter<string> = new EventEmitter<string>();
public progress: BehaviorSubject<{ [key: string]: JobProgressDTO }>;
public onJobFinish: EventEmitter<string> = new EventEmitter<string>();
timer: number = null;
private subscribers = 0;
@ -16,13 +16,13 @@ export class ScheduledTasksService {
this.progress = new BehaviorSubject({});
}
public calcTimeElapsed(progress: TaskProgressDTO) {
public calcTimeElapsed(progress: JobProgressDTO) {
if (progress) {
return (progress.time.current - progress.time.start);
}
}
public calcTimeLeft(progress: TaskProgressDTO) {
public calcTimeLeft(progress: JobProgressDTO) {
if (progress) {
return (progress.time.current - progress.time.start) / progress.progress * progress.left;
}
@ -41,21 +41,21 @@ export class ScheduledTasksService {
}
public async start(id: string, config?: any): Promise<void> {
await this._networkService.postJson('/admin/tasks/scheduled/' + id + '/start', {config: config});
await this._networkService.postJson('/admin/jobs/scheduled/' + id + '/start', {config: config});
this.forceUpdate();
}
public async stop(id: string): Promise<void> {
await this._networkService.postJson('/admin/tasks/scheduled/' + id + '/stop');
await this._networkService.postJson('/admin/jobs/scheduled/' + id + '/stop');
this.forceUpdate();
}
protected async getProgress(): Promise<void> {
const prevPrg = this.progress.value;
this.progress.next(await this._networkService.getJson<{ [key: string]: TaskProgressDTO }>('/admin/tasks/scheduled/progress'));
this.progress.next(await this._networkService.getJson<{ [key: string]: JobProgressDTO }>('/admin/jobs/scheduled/progress'));
for (const prg in prevPrg) {
if (!this.progress.value.hasOwnProperty(prg)) {
this.onTaskFinish.emit(prg);
this.onJobFinish.emit(prg);
}
}
}

View File

@ -80,21 +80,21 @@
[disabled]="inProgress"
title="Generates all thumbnails now"
i18n-title
(click)="startTask()">
(click)="startJob()">
<ng-container i18n>Generate thumbnails now</ng-container>
<span class="oi oi-media-play ml-2"></span>
</button>
<button class="btn btn-secondary float-left ml-0"
*ngIf="Progress != null"
[disabled]="inProgress || Progress.state !== TaskState.running"
(click)="cancelTask()" i18n>Cancel thumbnail generation
[disabled]="inProgress || Progress.state !== JobState.running"
(click)="cancelJob()" i18n>Cancel thumbnail generation
</button>
<ng-container *ngIf="Progress != null">
<br/>
<hr/>
<app-settings-tasks-progress [progress]="Progress"></app-settings-tasks-progress>
<app-settings-job-progress [progress]="Progress"></app-settings-job-progress>
</ng-container>
</div>

View File

@ -7,10 +7,10 @@ import {ClientConfig} from '../../../../../common/config/public/ConfigClass';
import {ThumbnailSettingsService} from './thumbnail.settings.service';
import {I18n} from '@ngx-translate/i18n-polyfill';
import {ServerConfig} from '../../../../../common/config/private/IPrivateConfig';
import {DefaultsTasks} from '../../../../../common/entities/task/TaskDTO';
import {DefaultsJobs} from '../../../../../common/entities/job/JobDTO';
import {ErrorDTO} from '../../../../../common/entities/Error';
import {ScheduledTasksService} from '../scheduled-tasks.service';
import {TaskState} from '../../../../../common/entities/settings/TaskProgressDTO';
import {ScheduledJobsService} from '../scheduled-jobs.service';
import {JobState} from '../../../../../common/entities/settings/JobProgressDTO';
@Component({
selector: 'app-settings-thumbnail',
@ -22,13 +22,13 @@ import {TaskState} from '../../../../../common/entities/settings/TaskProgressDTO
export class ThumbnailSettingsComponent
extends SettingsComponent<{ server: ServerConfig.ThumbnailConfig, client: ClientConfig.ThumbnailConfig }>
implements OnInit {
TaskState = TaskState;
JobState = JobState;
constructor(_authService: AuthenticationService,
_navigation: NavigationService,
_settingsService: ThumbnailSettingsService,
notification: NotificationService,
public tasksService: ScheduledTasksService,
public jobsService: ScheduledJobsService,
i18n: I18n) {
super(i18n('Thumbnail'), _authService, _navigation, _settingsService, notification, i18n, s => ({
client: s.Client.Media.Thumbnail,
@ -49,18 +49,18 @@ export class ThumbnailSettingsComponent
}
get Progress() {
return this.tasksService.progress.value[DefaultsTasks[DefaultsTasks['Thumbnail Generation']]];
return this.jobsService.progress.value[DefaultsJobs[DefaultsJobs['Thumbnail Generation']]];
}
ngOnInit() {
super.ngOnInit();
}
async startTask() {
async startJob() {
this.inProgress = true;
this.error = '';
try {
await this.tasksService.start(DefaultsTasks[DefaultsTasks['Thumbnail Generation']], {sizes: this.original.client.thumbnailSizes[0]});
await this.jobsService.start(DefaultsJobs[DefaultsJobs['Thumbnail Generation']], {sizes: this.original.client.thumbnailSizes[0]});
this.notification.info(this.i18n('Thumbnail generation started'));
this.inProgress = false;
return true;
@ -75,11 +75,11 @@ export class ThumbnailSettingsComponent
return false;
}
async cancelTask() {
async cancelJob() {
this.inProgress = true;
this.error = '';
try {
await this.tasksService.stop(DefaultsTasks[DefaultsTasks['Thumbnail Generation']]);
await this.jobsService.stop(DefaultsJobs[DefaultsJobs['Thumbnail Generation']]);
this.notification.info(this.i18n('Thumbnail generation interrupted'));
this.inProgress = false;
return true;

View File

@ -36,7 +36,7 @@
server's upload rate.
</ng-container>&nbsp;
<ng-container i18n>The transcoded videos will be save to the thumbnail folder.</ng-container>&nbsp;
<ng-container i18n>You can trigger the transcoding manually, but you can also create an automatic encoding task
<ng-container i18n>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</ng-container>&nbsp;
@ -136,7 +136,7 @@
</button>
<button class="btn btn-secondary float-left ml-0"
*ngIf="Progress != null"
[disabled]="inProgress || Progress.state !== TaskState.running"
[disabled]="inProgress || Progress.state !== JobState.running"
(click)="cancelTranscoding()" i18n>Cancel transcoding
</button>
@ -144,7 +144,7 @@
<ng-container *ngIf="Progress != null">
<br/>
<hr/>
<app-settings-tasks-progress [progress]="Progress"></app-settings-tasks-progress>
<app-settings-job-progress [progress]="Progress"></app-settings-job-progress>
</ng-container>

View File

@ -6,11 +6,11 @@ import {NavigationService} from '../../../model/navigation.service';
import {NotificationService} from '../../../model/notification.service';
import {ClientConfig} from '../../../../../common/config/public/ConfigClass';
import {I18n} from '@ngx-translate/i18n-polyfill';
import {ScheduledTasksService} from '../scheduled-tasks.service';
import {DefaultsTasks} from '../../../../../common/entities/task/TaskDTO';
import {ScheduledJobsService} from '../scheduled-jobs.service';
import {DefaultsJobs} from '../../../../../common/entities/job/JobDTO';
import {ErrorDTO} from '../../../../../common/entities/Error';
import {ServerConfig} from '../../../../../common/config/private/IPrivateConfig';
import { TaskState } from '../../../../../common/entities/settings/TaskProgressDTO';
import { JobState } from '../../../../../common/entities/settings/JobProgressDTO';
@Component({
@ -27,12 +27,12 @@ export class VideoSettingsComponent extends SettingsComponent<{ server: ServerCo
formats: ServerConfig.formatType[] = ['mp4', 'webm'];
fps = [24, 25, 30, 48, 50, 60];
TaskState = TaskState;
JobState = JobState;
constructor(_authService: AuthenticationService,
_navigation: NavigationService,
_settingsService: VideoSettingsService,
public tasksService: ScheduledTasksService,
public jobsService: ScheduledJobsService,
notification: NotificationService,
i18n: I18n) {
super(i18n('Video'), _authService, _navigation, _settingsService, notification, i18n, s => ({
@ -48,7 +48,7 @@ export class VideoSettingsComponent extends SettingsComponent<{ server: ServerCo
get Progress() {
return this.tasksService.progress.value[DefaultsTasks[DefaultsTasks['Video Converting']]];
return this.jobsService.progress.value[DefaultsJobs[DefaultsJobs['Video Converting']]];
}
get bitRate(): number {
@ -96,7 +96,7 @@ export class VideoSettingsComponent extends SettingsComponent<{ server: ServerCo
this.inProgress = true;
this.error = '';
try {
await this.tasksService.start(DefaultsTasks[DefaultsTasks['Video Converting']]);
await this.jobsService.start(DefaultsJobs[DefaultsJobs['Video Converting']]);
this.notification.info(this.i18n('Video transcoding started'));
this.inProgress = false;
return true;
@ -115,7 +115,7 @@ export class VideoSettingsComponent extends SettingsComponent<{ server: ServerCo
this.inProgress = true;
this.error = '';
try {
await this.tasksService.stop(DefaultsTasks[DefaultsTasks['Video Converting']]);
await this.jobsService.stop(DefaultsJobs[DefaultsJobs['Video Converting']]);
this.notification.info(this.i18n('Video transcoding interrupted'));
this.inProgress = false;
return true;

View File

@ -694,8 +694,8 @@
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">189</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<target>Save</target>
</trans-unit>
@ -751,8 +751,8 @@
<context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">193</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">191</context>
</context-group>
<target>Reset</target>
</trans-unit>
@ -871,9 +871,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">56</context>
</context-group>
<target>The best matching size will be generated. (More sizes give better quality, but use more
storage and CPU to render.)
</target>
<target>The best matching size will be generated. (More sizes give better quality, but use more storage and CPU to render.)</target>
</trans-unit>
<trans-unit id="acee7864683576e1e4f159e725db24ddeee32e1c" datatype="html">
<source>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
@ -883,9 +881,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">60</context>
</context-group>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
pixels.
</target>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160 pixels.</target>
</trans-unit>
<trans-unit id="5e561ce99009d20e901f7aef3c4f867a519ca9f0" datatype="html">
<source>Generate thumbnails now</source>
@ -910,8 +906,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">90</context>
</context-group>
<target>Cancel thumbnail generation
</target>
<target>Cancel thumbnail generation</target>
</trans-unit>
<trans-unit id="69149fe434cf1b0d9bafe5ead5d126101bb5162e" datatype="html">
<source>Video support uses ffmpeg. ffmpeg and ffprobe binaries need to be available in the PATH or
@ -951,8 +946,8 @@
</context-group>
<target>The transcoded videos will be save to the thumbnail folder.</target>
</trans-unit>
<trans-unit id="9ca8b858f4f19476c64b5f4b6416e8e8210c7f1e" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding task
<trans-unit id="5c159049e5e44f672041b3ff2c85328cda14a740" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</source>
@ -960,7 +955,10 @@
<context context-type="sourcefile">app/ui/settings/video/video.settings.component.html</context>
<context context-type="linenumber">39</context>
</context-group>
<target>You can trigger the transcoding manually, but you can also create an automatic encoding task in advanced settings mode.</target>
<target>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</target>
</trans-unit>
<trans-unit id="7722a92a1fc887570b4f4d8a7bb916f067f32028" datatype="html">
<source>Format</source>
@ -1133,8 +1131,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">53</context>
</context-group>
<target>Downsizes photos for faster preview loading. (Zooming in to the photo
loads the original)</target>
<target>Downsizes photos for faster preview loading. (Zooming in to the photo loads the original)</target>
</trans-unit>
<trans-unit id="45becd33ed4f2f1a19f2040b4624968677f7b02b" datatype="html">
<source>On the fly converting </source>
@ -1142,7 +1139,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">59</context>
</context-group>
<target>On the fly converting </target>
<target>On the fly converting</target>
</trans-unit>
<trans-unit id="a9a7b9d2773aa49ff4f41b01b55e0a51d664eecf" datatype="html">
<source>Converts photos on the fly, when they are requested.</source>
@ -1160,9 +1157,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">85</context>
</context-group>
<target>The shorter edge of the converted photo will be scaled down to this,
while
keeping the aspect ratio.</target>
<target>The shorter edge of the converted photo will be scaled down to this, while keeping the aspect ratio.</target>
</trans-unit>
<trans-unit id="4b9cafd261787994f5e6ab5c2fbab785156037ef" datatype="html">
<source>Convert photos now</source>
@ -1179,8 +1174,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">114</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="219e36c6747ef991081a68fc8ab2678677583e11" datatype="html">
<source>Reads and show *.gpx files on the map</source>
@ -1268,11 +1262,7 @@
<context context-type="sourcefile">app/ui/settings/random-photo/random-photo.settings.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<target>
This feature enables you to generate 'random photo' urls.
That URL returns a photo random selected from your gallery.
You can use the url with 3rd party application like random changing desktop background.
</target>
<target>This feature enables you to generate 'random photo' urls. That URL returns a photo random selected from your gallery. You can use the url with 3rd party application like random changing desktop background.</target>
</trans-unit>
<trans-unit id="6c02e8541a2e670f80de8b5a218ea14a16bb6c42" datatype="html">
<source>
@ -1759,8 +1749,7 @@
<context context-type="sourcefile">app/ui/settings/indexing/indexing.settings.component.html</context>
<context context-type="linenumber">127</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="ab4d309abbd8f981e3157ae6924b1962b69c3e36" datatype="html">
<source>Reset Indexes
@ -1816,7 +1805,7 @@
<trans-unit id="6f905843264b6935f11115fb91b72ce4f2aafd75" datatype="html">
<source>Stopping</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<target>Stopping</target>
@ -1824,7 +1813,7 @@
<trans-unit id="9f2195bf10299534034510f387621199db784343" datatype="html">
<source>time elapsed</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<target>time elapsed</target>
@ -1832,88 +1821,76 @@
<trans-unit id="35511807089eb9a1864bec06e28d57e04b4c8f87" datatype="html">
<source>time left</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="linenumber">28</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>time left</target>
</trans-unit>
<trans-unit id="18443428b116a10f17fbd067bde0553c00db45f1" datatype="html">
<source>every</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">85</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<target>every</target>
</trans-unit>
<trans-unit id="e113e3450a367a1dff703fc5e0403a497ca73a7c" datatype="html">
<source>never</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">23</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<target>never</target>
</trans-unit>
<trans-unit id="b51d9edc98562fb34f39d48bbd177db63f74fe8d" datatype="html">
<source>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</source>
<trans-unit id="89dc7dff0be8b6a3443789ff1e7469f47d92935e" datatype="html">
<source>Job:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">26</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</target>
<target>Job:</target>
</trans-unit>
<trans-unit id="41f883b96980ad03407749f5c0b2523528924dda" datatype="html">
<source>Task:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">36</context>
</context-group>
<target>Task:</target>
</trans-unit>
<trans-unit id="9bcffeb5af739217ecbeec01abeb14126b20bdda" datatype="html">
<source>Select a task to schedule.
<trans-unit id="0b87ca794b645dc89e2efe8478c401c605e03861" datatype="html">
<source>Select a job to schedule.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">45</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<target>Select a task to schedule.</target>
<target>Select a job to schedule.
</target>
</trans-unit>
<trans-unit id="f336006fe51502c7da913994e14a3137dd5c5009" datatype="html">
<source>Periodicity:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">48</context>
</context-group>
<target>Periodicity:</target>
</trans-unit>
<trans-unit id="63082f0e453734275af4e538827c1ae06d04ef52" datatype="html">
<source>Set the time to run the task.
<trans-unit id="40aec3d7895a3d8dafac6fe442e45150769950ae" datatype="html">
<source>Set the time to run the job.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">60</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">58</context>
</context-group>
<target>Set the time to run the task.</target>
<target>Set the time to run the job.
</target>
</trans-unit>
<trans-unit id="ef36f0dc0067decf548cc11905ef3100f5bbd004" datatype="html">
<source>At:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">67</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">77</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">75</context>
</context-group>
<target>At:</target>
</trans-unit>
@ -1921,44 +1898,45 @@
<source>Start now
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">103</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">101</context>
</context-group>
<target>Start now</target>
</trans-unit>
<trans-unit id="cfbd068646ce959a640ab824e85e1ed3ab20c5f2" datatype="html">
<source>Trigger task run manually</source>
<trans-unit id="75bfaf8c39c31b82e233afbbc1175d1a49ef172f" datatype="html">
<source>Trigger job run manually</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">101</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">99</context>
</context-group>
<target>Trigger task run manually</target>
<target>Trigger job run manually</target>
</trans-unit>
<trans-unit id="493a5cb077ced16ccc13431ea5e2067eb40cd957" datatype="html">
<source>Stop
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">108</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">106</context>
</context-group>
<target>Stop</target>
</trans-unit>
<trans-unit id="eecad7f2f355d4ae0baed11537a10ceaebbc7382" datatype="html">
<source>';' separated integers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">171</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">169</context>
</context-group>
<target>';' separated integers.</target>
</trans-unit>
<trans-unit id="87dc7285ddadbe21ac1770275d35e8c747e0eb26" datatype="html">
<source>+ Add task
<trans-unit id="6ff865ebc673e7fe5ed9367575e44833ef811693" datatype="html">
<source>+ Add Job
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">196</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<target>+ Add task</target>
<target>+ Add Job
</target>
</trans-unit>
<trans-unit id="85b9773b9a3caeb9f0fd69b2b8fa7284bda6b492" datatype="html">
<source>Server error</source>
@ -2063,6 +2041,22 @@
</context-group>
<target>Simplified</target>
</trans-unit>
<trans-unit id="f56c1efc2bd6e9eb87cd271ea47ab620445012a2" datatype="html">
<source>Built at</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Built at</target>
</trans-unit>
<trans-unit id="f620bdd6f6bdd3330d7f3786caa97cbba9cbde5a" datatype="html">
<source>git hash</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>git hash</target>
</trans-unit>
<trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">
<source>Images</source>
<context-group purpose="location">
@ -2267,6 +2261,106 @@
</context-group>
<target>Resetting database</target>
</trans-unit>
<trans-unit id="43f1cc191ebc0b8ce89f6916aa634f5a57158798" datatype="html">
<source>Jobs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Jobs</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Monday</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tuesday</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Wednesday</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Thursday</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Friday</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Saturday</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Sunday</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>day</target>
</trans-unit>
<trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">
<source>Job</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Job</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>started</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>stopped</target>
</trans-unit>
<trans-unit id="d2a2915d79ff31439a174fc3a147004542291e29" datatype="html">
<source>Map</source>
<context-group purpose="location">
@ -2339,106 +2433,6 @@
</context-group>
<target>Random Photo</target>
</trans-unit>
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
<source>Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tasks</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Monday</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tuesday</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Wednesday</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Thursday</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Friday</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Saturday</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Sunday</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>day</target>
</trans-unit>
<trans-unit id="61435c6c3b3cca0c204ef9f5369027565d327acb" datatype="html">
<source>Task</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Task</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>started</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>stopped</target>
</trans-unit>
<trans-unit id="45dda89cf029b7d7b457a8dff01dc4b9a6485816" datatype="html">
<source>Thumbnail</source>
<context-group purpose="location">

View File

@ -694,8 +694,8 @@
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">189</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<target>Enregistrer</target>
</trans-unit>
@ -751,8 +751,8 @@
<context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">193</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">191</context>
</context-group>
<target>Réinitialiser</target>
</trans-unit>
@ -871,9 +871,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">56</context>
</context-group>
<target>The best matching size will be generated. (More sizes give better quality, but use more
storage and CPU to render.)
</target>
<target>The best matching size will be generated. (More sizes give better quality, but use more storage and CPU to render.)</target>
</trans-unit>
<trans-unit id="acee7864683576e1e4f159e725db24ddeee32e1c" datatype="html">
<source>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
@ -883,9 +881,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">60</context>
</context-group>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
pixels.
</target>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160 pixels.</target>
</trans-unit>
<trans-unit id="5e561ce99009d20e901f7aef3c4f867a519ca9f0" datatype="html">
<source>Generate thumbnails now</source>
@ -910,8 +906,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">90</context>
</context-group>
<target>Cancel thumbnail generation
</target>
<target>Cancel thumbnail generation</target>
</trans-unit>
<trans-unit id="69149fe434cf1b0d9bafe5ead5d126101bb5162e" datatype="html">
<source>Video support uses ffmpeg. ffmpeg and ffprobe binaries need to be available in the PATH or
@ -951,8 +946,8 @@
</context-group>
<target>The transcoded videos will be save to the thumbnail folder.</target>
</trans-unit>
<trans-unit id="9ca8b858f4f19476c64b5f4b6416e8e8210c7f1e" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding task
<trans-unit id="5c159049e5e44f672041b3ff2c85328cda14a740" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</source>
@ -960,7 +955,10 @@
<context context-type="sourcefile">app/ui/settings/video/video.settings.component.html</context>
<context context-type="linenumber">39</context>
</context-group>
<target>You can trigger the transcoding manually, but you can also create an automatic encoding task in advanced settings mode.</target>
<target>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</target>
</trans-unit>
<trans-unit id="7722a92a1fc887570b4f4d8a7bb916f067f32028" datatype="html">
<source>Format</source>
@ -1133,8 +1131,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">53</context>
</context-group>
<target>Downsizes photos for faster preview loading. (Zooming in to the photo
loads the original)</target>
<target>Downsizes photos for faster preview loading. (Zooming in to the photo loads the original)</target>
</trans-unit>
<trans-unit id="45becd33ed4f2f1a19f2040b4624968677f7b02b" datatype="html">
<source>On the fly converting </source>
@ -1142,7 +1139,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">59</context>
</context-group>
<target>On the fly converting </target>
<target>On the fly converting</target>
</trans-unit>
<trans-unit id="a9a7b9d2773aa49ff4f41b01b55e0a51d664eecf" datatype="html">
<source>Converts photos on the fly, when they are requested.</source>
@ -1160,9 +1157,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">85</context>
</context-group>
<target>The shorter edge of the converted photo will be scaled down to this,
while
keeping the aspect ratio.</target>
<target>The shorter edge of the converted photo will be scaled down to this, while keeping the aspect ratio.</target>
</trans-unit>
<trans-unit id="4b9cafd261787994f5e6ab5c2fbab785156037ef" datatype="html">
<source>Convert photos now</source>
@ -1179,8 +1174,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">114</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="219e36c6747ef991081a68fc8ab2678677583e11" datatype="html">
<source>Reads and show *.gpx files on the map</source>
@ -1268,11 +1262,7 @@
<context context-type="sourcefile">app/ui/settings/random-photo/random-photo.settings.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<target>
This feature enables you to generate 'random photo' urls.
That URL returns a photo random selected from your gallery.
You can use the url with 3rd party application like random changing desktop background.
</target>
<target>This feature enables you to generate 'random photo' urls. That URL returns a photo random selected from your gallery. You can use the url with 3rd party application like random changing desktop background.</target>
</trans-unit>
<trans-unit id="6c02e8541a2e670f80de8b5a218ea14a16bb6c42" datatype="html">
<source>
@ -1759,8 +1749,7 @@
<context context-type="sourcefile">app/ui/settings/indexing/indexing.settings.component.html</context>
<context context-type="linenumber">127</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="ab4d309abbd8f981e3157ae6924b1962b69c3e36" datatype="html">
<source>Reset Indexes
@ -1816,7 +1805,7 @@
<trans-unit id="6f905843264b6935f11115fb91b72ce4f2aafd75" datatype="html">
<source>Stopping</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<target>Stopping</target>
@ -1824,7 +1813,7 @@
<trans-unit id="9f2195bf10299534034510f387621199db784343" datatype="html">
<source>time elapsed</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<target>time elapsed</target>
@ -1832,88 +1821,76 @@
<trans-unit id="35511807089eb9a1864bec06e28d57e04b4c8f87" datatype="html">
<source>time left</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="linenumber">28</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>time left</target>
</trans-unit>
<trans-unit id="18443428b116a10f17fbd067bde0553c00db45f1" datatype="html">
<source>every</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">85</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<target>every</target>
</trans-unit>
<trans-unit id="e113e3450a367a1dff703fc5e0403a497ca73a7c" datatype="html">
<source>never</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">23</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<target>never</target>
</trans-unit>
<trans-unit id="b51d9edc98562fb34f39d48bbd177db63f74fe8d" datatype="html">
<source>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</source>
<trans-unit id="89dc7dff0be8b6a3443789ff1e7469f47d92935e" datatype="html">
<source>Job:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">26</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</target>
<target>Job:</target>
</trans-unit>
<trans-unit id="41f883b96980ad03407749f5c0b2523528924dda" datatype="html">
<source>Task:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">36</context>
</context-group>
<target>Task:</target>
</trans-unit>
<trans-unit id="9bcffeb5af739217ecbeec01abeb14126b20bdda" datatype="html">
<source>Select a task to schedule.
<trans-unit id="0b87ca794b645dc89e2efe8478c401c605e03861" datatype="html">
<source>Select a job to schedule.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">45</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<target>Select a task to schedule.</target>
<target>Select a job to schedule.
</target>
</trans-unit>
<trans-unit id="f336006fe51502c7da913994e14a3137dd5c5009" datatype="html">
<source>Periodicity:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">48</context>
</context-group>
<target>Periodicity:</target>
</trans-unit>
<trans-unit id="63082f0e453734275af4e538827c1ae06d04ef52" datatype="html">
<source>Set the time to run the task.
<trans-unit id="40aec3d7895a3d8dafac6fe442e45150769950ae" datatype="html">
<source>Set the time to run the job.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">60</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">58</context>
</context-group>
<target>Set the time to run the task.</target>
<target>Set the time to run the job.
</target>
</trans-unit>
<trans-unit id="ef36f0dc0067decf548cc11905ef3100f5bbd004" datatype="html">
<source>At:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">67</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">77</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">75</context>
</context-group>
<target>At:</target>
</trans-unit>
@ -1921,44 +1898,45 @@
<source>Start now
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">103</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">101</context>
</context-group>
<target>Start now</target>
</trans-unit>
<trans-unit id="cfbd068646ce959a640ab824e85e1ed3ab20c5f2" datatype="html">
<source>Trigger task run manually</source>
<trans-unit id="75bfaf8c39c31b82e233afbbc1175d1a49ef172f" datatype="html">
<source>Trigger job run manually</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">101</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">99</context>
</context-group>
<target>Trigger task run manually</target>
<target>Trigger job run manually</target>
</trans-unit>
<trans-unit id="493a5cb077ced16ccc13431ea5e2067eb40cd957" datatype="html">
<source>Stop
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">108</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">106</context>
</context-group>
<target>Stop</target>
</trans-unit>
<trans-unit id="eecad7f2f355d4ae0baed11537a10ceaebbc7382" datatype="html">
<source>';' separated integers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">171</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">169</context>
</context-group>
<target>';' separated integers.</target>
</trans-unit>
<trans-unit id="87dc7285ddadbe21ac1770275d35e8c747e0eb26" datatype="html">
<source>+ Add task
<trans-unit id="6ff865ebc673e7fe5ed9367575e44833ef811693" datatype="html">
<source>+ Add Job
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">196</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<target>+ Add task</target>
<target>+ Add Job
</target>
</trans-unit>
<trans-unit id="85b9773b9a3caeb9f0fd69b2b8fa7284bda6b492" datatype="html">
<source>Server error</source>
@ -2063,6 +2041,22 @@
</context-group>
<target>Simplifié</target>
</trans-unit>
<trans-unit id="f56c1efc2bd6e9eb87cd271ea47ab620445012a2" datatype="html">
<source>Built at</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Built at</target>
</trans-unit>
<trans-unit id="f620bdd6f6bdd3330d7f3786caa97cbba9cbde5a" datatype="html">
<source>git hash</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>git hash</target>
</trans-unit>
<trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">
<source>Images</source>
<context-group purpose="location">
@ -2267,6 +2261,106 @@
</context-group>
<target>Resetting database</target>
</trans-unit>
<trans-unit id="43f1cc191ebc0b8ce89f6916aa634f5a57158798" datatype="html">
<source>Jobs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Jobs</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Monday</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tuesday</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Wednesday</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Thursday</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Friday</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Saturday</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Sunday</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>day</target>
</trans-unit>
<trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">
<source>Job</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Job</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>started</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>stopped</target>
</trans-unit>
<trans-unit id="d2a2915d79ff31439a174fc3a147004542291e29" datatype="html">
<source>Map</source>
<context-group purpose="location">
@ -2339,106 +2433,6 @@
</context-group>
<target>Random Photo</target>
</trans-unit>
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
<source>Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tasks</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Monday</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tuesday</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Wednesday</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Thursday</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Friday</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Saturday</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Sunday</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>day</target>
</trans-unit>
<trans-unit id="61435c6c3b3cca0c204ef9f5369027565d327acb" datatype="html">
<source>Task</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Task</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>started</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>stopped</target>
</trans-unit>
<trans-unit id="45dda89cf029b7d7b457a8dff01dc4b9a6485816" datatype="html">
<source>Thumbnail</source>
<context-group purpose="location">

View File

@ -694,8 +694,8 @@
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">189</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<target>Mentés</target>
</trans-unit>
@ -751,8 +751,8 @@
<context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">193</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">191</context>
</context-group>
<target>Visszaállítás</target>
</trans-unit>
@ -871,9 +871,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">56</context>
</context-group>
<target>The best matching size will be generated. (More sizes give better quality, but use more
storage and CPU to render.)
</target>
<target>The best matching size will be generated. (More sizes give better quality, but use more storage and CPU to render.)</target>
</trans-unit>
<trans-unit id="acee7864683576e1e4f159e725db24ddeee32e1c" datatype="html">
<source>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
@ -883,9 +881,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">60</context>
</context-group>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
pixels.
</target>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160 pixels.</target>
</trans-unit>
<trans-unit id="5e561ce99009d20e901f7aef3c4f867a519ca9f0" datatype="html">
<source>Generate thumbnails now</source>
@ -910,8 +906,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">90</context>
</context-group>
<target>Thumbnail generálás megszakítása
</target>
<target>Thumbnail generálás megszakítása</target>
</trans-unit>
<trans-unit id="69149fe434cf1b0d9bafe5ead5d126101bb5162e" datatype="html">
<source>Video support uses ffmpeg. ffmpeg and ffprobe binaries need to be available in the PATH or
@ -951,8 +946,8 @@
</context-group>
<target>Az átkonvertált videók a thumbnail mappába lesznek mentve.</target>
</trans-unit>
<trans-unit id="9ca8b858f4f19476c64b5f4b6416e8e8210c7f1e" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding task
<trans-unit id="5c159049e5e44f672041b3ff2c85328cda14a740" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</source>
@ -1152,8 +1147,7 @@
<target>Photókat menet közvben konvertálja, amikor kérésre megy rájuk.</target>
</trans-unit>
<trans-unit id="9c8c328f075bf04fa34b3ee3f011577929d85fcd" datatype="html">
<source>
The shorter edge of the converted photo will be scaled down to this,
<source>The shorter edge of the converted photo will be scaled down to this,
while
keeping the aspect ratio.</source>
<context-group purpose="location">
@ -1177,8 +1171,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">114</context>
</context-group>
<target>Konvertálás megszakítása
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="219e36c6747ef991081a68fc8ab2678677583e11" datatype="html">
<source>Reads and show *.gpx files on the map</source>
@ -1266,11 +1259,7 @@
<context context-type="sourcefile">app/ui/settings/random-photo/random-photo.settings.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<target>
Ez a modul a 'véletlenszerű fotó' utl generálását engedelyezi.
Az url egy véletlen fotót ad vissza a galériából.
Harmadik fél által készített alkalmazásokhoz használhatód. Pl véletlenszerűen változó háttérkép.
</target>
<target>Ez a modul a 'véletlenszerű fotó' utl generálását engedelyezi. Az url egy véletlen fotót ad vissza a galériából. Harmadik fél által készített alkalmazásokhoz használhatód. Pl véletlenszerűen változó háttérkép.</target>
</trans-unit>
<trans-unit id="6c02e8541a2e670f80de8b5a218ea14a16bb6c42" datatype="html">
<source>
@ -1757,8 +1746,7 @@
<context context-type="sourcefile">app/ui/settings/indexing/indexing.settings.component.html</context>
<context context-type="linenumber">127</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="ab4d309abbd8f981e3157ae6924b1962b69c3e36" datatype="html">
<source>Reset Indexes
@ -1814,7 +1802,7 @@
<trans-unit id="6f905843264b6935f11115fb91b72ce4f2aafd75" datatype="html">
<source>Stopping</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<target>Leállás alatt</target>
@ -1822,7 +1810,7 @@
<trans-unit id="9f2195bf10299534034510f387621199db784343" datatype="html">
<source>time elapsed</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<target>eltelt idő</target>
@ -1830,88 +1818,74 @@
<trans-unit id="35511807089eb9a1864bec06e28d57e04b4c8f87" datatype="html">
<source>time left</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="linenumber">28</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>hátramaradt idő</target>
</trans-unit>
<trans-unit id="18443428b116a10f17fbd067bde0553c00db45f1" datatype="html">
<source>every</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">85</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<target>minden</target>
</trans-unit>
<trans-unit id="e113e3450a367a1dff703fc5e0403a497ca73a7c" datatype="html">
<source>never</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">23</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<target>soha</target>
</trans-unit>
<trans-unit id="b51d9edc98562fb34f39d48bbd177db63f74fe8d" datatype="html">
<source>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</source>
<trans-unit id="89dc7dff0be8b6a3443789ff1e7469f47d92935e" datatype="html">
<source>Job:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">26</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</target>
<target>Job:</target>
</trans-unit>
<trans-unit id="41f883b96980ad03407749f5c0b2523528924dda" datatype="html">
<source>Task:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">36</context>
</context-group>
<target>Feladat:</target>
</trans-unit>
<trans-unit id="9bcffeb5af739217ecbeec01abeb14126b20bdda" datatype="html">
<source>Select a task to schedule.
<trans-unit id="0b87ca794b645dc89e2efe8478c401c605e03861" datatype="html">
<source>Select a job to schedule.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">45</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<target>Válaszd ki az ütemezendő feladatot.</target>
</trans-unit>
<trans-unit id="f336006fe51502c7da913994e14a3137dd5c5009" datatype="html">
<source>Periodicity:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">48</context>
</context-group>
<target>Gyakoriság:</target>
</trans-unit>
<trans-unit id="63082f0e453734275af4e538827c1ae06d04ef52" datatype="html">
<source>Set the time to run the task.
<trans-unit id="40aec3d7895a3d8dafac6fe442e45150769950ae" datatype="html">
<source>Set the time to run the job.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">60</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">58</context>
</context-group>
<target>Állítsd be, hogy mikos fusson a feladat.</target>
</trans-unit>
<trans-unit id="ef36f0dc0067decf548cc11905ef3100f5bbd004" datatype="html">
<source>At:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">67</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">77</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">75</context>
</context-group>
<target>Ekkor:</target>
</trans-unit>
@ -1919,16 +1893,16 @@
<source>Start now
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">103</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">101</context>
</context-group>
<target>Futtatás most</target>
</trans-unit>
<trans-unit id="cfbd068646ce959a640ab824e85e1ed3ab20c5f2" datatype="html">
<source>Trigger task run manually</source>
<trans-unit id="75bfaf8c39c31b82e233afbbc1175d1a49ef172f" datatype="html">
<source>Trigger job run manually</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">101</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">99</context>
</context-group>
<target>Manuálisan elnidítja a feladatot</target>
</trans-unit>
@ -1936,27 +1910,28 @@
<source>Stop
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">108</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">106</context>
</context-group>
<target>Leállítás</target>
</trans-unit>
<trans-unit id="eecad7f2f355d4ae0baed11537a10ceaebbc7382" datatype="html">
<source>';' separated integers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">171</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">169</context>
</context-group>
<target>';'-vel elválaszott egész számok.</target>
</trans-unit>
<trans-unit id="87dc7285ddadbe21ac1770275d35e8c747e0eb26" datatype="html">
<source>+ Add task
<trans-unit id="6ff865ebc673e7fe5ed9367575e44833ef811693" datatype="html">
<source>+ Add Job
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">196</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<target>+ új feladat</target>
<target>+ Add Job
</target>
</trans-unit>
<trans-unit id="85b9773b9a3caeb9f0fd69b2b8fa7284bda6b492" datatype="html">
<source>Server error</source>
@ -2061,6 +2036,22 @@
</context-group>
<target>Egyszerűsített</target>
</trans-unit>
<trans-unit id="f56c1efc2bd6e9eb87cd271ea47ab620445012a2" datatype="html">
<source>Built at</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Build-elve</target>
</trans-unit>
<trans-unit id="f620bdd6f6bdd3330d7f3786caa97cbba9cbde5a" datatype="html">
<source>git hash</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>git hash</target>
</trans-unit>
<trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">
<source>Images</source>
<context-group purpose="location">
@ -2265,6 +2256,106 @@
</context-group>
<target>Adatbázis visszaállítása</target>
</trans-unit>
<trans-unit id="43f1cc191ebc0b8ce89f6916aa634f5a57158798" datatype="html">
<source>Jobs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Jobs</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Hétfő</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Kedd</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Szerda</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Csütörtök</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Péntek</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Szombat</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Vasárnap</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>nap</target>
</trans-unit>
<trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">
<source>Job</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Job</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>elindult</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>leállt</target>
</trans-unit>
<trans-unit id="d2a2915d79ff31439a174fc3a147004542291e29" datatype="html">
<source>Map</source>
<context-group purpose="location">
@ -2337,106 +2428,6 @@
</context-group>
<target>Véletleg Fotó</target>
</trans-unit>
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
<source>Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Feladatok</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Hétfő</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Kedd</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Szerda</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Csütörtök</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Péntek</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Szombat</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Vasárnap</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>nap</target>
</trans-unit>
<trans-unit id="61435c6c3b3cca0c204ef9f5369027565d327acb" datatype="html">
<source>Task</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Feladat</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>elindult</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>leállt</target>
</trans-unit>
<trans-unit id="45dda89cf029b7d7b457a8dff01dc4b9a6485816" datatype="html">
<source>Thumbnail</source>
<context-group purpose="location">

View File

@ -694,8 +694,8 @@
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">189</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<target>Salvare</target>
</trans-unit>
@ -751,8 +751,8 @@
<context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">193</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">191</context>
</context-group>
<target>Restabilire</target>
</trans-unit>
@ -871,9 +871,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">56</context>
</context-group>
<target>The best matching size will be generated. (More sizes give better quality, but use more
storage and CPU to render.)
</target>
<target>The best matching size will be generated. (More sizes give better quality, but use more storage and CPU to render.)</target>
</trans-unit>
<trans-unit id="acee7864683576e1e4f159e725db24ddeee32e1c" datatype="html">
<source>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
@ -883,9 +881,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">60</context>
</context-group>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
pixels.
</target>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160 pixels.</target>
</trans-unit>
<trans-unit id="5e561ce99009d20e901f7aef3c4f867a519ca9f0" datatype="html">
<source>Generate thumbnails now</source>
@ -910,8 +906,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">90</context>
</context-group>
<target>Cancel thumbnail generation
</target>
<target>Cancel thumbnail generation</target>
</trans-unit>
<trans-unit id="69149fe434cf1b0d9bafe5ead5d126101bb5162e" datatype="html">
<source>Video support uses ffmpeg. ffmpeg and ffprobe binaries need to be available in the PATH or
@ -951,8 +946,8 @@
</context-group>
<target>The transcoded videos will be save to the thumbnail folder.</target>
</trans-unit>
<trans-unit id="9ca8b858f4f19476c64b5f4b6416e8e8210c7f1e" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding task
<trans-unit id="5c159049e5e44f672041b3ff2c85328cda14a740" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</source>
@ -960,7 +955,10 @@
<context context-type="sourcefile">app/ui/settings/video/video.settings.component.html</context>
<context context-type="linenumber">39</context>
</context-group>
<target>You can trigger the transcoding manually, but you can also create an automatic encoding task in advanced settings mode.</target>
<target>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</target>
</trans-unit>
<trans-unit id="7722a92a1fc887570b4f4d8a7bb916f067f32028" datatype="html">
<source>Format</source>
@ -1133,8 +1131,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">53</context>
</context-group>
<target>Downsizes photos for faster preview loading. (Zooming in to the photo
loads the original)</target>
<target>Downsizes photos for faster preview loading. (Zooming in to the photo loads the original)</target>
</trans-unit>
<trans-unit id="45becd33ed4f2f1a19f2040b4624968677f7b02b" datatype="html">
<source>On the fly converting </source>
@ -1142,7 +1139,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">59</context>
</context-group>
<target>On the fly converting </target>
<target>On the fly converting</target>
</trans-unit>
<trans-unit id="a9a7b9d2773aa49ff4f41b01b55e0a51d664eecf" datatype="html">
<source>Converts photos on the fly, when they are requested.</source>
@ -1160,9 +1157,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">85</context>
</context-group>
<target>The shorter edge of the converted photo will be scaled down to this,
while
keeping the aspect ratio.</target>
<target>The shorter edge of the converted photo will be scaled down to this, while keeping the aspect ratio.</target>
</trans-unit>
<trans-unit id="4b9cafd261787994f5e6ab5c2fbab785156037ef" datatype="html">
<source>Convert photos now</source>
@ -1179,8 +1174,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">114</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="219e36c6747ef991081a68fc8ab2678677583e11" datatype="html">
<source>Reads and show *.gpx files on the map</source>
@ -1268,11 +1262,7 @@
<context context-type="sourcefile">app/ui/settings/random-photo/random-photo.settings.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<target>
This feature enables you to generate 'random photo' urls.
That URL returns a photo random selected from your gallery.
You can use the url with 3rd party application like random changing desktop background.
</target>
<target>This feature enables you to generate 'random photo' urls. That URL returns a photo random selected from your gallery. You can use the url with 3rd party application like random changing desktop background.</target>
</trans-unit>
<trans-unit id="6c02e8541a2e670f80de8b5a218ea14a16bb6c42" datatype="html">
<source>
@ -1759,8 +1749,7 @@
<context context-type="sourcefile">app/ui/settings/indexing/indexing.settings.component.html</context>
<context context-type="linenumber">127</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="ab4d309abbd8f981e3157ae6924b1962b69c3e36" datatype="html">
<source>Reset Indexes
@ -1816,7 +1805,7 @@
<trans-unit id="6f905843264b6935f11115fb91b72ce4f2aafd75" datatype="html">
<source>Stopping</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<target>Stopping</target>
@ -1824,7 +1813,7 @@
<trans-unit id="9f2195bf10299534034510f387621199db784343" datatype="html">
<source>time elapsed</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<target>time elapsed</target>
@ -1832,88 +1821,76 @@
<trans-unit id="35511807089eb9a1864bec06e28d57e04b4c8f87" datatype="html">
<source>time left</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="linenumber">28</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>time left</target>
</trans-unit>
<trans-unit id="18443428b116a10f17fbd067bde0553c00db45f1" datatype="html">
<source>every</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">85</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<target>every</target>
</trans-unit>
<trans-unit id="e113e3450a367a1dff703fc5e0403a497ca73a7c" datatype="html">
<source>never</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">23</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<target>never</target>
</trans-unit>
<trans-unit id="b51d9edc98562fb34f39d48bbd177db63f74fe8d" datatype="html">
<source>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</source>
<trans-unit id="89dc7dff0be8b6a3443789ff1e7469f47d92935e" datatype="html">
<source>Job:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">26</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</target>
<target>Job:</target>
</trans-unit>
<trans-unit id="41f883b96980ad03407749f5c0b2523528924dda" datatype="html">
<source>Task:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">36</context>
</context-group>
<target>Task:</target>
</trans-unit>
<trans-unit id="9bcffeb5af739217ecbeec01abeb14126b20bdda" datatype="html">
<source>Select a task to schedule.
<trans-unit id="0b87ca794b645dc89e2efe8478c401c605e03861" datatype="html">
<source>Select a job to schedule.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">45</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<target>Select a task to schedule.</target>
<target>Select a job to schedule.
</target>
</trans-unit>
<trans-unit id="f336006fe51502c7da913994e14a3137dd5c5009" datatype="html">
<source>Periodicity:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">48</context>
</context-group>
<target>Periodicity:</target>
</trans-unit>
<trans-unit id="63082f0e453734275af4e538827c1ae06d04ef52" datatype="html">
<source>Set the time to run the task.
<trans-unit id="40aec3d7895a3d8dafac6fe442e45150769950ae" datatype="html">
<source>Set the time to run the job.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">60</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">58</context>
</context-group>
<target>Set the time to run the task.</target>
<target>Set the time to run the job.
</target>
</trans-unit>
<trans-unit id="ef36f0dc0067decf548cc11905ef3100f5bbd004" datatype="html">
<source>At:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">67</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">77</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">75</context>
</context-group>
<target>At:</target>
</trans-unit>
@ -1921,44 +1898,45 @@
<source>Start now
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">103</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">101</context>
</context-group>
<target>Start now</target>
</trans-unit>
<trans-unit id="cfbd068646ce959a640ab824e85e1ed3ab20c5f2" datatype="html">
<source>Trigger task run manually</source>
<trans-unit id="75bfaf8c39c31b82e233afbbc1175d1a49ef172f" datatype="html">
<source>Trigger job run manually</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">101</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">99</context>
</context-group>
<target>Trigger task run manually</target>
<target>Trigger job run manually</target>
</trans-unit>
<trans-unit id="493a5cb077ced16ccc13431ea5e2067eb40cd957" datatype="html">
<source>Stop
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">108</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">106</context>
</context-group>
<target>Stop</target>
</trans-unit>
<trans-unit id="eecad7f2f355d4ae0baed11537a10ceaebbc7382" datatype="html">
<source>';' separated integers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">171</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">169</context>
</context-group>
<target>';' separated integers.</target>
</trans-unit>
<trans-unit id="87dc7285ddadbe21ac1770275d35e8c747e0eb26" datatype="html">
<source>+ Add task
<trans-unit id="6ff865ebc673e7fe5ed9367575e44833ef811693" datatype="html">
<source>+ Add Job
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">196</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<target>+ Add task</target>
<target>+ Add Job
</target>
</trans-unit>
<trans-unit id="85b9773b9a3caeb9f0fd69b2b8fa7284bda6b492" datatype="html">
<source>Server error</source>
@ -2063,6 +2041,22 @@
</context-group>
<target>Simplificat</target>
</trans-unit>
<trans-unit id="f56c1efc2bd6e9eb87cd271ea47ab620445012a2" datatype="html">
<source>Built at</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Built at</target>
</trans-unit>
<trans-unit id="f620bdd6f6bdd3330d7f3786caa97cbba9cbde5a" datatype="html">
<source>git hash</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>git hash</target>
</trans-unit>
<trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">
<source>Images</source>
<context-group purpose="location">
@ -2267,6 +2261,106 @@
</context-group>
<target>Resetting database</target>
</trans-unit>
<trans-unit id="43f1cc191ebc0b8ce89f6916aa634f5a57158798" datatype="html">
<source>Jobs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Jobs</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Monday</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tuesday</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Wednesday</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Thursday</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Friday</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Saturday</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Sunday</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>day</target>
</trans-unit>
<trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">
<source>Job</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Job</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>started</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>stopped</target>
</trans-unit>
<trans-unit id="d2a2915d79ff31439a174fc3a147004542291e29" datatype="html">
<source>Map</source>
<context-group purpose="location">
@ -2339,106 +2433,6 @@
</context-group>
<target>Random Photo</target>
</trans-unit>
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
<source>Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tasks</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Monday</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tuesday</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Wednesday</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Thursday</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Friday</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Saturday</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Sunday</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>day</target>
</trans-unit>
<trans-unit id="61435c6c3b3cca0c204ef9f5369027565d327acb" datatype="html">
<source>Task</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Task</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>started</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>stopped</target>
</trans-unit>
<trans-unit id="45dda89cf029b7d7b457a8dff01dc4b9a6485816" datatype="html">
<source>Thumbnail</source>
<context-group purpose="location">

View File

@ -694,8 +694,8 @@
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">189</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">187</context>
</context-group>
<target>Сохранить</target>
</trans-unit>
@ -751,8 +751,8 @@
<context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">193</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">191</context>
</context-group>
<target>Сбросить</target>
</trans-unit>
@ -871,9 +871,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">56</context>
</context-group>
<target>The best matching size will be generated. (More sizes give better quality, but use more
storage and CPU to render.)
</target>
<target>The best matching size will be generated. (More sizes give better quality, but use more storage and CPU to render.)</target>
</trans-unit>
<trans-unit id="acee7864683576e1e4f159e725db24ddeee32e1c" datatype="html">
<source>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
@ -883,9 +881,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">60</context>
</context-group>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160
pixels.
</target>
<target>';' separated integers. If size is 160, that shorter side of the thumbnail will have 160 pixels.</target>
</trans-unit>
<trans-unit id="5e561ce99009d20e901f7aef3c4f867a519ca9f0" datatype="html">
<source>Generate thumbnails now</source>
@ -910,8 +906,7 @@
<context context-type="sourcefile">app/ui/settings/thumbnail/thumbnail.settings.component.html</context>
<context context-type="linenumber">90</context>
</context-group>
<target>Cancel thumbnail generation
</target>
<target>Cancel thumbnail generation</target>
</trans-unit>
<trans-unit id="69149fe434cf1b0d9bafe5ead5d126101bb5162e" datatype="html">
<source>Video support uses ffmpeg. ffmpeg and ffprobe binaries need to be available in the PATH or
@ -951,8 +946,8 @@
</context-group>
<target>The transcoded videos will be save to the thumbnail folder.</target>
</trans-unit>
<trans-unit id="9ca8b858f4f19476c64b5f4b6416e8e8210c7f1e" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding task
<trans-unit id="5c159049e5e44f672041b3ff2c85328cda14a740" datatype="html">
<source>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</source>
@ -960,7 +955,10 @@
<context context-type="sourcefile">app/ui/settings/video/video.settings.component.html</context>
<context context-type="linenumber">39</context>
</context-group>
<target>You can trigger the transcoding manually, but you can also create an automatic encoding task in advanced settings mode.</target>
<target>You can trigger the transcoding manually, but you can also create an automatic encoding job
in
advanced settings mode.
</target>
</trans-unit>
<trans-unit id="7722a92a1fc887570b4f4d8a7bb916f067f32028" datatype="html">
<source>Format</source>
@ -1133,8 +1131,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">53</context>
</context-group>
<target>Downsizes photos for faster preview loading. (Zooming in to the photo
loads the original)</target>
<target>Downsizes photos for faster preview loading. (Zooming in to the photo loads the original)</target>
</trans-unit>
<trans-unit id="45becd33ed4f2f1a19f2040b4624968677f7b02b" datatype="html">
<source>On the fly converting </source>
@ -1142,7 +1139,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">59</context>
</context-group>
<target>On the fly converting </target>
<target>On the fly converting</target>
</trans-unit>
<trans-unit id="a9a7b9d2773aa49ff4f41b01b55e0a51d664eecf" datatype="html">
<source>Converts photos on the fly, when they are requested.</source>
@ -1160,9 +1157,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">85</context>
</context-group>
<target>The shorter edge of the converted photo will be scaled down to this,
while
keeping the aspect ratio.</target>
<target>The shorter edge of the converted photo will be scaled down to this, while keeping the aspect ratio.</target>
</trans-unit>
<trans-unit id="4b9cafd261787994f5e6ab5c2fbab785156037ef" datatype="html">
<source>Convert photos now</source>
@ -1179,8 +1174,7 @@
<context context-type="sourcefile">app/ui/settings/photo/photo.settings.component.html</context>
<context context-type="linenumber">114</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="219e36c6747ef991081a68fc8ab2678677583e11" datatype="html">
<source>Reads and show *.gpx files on the map</source>
@ -1268,11 +1262,7 @@
<context context-type="sourcefile">app/ui/settings/random-photo/random-photo.settings.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<target>
This feature enables you to generate 'random photo' urls.
That URL returns a photo random selected from your gallery.
You can use the url with 3rd party application like random changing desktop background.
</target>
<target>This feature enables you to generate 'random photo' urls. That URL returns a photo random selected from your gallery. You can use the url with 3rd party application like random changing desktop background.</target>
</trans-unit>
<trans-unit id="6c02e8541a2e670f80de8b5a218ea14a16bb6c42" datatype="html">
<source>
@ -1759,8 +1749,7 @@
<context context-type="sourcefile">app/ui/settings/indexing/indexing.settings.component.html</context>
<context context-type="linenumber">127</context>
</context-group>
<target>Cancel converting
</target>
<target>Cancel converting</target>
</trans-unit>
<trans-unit id="ab4d309abbd8f981e3157ae6924b1962b69c3e36" datatype="html">
<source>Reset Indexes
@ -1816,7 +1805,7 @@
<trans-unit id="6f905843264b6935f11115fb91b72ce4f2aafd75" datatype="html">
<source>Stopping</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">7</context>
</context-group>
<target>Stopping</target>
@ -1824,7 +1813,7 @@
<trans-unit id="9f2195bf10299534034510f387621199db784343" datatype="html">
<source>time elapsed</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">14</context>
</context-group>
<target>time elapsed</target>
@ -1832,88 +1821,76 @@
<trans-unit id="35511807089eb9a1864bec06e28d57e04b4c8f87" datatype="html">
<source>time left</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/progress/progress.tasks.settings.component.html</context>
<context context-type="linenumber">28</context>
<context context-type="sourcefile">app/ui/settings/jobs/progress/job-progress.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>time left</target>
</trans-unit>
<trans-unit id="18443428b116a10f17fbd067bde0553c00db45f1" datatype="html">
<source>every</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">18</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">85</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">83</context>
</context-group>
<target>every</target>
</trans-unit>
<trans-unit id="e113e3450a367a1dff703fc5e0403a497ca73a7c" datatype="html">
<source>never</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">23</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<target>never</target>
</trans-unit>
<trans-unit id="b51d9edc98562fb34f39d48bbd177db63f74fe8d" datatype="html">
<source>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</source>
<trans-unit id="89dc7dff0be8b6a3443789ff1e7469f47d92935e" datatype="html">
<source>Job:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">26</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">34</context>
</context-group>
<target>
<x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>
<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</target>
<target>Job:</target>
</trans-unit>
<trans-unit id="41f883b96980ad03407749f5c0b2523528924dda" datatype="html">
<source>Task:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">36</context>
</context-group>
<target>Task:</target>
</trans-unit>
<trans-unit id="9bcffeb5af739217ecbeec01abeb14126b20bdda" datatype="html">
<source>Select a task to schedule.
<trans-unit id="0b87ca794b645dc89e2efe8478c401c605e03861" datatype="html">
<source>Select a job to schedule.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">45</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">43</context>
</context-group>
<target>Select a task to schedule.</target>
<target>Select a job to schedule.
</target>
</trans-unit>
<trans-unit id="f336006fe51502c7da913994e14a3137dd5c5009" datatype="html">
<source>Periodicity:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">48</context>
</context-group>
<target>Periodicity:</target>
</trans-unit>
<trans-unit id="63082f0e453734275af4e538827c1ae06d04ef52" datatype="html">
<source>Set the time to run the task.
<trans-unit id="40aec3d7895a3d8dafac6fe442e45150769950ae" datatype="html">
<source>Set the time to run the job.
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">60</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">58</context>
</context-group>
<target>Set the time to run the task.</target>
<target>Set the time to run the job.
</target>
</trans-unit>
<trans-unit id="ef36f0dc0067decf548cc11905ef3100f5bbd004" datatype="html">
<source>At:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">67</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">77</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">75</context>
</context-group>
<target>At:</target>
</trans-unit>
@ -1921,44 +1898,45 @@
<source>Start now
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">103</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">101</context>
</context-group>
<target>Start now</target>
</trans-unit>
<trans-unit id="cfbd068646ce959a640ab824e85e1ed3ab20c5f2" datatype="html">
<source>Trigger task run manually</source>
<trans-unit id="75bfaf8c39c31b82e233afbbc1175d1a49ef172f" datatype="html">
<source>Trigger job run manually</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">101</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">99</context>
</context-group>
<target>Trigger task run manually</target>
<target>Trigger job run manually</target>
</trans-unit>
<trans-unit id="493a5cb077ced16ccc13431ea5e2067eb40cd957" datatype="html">
<source>Stop
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">108</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">106</context>
</context-group>
<target>Stop</target>
</trans-unit>
<trans-unit id="eecad7f2f355d4ae0baed11537a10ceaebbc7382" datatype="html">
<source>';' separated integers.</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">171</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">169</context>
</context-group>
<target>';' separated integers.</target>
</trans-unit>
<trans-unit id="87dc7285ddadbe21ac1770275d35e8c747e0eb26" datatype="html">
<source>+ Add task
<trans-unit id="6ff865ebc673e7fe5ed9367575e44833ef811693" datatype="html">
<source>+ Add Job
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ui/settings/tasks/tasks.settings.component.html</context>
<context context-type="linenumber">196</context>
<context context-type="sourcefile">app/ui/settings/jobs/jobs.settings.component.html</context>
<context context-type="linenumber">194</context>
</context-group>
<target>+ Add task</target>
<target>+ Add Job
</target>
</trans-unit>
<trans-unit id="85b9773b9a3caeb9f0fd69b2b8fa7284bda6b492" datatype="html">
<source>Server error</source>
@ -2063,6 +2041,22 @@
</context-group>
<target>Simplified</target>
</trans-unit>
<trans-unit id="f56c1efc2bd6e9eb87cd271ea47ab620445012a2" datatype="html">
<source>Built at</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Built at</target>
</trans-unit>
<trans-unit id="f620bdd6f6bdd3330d7f3786caa97cbba9cbde5a" datatype="html">
<source>git hash</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/admin/admin.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>git hash</target>
</trans-unit>
<trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">
<source>Images</source>
<context-group purpose="location">
@ -2267,6 +2261,106 @@
</context-group>
<target>Resetting database</target>
</trans-unit>
<trans-unit id="43f1cc191ebc0b8ce89f6916aa634f5a57158798" datatype="html">
<source>Jobs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Jobs</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Monday</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tuesday</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Wednesday</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Thursday</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Friday</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Saturday</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Sunday</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>day</target>
</trans-unit>
<trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">
<source>Job</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Job</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>started</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/jobs/jobs.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>stopped</target>
</trans-unit>
<trans-unit id="d2a2915d79ff31439a174fc3a147004542291e29" datatype="html">
<source>Map</source>
<context-group purpose="location">
@ -2339,106 +2433,6 @@
</context-group>
<target>Random Photo</target>
</trans-unit>
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
<source>Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tasks</target>
</trans-unit>
<trans-unit id="a43c57a7cbebf57eb33a2eae5e994c91d9887596" datatype="html">
<source>Monday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Monday</target>
</trans-unit>
<trans-unit id="48a2a35957ce394eb2c59ae35c99642360af70ee" datatype="html">
<source>Tuesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Tuesday</target>
</trans-unit>
<trans-unit id="b0af441f9ba8b82952b9ec10fb8c62e8fec67df9" datatype="html">
<source>Wednesday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Wednesday</target>
</trans-unit>
<trans-unit id="55c583b99c809818ec27df065ccf05357a6ac10b" datatype="html">
<source>Thursday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Thursday</target>
</trans-unit>
<trans-unit id="e91b54925dc5f490753f60f53ef6f8b4609e6215" datatype="html">
<source>Friday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Friday</target>
</trans-unit>
<trans-unit id="c0d2dd391a3eca8e841a5d0e035cd268280eb68e" datatype="html">
<source>Saturday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Saturday</target>
</trans-unit>
<trans-unit id="8339364b054610983b7f2334bb807fff7613bddf" datatype="html">
<source>Sunday</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Sunday</target>
</trans-unit>
<trans-unit id="f64c76c7c7c71baddef3dc6a93e4394b8fdb69f4" datatype="html">
<source>day</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>day</target>
</trans-unit>
<trans-unit id="61435c6c3b3cca0c204ef9f5369027565d327acb" datatype="html">
<source>Task</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Task</target>
</trans-unit>
<trans-unit id="802a1b81a26fd41f8625b1b7a02f606fc31f97e7" datatype="html">
<source>started</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>started</target>
</trans-unit>
<trans-unit id="0f3ebb12666577c4183f3c9687180f7963cfabf4" datatype="html">
<source>stopped</source>
<context-group purpose="location">
<context context-type="sourcefile">src/frontend/app/ui/settings/tasks/tasks.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>stopped</target>
</trans-unit>
<trans-unit id="45dda89cf029b7d7b457a8dff01dc4b9a6485816" datatype="html">
<source>Thumbnail</source>
<context-group purpose="location">

View File

@ -1,25 +1,25 @@
import {expect} from 'chai';
import {TaskManager} from '../../../../../src/backend/model/tasks/TaskManager';
import {TaskScheduleDTO, TaskTriggerType} from '../../../../../src/common/entities/task/TaskScheduleDTO';
import {JobManager} from '../../../../../src/backend/model/jobs/JobManager';
import {JobScheduleDTO, JobTriggerType} from '../../../../../src/common/entities/job/JobScheduleDTO';
class TaskManagerSpec extends TaskManager {
class JobManagerSpec extends JobManager {
public getDateFromSchedule(refDate: Date, schedule: TaskScheduleDTO): Date {
public getDateFromSchedule(refDate: Date, schedule: JobScheduleDTO): Date {
return super.getDateFromSchedule(refDate, schedule);
}
}
describe('TaskManager', () => {
describe('JobManager', () => {
it('should get date from schedule', async () => {
const tm = new TaskManagerSpec();
const tm = new JobManagerSpec();
const refDate = new Date(2019, 7, 18, 5, 10, 10, 0); // its a sunday
expect(tm.getDateFromSchedule(refDate, <any>{
trigger: {
type: TaskTriggerType.scheduled,
type: JobTriggerType.scheduled,
time: (new Date(2019, 7, 18, 5, 10)).getTime()
}
})).to.be.deep.equal((new Date(2019, 7, 18, 5, 10, 0)));
@ -32,7 +32,7 @@ describe('TaskManager', () => {
let m = 5;
expect(tm.getDateFromSchedule(refDate, <any>{
trigger: {
type: TaskTriggerType.periodic,
type: JobTriggerType.periodic,
atTime: (h * 60 + m) * 60 * 1000,
periodicity: dayOfWeek
}
@ -43,7 +43,7 @@ describe('TaskManager', () => {
nextDay = 18 + dayOfWeek + 1;
expect(tm.getDateFromSchedule(refDate, <any>{
trigger: {
type: TaskTriggerType.periodic,
type: JobTriggerType.periodic,
atTime: (h * 60 + m) * 60 * 1000,
periodicity: dayOfWeek
}
@ -54,7 +54,7 @@ describe('TaskManager', () => {
nextDay = 18 + dayOfWeek + 1;
expect(tm.getDateFromSchedule(refDate, <any>{
trigger: {
type: TaskTriggerType.periodic,
type: JobTriggerType.periodic,
atTime: (h * 60 + m) * 60 * 1000,
periodicity: dayOfWeek
}
@ -66,7 +66,7 @@ describe('TaskManager', () => {
const m = 5;
expect(tm.getDateFromSchedule(refDate, <any>{
trigger: {
type: TaskTriggerType.periodic,
type: JobTriggerType.periodic,
atTime: (h * 60 + m) * 60 * 1000,
periodicity: 7
}
@ -77,7 +77,7 @@ describe('TaskManager', () => {
const m = 5;
expect(tm.getDateFromSchedule(refDate, <any>{
trigger: {
type: TaskTriggerType.periodic,
type: JobTriggerType.periodic,
atTime: (h * 60 + m) * 60 * 1000,
periodicity: 7
}

View File

@ -24,6 +24,6 @@ describe('TaskQue', () => {
const task = tq.get();
tq.ready(task);
expect(tq.isEmpty()).to.be.equal(true);
expect(tq.ready.bind(tq, task)).to.be.throw('Task does not exist');
expect(tq.ready.bind(tq, task)).to.be.throw('Job does not exist');
});
});