1
0
mirror of https://github.com/bpatrik/pigallery2.git synced 2025-03-31 22:05:20 +02:00

improving linting

This commit is contained in:
Patrik J. Braun 2023-09-11 18:57:51 +02:00
parent 19aa1a0e90
commit 81068b6d66
210 changed files with 5138 additions and 5242 deletions

View File

@ -1,5 +1,5 @@
import { Config } from '../common/config/private/Config';
import { LogLevel } from '../common/config/private/PrivateConfig';
import {Config} from '../common/config/private/Config';
import {LogLevel} from '../common/config/private/PrivateConfig';
export type logFN = (...args: (string | number)[]) => void;

View File

@ -1,6 +1,6 @@
import * as path from 'path';
import * as fs from 'fs';
import { Config } from '../common/config/private/Config';
import {Config} from '../common/config/private/Config';
class ProjectPathClass {
public Root: string;

View File

@ -1,6 +1,6 @@
import { NextFunction, Request, Response } from 'express';
import { UserRoles } from '../../common/entities/UserDTO';
import { NotificationManager } from '../model/NotifocationManager';
import {NextFunction, Request, Response} from 'express';
import {UserRoles} from '../../common/entities/UserDTO';
import {NotificationManager} from '../model/NotifocationManager';
export class NotificationMWs {
public static list(req: Request, res: Response, next: NextFunction): void {

View File

@ -1,10 +1,8 @@
import { NextFunction, Request, Response } from 'express';
import { ErrorCodes, ErrorDTO } from '../../common/entities/Error';
import { ObjectManagers } from '../model/ObjectManagers';
import {
PersonDTO,
} from '../../common/entities/PersonDTO';
import { Utils } from '../../common/Utils';
import {NextFunction, Request, Response} from 'express';
import {ErrorCodes, ErrorDTO} from '../../common/entities/Error';
import {ObjectManagers} from '../model/ObjectManagers';
import {PersonDTO,} from '../../common/entities/PersonDTO';
import {Utils} from '../../common/Utils';
import {PersonEntry} from '../model/database/enitites/PersonEntry';
export class PersonMWs {

View File

@ -1,7 +1,7 @@
import { NextFunction, Request, Response } from 'express';
import { ObjectManagers } from '../model/ObjectManagers';
import { ErrorCodes, ErrorDTO } from '../../common/entities/Error';
import { CustomHeaders } from '../../common/CustomHeaders';
import {NextFunction, Request, Response} from 'express';
import {ObjectManagers} from '../model/ObjectManagers';
import {ErrorCodes, ErrorDTO} from '../../common/entities/Error';
import {CustomHeaders} from '../../common/CustomHeaders';
export class VersionMWs {
/**

View File

@ -1,7 +1,7 @@
import { NextFunction, Request, Response } from 'express';
import { ErrorCodes, ErrorDTO } from '../../../common/entities/Error';
import { ObjectManagers } from '../../model/ObjectManagers';
import { StatisticDTO } from '../../../common/entities/settings/StatisticDTO';
import {NextFunction, Request, Response} from 'express';
import {ErrorCodes, ErrorDTO} from '../../../common/entities/Error';
import {ObjectManagers} from '../../model/ObjectManagers';
import {StatisticDTO} from '../../../common/entities/settings/StatisticDTO';
export class AdminMWs {
public static async loadStatistic(

View File

@ -1,7 +1,7 @@
import { NextFunction, Request, Response } from 'express';
import {NextFunction, Request, Response} from 'express';
import * as fs from 'fs';
import { PhotoProcessing } from '../../model/fileprocessing/PhotoProcessing';
import { Config } from '../../../common/config/private/Config';
import {PhotoProcessing} from '../../model/fileprocessing/PhotoProcessing';
import {Config} from '../../../common/config/private/Config';
import {ErrorCodes, ErrorDTO} from '../../../common/entities/Error';
export class PhotoConverterMWs {
@ -33,7 +33,7 @@ export class PhotoConverterMWs {
if (Config.Media.Photo.Converting.onTheFly === true) {
try {
req.resultPipe = await PhotoProcessing.convertPhoto(fullMediaPath);
}catch (err){
} catch (err) {
return next(new ErrorDTO(ErrorCodes.PHOTO_GENERATION_ERROR, err.message));
}
return next();

View File

@ -1,8 +1,8 @@
import { NextFunction, Request, Response } from 'express';
import { MoreThanOrEqual } from 'typeorm';
import { ErrorCodes, ErrorDTO } from '../../../common/entities/Error';
import { UserRoles } from '../../../common/entities/UserDTO';
import { ObjectManagers } from '../../model/ObjectManagers';
import {NextFunction, Request, Response} from 'express';
import {MoreThanOrEqual} from 'typeorm';
import {ErrorCodes, ErrorDTO} from '../../../common/entities/Error';
import {UserRoles} from '../../../common/entities/UserDTO';
import {ObjectManagers} from '../../model/ObjectManagers';
export class UserRequestConstrainsMWs {
public static forceSelfRequest(

View File

@ -1,13 +1,8 @@
import {
ParentDirectoryDTO,
} from '../../common/entities/DirectoryDTO';
import {ParentDirectoryDTO,} from '../../common/entities/DirectoryDTO';
import {Logger} from '../Logger';
import {Config} from '../../common/config/private/Config';
import {DiskManagerTH} from './threading/ThreadPool';
import {
DirectoryScanSettings,
DiskMangerWorker,
} from './threading/DiskMangerWorker';
import {DirectoryScanSettings, DiskMangerWorker,} from './threading/DiskMangerWorker';
import {FileDTO} from '../../common/entities/FileDTO';
const LOG_TAG = '[DiskManager]';

View File

@ -1,8 +1,5 @@
import {
NotificationDTO,
NotificationType,
} from '../../common/entities/NotificationDTO';
import { Request } from 'express';
import {NotificationDTO, NotificationType,} from '../../common/entities/NotificationDTO';
import {Request} from 'express';
export class NotificationManager {
public static notifications: NotificationDTO[] = [];

View File

@ -13,7 +13,8 @@ export class PasswordHelper {
try {
return bcrypt.compareSync(password, encryptedPassword);
// eslint-disable-next-line no-empty
} catch (e) {}
} catch (e) {
}
return false;
}
}

View File

@ -1,4 +1,4 @@
import { ParentDirectoryDTO } from '../../../common/entities/DirectoryDTO';
import {ParentDirectoryDTO} from '../../../common/entities/DirectoryDTO';
export interface IObjectManager {
onNewDataVersion?: (changedDir?: ParentDirectoryDTO) => Promise<void>;

View File

@ -5,7 +5,7 @@ import {DiskManager} from '../DiskManger';
import {PhotoEntity, PhotoMetadataEntity} from './enitites/PhotoEntity';
import {Utils} from '../../../common/Utils';
import {PhotoMetadata,} from '../../../common/entities/PhotoDTO';
import {Connection, Repository} from 'typeorm';
import {Connection, ObjectLiteral, Repository} from 'typeorm';
import {MediaEntity} from './enitites/MediaEntity';
import {MediaDTO, MediaDTOUtils} from '../../../common/entities/MediaDTO';
import {VideoEntity} from './enitites/VideoEntity';
@ -240,7 +240,7 @@ export class IndexingManager {
await directoryRepository
.createQueryBuilder()
.update(DirectoryEntity)
.set({parent: currentDirId as any})
.set({parent: currentDirId as unknown})
.where('path = :path', {
path: DiskMangerWorker.pathFromParent(scannedDirectory),
})
@ -499,8 +499,8 @@ export class IndexingManager {
});
}
private async saveChunk<T>(
repository: Repository<any>,
private async saveChunk<T extends ObjectLiteral>(
repository: Repository<T>,
entities: T[],
size: number
): Promise<T[]> {
@ -519,8 +519,8 @@ export class IndexingManager {
return list;
}
private async insertChunk<T>(
repository: Repository<any>,
private async insertChunk<T extends ObjectLiteral>(
repository: Repository<T>,
entities: T[],
size: number
): Promise<number[]> {
@ -529,7 +529,7 @@ export class IndexingManager {
}
if (entities.length < size) {
return (await repository.insert(entities)).identifiers.map(
(i: any) => i.id
(i: { id: number }) => i.id
);
}
let list: number[] = [];

View File

@ -1,9 +1,9 @@
import { GPSMetadata } from '../../../common/entities/PhotoDTO';
import {GPSMetadata} from '../../../common/entities/PhotoDTO';
import * as NodeGeocoder from 'node-geocoder';
import { LocationLookupException } from '../../exceptions/LocationLookupException';
import { LRU } from '../../../common/Utils';
import { IObjectManager } from './IObjectManager';
import { ParentDirectoryDTO } from '../../../common/entities/DirectoryDTO';
import {LocationLookupException} from '../../exceptions/LocationLookupException';
import {LRU} from '../../../common/Utils';
import {IObjectManager} from './IObjectManager';
import {ParentDirectoryDTO} from '../../../common/entities/DirectoryDTO';
export class LocationManager implements IObjectManager {
// onNewDataVersion only need for TypeScript, otherwise the interface is not implemented.
@ -12,7 +12,7 @@ export class LocationManager implements IObjectManager {
cache = new LRU<GPSMetadata>(100);
constructor() {
this.geocoder = NodeGeocoder({ provider: 'openstreetmap' });
this.geocoder = NodeGeocoder({provider: 'openstreetmap'});
}
async getGPSData(text: string): Promise<GPSMetadata> {

View File

@ -8,7 +8,7 @@ import {IObjectManager} from './IObjectManager';
const LOG_TAG = '[PersonManager]';
export class PersonManager implements IObjectManager{
export class PersonManager implements IObjectManager {
persons: PersonEntry[] = null;
/**
* Person table contains denormalized data that needs to update when isDBValid = false

View File

@ -1,5 +1,5 @@
import 'reflect-metadata';
import {Connection, createConnection, DataSourceOptions, getConnection,} from 'typeorm';
import {Connection, createConnection, DataSourceOptions, getConnection, LoggerOptions,} from 'typeorm';
import {UserEntity} from './enitites/UserEntity';
import {UserRoles} from '../../../common/entities/UserDTO';
import {PhotoEntity} from './enitites/PhotoEntity';
@ -26,33 +26,16 @@ import {MDFileEntity} from './enitites/MDFileEntity';
const LOG_TAG = '[SQLConnection]';
type Writeable<T> = { -readonly [P in keyof T]: T[P] };
export class SQLConnection {
private static connection: Connection = null;
public static async getConnection(): Promise<Connection> {
if (this.connection == null) {
const options: any = this.getDriver(Config.Database);
// options.name = 'main';
options.entities = [
UserEntity,
FileEntity,
MDFileEntity,
PersonJunctionTable,
PersonEntry,
MediaEntity,
PhotoEntity,
VideoEntity,
DirectoryEntity,
SharingEntity,
AlbumBaseEntity,
SavedSearchEntity,
VersionEntity,
];
options.synchronize = false;
if (Config.Server.Log.sqlLevel !== SQLLogLevel.none) {
options.logging = SQLLogLevel[Config.Server.Log.sqlLevel];
}
const options = this.getDriver(Config.Database);
Logger.debug(
LOG_TAG,
'Creating connection: ' + DatabaseType[Config.Database.type],
@ -73,27 +56,8 @@ export class SQLConnection {
// eslint-disable-next-line no-empty
} catch (err) {
}
const options: any = this.getDriver(config);
const options = this.getDriver(config);
options.name = 'test';
options.entities = [
UserEntity,
FileEntity,
MDFileEntity,
PersonJunctionTable,
PersonEntry,
MediaEntity,
PhotoEntity,
VideoEntity,
DirectoryEntity,
SharingEntity,
AlbumBaseEntity,
SavedSearchEntity,
VersionEntity,
];
options.synchronize = false;
if (Config.Server.Log.sqlLevel !== SQLLogLevel.none) {
options.logging = SQLLogLevel[Config.Server.Log.sqlLevel];
}
const conn = await this.createConnection(options);
await SQLConnection.schemeSync(conn);
await conn.close();
@ -164,7 +128,7 @@ export class SQLConnection {
}
}
public static getSQLiteDB(config: ServerDataBaseConfig): any {
public static getSQLiteDB(config: ServerDataBaseConfig): string {
return path.join(ProjectPath.getAbsolutePath(config.dbFolder), 'sqlite.db');
}
@ -236,8 +200,9 @@ export class SQLConnection {
}
}
private static getDriver(config: ServerDataBaseConfig): DataSourceOptions {
let driver: DataSourceOptions = null;
private static getDriver(config: ServerDataBaseConfig): Writeable<DataSourceOptions> {
let driver: Writeable<DataSourceOptions>;
if (config.type === DatabaseType.mysql) {
driver = {
type: 'mysql',
@ -257,6 +222,25 @@ export class SQLConnection {
),
};
}
driver.entities = [
UserEntity,
FileEntity,
MDFileEntity,
PersonJunctionTable,
PersonEntry,
MediaEntity,
PhotoEntity,
VideoEntity,
DirectoryEntity,
SharingEntity,
AlbumBaseEntity,
SavedSearchEntity,
VersionEntity,
];
driver.synchronize = false;
if (Config.Server.Log.sqlLevel !== SQLLogLevel.none) {
driver.logging = SQLLogLevel[Config.Server.Log.sqlLevel] as LoggerOptions;
}
return driver;
}
}

View File

@ -77,7 +77,7 @@ export class SharingManager {
const sharing = await connection.getRepository(SharingEntity).findOneBy({
id: inSharing.id,
creator: inSharing.creator.id as any,
creator: inSharing.creator.id as unknown,
path: inSharing.path,
});

View File

@ -1,28 +1,16 @@
import {
Column,
Entity,
Index,
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Unique,
} from 'typeorm';
import {
ParentDirectoryDTO,
SubDirectoryDTO,
} from '../../../../common/entities/DirectoryDTO';
import { MediaEntity } from './MediaEntity';
import { FileEntity } from './FileEntity';
import { columnCharsetCS } from './EntityUtils';
import { MediaDTO } from '../../../../common/entities/MediaDTO';
import {Column, Entity, Index, ManyToOne, OneToMany, PrimaryGeneratedColumn, Unique,} from 'typeorm';
import {ParentDirectoryDTO, SubDirectoryDTO,} from '../../../../common/entities/DirectoryDTO';
import {MediaEntity} from './MediaEntity';
import {FileEntity} from './FileEntity';
import {columnCharsetCS} from './EntityUtils';
import {MediaDTO} from '../../../../common/entities/MediaDTO';
@Entity()
@Unique(['name', 'path'])
export class DirectoryEntity
implements ParentDirectoryDTO<MediaDTO>, SubDirectoryDTO<MediaDTO>
{
implements ParentDirectoryDTO<MediaDTO>, SubDirectoryDTO<MediaDTO> {
@Index()
@PrimaryGeneratedColumn({ unsigned: true })
@PrimaryGeneratedColumn({unsigned: true})
id: number;
@Index()
@ -61,7 +49,7 @@ export class DirectoryEntity
isPartial?: boolean;
@Column('mediumint', { unsigned: true })
@Column('mediumint', {unsigned: true})
mediaCount: number;
@Column('bigint', {
@ -83,20 +71,20 @@ export class DirectoryEntity
youngestMedia: number;
@Index()
@ManyToOne((type) => DirectoryEntity, (directory) => directory.directories, {
@ManyToOne(() => DirectoryEntity, (directory) => directory.directories, {
onDelete: 'CASCADE',
})
public parent: DirectoryEntity;
@OneToMany((type) => DirectoryEntity, (dir) => dir.parent)
@OneToMany(() => DirectoryEntity, (dir) => dir.parent)
public directories: DirectoryEntity[];
// not saving to database, it is only assigned when querying the DB
@ManyToOne((type) => MediaEntity, { onDelete: 'SET NULL' })
@ManyToOne(() => MediaEntity, {onDelete: 'SET NULL'})
public cover: MediaEntity;
// On galley change, cover will be invalid
@Column({ type: 'boolean', default: false })
@Column({type: 'boolean', default: false})
validCover: boolean;
@OneToMany((type) => MediaEntity, (media) => media.directory)

View File

@ -1,6 +1,6 @@
import { Config } from '../../../../common/config/private/Config';
import { ColumnOptions } from 'typeorm/decorator/options/ColumnOptions';
import { DatabaseType } from '../../../../common/config/private/PrivateConfig';
import {Config} from '../../../../common/config/private/Config';
import {ColumnOptions} from 'typeorm/decorator/options/ColumnOptions';
import {DatabaseType} from '../../../../common/config/private/PrivateConfig';
export class ColumnCharsetCS implements ColumnOptions {
public get charset(): string {

View File

@ -14,7 +14,7 @@ export class FileEntity implements FileDTO {
name: string;
@Index()
@ManyToOne((type) => DirectoryEntity, (directory) => directory.metaFile, {
@ManyToOne(() => DirectoryEntity, (directory) => directory.metaFile, {
onDelete: 'CASCADE',
nullable: false,
})

View File

@ -54,7 +54,7 @@ export class GPSMetadataEntity implements GPSMetadata {
}
export class PositionMetaDataEntity implements PositionMetaData {
@Column((type) => GPSMetadataEntity)
@Column(() => GPSMetadataEntity)
GPSData: GPSMetadataEntity;
@Column({
@ -86,7 +86,7 @@ export class MediaMetadataEntity implements MediaMetadata {
@Column('text')
caption: string;
@Column((type) => MediaDimensionEntity)
@Column(() => MediaDimensionEntity)
size: MediaDimensionEntity;
/**
@ -113,17 +113,17 @@ export class MediaMetadataEntity implements MediaMetadata {
})
keywords: string[];
@Column((type) => CameraMetadataEntity)
@Column(() => CameraMetadataEntity)
cameraData: CameraMetadataEntity;
@Column((type) => PositionMetaDataEntity)
@Column(() => PositionMetaDataEntity)
positionData: PositionMetaDataEntity;
@Column('tinyint', {unsigned: true})
@Index()
rating: 0 | 1 | 2 | 3 | 4 | 5;
@OneToMany((type) => PersonJunctionTable, (junctionTable) => junctionTable.media)
@OneToMany(() => PersonJunctionTable, (junctionTable) => junctionTable.media)
personJunction: PersonJunctionTable[];
@Column({
@ -178,13 +178,13 @@ export abstract class MediaEntity implements MediaDTO {
name: string;
@Index()
@ManyToOne((type) => DirectoryEntity, (directory) => directory.media, {
@ManyToOne(() => DirectoryEntity, (directory) => directory.media, {
onDelete: 'CASCADE',
nullable: false,
})
directory: DirectoryEntity;
@Column((type) => MediaMetadataEntity)
@Column(() => MediaMetadataEntity)
metadata: MediaMetadataEntity;
missingThumbnails: number;

View File

@ -1,15 +1,7 @@
import {
Column,
Entity,
Index,
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Unique,
} from 'typeorm';
import {Column, Entity, Index, ManyToOne, OneToMany, PrimaryGeneratedColumn, Unique,} from 'typeorm';
import {PersonJunctionTable} from './PersonJunctionTable';
import {columnCharsetCS} from './EntityUtils';
import { PersonDTO } from '../../../../common/entities/PersonDTO';
import {PersonDTO} from '../../../../common/entities/PersonDTO';
@Entity()
@Unique(['name'])
@ -27,10 +19,10 @@ export class PersonEntry implements PersonDTO {
@Column({default: false})
isFavourite: boolean;
@OneToMany((type) => PersonJunctionTable, (junctionTable) => junctionTable.person)
@OneToMany(() => PersonJunctionTable, (junctionTable) => junctionTable.person)
public faces: PersonJunctionTable[];
@ManyToOne((type) => PersonJunctionTable, {
@ManyToOne(() => PersonJunctionTable, {
onDelete: 'SET NULL',
nullable: true,
})

View File

@ -13,14 +13,14 @@ export class PersonJunctionTable {
id: number;
@Index()
@ManyToOne((type) => MediaEntity, (media) => media.metadata.faces, {
@ManyToOne(() => MediaEntity, (media) => media.metadata.faces, {
onDelete: 'CASCADE',
nullable: false,
})
media: MediaEntity;
@Index()
@ManyToOne((type) => PersonEntry, (person) => person.faces, {
@ManyToOne(() => PersonEntry, (person) => person.faces, {
onDelete: 'CASCADE',
nullable: false,
})

View File

@ -1,9 +1,6 @@
import { ChildEntity, Column } from 'typeorm';
import {
PhotoDTO,
PhotoMetadata,
} from '../../../../common/entities/PhotoDTO';
import { MediaEntity, MediaMetadataEntity } from './MediaEntity';
import {ChildEntity, Column} from 'typeorm';
import {PhotoDTO, PhotoMetadata,} from '../../../../common/entities/PhotoDTO';
import {MediaEntity, MediaMetadataEntity} from './MediaEntity';
export class PhotoMetadataEntity
extends MediaMetadataEntity
@ -25,6 +22,6 @@ export class PhotoMetadataEntity
@ChildEntity()
export class PhotoEntity extends MediaEntity implements PhotoDTO {
@Column((type) => PhotoMetadataEntity)
@Column(() => PhotoMetadataEntity)
metadata: PhotoMetadataEntity;
}

View File

@ -1,11 +1,11 @@
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
import { SharingDTO } from '../../../../common/entities/SharingDTO';
import { UserEntity } from './UserEntity';
import { UserDTO } from '../../../../common/entities/UserDTO';
import {Column, Entity, ManyToOne, PrimaryGeneratedColumn} from 'typeorm';
import {SharingDTO} from '../../../../common/entities/SharingDTO';
import {UserEntity} from './UserEntity';
import {UserDTO} from '../../../../common/entities/UserDTO';
@Entity()
export class SharingEntity implements SharingDTO {
@PrimaryGeneratedColumn({ unsigned: true })
@PrimaryGeneratedColumn({unsigned: true})
id: number;
@Column()
@ -14,7 +14,7 @@ export class SharingEntity implements SharingDTO {
@Column()
path: string;
@Column({ type: 'text', nullable: true })
@Column({type: 'text', nullable: true})
password: string;
@Column('bigint', {
@ -38,6 +38,6 @@ export class SharingEntity implements SharingDTO {
@Column()
includeSubfolders: boolean;
@ManyToOne((type) => UserEntity, { onDelete: 'CASCADE', nullable: false })
@ManyToOne(() => UserEntity, {onDelete: 'CASCADE', nullable: false})
creator: UserDTO;
}

View File

@ -1,4 +1,4 @@
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
import {Column, Entity, PrimaryGeneratedColumn} from 'typeorm';
@Entity()
export class VersionEntity {

View File

@ -1,14 +1,10 @@
import { ChildEntity, Column } from 'typeorm';
import { MediaEntity, MediaMetadataEntity } from './MediaEntity';
import {
VideoDTO,
VideoMetadata,
} from '../../../../common/entities/VideoDTO';
import {ChildEntity, Column} from 'typeorm';
import {MediaEntity, MediaMetadataEntity} from './MediaEntity';
import {VideoDTO, VideoMetadata,} from '../../../../common/entities/VideoDTO';
export class VideoMetadataEntity
extends MediaMetadataEntity
implements VideoMetadata
{
implements VideoMetadata {
@Column('int')
bitRate: number;
@ -28,6 +24,6 @@ export class VideoMetadataEntity
@ChildEntity()
export class VideoEntity extends MediaEntity implements VideoDTO {
@Column((type) => VideoMetadataEntity)
@Column(() => VideoMetadataEntity)
metadata: VideoMetadataEntity;
}

View File

@ -23,6 +23,6 @@ export class AlbumBaseEntity implements AlbumBaseDTO {
@Column('int', {unsigned: true, default: 0})
count: number;
@ManyToOne((type) => MediaEntity, {onDelete: 'SET NULL', nullable: true})
@ManyToOne(() => MediaEntity, {onDelete: 'SET NULL', nullable: true})
public cover: MediaEntity;
}

View File

@ -1,13 +1,12 @@
import { ChildEntity, Column } from 'typeorm';
import { AlbumBaseEntity } from './AlbumBaseEntity';
import { SavedSearchDTO } from '../../../../../common/entities/album/SavedSearchDTO';
import { SearchQueryDTO } from '../../../../../common/entities/SearchQueryDTO';
import {ChildEntity, Column} from 'typeorm';
import {AlbumBaseEntity} from './AlbumBaseEntity';
import {SavedSearchDTO} from '../../../../../common/entities/album/SavedSearchDTO';
import {SearchQueryDTO} from '../../../../../common/entities/SearchQueryDTO';
@ChildEntity()
export class SavedSearchEntity
extends AlbumBaseEntity
implements SavedSearchDTO
{
implements SavedSearchDTO {
@Column({
type: 'text',
nullable: false,

View File

@ -31,7 +31,9 @@ const LOG_TAG = '[ConfigDiagnostics]';
export class ConfigDiagnostics {
static testAlbumsConfig(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
albumConfig: ClientAlbumConfig,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
original: PrivateConfigClass
): void {
Logger.debug(LOG_TAG, 'Testing album config');
@ -182,7 +184,9 @@ export class ConfigDiagnostics {
}
static async testTasksConfig(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
task: ServerJobConfig,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
config: PrivateConfigClass
): Promise<void> {
Logger.debug(LOG_TAG, 'Testing tasks config');
@ -202,7 +206,9 @@ export class ConfigDiagnostics {
}
static async testSearchConfig(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
search: ClientSearchConfig,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
config: PrivateConfigClass
): Promise<void> {
Logger.debug(LOG_TAG, 'Testing search config');
@ -223,7 +229,9 @@ export class ConfigDiagnostics {
}
static async testRandomPhotoConfig(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
sharing: ClientRandomPhotoConfig,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
config: PrivateConfigClass
): Promise<void> {
Logger.debug(LOG_TAG, 'Testing random photo config');

View File

@ -76,7 +76,7 @@ export class JobManager implements IJobListener {
};
onJobFinished = async (
job: IJob<any>,
job: IJob<unknown>,
state: JobProgressStates,
soloRun: boolean
): Promise<void> => {
@ -111,7 +111,7 @@ export class JobManager implements IJobListener {
}
};
getAvailableJobs(): IJob<any>[] {
getAvailableJobs(): IJob<unknown>[] {
return JobRepository.Instance.getAvailableJobs();
}
@ -129,7 +129,7 @@ export class JobManager implements IJobListener {
Config.Jobs.scheduled.forEach((s): void => this.runSchedule(s));
}
protected findJob<T = any>(jobName: string): IJob<T> {
protected findJob<T = unknown>(jobName: string): IJob<T> {
return this.getAvailableJobs().find((t): boolean => t.Name === jobName);
}

View File

@ -1,11 +1,8 @@
import { promises as fsp } from 'fs';
import {promises as fsp} from 'fs';
import * as path from 'path';
import { ProjectPath } from '../../ProjectPath';
import { Config } from '../../../common/config/private/Config';
import {
JobProgressDTO,
JobProgressStates,
} from '../../../common/entities/job/JobProgressDTO';
import {ProjectPath} from '../../ProjectPath';
import {Config} from '../../../common/config/private/Config';
import {JobProgressDTO, JobProgressStates,} from '../../../common/entities/job/JobProgressDTO';
export class JobProgressManager {
private static readonly VERSION = 3;
@ -40,7 +37,7 @@ export class JobProgressManager {
}
onJobProgressUpdate(progress: JobProgressDTO): void {
this.db.progresses[progress.HashName] = { progress, timestamp: Date.now() };
this.db.progresses[progress.HashName] = {progress, timestamp: Date.now()};
this.delayedSave();
}

View File

@ -14,7 +14,7 @@ import {AlbumCoverRestJob} from './jobs/AlbumCoverResetJob';
export class JobRepository {
private static instance: JobRepository = null;
availableJobs: { [key: string]: IJob<any> } = {};
availableJobs: { [key: string]: IJob<unknown> } = {};
public static get Instance(): JobRepository {
if (JobRepository.instance == null) {
@ -23,11 +23,11 @@ export class JobRepository {
return JobRepository.instance;
}
getAvailableJobs(): IJob<any>[] {
getAvailableJobs(): IJob<unknown>[] {
return Object.values(this.availableJobs).filter((t) => t.Supported);
}
register(job: IJob<any>): void {
register(job: IJob<unknown>): void {
if (typeof this.availableJobs[job.Name] !== 'undefined') {
throw new Error('Job already exist:' + job.Name);
}

View File

@ -1,6 +1,6 @@
import { JobDTO } from '../../../../common/entities/job/JobDTO';
import { JobProgress } from './JobProgress';
import { IJobListener } from './IJobListener';
import {JobDTO} from '../../../../common/entities/job/JobDTO';
import {JobProgress} from './JobProgress';
import {IJobListener} from './IJobListener';
export interface IJob<T> extends JobDTO {
Name: string;

View File

@ -1,10 +1,10 @@
import { JobProgress } from './JobProgress';
import { IJob } from './IJob';
import { JobProgressStates } from '../../../../common/entities/job/JobProgressDTO';
import {JobProgress} from './JobProgress';
import {IJob} from './IJob';
import {JobProgressStates} from '../../../../common/entities/job/JobProgressDTO';
export interface IJobListener {
onJobFinished(
job: IJob<any>,
job: IJob<unknown>,
state: JobProgressStates,
soloRun: boolean
): void;

View File

@ -10,7 +10,7 @@ declare const global: any;
const LOG_TAG = '[JOB]';
export abstract class Job<T extends Record<string, any> = Record<string, any>> implements IJob<T> {
export abstract class Job<T extends Record<string, unknown> = Record<string, unknown>> implements IJob<T> {
public allowParallelRun: boolean = null;
protected progress: JobProgress = null;
protected config: T;
@ -55,11 +55,11 @@ export abstract class Job<T extends Record<string, any> = Record<string, any>> i
this.allowParallelRun = allowParallelRun;
this.config = {} as T;
if (this.ConfigTemplate) {
this.ConfigTemplate.forEach(ct => (this.config as any)[ct.id] = ct.defaultValue);
this.ConfigTemplate.forEach(ct => (this.config as Record<string, unknown>)[ct.id] = ct.defaultValue);
}
if (config) {
for (const key of Object.keys(config)) {
(this.config as any)[key] = config[key];
(this.config as Record<string, unknown>)[key] = config[key];
}
}
this.progress = new JobProgress(

View File

@ -1,8 +1,4 @@
import {
JobProgressDTO,
JobProgressLogDTO,
JobProgressStates,
} from '../../../../common/entities/job/JobProgressDTO';
import {JobProgressDTO, JobProgressLogDTO, JobProgressStates,} from '../../../../common/entities/job/JobProgressDTO';
import {Config} from '../../../../common/config/private/Config';
export class JobProgress {
@ -22,7 +18,8 @@ export class JobProgress {
constructor(
public readonly jobName: string,
public readonly HashName: string
) {}
) {
}
set OnChange(val: (progress: JobProgress) => void) {
this.onChange = val;

View File

@ -1,13 +1,13 @@
import { Config } from '../../../../common/config/private/Config';
import { DefaultsJobs } from '../../../../common/entities/job/JobDTO';
import { FileJob } from './FileJob';
import { PhotoProcessing } from '../../fileprocessing/PhotoProcessing';
import {Config} from '../../../../common/config/private/Config';
import {DefaultsJobs} from '../../../../common/entities/job/JobDTO';
import {FileJob} from './FileJob';
import {PhotoProcessing} from '../../fileprocessing/PhotoProcessing';
export class PhotoConvertingJob extends FileJob {
public readonly Name = DefaultsJobs[DefaultsJobs['Photo Converting']];
constructor() {
super({ noVideo: true, noMetaFile: true });
super({noVideo: true, noMetaFile: true});
}
public get Supported(): boolean {

View File

@ -1,7 +1,7 @@
import { Config } from '../../../../common/config/private/Config';
import { DefaultsJobs } from '../../../../common/entities/job/JobDTO';
import { FileJob } from './FileJob';
import { VideoProcessing } from '../../fileprocessing/VideoProcessing';
import {Config} from '../../../../common/config/private/Config';
import {DefaultsJobs} from '../../../../common/entities/job/JobDTO';
import {FileJob} from './FileJob';
import {VideoProcessing} from '../../fileprocessing/VideoProcessing';
declare const global: any;
@ -9,7 +9,7 @@ export class VideoConvertingJob extends FileJob {
public readonly Name = DefaultsJobs[DefaultsJobs['Video Converting']];
constructor() {
super({ noPhoto: true, noMetaFile: true });
super({noPhoto: true, noMetaFile: true});
}
public get Supported(): boolean {

View File

@ -142,7 +142,7 @@ export class ImageRendererFactory {
image = sharp((input as MediaRendererInput).mediaPath, {failOnError: false});
} else {
const svg_buffer = Buffer.from((input as SvgRendererInput).svgString);
image = sharp(svg_buffer, { density: 450 });
image = sharp(svg_buffer, {density: 450});
}
image.rotate();
const metadata: Metadata = await image.metadata();

View File

@ -1,4 +1,4 @@
import { TaskQue } from './TaskQue';
import {TaskQue} from './TaskQue';
export interface ITaskExecuter<I, O> {
execute(input: I): Promise<O>;
@ -23,7 +23,8 @@ export class TaskExecuter<I, O> implements ITaskExecuter<I, O> {
process.nextTick(this.run);
};
constructor(private size: number, private worker: (input: I) => Promise<O>) {}
constructor(private size: number, private worker: (input: I) => Promise<O>) {
}
execute(input: I): Promise<O> {
const promise = this.taskQue.add(input).promise.obj;

View File

@ -1,4 +1,4 @@
import { Utils } from '../../../common/Utils';
import {Utils} from '../../../common/Utils';
export interface TaskQueEntry<I, O> {
data: I;

View File

@ -53,7 +53,7 @@ export class VideoConverterWorker {
.on('error', (e: any) => {
reject('[FFmpeg] ' + e.toString() + ' executed: ' + executedCmd);
})
.on('stderr', function (line: string) {
.on('stderr', function(line: string) {
// Although this is under `stderr` event, all of ffmpeg output come here.
Logger.debug('[FFmpeg] ' + line);
});

View File

@ -1,7 +1,7 @@
import { RenderingMWs } from '../middlewares/RenderingMWs';
import { ErrorCodes, ErrorDTO } from '../../common/entities/Error';
import { Logger } from '../Logger';
import { Express, NextFunction, Request, Response } from 'express';
import {RenderingMWs} from '../middlewares/RenderingMWs';
import {ErrorCodes, ErrorDTO} from '../../common/entities/Error';
import {Logger} from '../Logger';
import {Express, NextFunction, Request, Response} from 'express';
import {Config} from '../../common/config/private/Config';
export class ErrorRouter {

View File

@ -1,5 +1,5 @@
import { Express, NextFunction, Request, Response } from 'express';
import { logFN, Logger } from '../Logger';
import {Express, NextFunction, Request, Response} from 'express';
import {logFN, Logger} from '../Logger';
import {Config} from '../../common/config/private/Config';
declare global {

View File

@ -1,10 +1,10 @@
import { UserRoles } from '../../common/entities/UserDTO';
import { AuthenticationMWs } from '../middlewares/user/AuthenticationMWs';
import { RenderingMWs } from '../middlewares/RenderingMWs';
import { NotificationMWs } from '../middlewares/NotificationMWs';
import { Express } from 'express';
import { VersionMWs } from '../middlewares/VersionMWs';
import { ServerTimingMWs } from '../middlewares/ServerTimingMWs';
import {UserRoles} from '../../common/entities/UserDTO';
import {AuthenticationMWs} from '../middlewares/user/AuthenticationMWs';
import {RenderingMWs} from '../middlewares/RenderingMWs';
import {NotificationMWs} from '../middlewares/NotificationMWs';
import {Express} from 'express';
import {VersionMWs} from '../middlewares/VersionMWs';
import {ServerTimingMWs} from '../middlewares/ServerTimingMWs';
import {Config} from '../../common/config/private/Config';
export class NotificationRouter {

View File

@ -1,12 +1,12 @@
import { AuthenticationMWs } from '../middlewares/user/AuthenticationMWs';
import { Express } from 'express';
import { RenderingMWs } from '../middlewares/RenderingMWs';
import { UserRoles } from '../../common/entities/UserDTO';
import { PersonMWs } from '../middlewares/PersonMWs';
import { ThumbnailGeneratorMWs } from '../middlewares/thumbnail/ThumbnailGeneratorMWs';
import { VersionMWs } from '../middlewares/VersionMWs';
import { Config } from '../../common/config/private/Config';
import { ServerTimingMWs } from '../middlewares/ServerTimingMWs';
import {AuthenticationMWs} from '../middlewares/user/AuthenticationMWs';
import {Express} from 'express';
import {RenderingMWs} from '../middlewares/RenderingMWs';
import {UserRoles} from '../../common/entities/UserDTO';
import {PersonMWs} from '../middlewares/PersonMWs';
import {ThumbnailGeneratorMWs} from '../middlewares/thumbnail/ThumbnailGeneratorMWs';
import {VersionMWs} from '../middlewares/VersionMWs';
import {Config} from '../../common/config/private/Config';
import {ServerTimingMWs} from '../middlewares/ServerTimingMWs';
export class PersonRouter {
public static route(app: Express): void {

View File

@ -1,14 +1,14 @@
import { Express } from 'express';
import { PublicRouter } from './PublicRouter';
import { UserRouter } from './UserRouter';
import { GalleryRouter } from './GalleryRouter';
import { PersonRouter } from './PersonRouter';
import { SharingRouter } from './SharingRouter';
import { AdminRouter } from './admin/AdminRouter';
import { SettingsRouter } from './admin/SettingsRouter';
import { NotificationRouter } from './NotificationRouter';
import { ErrorRouter } from './ErrorRouter';
import { AlbumRouter } from './AlbumRouter';
import {Express} from 'express';
import {PublicRouter} from './PublicRouter';
import {UserRouter} from './UserRouter';
import {GalleryRouter} from './GalleryRouter';
import {PersonRouter} from './PersonRouter';
import {SharingRouter} from './SharingRouter';
import {AdminRouter} from './admin/AdminRouter';
import {SettingsRouter} from './admin/SettingsRouter';
import {NotificationRouter} from './NotificationRouter';
import {ErrorRouter} from './ErrorRouter';
import {AlbumRouter} from './AlbumRouter';
export class Router {
public static route(app: Express): void {

View File

@ -1,11 +1,11 @@
import { UserMWs } from '../middlewares/user/UserMWs';
import { Express } from 'express';
import { UserRoles } from '../../common/entities/UserDTO';
import { AuthenticationMWs } from '../middlewares/user/AuthenticationMWs';
import { UserRequestConstrainsMWs } from '../middlewares/user/UserRequestConstrainsMWs';
import { RenderingMWs } from '../middlewares/RenderingMWs';
import { ServerTimingMWs } from '../middlewares/ServerTimingMWs';
import { Config } from '../../common/config/private/Config';
import {UserMWs} from '../middlewares/user/UserMWs';
import {Express} from 'express';
import {UserRoles} from '../../common/entities/UserDTO';
import {AuthenticationMWs} from '../middlewares/user/AuthenticationMWs';
import {UserRequestConstrainsMWs} from '../middlewares/user/UserRequestConstrainsMWs';
import {RenderingMWs} from '../middlewares/RenderingMWs';
import {ServerTimingMWs} from '../middlewares/ServerTimingMWs';
import {Config} from '../../common/config/private/Config';
export class UserRouter {
public static route(app: Express): void {

View File

@ -1,9 +1,9 @@
import { AuthenticationMWs } from '../../middlewares/user/AuthenticationMWs';
import { UserRoles } from '../../../common/entities/UserDTO';
import { RenderingMWs } from '../../middlewares/RenderingMWs';
import { AdminMWs } from '../../middlewares/admin/AdminMWs';
import { Express } from 'express';
import { Config } from '../../../common/config/private/Config';
import {AuthenticationMWs} from '../../middlewares/user/AuthenticationMWs';
import {UserRoles} from '../../../common/entities/UserDTO';
import {RenderingMWs} from '../../middlewares/RenderingMWs';
import {AdminMWs} from '../../middlewares/admin/AdminMWs';
import {Express} from 'express';
import {Config} from '../../../common/config/private/Config';
export class AdminRouter {
public static route(app: Express): void {

View File

@ -1,9 +1,9 @@
import { AuthenticationMWs } from '../../middlewares/user/AuthenticationMWs';
import { UserRoles } from '../../../common/entities/UserDTO';
import { RenderingMWs } from '../../middlewares/RenderingMWs';
import { Express } from 'express';
import { SettingsMWs } from '../../middlewares/admin/SettingsMWs';
import { Config } from '../../../common/config/private/Config';
import {AuthenticationMWs} from '../../middlewares/user/AuthenticationMWs';
import {UserRoles} from '../../../common/entities/UserDTO';
import {RenderingMWs} from '../../middlewares/RenderingMWs';
import {Express} from 'express';
import {SettingsMWs} from '../../middlewares/admin/SettingsMWs';
import {Config} from '../../../common/config/private/Config';
export class SettingsRouter {
public static route(app: Express): void {

View File

@ -21,7 +21,7 @@ import {Event} from '../common/event/Event';
import {QueryParams} from '../common/QueryParams';
import {ConfigClassBuilder} from 'typeconfig/node';
import {ConfigClassOptions} from 'typeconfig/src/decorators/class/IConfigClass';
import {DatabaseType, ServerConfig} from '../common/config/private/PrivateConfig';
import {ServerConfig} from '../common/config/private/PrivateConfig';
import {unless} from 'express-unless';
// eslint-disable-next-line @typescript-eslint/no-var-requires

View File

@ -89,7 +89,7 @@ export class PrivateConfigClass extends ServerConfig {
const pc = ConfigClassBuilder.attachPrivateInterface(new PrivateConfigClass());
try {
await pc.load();
}catch (e){
} catch (e) {
console.error('Error during loading original config. Reverting to defaults.');
console.error(e);
}

View File

@ -2,7 +2,6 @@
import {SubConfigClass} from '../../../../node_modules/typeconfig/src/decorators/class/SubConfigClass';
import {ConfigPriority, TAGS} from '../public/ClientConfig';
import {ConfigProperty} from '../../../../node_modules/typeconfig/src/decorators/property/ConfigPropoerty';
import {ServerConfig} from './PrivateConfig';
declare let $localize: (s: TemplateStringsArray) => string;

View File

@ -1,4 +1,4 @@
import { SearchQueryTypes } from './SearchQueryDTO';
import {SearchQueryTypes} from './SearchQueryDTO';
export interface IAutoCompleteItem {
text: string;
@ -6,7 +6,8 @@ export interface IAutoCompleteItem {
}
export class AutoCompleteItem implements IAutoCompleteItem {
constructor(public text: string, public type: SearchQueryTypes = null) {}
constructor(public text: string, public type: SearchQueryTypes = null) {
}
equals(other: AutoCompleteItem): boolean {
return this.text === other.text && this.type === other.type;

View File

@ -1,7 +1,7 @@
import { MediaDTO, MediaDTOUtils } from './MediaDTO';
import { FileDTO } from './FileDTO';
import { PhotoDTO, CoverPhotoDTO } from './PhotoDTO';
import { Utils } from '../Utils';
import {MediaDTO} from './MediaDTO';
import {FileDTO} from './FileDTO';
import {CoverPhotoDTO} from './PhotoDTO';
import {Utils} from '../Utils';
export interface DirectoryPathDTO {
name: string;
@ -9,7 +9,6 @@ export interface DirectoryPathDTO {
}
export interface DirectoryBaseDTO<S extends FileDTO = MediaDTO>
extends DirectoryPathDTO {
id: number;

View File

@ -1,4 +1,4 @@
import { MediaDTO } from './MediaDTO';
import {MediaDTO} from './MediaDTO';
export interface DuplicatesDTO {
media: MediaDTO[];

View File

@ -1,4 +1,4 @@
import { Request } from 'express';
import {Request} from 'express';
export enum ErrorCodes {
NOT_AUTHENTICATED = 1,
@ -33,7 +33,7 @@ export class ErrorDTO {
public request: {
method: string;
url: string;
} = { method: '', url: '' };
} = {method: '', url: ''};
constructor(
public code: ErrorCodes,

View File

@ -3,5 +3,6 @@ export class LoginCredential {
public username: string = '',
public password: string = '',
public rememberMe: boolean = true
) {}
) {
}
}

View File

@ -1,4 +1,4 @@
import { ErrorDTO } from './Error';
import {ErrorDTO} from './Error';
export class Message<T> {
public error: ErrorDTO = null;

View File

@ -1,4 +1,4 @@
import { UserModificationRequest } from './UserModificationRequest';
import {UserModificationRequest} from './UserModificationRequest';
export class PasswordChangeRequest extends UserModificationRequest {
constructor(

View File

@ -1,5 +1,5 @@
import { DirectoryPathDTO } from './DirectoryDTO';
import { MediaDimension, MediaDTO, MediaMetadata } from './MediaDTO';
import {DirectoryPathDTO} from './DirectoryDTO';
import {MediaDimension, MediaDTO, MediaMetadata} from './MediaDTO';
export interface CoverPhotoDTO extends MediaDTO {
name: string;

View File

@ -1,7 +1,7 @@
import { SubDirectoryDTO } from './DirectoryDTO';
import { FileDTO } from './FileDTO';
import { MediaDTO } from './MediaDTO';
import { SearchQueryDTO } from './SearchQueryDTO';
import {SubDirectoryDTO} from './DirectoryDTO';
import {FileDTO} from './FileDTO';
import {MediaDTO} from './MediaDTO';
import {SearchQueryDTO} from './SearchQueryDTO';
export interface SearchResultDTO {
searchQuery: SearchQueryDTO;

View File

@ -1,4 +1,4 @@
import { UserDTO } from './UserDTO';
import {UserDTO} from './UserDTO';
export interface SharingDTO {
id: number;

View File

@ -1,5 +1,5 @@
import { DirectoryPathDTO } from './DirectoryDTO';
import { Utils } from '../Utils';
import {DirectoryPathDTO} from './DirectoryDTO';
import {Utils} from '../Utils';
export enum UserRoles {
LimitedGuest = 1,

View File

@ -1,3 +1,4 @@
export class UserModificationRequest {
constructor(public id: number) {}
constructor(public id: number) {
}
}

View File

@ -1,5 +1,5 @@
import { DirectoryPathDTO } from './DirectoryDTO';
import { MediaDimension, MediaDTO, MediaMetadata } from './MediaDTO';
import {DirectoryPathDTO} from './DirectoryDTO';
import {MediaDimension, MediaDTO, MediaMetadata} from './MediaDTO';
export interface VideoDTO extends MediaDTO {
id: number;

View File

@ -1,4 +1,4 @@
import { CoverPhotoDTO } from '../PhotoDTO';
import {CoverPhotoDTO} from '../PhotoDTO';
export interface AlbumBaseDTO {
id: number;

View File

@ -1,6 +1,6 @@
import { AlbumBaseDTO } from './AlbumBaseDTO';
import { CoverPhotoDTO } from '../PhotoDTO';
import { SearchQueryDTO } from '../SearchQueryDTO';
import {AlbumBaseDTO} from './AlbumBaseDTO';
import {CoverPhotoDTO} from '../PhotoDTO';
import {SearchQueryDTO} from '../SearchQueryDTO';
export interface SavedSearchDTO extends AlbumBaseDTO {
id: number;

View File

@ -47,7 +47,8 @@ export class EventLimit<T> {
class EventLimitHandler<T> {
public lastTriggerValue: T = null;
constructor(public limit: T, public handler: (data?: T) => void) {}
constructor(public limit: T, public handler: (data?: T) => void) {
}
public fire(data?: T): void {
this.handler(data);

View File

@ -18,7 +18,7 @@ describe('BackendTextService', () => {
getTexts(obj[key]);
continue;
}
expect(backendTextService.get(obj[key])).not.toEqual(null, 'Error for key: ' + obj[key] +', ' + key);
expect(backendTextService.get(obj[key])).not.toEqual(null, 'Error for key: ' + obj[key] + ', ' + key);
}
};
getTexts(backendTexts);

View File

@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
import { backendText, backendTexts } from '../../../common/BackendTexts';
import { DefaultsJobs } from '../../../common/entities/job/JobDTO';
import {Injectable} from '@angular/core';
import {backendText, backendTexts} from '../../../common/BackendTexts';
import {DefaultsJobs} from '../../../common/entities/job/JobDTO';
@Injectable()
export class BackendtextService {

View File

@ -1,16 +1,16 @@
import { inject, TestBed } from '@angular/core/testing';
import { UserService } from './user.service';
import { UserDTO } from '../../../../common/entities/UserDTO';
import { LoginCredential } from '../../../../common/entities/LoginCredential';
import { AuthenticationService } from './authentication.service';
import { NetworkService } from './network.service';
import { ErrorDTO } from '../../../../common/entities/Error';
import { VersionService } from '../version.service';
import { ShareService } from '../../ui/gallery/share.service';
import {inject, TestBed} from '@angular/core/testing';
import {UserService} from './user.service';
import {UserDTO} from '../../../../common/entities/UserDTO';
import {LoginCredential} from '../../../../common/entities/LoginCredential';
import {AuthenticationService} from './authentication.service';
import {NetworkService} from './network.service';
import {ErrorDTO} from '../../../../common/entities/Error';
import {VersionService} from '../version.service';
import {ShareService} from '../../ui/gallery/share.service';
class MockUserService {
public login(credential: LoginCredential): Promise<UserDTO> {
return Promise.resolve({ name: 'testUserName' } as UserDTO);
return Promise.resolve({name: 'testUserName'} as UserDTO);
}
public async getSessionUser(): Promise<UserDTO> {
@ -36,9 +36,9 @@ describe('AuthenticationService', () => {
TestBed.configureTestingModule({
providers: [
VersionService,
{ provide: NetworkService, useClass: MockNetworkService },
{ provide: UserService, useClass: MockUserService },
{ provide: ShareService, useClass: MockShareService },
{provide: NetworkService, useClass: MockNetworkService},
{provide: UserService, useClass: MockUserService},
{provide: ShareService, useClass: MockShareService},
AuthenticationService,
],
});

View File

@ -16,7 +16,7 @@ declare module ServerInject {
export let user: UserDTO;
}
@Injectable({ providedIn: 'root' })
@Injectable({providedIn: 'root'})
export class AuthenticationService {
public readonly user: BehaviorSubject<UserDTO>;

View File

@ -1,18 +1,15 @@
import { Injectable } from '@angular/core';
import {
ActivatedRouteSnapshot,
CanActivate,
RouterStateSnapshot,
} from '@angular/router';
import { AuthenticationService } from '../authentication.service';
import { NavigationService } from '../../navigation.service';
import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot,} from '@angular/router';
import {AuthenticationService} from '../authentication.service';
import {NavigationService} from '../../navigation.service';
@Injectable({ providedIn: 'root' })
@Injectable({providedIn: 'root'})
export class AuthGuard implements CanActivate {
constructor(
private authenticationService: AuthenticationService,
private navigationService: NavigationService
) {}
) {
}
canActivate(
route: ActivatedRouteSnapshot,

View File

@ -1,16 +1,12 @@
import { Injectable } from '@angular/core';
import {
HttpEvent,
HttpHandler,
HttpInterceptor,
HttpRequest,
} from '@angular/common/http';
import { Observable } from 'rxjs';
import { AuthenticationService } from '../authentication.service';
import {Injectable} from '@angular/core';
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest,} from '@angular/common/http';
import {Observable} from 'rxjs';
import {AuthenticationService} from '../authentication.service';
@Injectable()
export class CSRFInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}
constructor(private authenticationService: AuthenticationService) {
}
intercept(
request: HttpRequest<any>,

View File

@ -1,17 +1,13 @@
import { Injectable } from '@angular/core';
import {
HttpEvent,
HttpHandler,
HttpInterceptor,
HttpRequest,
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { AuthenticationService } from '../authentication.service';
import {Injectable} from '@angular/core';
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest,} from '@angular/common/http';
import {Observable, throwError} from 'rxjs';
import {catchError} from 'rxjs/operators';
import {AuthenticationService} from '../authentication.service';
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}
constructor(private authenticationService: AuthenticationService) {
}
intercept(
request: HttpRequest<any>,

View File

@ -1,8 +1,5 @@
import {getTestBed, inject, TestBed} from '@angular/core/testing';
import {
HttpClientTestingModule,
HttpTestingController,
} from '@angular/common/http/testing';
import {HttpClientTestingModule, HttpTestingController,} from '@angular/common/http/testing';
import {NetworkService} from './network.service';
import {Message} from '../../../../common/entities/Message';
import {LoadingBarService} from '@ngx-loading-bar/core';

View File

@ -1,12 +1,9 @@
import { Injectable } from '@angular/core';
import { ToastrService } from 'ngx-toastr';
import { NetworkService } from './network/network.service';
import { AuthenticationService } from './network/authentication.service';
import {
NotificationDTO,
NotificationType,
} from '../../../common/entities/NotificationDTO';
import { UserDTO, UserRoles } from '../../../common/entities/UserDTO';
import {Injectable} from '@angular/core';
import {ToastrService} from 'ngx-toastr';
import {NetworkService} from './network/network.service';
import {AuthenticationService} from './network/authentication.service';
import {NotificationDTO, NotificationType,} from '../../../common/entities/NotificationDTO';
import {UserDTO, UserRoles} from '../../../common/entities/UserDTO';
export interface CountedNotificationDTO extends NotificationDTO {
count: number;
@ -53,7 +50,7 @@ export class NotificationService {
if (n.details) {
key += JSON.stringify(n.details);
}
groups[key] = groups[key] || { notification: n, count: 0 };
groups[key] = groups[key] || {notification: n, count: 0};
groups[key].count++;
});
this.numberOfNotifications = notifications.length;

View File

@ -1,4 +1,4 @@
import { Injectable } from '@angular/core';
import {Injectable} from '@angular/core';
@Injectable()
export class SeededRandomService {

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import {Injectable} from '@angular/core';
import {BehaviorSubject} from 'rxjs';
@Injectable()
export class VersionService {

View File

@ -1,6 +1,6 @@
import { Pipe, PipeTransform } from '@angular/core';
import {Pipe, PipeTransform} from '@angular/core';
@Pipe({ name: 'duration' })
@Pipe({name: 'duration'})
export class DurationPipe implements PipeTransform {
transform(time: number, separator: ':' | 'string' = 'string'): string {

View File

@ -1,8 +1,8 @@
import { Pipe, PipeTransform } from '@angular/core';
import { FileDTO } from '../../../common/entities/FileDTO';
import { Utils } from '../../../common/Utils';
import {Pipe, PipeTransform} from '@angular/core';
import {FileDTO} from '../../../common/entities/FileDTO';
import {Utils} from '../../../common/Utils';
@Pipe({ name: 'toPath' })
@Pipe({name: 'toPath'})
export class FileDTOToPathPipe implements PipeTransform {
transform(metaFile: FileDTO): string | null {
if (!metaFile) {

View File

@ -1,8 +1,8 @@
import { Pipe, PipeTransform } from '@angular/core';
import { FileDTO } from '../../../common/entities/FileDTO';
import { Utils } from '../../../common/Utils';
import {Pipe, PipeTransform} from '@angular/core';
import {FileDTO} from '../../../common/entities/FileDTO';
import {Utils} from '../../../common/Utils';
@Pipe({ name: 'toRelativePath' })
@Pipe({name: 'toRelativePath'})
export class FileDTOToRelativePathPipe implements PipeTransform {
transform(metaFile: FileDTO): string | null {
if (!metaFile) {

View File

@ -1,6 +1,6 @@
import { Pipe, PipeTransform } from '@angular/core';
import {Pipe, PipeTransform} from '@angular/core';
@Pipe({ name: 'fileSize' })
@Pipe({name: 'fileSize'})
export class FileSizePipe implements PipeTransform {
transform(size: number): string {
const postFixes = ['B', 'KB', 'MB', 'GB', 'TB'];

View File

@ -1,8 +1,8 @@
import { Pipe, PipeTransform } from '@angular/core';
import { FileDTO } from '../../../common/entities/FileDTO';
import { Config } from '../../../common/config/public/Config';
import {Pipe, PipeTransform} from '@angular/core';
import {FileDTO} from '../../../common/entities/FileDTO';
import {Config} from '../../../common/config/public/Config';
@Pipe({ name: 'gpxFiles' })
@Pipe({name: 'gpxFiles'})
export class GPXFilesFilterPipe implements PipeTransform {
transform(metaFiles: FileDTO[]): FileDTO[] | null {
if (!Config.MetaFile.gpx) {

View File

@ -1,8 +1,8 @@
import { Pipe, PipeTransform } from '@angular/core';
import { FileDTO } from '../../../common/entities/FileDTO';
import { MDFileDTO } from '../../../common/entities/MDFileDTO';
import {Pipe, PipeTransform} from '@angular/core';
import {FileDTO} from '../../../common/entities/FileDTO';
import {MDFileDTO} from '../../../common/entities/MDFileDTO';
@Pipe({ name: 'mdFiles' })
@Pipe({name: 'mdFiles'})
export class MDFilesFilterPipe implements PipeTransform {
transform(metaFiles: FileDTO[]): MDFileDTO[] | null {
if (!metaFiles) {

View File

@ -1,19 +1,19 @@
import { Pipe, PipeTransform } from '@angular/core';
import { MediaDTO, MediaDTOUtils } from '../../../common/entities/MediaDTO';
import { PhotoDTO } from '../../../common/entities/PhotoDTO';
import {Pipe, PipeTransform} from '@angular/core';
import {MediaDTO, MediaDTOUtils} from '../../../common/entities/MediaDTO';
import {PhotoDTO} from '../../../common/entities/PhotoDTO';
import {MediaGroup} from '../ui/gallery/navigator/sorting.service';
@Pipe({ name: 'photosOnly' })
@Pipe({name: 'photosOnly'})
export class PhotoFilterPipe implements PipeTransform {
transform(mediaGroups: MediaGroup[]): PhotoDTO[] | null {
if (!mediaGroups) {
return null;
}
const ret = [];
for(let i = 0; i < mediaGroups.length; ++i){
for (let i = 0; i < mediaGroups.length; ++i) {
ret.push(...mediaGroups[i].media.filter((m: MediaDTO): boolean =>
MediaDTOUtils.isPhoto(m)
) as PhotoDTO[])
) as PhotoDTO[]);
}
return ret;
}

View File

@ -1,4 +1,4 @@
import {Pipe, PipeTransform, SecurityContext} from '@angular/core';
import {Pipe, PipeTransform} from '@angular/core';
import {DomSanitizer} from '@angular/platform-browser';
@Pipe({name: 'safeHtml'})

View File

@ -1,7 +1,7 @@
import { Pipe, PipeTransform } from '@angular/core';
import { UserRoles } from '../../../common/entities/UserDTO';
import {Pipe, PipeTransform} from '@angular/core';
import {UserRoles} from '../../../common/entities/UserDTO';
@Pipe({ name: 'stringifyRole' })
@Pipe({name: 'stringifyRole'})
export class StringifyRole implements PipeTransform {
transform(role: number): string {
return UserRoles[role];

View File

@ -1,10 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { SearchQueryDTO } from '../../../common/entities/SearchQueryDTO';
import { SearchQueryParserService } from '../ui/gallery/search/search-query-parser.service';
import {Pipe, PipeTransform} from '@angular/core';
import {SearchQueryDTO} from '../../../common/entities/SearchQueryDTO';
import {SearchQueryParserService} from '../ui/gallery/search/search-query-parser.service';
@Pipe({ name: 'searchQuery' })
@Pipe({name: 'searchQuery'})
export class StringifySearchQuery implements PipeTransform {
constructor(private searchQueryParserService: SearchQueryParserService) {}
constructor(private searchQueryParserService: SearchQueryParserService) {
}
transform(query: SearchQueryDTO): string {
return this.searchQueryParserService.stringify(query);

View File

@ -1,8 +1,8 @@
import { Pipe, PipeTransform } from '@angular/core';
import {Pipe, PipeTransform} from '@angular/core';
import {EnumTranslations} from '../ui/EnumTranslations';
import {SearchQueryTypes} from '../../../common/entities/SearchQueryDTO';
@Pipe({ name: 'stringifySearchType' })
@Pipe({name: 'stringifySearchType'})
export class StringifySearchType implements PipeTransform {
transform(type: SearchQueryTypes): string {

View File

@ -3,7 +3,7 @@ import {ConfigPriority, MapProviders, NavigationLinkTypes, ScrollUpModes} from '
import {ReIndexingSensitivity} from '../../../common/config/private/PrivateConfig';
import {SearchQueryTypes} from '../../../common/entities/SearchQueryDTO';
import {ConfigStyle} from './settings/settings.service';
import {SortByTypes,GroupByTypes} from '../../../common/entities/SortingMethods';
import {GroupByTypes, SortByTypes} from '../../../common/entities/SortingMethods';
import {GridSizes} from '../../../common/entities/GridSizes';
export const EnumTranslations: Record<string, string> = {};

View File

@ -1,16 +1,13 @@
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { RouterLink } from '@angular/router';
import { DomSanitizer, SafeStyle } from '@angular/platform-browser';
import {
Thumbnail,
ThumbnailManagerService,
} from '../../gallery/thumbnailManager.service';
import { AuthenticationService } from '../../../model/network/authentication.service';
import { AlbumsService } from '../albums.service';
import { AlbumBaseDTO } from '../../../../../common/entities/album/AlbumBaseDTO';
import { Media } from '../../gallery/Media';
import { SavedSearchDTO } from '../../../../../common/entities/album/SavedSearchDTO';
import { UserRoles } from '../../../../../common/entities/UserDTO';
import {Component, Input, OnDestroy, OnInit} from '@angular/core';
import {RouterLink} from '@angular/router';
import {DomSanitizer, SafeStyle} from '@angular/platform-browser';
import {Thumbnail, ThumbnailManagerService,} from '../../gallery/thumbnailManager.service';
import {AuthenticationService} from '../../../model/network/authentication.service';
import {AlbumsService} from '../albums.service';
import {AlbumBaseDTO} from '../../../../../common/entities/album/AlbumBaseDTO';
import {Media} from '../../gallery/Media';
import {SavedSearchDTO} from '../../../../../common/entities/album/SavedSearchDTO';
import {UserRoles} from '../../../../../common/entities/UserDTO';
import {Config} from '../../../../../common/config/public/Config';
@Component({
@ -31,7 +28,8 @@ export class AlbumComponent implements OnInit, OnDestroy {
private sanitizer: DomSanitizer,
private albumService: AlbumsService,
public authenticationService: AuthenticationService
) {}
) {
}
get IsSavedSearch(): boolean {
return this.album && !!this.AsSavedSearch.searchQuery;

View File

@ -1,7 +1,7 @@
import { Component, Input, TemplateRef } from '@angular/core';
import { BsModalService } from 'ngx-bootstrap/modal';
import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';
import { SearchQueryDTO } from '../../../../../common/entities/SearchQueryDTO';
import {Component, Input, TemplateRef} from '@angular/core';
import {BsModalService} from 'ngx-bootstrap/modal';
import {BsModalRef} from 'ngx-bootstrap/modal/bs-modal-ref.service';
import {SearchQueryDTO} from '../../../../../common/entities/SearchQueryDTO';
@Component({
selector: 'app-saved-search-popup-btn',
@ -13,10 +13,11 @@ export class SavedSearchPopupComponent {
@Input() savedSearchDTO: { name: string; searchQuery: SearchQueryDTO };
private modalRef: BsModalRef;
constructor(private modalService: BsModalService) {}
constructor(private modalService: BsModalService) {
}
public async openModal(template: TemplateRef<any>): Promise<void> {
this.modalRef = this.modalService.show(template, { class: 'modal-lg' });
this.modalRef = this.modalService.show(template, {class: 'modal-lg'});
document.body.style.paddingRight = '0px';
}

View File

@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { NetworkService } from '../../model/network/network.service';
import { DuplicatesDTO } from '../../../../common/entities/DuplicatesDTO';
import { BehaviorSubject } from 'rxjs';
import {Injectable} from '@angular/core';
import {NetworkService} from '../../model/network/network.service';
import {DuplicatesDTO} from '../../../../common/entities/DuplicatesDTO';
import {BehaviorSubject} from 'rxjs';
@Injectable()
export class DuplicateService {

View File

@ -1,10 +1,7 @@
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { MediaDTO } from '../../../../../common/entities/MediaDTO';
import {
IconThumbnail,
ThumbnailManagerService,
} from '../../gallery/thumbnailManager.service';
import { MediaIcon } from '../../gallery/MediaIcon';
import {Component, Input, OnDestroy, OnInit} from '@angular/core';
import {MediaDTO} from '../../../../../common/entities/MediaDTO';
import {IconThumbnail, ThumbnailManagerService,} from '../../gallery/thumbnailManager.service';
import {MediaIcon} from '../../gallery/MediaIcon';
@Component({
selector: 'app-duplicates-photo',
@ -16,7 +13,8 @@ export class DuplicatesPhotoComponent implements OnInit, OnDestroy {
thumbnail: IconThumbnail;
constructor(private thumbnailService: ThumbnailManagerService) {}
constructor(private thumbnailService: ThumbnailManagerService) {
}
ngOnInit(): void {
this.thumbnail = this.thumbnailService.getIcon(new MediaIcon(this.media));

View File

@ -1,6 +1,6 @@
import { PersonDTO } from '../../../../common/entities/PersonDTO';
import { Config } from '../../../../common/config/public/Config';
import { Utils } from '../../../../common/Utils';
import {PersonDTO} from '../../../../common/entities/PersonDTO';
import {Config} from '../../../../common/config/public/Config';
import {Utils} from '../../../../common/Utils';
export class Person implements PersonDTO {
isFavourite: boolean;

View File

@ -1,19 +1,12 @@
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { RouterLink } from '@angular/router';
import { PersonDTO } from '../../../../../common/entities/PersonDTO';
import { DomSanitizer, SafeStyle } from '@angular/platform-browser';
import {
PersonThumbnail,
ThumbnailManagerService,
} from '../../gallery/thumbnailManager.service';
import { FacesService } from '../faces.service';
import { AuthenticationService } from '../../../model/network/authentication.service';
import { Config } from '../../../../../common/config/public/Config';
import {
SearchQueryTypes,
TextSearch,
TextSearchQueryMatchTypes,
} from '../../../../../common/entities/SearchQueryDTO';
import {Component, Input, OnDestroy, OnInit} from '@angular/core';
import {RouterLink} from '@angular/router';
import {PersonDTO} from '../../../../../common/entities/PersonDTO';
import {DomSanitizer, SafeStyle} from '@angular/platform-browser';
import {PersonThumbnail, ThumbnailManagerService,} from '../../gallery/thumbnailManager.service';
import {FacesService} from '../faces.service';
import {AuthenticationService} from '../../../model/network/authentication.service';
import {Config} from '../../../../../common/config/public/Config';
import {SearchQueryTypes, TextSearch, TextSearchQueryMatchTypes,} from '../../../../../common/entities/SearchQueryDTO';
@Component({
selector: 'app-face',
@ -33,7 +26,8 @@ export class FaceComponent implements OnInit, OnDestroy {
private sanitizer: DomSanitizer,
private faceService: FacesService,
public authenticationService: AuthenticationService
) {}
) {
}
get CanUpdate(): boolean {
return (

View File

@ -1,9 +1,9 @@
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { FacesService } from './faces.service';
import { QueryService } from '../../model/query.service';
import { map } from 'rxjs/operators';
import { PersonDTO } from '../../../../common/entities/PersonDTO';
import { Observable } from 'rxjs';
import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';
import {FacesService} from './faces.service';
import {QueryService} from '../../model/query.service';
import {map} from 'rxjs/operators';
import {PersonDTO} from '../../../../common/entities/PersonDTO';
import {Observable} from 'rxjs';
import {PiTitleService} from '../../model/pi-title.service';
@Component({
@ -12,7 +12,7 @@ import {PiTitleService} from '../../model/pi-title.service';
styleUrls: ['./faces.component.css'],
})
export class FacesComponent implements OnInit {
@ViewChild('container', { static: true }) container: ElementRef;
@ViewChild('container', {static: true}) container: ElementRef;
public size: number;
favourites: Observable<PersonDTO[]>;
nonFavourites: Observable<PersonDTO[]>;

Some files were not shown because too many files have changed in this diff Show More