import { BinaryField, Tags } from 'exiftool-vendored'; export const IMetadataRepository = 'IMetadataRepository'; export interface GeoPoint { latitude: number; longitude: number; } export interface ReverseGeocodeResult { country: string | null; state: string | null; city: string | null; } export interface ExifDuration { Value: number; Scale?: number; } export interface ImmichTags extends Omit { ContentIdentifier?: string; MotionPhoto?: number; MotionPhotoVersion?: number; MotionPhotoPresentationTimestampUs?: number; MediaGroupUUID?: string; ImagePixelDepth?: string; FocalLength?: number; Duration?: number | string | ExifDuration; EmbeddedVideoType?: string; EmbeddedVideoFile?: BinaryField; MotionPhotoVideo?: BinaryField; } export interface IMetadataRepository { init(): Promise; teardown(): Promise; reverseGeocode(point: GeoPoint): Promise; readTags(path: string): Promise; writeTags(path: string, tags: Partial): Promise; extractBinaryTag(tagName: string, path: string): Promise; getCountries(userId: string): Promise; getStates(userId: string, country?: string): Promise; getCities(userId: string, country?: string, state?: string): Promise; getCameraMakes(userId: string, model?: string): Promise; getCameraModels(userId: string, make?: string): Promise; }