1
0
mirror of https://github.com/bpatrik/pigallery2.git synced 2025-04-13 11:50:33 +02:00

88 lines
2.3 KiB
TypeScript
Raw Normal View History

2021-04-01 21:48:38 +02:00
import {DirectoryBaseDTO, DirectoryDTO} from './DirectoryDTO';
2018-11-04 19:28:32 +01:00
import {PhotoDTO} from './PhotoDTO';
2021-04-01 21:48:38 +02:00
import {FileBaseDTO, FileDTO} from './FileDTO';
2019-12-09 17:19:28 +01:00
import {SupportedFormats} from '../SupportedFormats';
2018-11-04 19:28:32 +01:00
2021-04-01 21:48:38 +02:00
export interface MediaBaseDTO extends FileBaseDTO {
name: string;
directory: DirectoryBaseDTO;
metadata: MediaMetadata;
readyThumbnails: number[];
readyIcon: boolean;
}
export interface MediaDTO extends FileDTO, MediaBaseDTO {
2018-11-04 19:28:32 +01:00
id: number;
name: string;
directory: DirectoryDTO;
metadata: MediaMetadata;
2021-04-01 21:48:38 +02:00
readyThumbnails: number[];
2018-11-04 19:28:32 +01:00
readyIcon: boolean;
2018-11-04 19:28:32 +01:00
}
export interface MediaMetadata {
size: MediaDimension;
creationDate: number;
fileSize: number;
}
export interface MediaDimension {
width: number;
height: number;
}
export module MediaDTO {
2021-04-01 21:48:38 +02:00
export const hasPositionData = (media: MediaBaseDTO): boolean => {
return !!(<PhotoDTO>media).metadata.positionData &&
!!((<PhotoDTO>media).metadata.positionData.city ||
(<PhotoDTO>media).metadata.positionData.state ||
(<PhotoDTO>media).metadata.positionData.country ||
((<PhotoDTO>media).metadata.positionData.GPSData &&
(<PhotoDTO>media).metadata.positionData.GPSData.altitude &&
(<PhotoDTO>media).metadata.positionData.GPSData.latitude &&
(<PhotoDTO>media).metadata.positionData.GPSData.longitude));
2018-11-04 19:28:32 +01:00
};
2021-04-01 21:48:38 +02:00
export const isPhoto = (media: FileBaseDTO): boolean => {
return !MediaDTO.isVideo(media);
};
2021-04-01 21:48:38 +02:00
export const isVideo = (media: FileBaseDTO): boolean => {
const lower = media.name.toLowerCase();
2019-12-09 17:19:28 +01:00
for (const ext of SupportedFormats.WithDots.Videos) {
if (lower.endsWith(ext)) {
return true;
}
}
return false;
};
2019-12-30 17:52:58 +01:00
export const isVideoPath = (path: string): boolean => {
const lower = path.toLowerCase();
for (const ext of SupportedFormats.WithDots.Videos) {
if (lower.endsWith(ext)) {
return true;
}
}
return false;
};
2021-04-01 21:48:38 +02:00
export const isVideoTranscodingNeeded = (media: FileBaseDTO): boolean => {
const lower = media.name.toLowerCase();
for (const ext of SupportedFormats.WithDots.TranscodeNeed.Videos) {
if (lower.endsWith(ext)) {
return true;
}
}
return false;
};
2021-04-01 21:48:38 +02:00
export const calcAspectRatio = (photo: MediaBaseDTO): number => {
return photo.metadata.size.width / photo.metadata.size.height;
2018-11-04 19:28:32 +01:00
};
}