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

129 lines
3.2 KiB
TypeScript
Raw Normal View History

import {MediaDTO, MediaDTOUtils} from './MediaDTO';
2018-11-26 00:26:29 +01:00
import {FileDTO} from './FileDTO';
2021-04-01 21:48:38 +02:00
import {PhotoDTO, PreviewPhotoDTO} from './PhotoDTO';
import {Utils} from '../Utils';
2016-12-27 20:55:51 +01:00
2021-06-27 19:33:37 +02:00
export interface DirectoryPathDTO {
2021-04-01 21:48:38 +02:00
name: string;
path: string;
}
2021-06-27 19:33:37 +02:00
//
// export interface DirectoryDTO<S extends FileDTO = MediaDTO> extends DirectoryPathDTO {
// id: number;
// name: string;
// path: string;
// lastModified: number;
// lastScanned: number;
// isPartial?: boolean;
// parent: DirectoryDTO<S>;
// mediaCount: number;
// directories: DirectoryDTO<S>[];
// preview: PreviewPhotoDTO;
// media: S[];
// metaFile: FileDTO[];
// }
2021-04-01 21:48:38 +02:00
2021-06-27 19:33:37 +02:00
export interface DirectoryBaseDTO<S extends FileDTO = MediaDTO> extends DirectoryPathDTO {
id: number;
name: string;
path: string;
2017-07-19 20:47:09 +02:00
lastModified: number;
lastScanned: number;
2017-07-21 19:14:22 +02:00
isPartial?: boolean;
2021-06-27 19:33:37 +02:00
parent: DirectoryBaseDTO<S>;
mediaCount: number;
2021-06-27 19:33:37 +02:00
directories?: DirectoryBaseDTO<S>[];
media?: S[];
metaFile?: FileDTO[];
preview?: PreviewPhotoDTO;
}
export interface ParentDirectoryDTO<S extends FileDTO = MediaDTO> extends DirectoryBaseDTO<S> {
id: number;
name: string;
path: string;
lastModified: number;
lastScanned: number;
isPartial?: boolean;
parent: ParentDirectoryDTO<S>;
mediaCount: number;
directories: SubDirectoryDTO<S>[];
2019-12-31 11:12:59 +01:00
media: S[];
2018-11-26 00:26:29 +01:00
metaFile: FileDTO[];
}
2017-07-08 00:18:24 +02:00
2021-06-27 19:33:37 +02:00
export interface SubDirectoryDTO<S extends FileDTO = MediaDTO> extends DirectoryBaseDTO<S> {
id: number;
name: string;
path: string;
lastModified: number;
lastScanned: number;
isPartial?: boolean;
parent: ParentDirectoryDTO<S>;
mediaCount: number;
preview: PreviewPhotoDTO;
}
export const DirectoryDTOUtils = {
2021-06-27 19:33:37 +02:00
unpackDirectory: (dir: DirectoryBaseDTO): void => {
dir.media.forEach((media: MediaDTO) => {
media.directory = dir;
2017-07-08 00:18:24 +02:00
});
2018-11-30 15:37:01 +01:00
if (dir.metaFile) {
dir.metaFile.forEach((file: FileDTO) => {
file.directory = dir;
});
}
if (dir.directories) {
2021-06-27 19:33:37 +02:00
dir.directories.forEach((directory) => {
DirectoryDTOUtils.unpackDirectory(directory);
2018-11-30 15:37:01 +01:00
directory.parent = dir;
});
}
},
2018-11-18 20:26:29 +01:00
2021-06-27 19:33:37 +02:00
packDirectory: (dir: DirectoryBaseDTO): DirectoryBaseDTO => {
2021-04-01 21:48:38 +02:00
if (dir.preview) {
dir.preview.directory = {
path: dir.preview.directory.path,
name: dir.preview.directory.name,
};
// make sure that it is not a same object as one of the photo in the media[]
// as the next foreach would remove the directory
dir.preview = Utils.clone(dir.preview);
}
2018-12-18 00:05:12 +01:00
if (dir.media) {
dir.media.forEach((media: MediaDTO) => {
media.directory = null;
});
}
2021-04-01 21:48:38 +02:00
2018-11-26 00:26:29 +01:00
if (dir.metaFile) {
dir.metaFile.forEach((file: FileDTO) => {
file.directory = null;
});
}
if (dir.directories) {
2021-06-27 19:33:37 +02:00
dir.directories.forEach((directory) => {
DirectoryDTOUtils.packDirectory(directory);
directory.parent = null;
});
}
2018-11-18 20:26:29 +01:00
return dir;
},
2021-06-27 19:33:37 +02:00
filterPhotos: (dir: DirectoryBaseDTO): PhotoDTO[] => {
return dir.media.filter(m => MediaDTOUtils.isPhoto(m)) as PhotoDTO[];
},
2021-06-27 19:33:37 +02:00
filterVideos: (dir: DirectoryBaseDTO): PhotoDTO[] => {
return dir.media.filter(m => MediaDTOUtils.isPhoto(m)) as PhotoDTO[];
}
};