mirror of
https://github.com/xuthus83/pigallery2.git
synced 2025-01-14 14:43:17 +08:00
improving performance: adding index to DB, fixing indexing bug
This commit is contained in:
parent
56cdc834ed
commit
04b032ff2a
@ -7,6 +7,7 @@ import {ProjectPath} from '../../ProjectPath';
|
|||||||
import {Config} from '../../../common/config/private/Config';
|
import {Config} from '../../../common/config/private/Config';
|
||||||
import {ReIndexingSensitivity} from '../../../common/config/private/IPrivateConfig';
|
import {ReIndexingSensitivity} from '../../../common/config/private/IPrivateConfig';
|
||||||
import {PhotoDTO} from '../../../common/entities/PhotoDTO';
|
import {PhotoDTO} from '../../../common/entities/PhotoDTO';
|
||||||
|
import {DiskMangerWorker} from '../threading/DiskMangerWorker';
|
||||||
|
|
||||||
export class GalleryManager implements IGalleryManager {
|
export class GalleryManager implements IGalleryManager {
|
||||||
|
|
||||||
@ -14,7 +15,7 @@ export class GalleryManager implements IGalleryManager {
|
|||||||
// If it seems that the content did not changed, do not work on it
|
// If it seems that the content did not changed, do not work on it
|
||||||
if (knownLastModified && knownLastScanned) {
|
if (knownLastModified && knownLastScanned) {
|
||||||
const stat = fs.statSync(path.join(ProjectPath.ImageFolder, relativeDirectoryName));
|
const stat = fs.statSync(path.join(ProjectPath.ImageFolder, relativeDirectoryName));
|
||||||
const lastModified = Math.max(stat.ctime.getTime(), stat.mtime.getTime());
|
const lastModified = DiskMangerWorker.calcLastModified(stat);
|
||||||
if (Date.now() - knownLastScanned <= Config.Server.indexing.cachedFolderTimeout &&
|
if (Date.now() - knownLastScanned <= Config.Server.indexing.cachedFolderTimeout &&
|
||||||
lastModified === knownLastModified &&
|
lastModified === knownLastModified &&
|
||||||
Config.Server.indexing.reIndexingSensitivity < ReIndexingSensitivity.high) {
|
Config.Server.indexing.reIndexingSensitivity < ReIndexingSensitivity.high) {
|
||||||
|
@ -20,6 +20,10 @@ import {VideoEntity} from './enitites/VideoEntity';
|
|||||||
import {FileEntity} from './enitites/FileEntity';
|
import {FileEntity} from './enitites/FileEntity';
|
||||||
import {FileDTO} from '../../../common/entities/FileDTO';
|
import {FileDTO} from '../../../common/entities/FileDTO';
|
||||||
import {NotificationManager} from '../NotifocationManager';
|
import {NotificationManager} from '../NotifocationManager';
|
||||||
|
import {DiskMangerWorker} from '../threading/DiskMangerWorker';
|
||||||
|
import {Logger} from '../../Logger';
|
||||||
|
|
||||||
|
const LOG_TAG = '[GalleryManager]';
|
||||||
|
|
||||||
export class GalleryManager implements IGalleryManager, ISQLGalleryManager {
|
export class GalleryManager implements IGalleryManager, ISQLGalleryManager {
|
||||||
|
|
||||||
@ -79,12 +83,12 @@ export class GalleryManager implements IGalleryManager, ISQLGalleryManager {
|
|||||||
knownLastModified?: number,
|
knownLastModified?: number,
|
||||||
knownLastScanned?: number): Promise<DirectoryDTO> {
|
knownLastScanned?: number): Promise<DirectoryDTO> {
|
||||||
|
|
||||||
relativeDirectoryName = path.normalize(path.join('.' + path.sep, relativeDirectoryName));
|
relativeDirectoryName = DiskMangerWorker.normalizeDirPath(relativeDirectoryName);
|
||||||
const directoryName = path.basename(relativeDirectoryName);
|
const directoryName = path.basename(relativeDirectoryName);
|
||||||
const directoryParent = path.join(path.dirname(relativeDirectoryName), path.sep);
|
const directoryParent = path.join(path.dirname(relativeDirectoryName), path.sep);
|
||||||
const connection = await SQLConnection.getConnection();
|
const connection = await SQLConnection.getConnection();
|
||||||
const stat = fs.statSync(path.join(ProjectPath.ImageFolder, relativeDirectoryName));
|
const stat = fs.statSync(path.join(ProjectPath.ImageFolder, relativeDirectoryName));
|
||||||
const lastModified = Math.max(stat.ctime.getTime(), stat.mtime.getTime());
|
const lastModified = DiskMangerWorker.calcLastModified(stat);
|
||||||
|
|
||||||
|
|
||||||
const dir = await this.selectParentDir(connection, directoryName, directoryParent);
|
const dir = await this.selectParentDir(connection, directoryName, directoryParent);
|
||||||
@ -104,6 +108,8 @@ export class GalleryManager implements IGalleryManager, ISQLGalleryManager {
|
|||||||
|
|
||||||
|
|
||||||
if (dir.lastModified !== lastModified) {
|
if (dir.lastModified !== lastModified) {
|
||||||
|
Logger.silly(LOG_TAG, 'Reindexing reason: lastModified mismatch: known: '
|
||||||
|
+ dir.lastModified + ', current:' + lastModified);
|
||||||
return this.indexDirectory(relativeDirectoryName);
|
return this.indexDirectory(relativeDirectoryName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,6 +120,8 @@ export class GalleryManager implements IGalleryManager, ISQLGalleryManager {
|
|||||||
Config.Server.indexing.reIndexingSensitivity >= ReIndexingSensitivity.high) {
|
Config.Server.indexing.reIndexingSensitivity >= ReIndexingSensitivity.high) {
|
||||||
// on the fly reindexing
|
// on the fly reindexing
|
||||||
|
|
||||||
|
Logger.silly(LOG_TAG, 'lazy reindexing reason: cache timeout: lastScanned: '
|
||||||
|
+ (Date.now() - dir.lastScanned) + ', cachedFolderTimeout:' + Config.Server.indexing.cachedFolderTimeout);
|
||||||
this.indexDirectory(relativeDirectoryName).catch((err) => {
|
this.indexDirectory(relativeDirectoryName).catch((err) => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
});
|
});
|
||||||
@ -123,6 +131,7 @@ export class GalleryManager implements IGalleryManager, ISQLGalleryManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// never scanned (deep indexed), do it and return with it
|
// never scanned (deep indexed), do it and return with it
|
||||||
|
Logger.silly(LOG_TAG, 'Reindexing reason: never scanned');
|
||||||
return this.indexDirectory(relativeDirectoryName);
|
return this.indexDirectory(relativeDirectoryName);
|
||||||
|
|
||||||
|
|
||||||
@ -244,9 +253,9 @@ export class GalleryManager implements IGalleryManager, ISQLGalleryManager {
|
|||||||
if (!!currentDir) {// Updated parent dir (if it was in the DB previously)
|
if (!!currentDir) {// Updated parent dir (if it was in the DB previously)
|
||||||
currentDir.lastModified = scannedDirectory.lastModified;
|
currentDir.lastModified = scannedDirectory.lastModified;
|
||||||
currentDir.lastScanned = scannedDirectory.lastScanned;
|
currentDir.lastScanned = scannedDirectory.lastScanned;
|
||||||
|
currentDir.mediaCount = scannedDirectory.mediaCount;
|
||||||
currentDir = await directoryRepository.save(currentDir);
|
currentDir = await directoryRepository.save(currentDir);
|
||||||
} else {
|
} else {
|
||||||
(<DirectoryEntity>scannedDirectory).lastScanned = scannedDirectory.lastScanned;
|
|
||||||
currentDir = await directoryRepository.save(<DirectoryEntity>scannedDirectory);
|
currentDir = await directoryRepository.save(<DirectoryEntity>scannedDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ const LOG_TAG = '[IndexingManager]';
|
|||||||
|
|
||||||
export class IndexingManager implements IIndexingManager {
|
export class IndexingManager implements IIndexingManager {
|
||||||
directoriesToIndex: string[] = [];
|
directoriesToIndex: string[] = [];
|
||||||
indexingProgress: { current: string, left: number, indexed: number } = null;
|
indexingProgress: IndexingProgressDTO = null;
|
||||||
enabled = false;
|
enabled = false;
|
||||||
private indexNewDirectory = async (createThumbnails: boolean = false) => {
|
private indexNewDirectory = async (createThumbnails: boolean = false) => {
|
||||||
if (this.directoriesToIndex.length === 0) {
|
if (this.directoriesToIndex.length === 0) {
|
||||||
@ -35,6 +35,7 @@ export class IndexingManager implements IIndexingManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.indexingProgress.indexed++;
|
this.indexingProgress.indexed++;
|
||||||
|
this.indexingProgress.time.current = Date.now();
|
||||||
for (let i = 0; i < scanned.directories.length; i++) {
|
for (let i = 0; i < scanned.directories.length; i++) {
|
||||||
this.directoriesToIndex.push(path.join(scanned.directories[i].path, scanned.directories[i].name));
|
this.directoriesToIndex.push(path.join(scanned.directories[i].path, scanned.directories[i].name));
|
||||||
}
|
}
|
||||||
@ -71,10 +72,14 @@ export class IndexingManager implements IIndexingManager {
|
|||||||
startIndexing(createThumbnails: boolean = false): void {
|
startIndexing(createThumbnails: boolean = false): void {
|
||||||
if (this.directoriesToIndex.length === 0 && this.enabled === false) {
|
if (this.directoriesToIndex.length === 0 && this.enabled === false) {
|
||||||
Logger.info(LOG_TAG, 'Starting indexing');
|
Logger.info(LOG_TAG, 'Starting indexing');
|
||||||
this.indexingProgress = <IndexingProgressDTO>{
|
this.indexingProgress = {
|
||||||
indexed: 0,
|
indexed: 0,
|
||||||
left: 0,
|
left: 0,
|
||||||
current: ''
|
current: '',
|
||||||
|
time: {
|
||||||
|
start: Date.now(),
|
||||||
|
current: Date.now()
|
||||||
|
}
|
||||||
};
|
};
|
||||||
this.directoriesToIndex.push('/');
|
this.directoriesToIndex.push('/');
|
||||||
this.enabled = true;
|
this.enabled = true;
|
||||||
|
@ -40,7 +40,7 @@ export class SQLConnection {
|
|||||||
VersionEntity
|
VersionEntity
|
||||||
];
|
];
|
||||||
options.synchronize = false;
|
options.synchronize = false;
|
||||||
// options.logging = 'all';
|
// options.logging = 'all';
|
||||||
this.connection = await createConnection(options);
|
this.connection = await createConnection(options);
|
||||||
await SQLConnection.schemeSync(this.connection);
|
await SQLConnection.schemeSync(this.connection);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import {Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn, Unique} from 'typeorm';
|
import {Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn, Unique, Index} from 'typeorm';
|
||||||
import {DirectoryDTO} from '../../../../common/entities/DirectoryDTO';
|
import {DirectoryDTO} from '../../../../common/entities/DirectoryDTO';
|
||||||
import {MediaEntity} from './MediaEntity';
|
import {MediaEntity} from './MediaEntity';
|
||||||
import {FileEntity} from './FileEntity';
|
import {FileEntity} from './FileEntity';
|
||||||
@ -7,12 +7,15 @@ import {FileEntity} from './FileEntity';
|
|||||||
@Unique(['name', 'path'])
|
@Unique(['name', 'path'])
|
||||||
export class DirectoryEntity implements DirectoryDTO {
|
export class DirectoryEntity implements DirectoryDTO {
|
||||||
|
|
||||||
|
@Index()
|
||||||
@PrimaryGeneratedColumn()
|
@PrimaryGeneratedColumn()
|
||||||
id: number;
|
id: number;
|
||||||
|
|
||||||
|
@Index()
|
||||||
@Column()
|
@Column()
|
||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
|
@Index()
|
||||||
@Column()
|
@Column()
|
||||||
path: string;
|
path: string;
|
||||||
|
|
||||||
@ -30,6 +33,10 @@ export class DirectoryEntity implements DirectoryDTO {
|
|||||||
|
|
||||||
isPartial?: boolean;
|
isPartial?: boolean;
|
||||||
|
|
||||||
|
@Column('smallint')
|
||||||
|
mediaCount: number;
|
||||||
|
|
||||||
|
@Index()
|
||||||
@ManyToOne(type => DirectoryEntity, directory => directory.directories, {onDelete: 'CASCADE'})
|
@ManyToOne(type => DirectoryEntity, directory => directory.directories, {onDelete: 'CASCADE'})
|
||||||
public parent: DirectoryEntity;
|
public parent: DirectoryEntity;
|
||||||
|
|
||||||
@ -39,7 +46,6 @@ export class DirectoryEntity implements DirectoryDTO {
|
|||||||
@OneToMany(type => MediaEntity, media => media.directory)
|
@OneToMany(type => MediaEntity, media => media.directory)
|
||||||
public media: MediaEntity[];
|
public media: MediaEntity[];
|
||||||
|
|
||||||
|
|
||||||
@OneToMany(type => FileEntity, file => file.directory)
|
@OneToMany(type => FileEntity, file => file.directory)
|
||||||
public metaFile: FileEntity[];
|
public metaFile: FileEntity[];
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import {Column, Entity, ManyToOne, PrimaryGeneratedColumn} from 'typeorm';
|
import {Column, Entity, ManyToOne, PrimaryGeneratedColumn, Index} from 'typeorm';
|
||||||
import {DirectoryEntity} from './DirectoryEntity';
|
import {DirectoryEntity} from './DirectoryEntity';
|
||||||
import {FileDTO} from '../../../../common/entities/FileDTO';
|
import {FileDTO} from '../../../../common/entities/FileDTO';
|
||||||
|
|
||||||
@ -6,12 +6,14 @@ import {FileDTO} from '../../../../common/entities/FileDTO';
|
|||||||
@Entity()
|
@Entity()
|
||||||
export class FileEntity implements FileDTO {
|
export class FileEntity implements FileDTO {
|
||||||
|
|
||||||
|
@Index()
|
||||||
@PrimaryGeneratedColumn()
|
@PrimaryGeneratedColumn()
|
||||||
id: number;
|
id: number;
|
||||||
|
|
||||||
@Column('text')
|
@Column('text')
|
||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
|
@Index()
|
||||||
@ManyToOne(type => DirectoryEntity, directory => directory.metaFile, {onDelete: 'CASCADE'})
|
@ManyToOne(type => DirectoryEntity, directory => directory.metaFile, {onDelete: 'CASCADE'})
|
||||||
directory: DirectoryEntity;
|
directory: DirectoryEntity;
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
import {Column, Entity, ManyToOne, PrimaryGeneratedColumn, TableInheritance, Unique} from 'typeorm';
|
import {Column, Entity, ManyToOne, PrimaryGeneratedColumn, TableInheritance, Unique, Index} from 'typeorm';
|
||||||
import {DirectoryEntity} from './DirectoryEntity';
|
import {DirectoryEntity} from './DirectoryEntity';
|
||||||
import {MediaDimension, MediaDTO, MediaMetadata} from '../../../../common/entities/MediaDTO';
|
import {MediaDimension, MediaDTO, MediaMetadata} from '../../../../common/entities/MediaDTO';
|
||||||
import {OrientationTypes} from 'ts-exif-parser';
|
import {OrientationTypes} from 'ts-exif-parser';
|
||||||
import {CameraMetadataEntity, PositionMetaDataEntity} from './PhotoEntity';
|
import {CameraMetadataEntity, PositionMetaDataEntity} from './PhotoEntity';
|
||||||
import {FileEntity} from './FileEntity';
|
|
||||||
|
|
||||||
|
|
||||||
export class MediaDimensionEntity implements MediaDimension {
|
export class MediaDimensionEntity implements MediaDimension {
|
||||||
|
|
||||||
@ -55,12 +53,14 @@ export class MediaMetadataEntity implements MediaMetadata {
|
|||||||
@TableInheritance({column: {type: 'varchar', name: 'type'}})
|
@TableInheritance({column: {type: 'varchar', name: 'type'}})
|
||||||
export abstract class MediaEntity implements MediaDTO {
|
export abstract class MediaEntity implements MediaDTO {
|
||||||
|
|
||||||
|
@Index()
|
||||||
@PrimaryGeneratedColumn()
|
@PrimaryGeneratedColumn()
|
||||||
id: number;
|
id: number;
|
||||||
|
|
||||||
@Column('text')
|
@Column('text')
|
||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
|
@Index()
|
||||||
@ManyToOne(type => DirectoryEntity, directory => directory.media, {onDelete: 'CASCADE'})
|
@ManyToOne(type => DirectoryEntity, directory => directory.media, {onDelete: 'CASCADE'})
|
||||||
directory: DirectoryEntity;
|
directory: DirectoryEntity;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
|
import {Stats} from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import {DirectoryDTO} from '../../../common/entities/DirectoryDTO';
|
import {DirectoryDTO} from '../../../common/entities/DirectoryDTO';
|
||||||
import {PhotoDTO} from '../../../common/entities/PhotoDTO';
|
import {PhotoDTO} from '../../../common/entities/PhotoDTO';
|
||||||
@ -49,8 +50,17 @@ export class DiskMangerWorker {
|
|||||||
return this.SupportedEXT.metaFile.indexOf(extension) !== -1;
|
return this.SupportedEXT.metaFile.indexOf(extension) !== -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static calcLastModified(stat: Stats) {
|
||||||
|
return Math.max(stat.ctime.getTime(), stat.mtime.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static normalizeDirPath(dirPath: string) {
|
||||||
|
return path.normalize(path.join('.' + path.sep, dirPath));
|
||||||
|
}
|
||||||
|
|
||||||
public static scanDirectory(relativeDirectoryName: string, maxPhotos: number = null, photosOnly: boolean = false): Promise<DirectoryDTO> {
|
public static scanDirectory(relativeDirectoryName: string, maxPhotos: number = null, photosOnly: boolean = false): Promise<DirectoryDTO> {
|
||||||
return new Promise<DirectoryDTO>((resolve, reject) => {
|
return new Promise<DirectoryDTO>((resolve, reject) => {
|
||||||
|
relativeDirectoryName = this.normalizeDirPath(relativeDirectoryName);
|
||||||
const directoryName = path.basename(relativeDirectoryName);
|
const directoryName = path.basename(relativeDirectoryName);
|
||||||
const directoryParent = path.join(path.dirname(relativeDirectoryName), path.sep);
|
const directoryParent = path.join(path.dirname(relativeDirectoryName), path.sep);
|
||||||
const absoluteDirectoryName = path.join(ProjectPath.ImageFolder, relativeDirectoryName);
|
const absoluteDirectoryName = path.join(ProjectPath.ImageFolder, relativeDirectoryName);
|
||||||
@ -61,10 +71,11 @@ export class DiskMangerWorker {
|
|||||||
parent: null,
|
parent: null,
|
||||||
name: directoryName,
|
name: directoryName,
|
||||||
path: directoryParent,
|
path: directoryParent,
|
||||||
lastModified: Math.max(stat.ctime.getTime(), stat.mtime.getTime()),
|
lastModified: this.calcLastModified(stat),
|
||||||
lastScanned: Date.now(),
|
lastScanned: Date.now(),
|
||||||
directories: [],
|
directories: [],
|
||||||
isPartial: false,
|
isPartial: false,
|
||||||
|
mediaCount: 0,
|
||||||
media: [],
|
media: [],
|
||||||
metaFile: []
|
metaFile: []
|
||||||
};
|
};
|
||||||
@ -114,6 +125,8 @@ export class DiskMangerWorker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
directory.mediaCount = directory.media.length;
|
||||||
|
|
||||||
return resolve(directory);
|
return resolve(directory);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return reject({error: err.toString()});
|
return reject({error: err.toString()});
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import {AuthenticationMWs} from '../middlewares/user/AuthenticationMWs';
|
import {AuthenticationMWs} from '../middlewares/user/AuthenticationMWs';
|
||||||
import {Express} from 'express';
|
import {Express, NextFunction, Request, Response} from 'express';
|
||||||
import {GalleryMWs} from '../middlewares/GalleryMWs';
|
import {GalleryMWs} from '../middlewares/GalleryMWs';
|
||||||
import {RenderingMWs} from '../middlewares/RenderingMWs';
|
import {RenderingMWs} from '../middlewares/RenderingMWs';
|
||||||
import {ThumbnailGeneratorMWs} from '../middlewares/thumbnail/ThumbnailGeneratorMWs';
|
import {ThumbnailGeneratorMWs} from '../middlewares/thumbnail/ThumbnailGeneratorMWs';
|
||||||
|
@ -1 +1 @@
|
|||||||
export const DataStructureVersion = 5;
|
export const DataStructureVersion = 7;
|
||||||
|
@ -44,7 +44,7 @@ export class PrivateConfigClass extends PublicConfigClass implements IPrivateCon
|
|||||||
indexing: {
|
indexing: {
|
||||||
folderPreviewSize: 2,
|
folderPreviewSize: 2,
|
||||||
cachedFolderTimeout: 1000 * 60 * 60,
|
cachedFolderTimeout: 1000 * 60 * 60,
|
||||||
reIndexingSensitivity: ReIndexingSensitivity.medium
|
reIndexingSensitivity: ReIndexingSensitivity.low
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private ConfigLoader: any;
|
private ConfigLoader: any;
|
||||||
|
@ -10,7 +10,8 @@ export interface DirectoryDTO {
|
|||||||
lastScanned: number;
|
lastScanned: number;
|
||||||
isPartial?: boolean;
|
isPartial?: boolean;
|
||||||
parent: DirectoryDTO;
|
parent: DirectoryDTO;
|
||||||
directories: Array<DirectoryDTO>;
|
mediaCount: number;
|
||||||
|
directories: DirectoryDTO[];
|
||||||
media: MediaDTO[];
|
media: MediaDTO[];
|
||||||
metaFile: FileDTO[];
|
metaFile: FileDTO[];
|
||||||
}
|
}
|
||||||
|
@ -2,4 +2,8 @@ export interface IndexingProgressDTO {
|
|||||||
indexed: number;
|
indexed: number;
|
||||||
left: number;
|
left: number;
|
||||||
current: string;
|
current: string;
|
||||||
|
time: {
|
||||||
|
start: number,
|
||||||
|
current: number
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ export class GalleryNavigatorComponent implements OnChanges {
|
|||||||
sortingMethodsType: { key: number; value: string }[] = [];
|
sortingMethodsType: { key: number; value: string }[] = [];
|
||||||
config = Config;
|
config = Config;
|
||||||
DefaultSorting = Config.Client.Other.defaultPhotoSortingMethod;
|
DefaultSorting = Config.Client.Other.defaultPhotoSortingMethod;
|
||||||
|
private readonly RootFolderName: string;
|
||||||
|
|
||||||
readonly SearchTypes = SearchTypes;
|
readonly SearchTypes = SearchTypes;
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ export class GalleryNavigatorComponent implements OnChanges {
|
|||||||
private router: Router,
|
private router: Router,
|
||||||
private i18n: I18n) {
|
private i18n: I18n) {
|
||||||
this.sortingMethodsType = Utils.enumToArray(SortingMethods);
|
this.sortingMethodsType = Utils.enumToArray(SortingMethods);
|
||||||
|
this.RootFolderName = this.i18n('Images');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -67,9 +69,9 @@ export class GalleryNavigatorComponent implements OnChanges {
|
|||||||
|
|
||||||
// create root link
|
// create root link
|
||||||
if (dirs.length === 0) {
|
if (dirs.length === 0) {
|
||||||
arr.push({name: this.i18n('Images'), route: null});
|
arr.push({name: this.RootFolderName, route: null});
|
||||||
} else {
|
} else {
|
||||||
arr.push({name: this.i18n('Images'), route: UserDTO.isPathAvailable('/', user.permissions) ? '/' : null});
|
arr.push({name: this.RootFolderName, route: UserDTO.isPathAvailable('/', user.permissions) ? '/' : null});
|
||||||
}
|
}
|
||||||
|
|
||||||
// create rest navigation
|
// create rest navigation
|
||||||
@ -93,22 +95,23 @@ export class GalleryNavigatorComponent implements OnChanges {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get ItemCount(): number {
|
get ItemCount(): number {
|
||||||
return (this.directory || this.searchResult).media.length;
|
return this.directory ? this.directory.mediaCount : this.searchResult.media.length;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
|
|
||||||
@HostListener('window:keydown', ['$event'])
|
/*
|
||||||
onKeyPress(e: KeyboardEvent) {
|
|
||||||
if (this.routes.length < 2) {
|
@HostListener('window:keydown', ['$event'])
|
||||||
return;
|
onKeyPress(e: KeyboardEvent) {
|
||||||
}
|
if (this.routes.length < 2) {
|
||||||
const event: KeyboardEvent = window.event ? <any>window.event : e;
|
return;
|
||||||
if (event.altKey === true && event.key === 'ArrowUp') {
|
}
|
||||||
const path = this.routes[this.routes.length - 2];
|
const event: KeyboardEvent = window.event ? <any>window.event : e;
|
||||||
this.router.navigate(['/gallery', path.route],
|
if (event.altKey === true && event.key === 'ArrowUp') {
|
||||||
{queryParams: this.queryService.getParams()}).catch(console.error);
|
const path = this.routes[this.routes.length - 2];
|
||||||
}
|
this.router.navigate(['/gallery', path.route],
|
||||||
}*/
|
{queryParams: this.queryService.getParams()}).catch(console.error);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
interface NavigatorPath {
|
interface NavigatorPath {
|
||||||
|
@ -6,3 +6,7 @@
|
|||||||
.statics span.oi {
|
.statics span.oi {
|
||||||
margin-right: 3px;
|
margin-right: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.progress-details{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
@ -70,7 +70,9 @@
|
|||||||
|
|
||||||
|
|
||||||
<div *ngIf="_settingsService.progress.value != null">
|
<div *ngIf="_settingsService.progress.value != null">
|
||||||
indexing: {{_settingsService.progress.value.current}}
|
<span class="progress-details" i18n>indexing</span>: {{_settingsService.progress.value.current}} <br/>
|
||||||
|
<span class="progress-details" i18n>elapsed</span>: {{TimeElapsed | duration}}<br/>
|
||||||
|
<span class="progress-details" i18n>left</span>: {{TimeLeft | duration}}
|
||||||
<div class="progress">
|
<div class="progress">
|
||||||
<div class="progress-bar progress-bar-success"
|
<div class="progress-bar progress-bar-success"
|
||||||
role="progressbar"
|
role="progressbar"
|
||||||
|
@ -119,6 +119,15 @@ export class IndexingSettingsComponent extends SettingsComponent<IndexingConfig,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get TimeLeft() {
|
||||||
|
const prg = this._settingsService.progress.value;
|
||||||
|
return (prg.time.current - prg.time.start) / prg.indexed * prg.left;
|
||||||
|
}
|
||||||
|
get TimeElapsed() {
|
||||||
|
const prg = this._settingsService.progress.value;
|
||||||
|
return (prg.time.current - prg.time.start);
|
||||||
|
}
|
||||||
|
|
||||||
async cancelIndexing() {
|
async cancelIndexing() {
|
||||||
this.inProgress = true;
|
this.inProgress = true;
|
||||||
this.error = '';
|
this.error = '';
|
||||||
|
@ -685,7 +685,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">94</context>
|
<context context-type="linenumber">91</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/other/other.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/other/other.settings.component.html</context>
|
||||||
@ -726,7 +726,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">97</context>
|
<context context-type="linenumber">94</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/other/other.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/other/other.settings.component.html</context>
|
||||||
@ -1036,7 +1036,7 @@
|
|||||||
<source>Server will accept connections from this IPv6 or IPv4 address.</source>
|
<source>Server will accept connections from this IPv6 or IPv4 address.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">30</context>
|
<context context-type="linenumber">27</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Server will accept connections from this IPv6 or IPv4 address.</target>
|
<target>Server will accept connections from this IPv6 or IPv4 address.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1044,7 +1044,7 @@
|
|||||||
<source>Port</source>
|
<source>Port</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">35</context>
|
<context context-type="linenumber">32</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Port</target>
|
<target>Port</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1052,7 +1052,7 @@
|
|||||||
<source>Port number. Port 80 is usually what you need.</source>
|
<source>Port number. Port 80 is usually what you need.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">44</context>
|
<context context-type="linenumber">41</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Port number. Port 80 is usually what you need.</target>
|
<target>Port number. Port 80 is usually what you need.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1060,7 +1060,7 @@
|
|||||||
<source>Images folder</source>
|
<source>Images folder</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">49</context>
|
<context context-type="linenumber">46</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Images folder</target>
|
<target>Images folder</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1068,7 +1068,7 @@
|
|||||||
<source>Images are loaded from this folder (read permission required)</source>
|
<source>Images are loaded from this folder (read permission required)</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">55</context>
|
<context context-type="linenumber">52</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Images are loaded from this folder (read permission required)</target>
|
<target>Images are loaded from this folder (read permission required)</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1076,7 +1076,7 @@
|
|||||||
<source>Page public url</source>
|
<source>Page public url</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">60</context>
|
<context context-type="linenumber">57</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Page public url</target>
|
<target>Page public url</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1086,7 +1086,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">67</context>
|
<context context-type="linenumber">64</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>If you access the page form local network its good to know the public url for creating sharing link</target>
|
<target>If you access the page form local network its good to know the public url for creating sharing link</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1094,7 +1094,7 @@
|
|||||||
<source>Url Base</source>
|
<source>Url Base</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">74</context>
|
<context context-type="linenumber">71</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Url Base</target>
|
<target>Url Base</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1105,7 +1105,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">78</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>If you access the gallery under a sub url (like: http://mydomain.com/myGallery), set it here. If not working you might miss the '/' from the beginning of the url.</target>
|
<target>If you access the gallery under a sub url (like: http://mydomain.com/myGallery), set it here. If not working you might miss the '/' from the beginning of the url.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1115,7 +1115,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">85</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>The public url and the url base are not matching. Some of the functionality might not work.</target>
|
<target>The public url and the url base are not matching. Some of the functionality might not work.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1393,12 +1393,36 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target>Note: search only works among the indexed directories</target>
|
<target>Note: search only works among the indexed directories</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="1ac5dc3858808c90bb5e7cbd0c3e5e4b342160f3" datatype="html">
|
||||||
|
<source>indexing</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
|
<context context-type="linenumber">73</context>
|
||||||
|
</context-group>
|
||||||
|
<target>indexing</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="adab6f78490c699b2fdf22f611d3dc8662a178a5" datatype="html">
|
||||||
|
<source>elapsed</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
|
<context context-type="linenumber">74</context>
|
||||||
|
</context-group>
|
||||||
|
<target>elapsed</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="478c0bf6552f7226e27bb5b57b8209a040ded2c6" datatype="html">
|
||||||
|
<source>left</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
|
<context context-type="linenumber">75</context>
|
||||||
|
</context-group>
|
||||||
|
<target>left</target>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="32cc8ef8dc6f4f239b7f637ac8adaecc55b8e1d8" datatype="html">
|
<trans-unit id="32cc8ef8dc6f4f239b7f637ac8adaecc55b8e1d8" datatype="html">
|
||||||
<source>Index
|
<source>Index
|
||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">94</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Index</target>
|
<target>Index</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1406,7 +1430,7 @@
|
|||||||
<source>Indexes the folders</source>
|
<source>Indexes the folders</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">92</context>
|
<context context-type="linenumber">94</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Indexes the folders</target>
|
<target>Indexes the folders</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1415,7 +1439,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">101</context>
|
<context context-type="linenumber">103</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Index with Thumbnails</target>
|
<target>Index with Thumbnails</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1423,7 +1447,7 @@
|
|||||||
<source>Indexes the folders and also creates the thumbnails</source>
|
<source>Indexes the folders and also creates the thumbnails</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">97</context>
|
<context context-type="linenumber">99</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Indexes the folders and also creates the thumbnails</target>
|
<target>Indexes the folders and also creates the thumbnails</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1432,7 +1456,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">106</context>
|
<context context-type="linenumber">108</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Cancel</target>
|
<target>Cancel</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1441,7 +1465,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">110</context>
|
<context context-type="linenumber">112</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Reset Indexes</target>
|
<target>Reset Indexes</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1451,7 +1475,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">115</context>
|
<context context-type="linenumber">117</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Statistic:</target>
|
<target>Statistic:</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1459,7 +1483,7 @@
|
|||||||
<source>Folders</source>
|
<source>Folders</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">119</context>
|
<context context-type="linenumber">121</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Folders</target>
|
<target>Folders</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1467,7 +1491,7 @@
|
|||||||
<source>Photos</source>
|
<source>Photos</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">123</context>
|
<context context-type="linenumber">125</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Photos</target>
|
<target>Photos</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1475,7 +1499,7 @@
|
|||||||
<source>Videos</source>
|
<source>Videos</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">127</context>
|
<context context-type="linenumber">129</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Videos</target>
|
<target>Videos</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1483,7 +1507,7 @@
|
|||||||
<source>Size</source>
|
<source>Size</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">132</context>
|
<context context-type="linenumber">134</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Size</target>
|
<target>Size</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
@ -685,7 +685,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">94</context>
|
<context context-type="linenumber">91</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/other/other.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/other/other.settings.component.html</context>
|
||||||
@ -726,7 +726,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">97</context>
|
<context context-type="linenumber">94</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/other/other.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/other/other.settings.component.html</context>
|
||||||
@ -1036,7 +1036,7 @@
|
|||||||
<source>Server will accept connections from this IPv6 or IPv4 address.</source>
|
<source>Server will accept connections from this IPv6 or IPv4 address.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">30</context>
|
<context context-type="linenumber">27</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>A szerver csak erről az (IPv6 vagy az IPv4) címből származó kapcsolatokat fog fogadni.</target>
|
<target>A szerver csak erről az (IPv6 vagy az IPv4) címből származó kapcsolatokat fog fogadni.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1044,7 +1044,7 @@
|
|||||||
<source>Port</source>
|
<source>Port</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">35</context>
|
<context context-type="linenumber">32</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Port</target>
|
<target>Port</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1052,7 +1052,7 @@
|
|||||||
<source>Port number. Port 80 is usually what you need.</source>
|
<source>Port number. Port 80 is usually what you need.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">44</context>
|
<context context-type="linenumber">41</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Portszám. A 80-as port általában az, amire szükséged van.</target>
|
<target>Portszám. A 80-as port általában az, amire szükséged van.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1060,7 +1060,7 @@
|
|||||||
<source>Images folder</source>
|
<source>Images folder</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">49</context>
|
<context context-type="linenumber">46</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Képek mappa</target>
|
<target>Képek mappa</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1068,7 +1068,7 @@
|
|||||||
<source>Images are loaded from this folder (read permission required)</source>
|
<source>Images are loaded from this folder (read permission required)</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">55</context>
|
<context context-type="linenumber">52</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>A képek ebből a mappából töltődnek be (olvasási engedély szükséges a mappára)</target>
|
<target>A képek ebből a mappából töltődnek be (olvasási engedély szükséges a mappára)</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1076,7 +1076,7 @@
|
|||||||
<source>Page public url</source>
|
<source>Page public url</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">60</context>
|
<context context-type="linenumber">57</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Oldal nyilvános url-je</target>
|
<target>Oldal nyilvános url-je</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1086,7 +1086,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">67</context>
|
<context context-type="linenumber">64</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Ha az oldalt a helyi hálózaton keresztül éred el, jó tudni a nyilvánosságot URL-t megosztási link létrehozásához</target>
|
<target>Ha az oldalt a helyi hálózaton keresztül éred el, jó tudni a nyilvánosságot URL-t megosztási link létrehozásához</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1094,7 +1094,7 @@
|
|||||||
<source>Url Base</source>
|
<source>Url Base</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">74</context>
|
<context context-type="linenumber">71</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Al cím</target>
|
<target>Al cím</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1105,7 +1105,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">81</context>
|
<context context-type="linenumber">78</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Ha a galériát egy al-url alatt érheti el (például: http://mydomain.com/myGallery), állítsa be itt. Ha nem működik, akkor hiányozhat a "/" a kezdetétől url.</target>
|
<target>Ha a galériát egy al-url alatt érheti el (például: http://mydomain.com/myGallery), állítsa be itt. Ha nem működik, akkor hiányozhat a "/" a kezdetétől url.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1115,7 +1115,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/basic/basic.settings.component.html</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">85</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>A nyilvános url és az al url nem eggyeznek meg. Néhány funkció lehet hogy nem fog működni.</target>
|
<target>A nyilvános url és az al url nem eggyeznek meg. Néhány funkció lehet hogy nem fog működni.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1393,12 +1393,36 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target>Megjegyzés: csak az indexelt könyvtárak között működik a keresés</target>
|
<target>Megjegyzés: csak az indexelt könyvtárak között működik a keresés</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="1ac5dc3858808c90bb5e7cbd0c3e5e4b342160f3" datatype="html">
|
||||||
|
<source>indexing</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
|
<context context-type="linenumber">73</context>
|
||||||
|
</context-group>
|
||||||
|
<target>indexelés</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="adab6f78490c699b2fdf22f611d3dc8662a178a5" datatype="html">
|
||||||
|
<source>elapsed</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
|
<context context-type="linenumber">74</context>
|
||||||
|
</context-group>
|
||||||
|
<target>eltelt</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="478c0bf6552f7226e27bb5b57b8209a040ded2c6" datatype="html">
|
||||||
|
<source>left</source>
|
||||||
|
<context-group purpose="location">
|
||||||
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
|
<context context-type="linenumber">75</context>
|
||||||
|
</context-group>
|
||||||
|
<target>hátra</target>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="32cc8ef8dc6f4f239b7f637ac8adaecc55b8e1d8" datatype="html">
|
<trans-unit id="32cc8ef8dc6f4f239b7f637ac8adaecc55b8e1d8" datatype="html">
|
||||||
<source>Index
|
<source>Index
|
||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">94</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Index</target>
|
<target>Index</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1406,7 +1430,7 @@
|
|||||||
<source>Indexes the folders</source>
|
<source>Indexes the folders</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">92</context>
|
<context context-type="linenumber">94</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Indexeli a mappákat</target>
|
<target>Indexeli a mappákat</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1415,7 +1439,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">101</context>
|
<context context-type="linenumber">103</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Index thumbnail-el</target>
|
<target>Index thumbnail-el</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1423,7 +1447,7 @@
|
|||||||
<source>Indexes the folders and also creates the thumbnails</source>
|
<source>Indexes the folders and also creates the thumbnails</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">97</context>
|
<context context-type="linenumber">99</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Indexeli a mappákat és legenerálja a thumbnaileket is</target>
|
<target>Indexeli a mappákat és legenerálja a thumbnaileket is</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1432,7 +1456,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">106</context>
|
<context context-type="linenumber">108</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Mégse</target>
|
<target>Mégse</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1441,7 +1465,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">110</context>
|
<context context-type="linenumber">112</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Indexek visszaállítása</target>
|
<target>Indexek visszaállítása</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1451,7 +1475,7 @@
|
|||||||
</source>
|
</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">115</context>
|
<context context-type="linenumber">117</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Statisztika:</target>
|
<target>Statisztika:</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1459,7 +1483,7 @@
|
|||||||
<source>Folders</source>
|
<source>Folders</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">119</context>
|
<context context-type="linenumber">121</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Mappák</target>
|
<target>Mappák</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1467,7 +1491,7 @@
|
|||||||
<source>Photos</source>
|
<source>Photos</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">123</context>
|
<context context-type="linenumber">125</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Fotók</target>
|
<target>Fotók</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1475,7 +1499,7 @@
|
|||||||
<source>Videos</source>
|
<source>Videos</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">127</context>
|
<context context-type="linenumber">129</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Videók</target>
|
<target>Videók</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1483,7 +1507,7 @@
|
|||||||
<source>Size</source>
|
<source>Size</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.html</context>
|
||||||
<context context-type="linenumber">132</context>
|
<context context-type="linenumber">134</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>Méret</target>
|
<target>Méret</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@ -1513,7 +1537,7 @@
|
|||||||
<context context-type="sourcefile">frontend/app/gallery/navigator/navigator.gallery.component.ts</context>
|
<context context-type="sourcefile">frontend/app/gallery/navigator/navigator.gallery.component.ts</context>
|
||||||
<context context-type="linenumber">1</context>
|
<context context-type="linenumber">1</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target>képek</target>
|
<target>Képek</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">
|
<trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">
|
||||||
<source>Yes</source>
|
<source>Yes</source>
|
||||||
|
@ -63,6 +63,7 @@ describe('Typeorm integration', () => {
|
|||||||
d.lastModified = Date.now();
|
d.lastModified = Date.now();
|
||||||
d.lastScanned = null;
|
d.lastScanned = null;
|
||||||
d.parent = null;
|
d.parent = null;
|
||||||
|
d.mediaCount = 0;
|
||||||
d.media = [];
|
d.media = [];
|
||||||
d.directories = [];
|
d.directories = [];
|
||||||
return d;
|
return d;
|
||||||
|
@ -22,6 +22,7 @@ export class TestHelper {
|
|||||||
const dir = new DirectoryEntity();
|
const dir = new DirectoryEntity();
|
||||||
dir.name = 'wars dir';
|
dir.name = 'wars dir';
|
||||||
dir.path = '.';
|
dir.path = '.';
|
||||||
|
dir.mediaCount = 0;
|
||||||
dir.lastModified = Date.now();
|
dir.lastModified = Date.now();
|
||||||
dir.lastScanned = null;
|
dir.lastScanned = null;
|
||||||
|
|
||||||
@ -68,6 +69,7 @@ export class TestHelper {
|
|||||||
d.name = 'test media.jpg';
|
d.name = 'test media.jpg';
|
||||||
d.directory = dir;
|
d.directory = dir;
|
||||||
d.metadata = m;
|
d.metadata = m;
|
||||||
|
dir.mediaCount++;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,6 +131,7 @@ export class TestHelper {
|
|||||||
id: null,
|
id: null,
|
||||||
name: forceStr || Math.random().toString(36).substring(7),
|
name: forceStr || Math.random().toString(36).substring(7),
|
||||||
path: '.',
|
path: '.',
|
||||||
|
mediaCount: 0,
|
||||||
directories: [],
|
directories: [],
|
||||||
metaFile: [],
|
metaFile: [],
|
||||||
media: [],
|
media: [],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user