diff --git a/api/v1/photo.go b/api/v1/photo.go index a5267d6..1aff922 100644 --- a/api/v1/photo.go +++ b/api/v1/photo.go @@ -7,7 +7,10 @@ package api // Parameters: // uuid: string PhotoUID as returned by the API func (v1 *V1Client) GetPhoto(uuid string) (Photo, error) { - photo := Photo{} + photo := Photo{ + UUID: uuid, + PhotoUID: uuid, + } err := v1.GET("/api/v1/photos/%s", uuid).JSON(&photo) return photo, err } diff --git a/api/v1/types.go b/api/v1/types.go index e10d8a1..f5e3a86 100644 --- a/api/v1/types.go +++ b/api/v1/types.go @@ -1,6 +1,7 @@ package api import ( + "database/sql" "time" ) @@ -8,237 +9,335 @@ type Photos []Photo // Photo represents a photo, all its properties, and link to all its images and sidecar files. type Photo struct { - PhotoID int `json:"ID,omitempty"` - TakenAt time.Time `json:"TakenAt"` - TakenAtLocal time.Time `json:"TakenAtLocal"` - TakenSrc string `json:"TakenSrc"` - PhotoUID string `json:"UID"` - PhotoType string `json:"Type"` - TypeSrc string `json:"TypeSrc"` - PhotoTitle string `json:"Title"` - TitleSrc string `json:"TitleSrc"` - PhotoDescription string `json:"Description"` - DescriptionSrc string `json:"DescriptionSrc"` - PhotoPath string `json:"Path"` - PhotoName string `json:"Name"` - OriginalName string `json:"OriginalName"` - PhotoStack int8 `json:"Stack"` - PhotoFavorite bool `json:"Favorite"` - PhotoPrivate bool `json:"Private"` - PhotoScan bool `json:"Scan"` - PhotoPanorama bool `json:"Panorama"` - TimeZone string `json:"TimeZone"` - PlaceID string `json:"PlaceID"` - PlaceSrc string `json:"PlaceSrc"` - CellID string `json:"CellID"` - CellAccuracy int `json:"CellAccuracy"` - PhotoAltitude int `json:"Altitude"` - PhotoLat float32 `json:"Lat"` - PhotoLng float32 `json:"Lng"` - PhotoCountry string `json:"Country"` - PhotoYear int `json:"Year"` - PhotoMonth int `json:"Month"` - PhotoDay int `json:"Day"` - PhotoIso int `json:"Iso"` - PhotoExposure string `json:"Exposure"` - PhotoFNumber float32 `json:"FNumber"` - PhotoFocalLength int `json:"FocalLength"` - PhotoQuality int `json:"Quality"` - PhotoResolution int `json:"Resolution"` - PhotoColor uint8 `json:"Color"` - CameraID uint `json:"CameraID"` - CameraSerial string `json:"CameraSerial"` - CameraSrc string `json:"CameraSrc"` - LensID uint `json:"LensID"` - Details *Details `json:"Details"` - Camera *Camera `json:"Camera"` - Lens *Lens `json:"Lens"` - Cell *Cell `json:"Cell"` - Place *Place `json:"Place"` - Files []File `json:"Files"` - Labels []PhotoLabel `json:"Labels"` - CreatedAt time.Time `json:"CreatedAt"` - UpdatedAt time.Time `json:"UpdatedAt"` - EditedAt *time.Time `json:"EditedAt"` - CheckedAt *time.Time `json:"CheckedAt"` - DeletedAt *time.Time `json:"DeletedAt"` + UUID string `gorm:"type:VARBINARY(42);index;" json:"DocumentID,omitempty" yaml:"DocumentID,omitempty"` + TakenAt time.Time `gorm:"type:datetime;index:idx_photos_taken_uid;" json:"TakenAt" yaml:"TakenAt"` + TakenAtLocal time.Time `gorm:"type:datetime;" yaml:"-"` + TakenSrc string `gorm:"type:VARBINARY(8);" json:"TakenSrc" yaml:"TakenSrc,omitempty"` + PhotoUID string `gorm:"type:VARBINARY(42);unique_index;index:idx_photos_taken_uid;" json:"UID" yaml:"UID"` + PhotoType string `gorm:"type:VARBINARY(8);default:'image';" json:"Type" yaml:"Type"` + TypeSrc string `gorm:"type:VARBINARY(8);" json:"TypeSrc" yaml:"TypeSrc,omitempty"` + PhotoTitle string `gorm:"type:VARCHAR(255);" json:"Title" yaml:"Title"` + TitleSrc string `gorm:"type:VARBINARY(8);" json:"TitleSrc" yaml:"TitleSrc,omitempty"` + PhotoDescription string `gorm:"type:TEXT;" json:"Description" yaml:"Description,omitempty"` + DescriptionSrc string `gorm:"type:VARBINARY(8);" json:"DescriptionSrc" yaml:"DescriptionSrc,omitempty"` + PhotoPath string `gorm:"type:VARBINARY(500);index:idx_photos_path_name;" json:"Path" yaml:"-"` + PhotoName string `gorm:"type:VARBINARY(255);index:idx_photos_path_name;" json:"Name" yaml:"-"` + OriginalName string `gorm:"type:VARBINARY(755);" json:"OriginalName" yaml:"OriginalName,omitempty"` + PhotoStack int8 `json:"Stack" yaml:"Stack,omitempty"` + PhotoFavorite bool `json:"Favorite" yaml:"Favorite,omitempty"` + PhotoPrivate bool `json:"Private" yaml:"Private,omitempty"` + PhotoScan bool `json:"Scan" yaml:"Scan,omitempty"` + PhotoPanorama bool `json:"Panorama" yaml:"Panorama,omitempty"` + TimeZone string `gorm:"type:VARBINARY(64);" json:"TimeZone" yaml:"-"` + PlaceID string `gorm:"type:VARBINARY(42);index;default:'zz'" json:"PlaceID" yaml:"-"` + PlaceSrc string `gorm:"type:VARBINARY(8);" json:"PlaceSrc" yaml:"PlaceSrc,omitempty"` + CellID string `gorm:"type:VARBINARY(42);index;default:'zz'" json:"CellID" yaml:"-"` + CellAccuracy int `json:"CellAccuracy" yaml:"CellAccuracy,omitempty"` + PhotoAltitude int `json:"Altitude" yaml:"Altitude,omitempty"` + PhotoLat float32 `gorm:"type:FLOAT;index;" json:"Lat" yaml:"Lat,omitempty"` + PhotoLng float32 `gorm:"type:FLOAT;index;" json:"Lng" yaml:"Lng,omitempty"` + PhotoCountry string `gorm:"type:VARBINARY(2);index:idx_photos_country_year_month;default:'zz'" json:"Country" yaml:"-"` + PhotoYear int `gorm:"index:idx_photos_country_year_month;" json:"Year" yaml:"Year"` + PhotoMonth int `gorm:"index:idx_photos_country_year_month;" json:"Month" yaml:"Month"` + PhotoDay int `json:"Day" yaml:"Day"` + PhotoIso int `json:"Iso" yaml:"ISO,omitempty"` + PhotoExposure string `gorm:"type:VARBINARY(64);" json:"Exposure" yaml:"Exposure,omitempty"` + PhotoFNumber float32 `gorm:"type:FLOAT;" json:"FNumber" yaml:"FNumber,omitempty"` + PhotoFocalLength int `json:"FocalLength" yaml:"FocalLength,omitempty"` + PhotoQuality int `gorm:"type:SMALLINT" json:"Quality" yaml:"-"` + PhotoResolution int `gorm:"type:SMALLINT" json:"Resolution" yaml:"-"` + PhotoColor uint8 `json:"Color" yaml:"-"` + CameraID uint `gorm:"index:idx_photos_camera_lens;default:1" json:"CameraID" yaml:"-"` + CameraSerial string `gorm:"type:VARBINARY(255);" json:"CameraSerial" yaml:"CameraSerial,omitempty"` + CameraSrc string `gorm:"type:VARBINARY(8);" json:"CameraSrc" yaml:"-"` + LensID uint `gorm:"index:idx_photos_camera_lens;default:1" json:"LensID" yaml:"-"` + Details *Details `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Details" yaml:"Details"` + Camera *Camera `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Camera" yaml:"-"` + Lens *Lens `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Lens" yaml:"-"` + Cell *Cell `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Cell" yaml:"-"` + Place *Place `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Place" yaml:"-"` + Keywords []Keyword `json:"-" yaml:"-"` + Albums []Album `json:"-" yaml:"-"` + Files []File `yaml:"-"` + Labels []PhotoLabel `yaml:"-"` + CreatedAt time.Time `yaml:"CreatedAt,omitempty"` + UpdatedAt time.Time `yaml:"UpdatedAt,omitempty"` + EditedAt *time.Time `yaml:"EditedAt,omitempty"` + CheckedAt *time.Time `sql:"index" yaml:"-"` + DeletedAt *time.Time `sql:"index" yaml:"DeletedAt,omitempty"` } // Details stores additional metadata fields for each photo to improve search performance. type Details struct { - PhotoID uint `json:"PhotoID"` - Keywords string `json:"Keywords"` - KeywordsSrc string `json:"KeywordsSrc"` - Notes string `json:"Notes"` - NotesSrc string `json:"NotesSrc"` - Subject string `json:"Subject"` - SubjectSrc string `json:"SubjectSrc"` - Artist string `json:"Artist"` - ArtistSrc string `json:"ArtistSrc"` - Copyright string `json:"Copyright"` - CopyrightSrc string `json:"CopyrightSrc"` - License string `json:"License"` - LicenseSrc string `json:"LicenseSrc"` - Software string `json:"Software"` - SoftwareSrc string `json:"SoftwareSrc"` - CreatedAt time.Time `json:"CreatedAt"` - UpdatedAt time.Time `json:"UpdatedAt"` + PhotoID uint `gorm:"primary_key;auto_increment:false" yaml:"-"` + Keywords string `gorm:"type:TEXT;" json:"Keywords" yaml:"Keywords"` + KeywordsSrc string `gorm:"type:VARBINARY(8);" json:"KeywordsSrc" yaml:"KeywordsSrc,omitempty"` + Notes string `gorm:"type:TEXT;" json:"Notes" yaml:"Notes,omitempty"` + NotesSrc string `gorm:"type:VARBINARY(8);" json:"NotesSrc" yaml:"NotesSrc,omitempty"` + Subject string `gorm:"type:VARCHAR(255);" json:"Subject" yaml:"Subject,omitempty"` + SubjectSrc string `gorm:"type:VARBINARY(8);" json:"SubjectSrc" yaml:"SubjectSrc,omitempty"` + Artist string `gorm:"type:VARCHAR(255);" json:"Artist" yaml:"Artist,omitempty"` + ArtistSrc string `gorm:"type:VARBINARY(8);" json:"ArtistSrc" yaml:"ArtistSrc,omitempty"` + Copyright string `gorm:"type:VARCHAR(255);" json:"Copyright" yaml:"Copyright,omitempty"` + CopyrightSrc string `gorm:"type:VARBINARY(8);" json:"CopyrightSrc" yaml:"CopyrightSrc,omitempty"` + License string `gorm:"type:VARCHAR(255);" json:"License" yaml:"License,omitempty"` + LicenseSrc string `gorm:"type:VARBINARY(8);" json:"LicenseSrc" yaml:"LicenseSrc,omitempty"` + CreatedAt time.Time `yaml:"-"` + UpdatedAt time.Time `yaml:"-"` } // Camera model and make (as extracted from UpdateExif metadata) type Camera struct { - ID uint `json:"ID"` - CameraSlug string `json:"Slug"` - CameraName string `json:"Name"` - CameraMake string `json:"Make"` - CameraModel string `json:"Model"` - CameraType string `json:"Type,omitempty"` - CameraDescription string `json:"Description,omitempty"` - CameraNotes string `json:"Notes,omitempty"` + ID uint `gorm:"primary_key" json:"ID" yaml:"ID"` + CameraSlug string `gorm:"type:VARBINARY(255);unique_index;" json:"Slug" yaml:"-"` + CameraName string `gorm:"type:VARCHAR(255);" json:"Name" yaml:"Name"` + CameraMake string `gorm:"type:VARCHAR(255);" json:"Make" yaml:"Make,omitempty"` + CameraModel string `gorm:"type:VARCHAR(255);" json:"Model" yaml:"Model,omitempty"` + CameraType string `gorm:"type:VARCHAR(255);" json:"Type,omitempty" yaml:"Type,omitempty"` + CameraDescription string `gorm:"type:TEXT;" json:"Description,omitempty" yaml:"Description,omitempty"` + CameraNotes string `gorm:"type:TEXT;" json:"Notes,omitempty" yaml:"Notes,omitempty"` + CreatedAt time.Time `json:"-" yaml:"-"` + UpdatedAt time.Time `json:"-" yaml:"-"` + DeletedAt *time.Time `sql:"index" json:"-" yaml:"-"` } // Lens represents camera lens (as extracted from UpdateExif metadata) type Lens struct { - ID uint `json:"ID"` - LensSlug string `json:"Slug"` - LensName string `json:"Name"` - LensMake string `json:"Make"` - LensModel string `json:"Model"` - LensType string `json:"Type"` - LensDescription string `json:"Description,omitempty"` - LensNotes string `json:"Notes,omitempty"` + ID uint `gorm:"primary_key" json:"ID" yaml:"ID"` + LensSlug string `gorm:"type:VARBINARY(255);unique_index;" json:"Slug" yaml:"Slug,omitempty"` + LensName string `gorm:"type:VARCHAR(255);" json:"Name" yaml:"Name"` + LensMake string `gorm:"type:VARCHAR(255);" json:"Make" yaml:"Make,omitempty"` + LensModel string `gorm:"type:VARCHAR(255);" json:"Model" yaml:"Model,omitempty"` + LensType string `gorm:"type:VARCHAR(255);" json:"Type" yaml:"Type,omitempty"` + LensDescription string `gorm:"type:TEXT;" json:"Description,omitempty" yaml:"Description,omitempty"` + LensNotes string `gorm:"type:TEXT;" json:"Notes,omitempty" yaml:"Notes,omitempty"` + CreatedAt time.Time `json:"-" yaml:"-"` + UpdatedAt time.Time `json:"-" yaml:"-"` + DeletedAt *time.Time `sql:"index" json:"-" yaml:"-"` } // Cell represents a S2 cell with location data. type Cell struct { - ID string `json:"ID"` - CellName string `json:"Name"` - CellStreet string `json:"Street"` - CellPostcode string `json:"Postcode"` - CellCategory string `json:"Category"` - Place *Place `json:"Place"` - CreatedAt time.Time `json:"CreatedAt"` - UpdatedAt time.Time `json:"UpdatedAt"` + ID string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"ID" yaml:"ID"` + CellName string `gorm:"type:VARCHAR(255);" json:"Name" yaml:"Name,omitempty"` + CellCategory string `gorm:"type:VARCHAR(64);" json:"Category" yaml:"Category,omitempty"` + PlaceID string `gorm:"type:VARBINARY(42);default:'zz'" json:"-" yaml:"PlaceID"` + Place *Place `gorm:"PRELOAD:true" json:"Place" yaml:"-"` + CreatedAt time.Time `json:"CreatedAt" yaml:"-"` + UpdatedAt time.Time `json:"UpdatedAt" yaml:"-"` } // Place used to associate photos to places type Place struct { - ID string `json:"PlaceID"` - PlaceLabel string `json:"Label"` - PlaceCity string `json:"City"` - PlaceState string `json:"State"` - PlaceCountry string `json:"Country"` - PlaceKeywords string `json:"Keywords"` - PlaceFavorite bool `json:"Favorite"` - PhotoCount int `json:"PhotoCount"` - CreatedAt time.Time `json:"CreatedAt"` - UpdatedAt time.Time `json:"UpdatedAt"` + ID string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"PlaceID" yaml:"PlaceID"` + PlaceLabel string `gorm:"type:VARBINARY(755);unique_index;" json:"Label" yaml:"Label"` + PlaceCity string `gorm:"type:VARCHAR(255);" json:"City" yaml:"City,omitempty"` + PlaceState string `gorm:"type:VARCHAR(255);" json:"State" yaml:"State,omitempty"` + PlaceCountry string `gorm:"type:VARBINARY(2);" json:"Country" yaml:"Country,omitempty"` + PlaceKeywords string `gorm:"type:VARCHAR(255);" json:"Keywords" yaml:"Keywords,omitempty"` + PlaceFavorite bool `json:"Favorite" yaml:"Favorite,omitempty"` + PhotoCount int `gorm:"default:1" json:"PhotoCount" yaml:"-"` + CreatedAt time.Time `json:"CreatedAt" yaml:"-"` + UpdatedAt time.Time `json:"UpdatedAt" yaml:"-"` +} + +// Keyword used for full text search +type Keyword struct { + ID uint `gorm:"primary_key"` + Keyword string `gorm:"type:VARCHAR(64);index;"` + Skip bool } // Album represents a photo album type Album struct { - ID uint `json:"ID"` - AlbumUID string `json:"UID"` - AlbumSlug string `json:"Slug"` - AlbumType string `json:"Type"` - AlbumTitle string `json:"Title"` - AlbumLocation string `json:"Location"` - AlbumCategory string `json:"Category"` - AlbumCaption string `json:"Caption"` - AlbumDescription string `json:"Description"` - AlbumNotes string `json:"Notes"` - AlbumFilter string `json:"Filter"` - AlbumOrder string `json:"Order"` - AlbumTemplate string `json:"Template"` - AlbumCountry string `json:"Country"` - AlbumYear int `json:"Year"` - AlbumMonth int `json:"Month"` - AlbumDay int `json:"Day"` - AlbumFavorite bool `json:"Favorite"` - AlbumPrivate bool `json:"Private"` - CreatedAt time.Time `json:"CreatedAt"` - UpdatedAt time.Time `json:"UpdatedAt"` - DeletedAt *time.Time `json:"DeletedAt"` + ID uint `gorm:"primary_key" json:"ID" yaml:"-"` + AlbumUID string `gorm:"type:VARBINARY(42);unique_index;" json:"UID" yaml:"UID"` + CoverUID string `gorm:"type:VARBINARY(42);" json:"CoverUID" yaml:"CoverUID,omitempty"` + FolderUID string `gorm:"type:VARBINARY(42);index;" json:"FolderUID" yaml:"FolderUID,omitempty"` + AlbumSlug string `gorm:"type:VARBINARY(255);index;" json:"Slug" yaml:"Slug"` + AlbumPath string `gorm:"type:VARBINARY(500);index;" json:"Path" yaml:"-"` + AlbumType string `gorm:"type:VARBINARY(8);default:'album';" json:"Type" yaml:"Type,omitempty"` + AlbumTitle string `gorm:"type:VARCHAR(255);" json:"Title" yaml:"Title"` + AlbumLocation string `gorm:"type:VARCHAR(255);" json:"Location" yaml:"Location,omitempty"` + AlbumCategory string `gorm:"type:VARCHAR(255);index;" json:"Category" yaml:"Category,omitempty"` + AlbumCaption string `gorm:"type:TEXT;" json:"Caption" yaml:"Caption,omitempty"` + AlbumDescription string `gorm:"type:TEXT;" json:"Description" yaml:"Description,omitempty"` + AlbumNotes string `gorm:"type:TEXT;" json:"Notes" yaml:"Notes,omitempty"` + AlbumFilter string `gorm:"type:VARBINARY(1024);" json:"Filter" yaml:"Filter,omitempty"` + AlbumOrder string `gorm:"type:VARBINARY(32);" json:"Order" yaml:"Order,omitempty"` + AlbumTemplate string `gorm:"type:VARBINARY(255);" json:"Template" yaml:"Template,omitempty"` + AlbumCountry string `gorm:"type:VARBINARY(2);index:idx_albums_country_year_month;default:'zz'" json:"Country" yaml:"Country,omitempty"` + AlbumYear int `gorm:"index:idx_albums_country_year_month;" json:"Year" yaml:"Year,omitempty"` + AlbumMonth int `gorm:"index:idx_albums_country_year_month;" json:"Month" yaml:"Month,omitempty"` + AlbumDay int `json:"Day" yaml:"Day,omitempty"` + AlbumFavorite bool `json:"Favorite" yaml:"Favorite,omitempty"` + AlbumPrivate bool `json:"Private" yaml:"Private,omitempty"` + CreatedAt time.Time `json:"CreatedAt" yaml:"CreatedAt,omitempty"` + UpdatedAt time.Time `json:"UpdatedAt" yaml:"UpdatedAt,omitempty"` + DeletedAt *time.Time `sql:"index" json:"DeletedAt" yaml:"DeletedAt,omitempty"` + Photos PhotoAlbums `gorm:"foreignkey:AlbumUID;association_foreignkey:AlbumUID" json:"-" yaml:"Photos,omitempty"` } type PhotoAlbums []PhotoAlbum // PhotoAlbum represents the many_to_many relation between Photo and Album type PhotoAlbum struct { - PhotoUID string `json:"PhotoUID"` - AlbumUID string `json:"AlbumUID"` - Order int `json:"Order"` - Hidden bool `json:"Hidden"` - Missing bool `json:"Missing"` - CreatedAt time.Time `json:"CreatedAt"` - UpdatedAt time.Time `json:"UpdatedAt"` - Photo *Photo - Album *Album + PhotoUID string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false" json:"PhotoUID" yaml:"UID"` + AlbumUID string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;index" json:"AlbumUID" yaml:"-"` + Order int `json:"Order" yaml:"Order,omitempty"` + Hidden bool `json:"Hidden" yaml:"Hidden,omitempty"` + Missing bool `json:"Missing" yaml:"Missing,omitempty"` + CreatedAt time.Time `json:"CreatedAt" yaml:"CreatedAt,omitempty"` + UpdatedAt time.Time `json:"UpdatedAt" yaml:"-"` + Photo *Photo `gorm:"PRELOAD:false" yaml:"-"` + Album *Album `gorm:"PRELOAD:true" yaml:"-"` } type Files []File // File represents an image or sidecar file that belongs to a photo. type File struct { - PhotoUID string `json:"PhotoUID"` - FileUID string `json:"UID"` - FileName string `json:"Name"` - FileRoot string `json:"Root"` - OriginalName string `json:"OriginalName"` - FileHash string `json:"Hash"` - FileSize int64 `json:"Size"` - FileCodec string `json:"Codec"` - FileType string `json:"Type"` - FileMime string `json:"Mime"` - FilePrimary bool `json:"Primary"` - FileSidecar bool `json:"Sidecar"` - FileMissing bool `json:"Missing"` - FilePortrait bool `json:"Portrait"` - FileVideo bool `json:"Video"` - FileDuration time.Duration `json:"Duration"` - FileWidth int `json:"Width"` - FileHeight int `json:"Height"` - FileOrientation int `json:"Orientation"` - FileProjection string `json:"Projection,omitempty"` - FileAspectRatio float32 `json:"AspectRatio"` - FileMainColor string `json:"MainColor"` - FileColors string `json:"Colors"` - FileLuminance string `json:"Luminance"` - FileDiff uint32 `json:"Diff"` - FileChroma uint8 `json:"Chroma"` - FileError string `json:"Error"` - ModTime int64 `json:"ModTime"` - CreatedAt time.Time `json:"CreatedAt"` - CreatedIn int64 `json:"CreatedIn"` - UpdatedAt time.Time `json:"UpdatedAt"` - UpdatedIn int64 `json:"UpdatedIn"` - DeletedAt *time.Time `json:"DeletedAt,omitempty"` + ID uint `gorm:"primary_key" json:"-" yaml:"-"` + Photo *Photo `json:"-" yaml:"-"` + PhotoID uint `gorm:"index;" json:"-" yaml:"-"` + PhotoUID string `gorm:"type:VARBINARY(42);index;" json:"PhotoUID" yaml:"PhotoUID"` + InstanceID string `gorm:"type:VARBINARY(42);index;" json:"InstanceID,omitempty" yaml:"InstanceID,omitempty"` + FileUID string `gorm:"type:VARBINARY(42);unique_index;" json:"UID" yaml:"UID"` + FileName string `gorm:"type:VARBINARY(755);unique_index:idx_files_name_root;" json:"Name" yaml:"Name"` + FileRoot string `gorm:"type:VARBINARY(16);default:'/';unique_index:idx_files_name_root;" json:"Root" yaml:"Root,omitempty"` + OriginalName string `gorm:"type:VARBINARY(755);" json:"OriginalName" yaml:"OriginalName,omitempty"` + FileHash string `gorm:"type:VARBINARY(128);index" json:"Hash" yaml:"Hash,omitempty"` + FileSize int64 `json:"Size" yaml:"Size,omitempty"` + FileCodec string `gorm:"type:VARBINARY(32)" json:"Codec" yaml:"Codec,omitempty"` + FileType string `gorm:"type:VARBINARY(32)" json:"Type" yaml:"Type,omitempty"` + FileMime string `gorm:"type:VARBINARY(64)" json:"Mime" yaml:"Mime,omitempty"` + FilePrimary bool `json:"Primary" yaml:"Primary,omitempty"` + FileSidecar bool `json:"Sidecar" yaml:"Sidecar,omitempty"` + FileMissing bool `json:"Missing" yaml:"Missing,omitempty"` + FilePortrait bool `json:"Portrait" yaml:"Portrait,omitempty"` + FileVideo bool `json:"Video" yaml:"Video,omitempty"` + FileDuration time.Duration `json:"Duration" yaml:"Duration,omitempty"` + FileWidth int `json:"Width" yaml:"Width,omitempty"` + FileHeight int `json:"Height" yaml:"Height,omitempty"` + FileOrientation int `json:"Orientation" yaml:"Orientation,omitempty"` + FileProjection string `gorm:"type:VARBINARY(16);" json:"Projection,omitempty" yaml:"Projection,omitempty"` + FileAspectRatio float32 `gorm:"type:FLOAT;" json:"AspectRatio" yaml:"AspectRatio,omitempty"` + FileMainColor string `gorm:"type:VARBINARY(16);index;" json:"MainColor" yaml:"MainColor,omitempty"` + FileColors string `gorm:"type:VARBINARY(9);" json:"Colors" yaml:"Colors,omitempty"` + FileLuminance string `gorm:"type:VARBINARY(9);" json:"Luminance" yaml:"Luminance,omitempty"` + FileDiff uint32 `json:"Diff" yaml:"Diff,omitempty"` + FileChroma uint8 `json:"Chroma" yaml:"Chroma,omitempty"` + FileError string `gorm:"type:VARBINARY(512)" json:"Error" yaml:"Error,omitempty"` + ModTime int64 `json:"ModTime" yaml:"-"` + CreatedAt time.Time `json:"CreatedAt" yaml:"-"` + CreatedIn int64 `json:"CreatedIn" yaml:"-"` + UpdatedAt time.Time `json:"UpdatedAt" yaml:"-"` + UpdatedIn int64 `json:"UpdatedIn" yaml:"-"` + DeletedAt *time.Time `sql:"index" json:"DeletedAt,omitempty" yaml:"-"` + Share []FileShare `json:"-" yaml:"-"` + Sync []FileSync `json:"-" yaml:"-"` +} + +// FileSync represents a one-to-many relation between File and Account for syncing with remote services. +type FileSync struct { + RemoteName string `gorm:"primary_key;auto_increment:false;type:VARBINARY(255)"` + AccountID uint `gorm:"primary_key;auto_increment:false"` + FileID uint `gorm:"index;"` + RemoteDate time.Time + RemoteSize int64 + Status string `gorm:"type:VARBINARY(16);"` + Error string `gorm:"type:VARBINARY(512);"` + Errors int + File *File + Account *Account + CreatedAt time.Time + UpdatedAt time.Time +} + +// FileShare represents a one-to-many relation between File and Account for pushing files to remote services. +type FileShare struct { + FileID uint `gorm:"primary_key;auto_increment:false"` + AccountID uint `gorm:"primary_key;auto_increment:false"` + RemoteName string `gorm:"primary_key;auto_increment:false;type:VARBINARY(255)"` + Status string `gorm:"type:VARBINARY(16);"` + Error string `gorm:"type:VARBINARY(512);"` + Errors int + File *File + Account *Account + CreatedAt time.Time + UpdatedAt time.Time } // PhotoLabel represents the many-to-many relation between Photo and label. // Labels are weighted by uncertainty (100 - confidence) type PhotoLabel struct { - PhotoID uint `json:"PhotoID"` - LabelID uint `json:"LabelID"` - LabelSrc string `json:"LabelSrc""` - Uncertainty int `json:"Uncertainty"` - Photo *Photo `json:"Photo"` - Label *Label `json:"Label"` + PhotoID uint `gorm:"primary_key;auto_increment:false"` + LabelID uint `gorm:"primary_key;auto_increment:false;index"` + LabelSrc string `gorm:"type:VARBINARY(8);"` + Uncertainty int `gorm:"type:SMALLINT"` + Photo *Photo `gorm:"PRELOAD:false"` + Label *Label `gorm:"PRELOAD:true"` } // Label is used for photo, album and location categorization type Label struct { - ID uint `json:"ID"` - LabelUID string `json:"UID"` - LabelSlug string `json:"Slug"` - CustomSlug string `json:"CustomSlug"` - LabelName string `json:"Name"` - LabelPriority int `json:"Priority"` - LabelFavorite bool `json:"Favorite"` - LabelDescription string `json:"Description"` - LabelNotes string `json:"Notes"` - PhotoCount int `json:"PhotoCount"` - LabelThumb string `json:"Thumb"` - CreatedAt time.Time `json:"CreatedAt"` - UpdatedAt time.Time `json:"UpdatedAt"` + ID uint `gorm:"primary_key" json:"ID" yaml:"-"` + LabelUID string `gorm:"type:VARBINARY(42);unique_index;" json:"UID" yaml:"UID"` + LabelSlug string `gorm:"type:VARBINARY(255);unique_index;" json:"Slug" yaml:"-"` + CustomSlug string `gorm:"type:VARBINARY(255);index;" json:"CustomSlug" yaml:"-"` + LabelName string `gorm:"type:VARCHAR(255);" json:"Name" yaml:"Name"` + LabelPriority int `json:"Priority" yaml:"Priority,omitempty"` + LabelFavorite bool `json:"Favorite" yaml:"Favorite,omitempty"` + LabelDescription string `gorm:"type:TEXT;" json:"Description" yaml:"Description,omitempty"` + LabelNotes string `gorm:"type:TEXT;" json:"Notes" yaml:"Notes,omitempty"` + LabelCategories []*Label `gorm:"many2many:categories;association_jointable_foreignkey:category_id" json:"-" yaml:"-"` + PhotoCount int `gorm:"default:1" json:"PhotoCount" yaml:"-"` + CreatedAt time.Time `json:"CreatedAt" yaml:"-"` + UpdatedAt time.Time `json:"UpdatedAt" yaml:"-"` + DeletedAt *time.Time `sql:"index" json:"DeletedAt,omitempty" yaml:"-"` + New bool `gorm:"-" json:"-" yaml:"-"` +} + +// FileInfos represents meta data about a file +type FileInfos struct { + FileWidth int + FileHeight int + FileOrientation int + FileAspectRatio float32 + FileMainColor string + FileColors string + FileLuminance string + FileDiff uint32 + FileChroma uint8 +} + +// Account represents a remote service account for uploading, downloading or syncing media files. +type Account struct { + ID uint `gorm:"primary_key"` + AccName string `gorm:"type:VARCHAR(255);"` + AccOwner string `gorm:"type:VARCHAR(255);"` + AccURL string `gorm:"type:VARBINARY(512);"` + AccType string `gorm:"type:VARBINARY(255);"` + AccKey string `gorm:"type:VARBINARY(255);"` + AccUser string `gorm:"type:VARBINARY(255);"` + AccPass string `gorm:"type:VARBINARY(255);"` + AccError string `gorm:"type:VARBINARY(512);"` + AccErrors int + AccShare bool + AccSync bool + RetryLimit int + SharePath string `gorm:"type:VARBINARY(500);"` + ShareSize string `gorm:"type:VARBINARY(16);"` + ShareExpires int + SyncPath string `gorm:"type:VARBINARY(500);"` + SyncStatus string `gorm:"type:VARBINARY(16);"` + SyncInterval int + SyncDate sql.NullTime `deepcopier:"skip"` + SyncUpload bool + SyncDownload bool + SyncFilenames bool + SyncRaw bool + CreatedAt time.Time `deepcopier:"skip"` + UpdatedAt time.Time `deepcopier:"skip"` + DeletedAt *time.Time `deepcopier:"skip" sql:"index"` } diff --git a/client.go b/client.go index 702cb41..328e4f3 100644 --- a/client.go +++ b/client.go @@ -9,7 +9,7 @@ import ( "net/url" "strings" - v1 "git.zio.sh/astra/photoprism-client-go/api/v1" + v1 "github.com/astravexton/photoprism-client-go/api/v1" ) const ( diff --git a/examples/.gitignore b/examples/.gitignore new file mode 100644 index 0000000..633a832 --- /dev/null +++ b/examples/.gitignore @@ -0,0 +1 @@ +ignore_* \ No newline at end of file diff --git a/examples/README.md b/examples/README.md index cd77913..301010e 100644 --- a/examples/README.md +++ b/examples/README.md @@ -4,6 +4,8 @@ Here are good examples and working code snippets to start from. A lot of these files are used for development and are subject to change. +For more complete sample code, see the integration testing suite in `/test`. + ### Running the examples Run the examples. Make sure to pass both the file you wish to run, as well as `common.go` to include the convenience functions. diff --git a/examples/album.go b/examples/album.go index 0a2d6ec..b5d1e07 100644 --- a/examples/album.go +++ b/examples/album.go @@ -1,9 +1,9 @@ package main import ( - photoprism "git.zio.sh/astra/photoprism-client-go" - "git.zio.sh/astra/photoprism-client-go/api/v1" "github.com/astravexton/logger" + photoprism "github.com/astravexton/photoprism-client-go" + "github.com/astravexton/photoprism-client-go/api/v1" ) func main() { diff --git a/examples/common.go b/examples/common.go index cf6e4da..6b691c1 100644 --- a/examples/common.go +++ b/examples/common.go @@ -4,7 +4,7 @@ import ( "fmt" "os" - photoprism "git.zio.sh/astra/photoprism-client-go" + photoprism "github.com/astravexton/photoprism-client-go" "github.com/astravexton/logger" ) diff --git a/examples/getalbum.go b/examples/getalbum.go index 1f6ec37..463ba00 100644 --- a/examples/getalbum.go +++ b/examples/getalbum.go @@ -3,8 +3,8 @@ package main import ( "fmt" - photoprism "git.zio.sh/astra/photoprism-client-go" "github.com/astravexton/logger" + photoprism "github.com/astravexton/photoprism-client-go" ) func main() { diff --git a/examples/login.go b/examples/login.go index 5f8af14..48bbcc4 100644 --- a/examples/login.go +++ b/examples/login.go @@ -1,8 +1,8 @@ package main import ( - photoprism "git.zio.sh/astra/photoprism-client-go" "github.com/astravexton/logger" + photoprism "github.com/astravexton/photoprism-client-go" ) func main() { diff --git a/examples/photo.go b/examples/photo.go index 621f949..a98af91 100644 --- a/examples/photo.go +++ b/examples/photo.go @@ -5,8 +5,8 @@ import ( "io/ioutil" "path" - photoprism "git.zio.sh/astra/photoprism-client-go" "github.com/astravexton/logger" + photoprism "github.com/astravexton/photoprism-client-go" ) func main() { diff --git a/go.mod b/go.mod index e68ce8d..aba9455 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,8 @@ -module git.zio.sh/astra/photoprism-client-go +module github.com/astravexton/photoprism-client-go -go 1.18 +go 1.15 -require github.com/astravexton/logger v0.2.2-0.20211216142523-c1e08a465709 // indirect +require ( + github.com/astravexton/logger v0.2.1 + github.com/kris-nova/logger v0.2.1 +) diff --git a/go.sum b/go.sum index cf4246f..d442939 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,4 @@ -github.com/astravexton/logger v0.2.2-0.20211216142523-c1e08a465709 h1:S+dBCax7wdg3ikWx5t6cClPKQIerrmD404qAzWhO2V4= -github.com/astravexton/logger v0.2.2-0.20211216142523-c1e08a465709/go.mod h1:6BlG5E0U3CImXLmDtGpEwdoc8PHiiDv0kbvJBCbfiMY= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/kris-nova/lolgopher v0.0.0-20210112022122-73f0047e8b65/go.mod h1:V0HF/ZBlN86HqewcDC/cVxMmYDiRukWjSrgKLUAn9Js= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +github.com/astravexton/logger v0.2.1 h1:nYxhV6oCHIJzUzaPhawbAc51EEvJowIViVsB5EbdeJQ= +github.com/astravexton/logger v0.2.1/go.mod h1:6uxVhLlWlvZn48W8F52dsMXt4yztlrInpRhdWiJ9RXc= +github.com/kris-nova/logger v0.2.1 h1:hbZusgXXXTSd0rNAMBBe/8lhjxXkqWs0+nzjwewCI+E= +github.com/kris-nova/logger v0.2.1/go.mod h1:++9BgZujZd4v0ZTZCb5iPsaomXdZWyxotIAh1IiDm44= diff --git a/internal/README.md b/internal/README.md new file mode 100644 index 0000000..465cb8f --- /dev/null +++ b/internal/README.md @@ -0,0 +1,6 @@ +# Internal + +This directory is used to store backend code while developing. + +This directory should NEVER contain SDK code. + diff --git a/sample-app/README.md b/sample-app/README.md new file mode 100644 index 0000000..49a1463 --- /dev/null +++ b/sample-app/README.md @@ -0,0 +1,17 @@ +# Sample App + +This is bad code. + +We shell exec the start/stop/create/destroy docker commands (poorly) +and this is how the unit testing suite attempts to start/stop/create/destroy +the local persistent store. + +### Running The Sample App + +```bash +./pcreate # Will create the sample app running locally +./pdestroy # Will destroy the sample app, but the data will persist regardles of running this command +./pstop # Will stop the photoprism app from running/serving +./plogs # Will tail the photoprism logs +./pstart # Will start an already created, and then stopped Photoprism application +``` \ No newline at end of file diff --git a/sample-app/app.go b/sample-app/app.go new file mode 100644 index 0000000..5756883 --- /dev/null +++ b/sample-app/app.go @@ -0,0 +1,91 @@ +package sampleapp + +import ( + "path/filepath" + "runtime" + + "github.com/astravexton/logger" + + "github.com/astravexton/photoprism-client-go" +) + +type SampleApplication struct { +} + +func New() *SampleApplication { + app := &SampleApplication{} + return app +} + +// These are the bash scripts that can be used +// to start/stop the Photoprism test application +var ( + CreateCommand = `pcreate` + DestroyCommand = `pdestroy` + LogsCommand = `plogs` + StartCommand = `pstart` + StopCommand = `pstop"` +) + +func (a *SampleApplication) Start() error { + logger.Info("Starting Application...") + script, err := NewScriptFromPath(filepath.Join(PrintWorkingDirectory(), StartCommand)) + if err != nil { + return err + } + return script.Interpret() +} + +func (a *SampleApplication) Stop() error { + logger.Info("Stopping Application...") + script, err := NewScriptFromPath(filepath.Join(PrintWorkingDirectory(), StopCommand)) + if err != nil { + return err + } + return script.Interpret() +} + +func (a *SampleApplication) Create() error { + logger.Info("Create Application...") + script, err := NewScriptFromPath(filepath.Join(PrintWorkingDirectory(), CreateCommand)) + if err != nil { + return err + } + return script.Interpret() +} + +func (a *SampleApplication) Destroy() error { + logger.Info("Destroying Application...") + script, err := NewScriptFromPath(filepath.Join(PrintWorkingDirectory(), DestroyCommand)) + if err != nil { + return err + } + return script.Interpret() +} + +func (a *SampleApplication) Logs() error { + logger.Info("Logging Application...") + script, err := NewScriptFromPath(filepath.Join(PrintWorkingDirectory(), LogsCommand)) + if err != nil { + return err + } + return script.Interpret() +} + +func (a *SampleApplication) GetAuth() photoprism.ClientAuthenticator { + return nil +} + +func PrintWorkingDirectory() string { + _, filename, _, ok := runtime.Caller(1) + if !ok { + logger.Info("Unable to PWD") + return "" + } + dir, err := filepath.Abs(filepath.Dir(filename)) + if err != nil { + logger.Info("Unable to PWD: %v", err) + return "" + } + return dir +} diff --git a/sample-app/exec.go b/sample-app/exec.go new file mode 100644 index 0000000..82a75a8 --- /dev/null +++ b/sample-app/exec.go @@ -0,0 +1,169 @@ +package sampleapp + +import ( + "bytes" + "fmt" + "io/ioutil" + "os/exec" + "path/filepath" + "strings" + + "github.com/astravexton/logger" +) + +// Script is a set of commands delimited by newlines +// Comments # and // are ignored. +type Script struct { + commands []string +} + +// NewScriptFromPath is used to build an executable script from a path of disk. +func NewScriptFromPath(path string) (*Script, error) { + path, err := filepath.Abs(path) + if err != nil { + return nil, fmt.Errorf("unable to calculate fully qualified path for path: %s: %v", path, err) + } + + bytes, err := ioutil.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("unable to read from path %s: %v", path, err) + } + content := string(bytes) + return NewScriptFromString(content), nil +} + +const ( + // IgnoreSpacesBash is the amount of (spaces - 1) that we see in common \\n delimited commands + IgnoreSpacesBash string = " " + + // IgnoreTabs is the tab character + IgnoreTabs string = "\t" +) + +// NewScriptFromString is used to build an executable script from the content in string form. +func NewScriptFromString(str string) *Script { + script := &Script{} + removeRuleF := func(str string, rs []string) string { + for _, r := range rs { + str = strings.Replace(str, r, "", -1) + } + return str + } + str = strings.Replace(str, "\\\n", "", -1) + str = removeRuleF(str, []string{IgnoreSpacesBash, IgnoreTabs}) + spl := strings.Split(str, "\n") + //logger.Info("Script lines: %d", len(spl)) + for _, line := range spl { + script.commands = append(script.commands, line) + } + return script +} + +// Interpret is used to procedurally execute a script. The script will execute each line independently +// and can error at any point in the executation path. +func (s *Script) Interpret() error { + //logger.Info("Running script...") + for i, cmdStr := range s.commands { + // Exec will hang for output + // Ignore newlines + // Ignore comments starting with # + // Ignore comments starting with // + if cmdStr == "\n" || cmdStr == "" || strings.HasPrefix(cmdStr, "#") || strings.HasPrefix(cmdStr, "//") { + continue + } + logger.Info("Executing: [%s]", cmdStr) + result, err := Exec(cmdStr) + if err != nil { + return fmt.Errorf("error executing running command [%s] on line [%d]\n%v\n", cmdStr, i+1, err) + } else if result.exitCode != 0 { + return fmt.Errorf("non zero exit code running command [%s] on line [%d]\n%s\n%s\n", cmdStr, i+1, result.Stdout(), result.Stderr()) + } + // Here is where we log STDOUT from a "script" + // Right now it is set to DEBUG which can be enabled by + // setting logger.Level = 4 + logger.Debug(result.Stdout()) + } + return nil +} + +type ExecResult struct { + stderr string + stdout string + exitCode int + execErr exec.ExitError +} + +func (e *ExecResult) Stdout() string { + return e.stdout +} + +func (e *ExecResult) Stderr() string { + return e.stderr +} + +func (e *ExecResult) ExitCode() int { + if e == nil { + return 0 + } + return e.exitCode +} + +func (e *ExecResult) ExecError() exec.ExitError { + return e.execErr +} + +// Exec will take an arbitrary executable string +// and hang until the command exits +func Exec(str string) (*ExecResult, error) { + //logger.Info("Exec [%s]", str) + var cmdstr string + var args []string + var l int + spl := strings.Split(str, " ") + l = len(spl) + if l == 1 { + // + cmdstr = spl[0] + } else if l > 1 { + // ... + cmdstr = spl[0] + for i := 1; i < l; i++ { + args = append(args, spl[i]) + } + } else if l < 1 { + return nil, fmt.Errorf("invalid Exec() string %s", str) + } + fqpcmd, err := exec.LookPath(cmdstr) + if err != nil { + logger.Debug("unable to find fully qualified path for executable %s: %v", cmdstr, err) + } + + //logger.Info("Command: %s", fqpcmd) + //logger.Info("Args: %v", args) + + stdoutBuffer := bytes.Buffer{} + stderrBuffer := bytes.Buffer{} + e := []string{fqpcmd} + for _, arg := range args { + e = append(e, arg) + } + cmd := exec.Command(e[0], e[1:]...) + cmd.Stdout = &stdoutBuffer + cmd.Stderr = &stderrBuffer + result := &ExecResult{} + err = cmd.Run() + if err != nil { + if eerr, ok := err.(*exec.ExitError); ok { + result.stderr = stderrBuffer.String() + result.stdout = stdoutBuffer.String() + result.exitCode = eerr.ExitCode() + result.execErr = *eerr + return result, nil + } + return nil, fmt.Errorf("major error running command [%s]: %v", str, err) + } + result.stderr = stderrBuffer.String() + result.stdout = stdoutBuffer.String() + result.exitCode = 0 + return result, nil +} diff --git a/sample-app/pcreate b/sample-app/pcreate new file mode 100755 index 0000000..baedffd --- /dev/null +++ b/sample-app/pcreate @@ -0,0 +1,25 @@ + +#!/bin/bash +#################################### +##### +### +## +# +# +# Startup Script for the Application +#################################### +echo "Creating [SampleApp]" + +# TODO Nova +# TODO Per edude03ontwitch we want to actually mount /photoprism/whatever +docker run -d \ + --name photoprism \ + -p 8080:2342 \ + -e PHOTOPRISM_UPLOAD_NSFW="true" \ + -e PHOTOPRISM_ADMIN_PASSWORD="missy" \ + -v ${GOPATH}/src/github.com/astravexton/photoprism-client-go/sample-app/photoprism/import:/photoprism/import \ + -v ${GOPATH}/src/github.com/astravexton/photoprism-client-go/sample-app/photoprism/originals:/photoprism/originals \ + -v ${GOPATH}/src/github.com/astravexton/photoprism-client-go/sample-app/photoprism/storage:/photoprism/storage \ + photoprism/photoprism:latest + + diff --git a/sample-app/pdestroy b/sample-app/pdestroy new file mode 100755 index 0000000..5a3833e --- /dev/null +++ b/sample-app/pdestroy @@ -0,0 +1,13 @@ +#!/bin/bash +#################################### +##### +### +## +# +# +# Startup Script for the Application +#################################### +echo "Destroying [SampleApp]" +docker stop photoprism +docker rm photoprism + diff --git a/sample-app/photoprism/originals/2021/02/20210204_031706_36A3FD61.jpeg b/sample-app/photoprism/originals/2021/02/20210204_031706_36A3FD61.jpeg new file mode 100755 index 0000000..2730508 Binary files /dev/null and b/sample-app/photoprism/originals/2021/02/20210204_031706_36A3FD61.jpeg differ diff --git a/sample-app/photoprism/originals/2021/02/20210204_031706_5B740007.jpg b/sample-app/photoprism/originals/2021/02/20210204_031706_5B740007.jpg new file mode 100755 index 0000000..8291139 Binary files /dev/null and b/sample-app/photoprism/originals/2021/02/20210204_031706_5B740007.jpg differ diff --git a/sample-app/photoprism/originals/2021/02/20210204_031706_76642B51.jpeg b/sample-app/photoprism/originals/2021/02/20210204_031706_76642B51.jpeg new file mode 100755 index 0000000..e67c9cf Binary files /dev/null and b/sample-app/photoprism/originals/2021/02/20210204_031706_76642B51.jpeg differ diff --git a/sample-app/photoprism/originals/2021/02/20210204_031706_AE1CC552.jpg b/sample-app/photoprism/originals/2021/02/20210204_031706_AE1CC552.jpg new file mode 100755 index 0000000..3d7f803 Binary files /dev/null and b/sample-app/photoprism/originals/2021/02/20210204_031706_AE1CC552.jpg differ diff --git a/sample-app/photoprism/storage/ElgexEiU8AA-pQO.jpeg b/sample-app/photoprism/storage/ElgexEiU8AA-pQO.jpeg new file mode 100644 index 0000000..e67c9cf Binary files /dev/null and b/sample-app/photoprism/storage/ElgexEiU8AA-pQO.jpeg differ diff --git a/sample-app/photoprism/storage/EpTcef3VoAEiaS4.jpeg b/sample-app/photoprism/storage/EpTcef3VoAEiaS4.jpeg new file mode 100644 index 0000000..2730508 Binary files /dev/null and b/sample-app/photoprism/storage/EpTcef3VoAEiaS4.jpeg differ diff --git a/sample-app/photoprism/storage/IMG_3044.jpg b/sample-app/photoprism/storage/IMG_3044.jpg new file mode 100644 index 0000000..8291139 Binary files /dev/null and b/sample-app/photoprism/storage/IMG_3044.jpg differ diff --git a/sample-app/photoprism/storage/NVA05562.JPG b/sample-app/photoprism/storage/NVA05562.JPG new file mode 100644 index 0000000..3d7f803 Binary files /dev/null and b/sample-app/photoprism/storage/NVA05562.JPG differ diff --git a/sample-app/photoprism/storage/albums/album/aqnzih81icziiyae.yml b/sample-app/photoprism/storage/albums/album/aqnzih81icziiyae.yml new file mode 100755 index 0000000..10c01b3 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqnzih81icziiyae.yml @@ -0,0 +1,17 @@ +UID: aqnzih81icziiyae +Slug: february-2021 +Type: album +Title: February 2021 +Order: oldest +Country: zz +CreatedAt: 2021-02-04T03:17:32Z +UpdatedAt: 2021-02-04T03:17:32Z +Photos: +- UID: pqnzigq156lndozm + CreatedAt: 2021-02-04T03:17:40.83892969Z +- UID: pqnzigq1jb1bibrz + CreatedAt: 2021-02-04T03:17:40.846632301Z +- UID: pqnzigq351j2fqgn + CreatedAt: 2021-02-04T03:17:40.851856107Z +- UID: pqnzigq3sidxb0j0 + CreatedAt: 2021-02-04T03:17:40.857083572Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe01hgxpo1hjih.yml b/sample-app/photoprism/storage/albums/album/aqoe01hgxpo1hjih.yml new file mode 100755 index 0000000..2c2cc87 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe01hgxpo1hjih.yml @@ -0,0 +1,9 @@ +UID: aqoe01hgxpo1hjih +Slug: novaalbum +Type: album +Title: NovaAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:03:18Z +UpdatedAt: 2021-02-11T23:03:18Z +DeletedAt: 2021-02-11T23:14:45.771988424Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe0941aw0wz0rj.yml b/sample-app/photoprism/storage/albums/album/aqoe0941aw0wz0rj.yml new file mode 100755 index 0000000..ef9600d --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe0941aw0wz0rj.yml @@ -0,0 +1,9 @@ +UID: aqoe0941aw0wz0rj +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:07:53Z +UpdatedAt: 2021-02-11T23:07:53Z +DeletedAt: 2021-02-11T23:14:36.400063828Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe0j0nog2wtd98.yml b/sample-app/photoprism/storage/albums/album/aqoe0j0nog2wtd98.yml new file mode 100755 index 0000000..a904798 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe0j0nog2wtd98.yml @@ -0,0 +1,9 @@ +UID: aqoe0j0nog2wtd98 +Slug: february-2021 +Type: album +Title: February 2021 +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:13:49Z +UpdatedAt: 2021-02-11T23:13:49Z +DeletedAt: 2021-02-11T23:14:30.637709439Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe0o1v8rjprqy6.yml b/sample-app/photoprism/storage/albums/album/aqoe0o1v8rjprqy6.yml new file mode 100755 index 0000000..75d8bd8 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe0o1v8rjprqy6.yml @@ -0,0 +1,10 @@ +UID: aqoe0o1v8rjprqy6 +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:16:49Z +UpdatedAt: 2021-02-11T23:16:49.091245891Z +DeletedAt: 2021-02-11T23:18:32.10184988Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe0xu1149t43i3.yml b/sample-app/photoprism/storage/albums/album/aqoe0xu1149t43i3.yml new file mode 100755 index 0000000..f463f41 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe0xu1149t43i3.yml @@ -0,0 +1,10 @@ +UID: aqoe0xu1149t43i3 +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:22:42Z +UpdatedAt: 2021-02-11T23:22:42.31692892Z +DeletedAt: 2021-02-12T00:14:52.285222547Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe0zl3h1wak08f.yml b/sample-app/photoprism/storage/albums/album/aqoe0zl3h1wak08f.yml new file mode 100755 index 0000000..0de539d --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe0zl3h1wak08f.yml @@ -0,0 +1,10 @@ +UID: aqoe0zl3h1wak08f +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:23:46Z +UpdatedAt: 2021-02-11T23:23:45.864716162Z +DeletedAt: 2021-02-11T23:24:31.729202695Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1231tb94a48k.yml b/sample-app/photoprism/storage/albums/album/aqoe1231tb94a48k.yml new file mode 100755 index 0000000..bbb5c87 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1231tb94a48k.yml @@ -0,0 +1,10 @@ +UID: aqoe1231tb94a48k +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:25:16Z +UpdatedAt: 2021-02-11T23:25:15.61908592Z +DeletedAt: 2021-02-12T00:14:52.285222547Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1981fbhzaou2.yml b/sample-app/photoprism/storage/albums/album/aqoe1981fbhzaou2.yml new file mode 100755 index 0000000..f83a38d --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1981fbhzaou2.yml @@ -0,0 +1,9 @@ +UID: aqoe1981fbhzaou2 +Slug: novaalbum +Type: album +Title: NovaAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:29:33Z +UpdatedAt: 2021-02-11T23:29:33Z +DeletedAt: 2021-02-12T00:14:52.285222547Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1bw1ywyawhlb.yml b/sample-app/photoprism/storage/albums/album/aqoe1bw1ywyawhlb.yml new file mode 100755 index 0000000..c545433 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1bw1ywyawhlb.yml @@ -0,0 +1,9 @@ +UID: aqoe1bw1ywyawhlb +Slug: novaalbum +Type: album +Title: NovaAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:31:08Z +UpdatedAt: 2021-02-11T23:31:08Z +DeletedAt: 2021-02-11T23:31:08.058407849Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1cs1rrfaer9d.yml b/sample-app/photoprism/storage/albums/album/aqoe1cs1rrfaer9d.yml new file mode 100755 index 0000000..57bd71a --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1cs1rrfaer9d.yml @@ -0,0 +1,10 @@ +UID: aqoe1cs1rrfaer9d +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:31:41Z +UpdatedAt: 2021-02-11T23:31:40.791556222Z +DeletedAt: 2021-02-11T23:31:40.798855984Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1mn3669ed8vc.yml b/sample-app/photoprism/storage/albums/album/aqoe1mn3669ed8vc.yml new file mode 100755 index 0000000..8ffb002 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1mn3669ed8vc.yml @@ -0,0 +1,10 @@ +UID: aqoe1mn3669ed8vc +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:37:36Z +UpdatedAt: 2021-02-11T23:37:35.931076271Z +DeletedAt: 2021-02-11T23:37:35.938663557Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1mnib00h33mh.yml b/sample-app/photoprism/storage/albums/album/aqoe1mnib00h33mh.yml new file mode 100755 index 0000000..26e1f86 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1mnib00h33mh.yml @@ -0,0 +1,9 @@ +UID: aqoe1mnib00h33mh +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:37:36Z +UpdatedAt: 2021-02-11T23:37:36Z +DeletedAt: 2021-02-11T23:37:35.984813813Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1su2yz12rn7r.yml b/sample-app/photoprism/storage/albums/album/aqoe1su2yz12rn7r.yml new file mode 100755 index 0000000..28f3849 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1su2yz12rn7r.yml @@ -0,0 +1,9 @@ +UID: aqoe1su2yz12rn7r +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:41:19Z +UpdatedAt: 2021-02-11T23:41:19Z +DeletedAt: 2021-02-11T23:41:18.568153261Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1su312pday8a.yml b/sample-app/photoprism/storage/albums/album/aqoe1su312pday8a.yml new file mode 100755 index 0000000..7aaa0b6 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1su312pday8a.yml @@ -0,0 +1,10 @@ +UID: aqoe1su312pday8a +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:41:18Z +UpdatedAt: 2021-02-11T23:41:18.505274668Z +DeletedAt: 2021-02-11T23:41:18.517183797Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe1su3gj3q7mrk.yml b/sample-app/photoprism/storage/albums/album/aqoe1su3gj3q7mrk.yml new file mode 100755 index 0000000..f1f2f2c --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe1su3gj3q7mrk.yml @@ -0,0 +1,9 @@ +UID: aqoe1su3gj3q7mrk +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:41:19Z +UpdatedAt: 2021-02-11T23:41:19Z +DeletedAt: 2021-02-11T23:41:18.592298473Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2nw1mc3m0c95.yml b/sample-app/photoprism/storage/albums/album/aqoe2nw1mc3m0c95.yml new file mode 100755 index 0000000..171b413 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2nw1mc3m0c95.yml @@ -0,0 +1,9 @@ +UID: aqoe2nw1mc3m0c95 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:59:57Z +UpdatedAt: 2021-02-11T23:59:57Z +DeletedAt: 2021-02-11T23:59:56.834221161Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2nw2mtjrlyuq.yml b/sample-app/photoprism/storage/albums/album/aqoe2nw2mtjrlyuq.yml new file mode 100755 index 0000000..7bfe8aa --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2nw2mtjrlyuq.yml @@ -0,0 +1,9 @@ +UID: aqoe2nw2mtjrlyuq +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:59:57Z +UpdatedAt: 2021-02-11T23:59:57Z +DeletedAt: 2021-02-11T23:59:56.78263971Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2nw310xqz9f1.yml b/sample-app/photoprism/storage/albums/album/aqoe2nw310xqz9f1.yml new file mode 100755 index 0000000..dc273ec --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2nw310xqz9f1.yml @@ -0,0 +1,9 @@ +UID: aqoe2nw310xqz9f1 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:59:57Z +UpdatedAt: 2021-02-11T23:59:57Z +DeletedAt: 2021-02-11T23:59:56.805849627Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2nws4nefmwtt.yml b/sample-app/photoprism/storage/albums/album/aqoe2nws4nefmwtt.yml new file mode 100755 index 0000000..3d9321f --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2nws4nefmwtt.yml @@ -0,0 +1,10 @@ +UID: aqoe2nws4nefmwtt +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-11T23:59:57Z +UpdatedAt: 2021-02-11T23:59:56.727315788Z +DeletedAt: 2021-02-11T23:59:56.734742155Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2u021a4zjufp.yml b/sample-app/photoprism/storage/albums/album/aqoe2u021a4zjufp.yml new file mode 100755 index 0000000..b52de44 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2u021a4zjufp.yml @@ -0,0 +1,9 @@ +UID: aqoe2u021a4zjufp +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:03:37Z +UpdatedAt: 2021-02-12T00:03:37Z +DeletedAt: 2021-02-12T00:03:36.899233684Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2u0299hfp9uf.yml b/sample-app/photoprism/storage/albums/album/aqoe2u0299hfp9uf.yml new file mode 100755 index 0000000..0a3ec1c --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2u0299hfp9uf.yml @@ -0,0 +1,9 @@ +UID: aqoe2u0299hfp9uf +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:03:37Z +UpdatedAt: 2021-02-12T00:03:37Z +DeletedAt: 2021-02-12T00:03:36.927067016Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2u03t1k09mbq.yml b/sample-app/photoprism/storage/albums/album/aqoe2u03t1k09mbq.yml new file mode 100755 index 0000000..ad39aba --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2u03t1k09mbq.yml @@ -0,0 +1,10 @@ +UID: aqoe2u03t1k09mbq +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:03:37Z +UpdatedAt: 2021-02-12T00:03:36.846932177Z +DeletedAt: 2021-02-12T00:03:36.854999187Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2u0zakwm0kh4.yml b/sample-app/photoprism/storage/albums/album/aqoe2u0zakwm0kh4.yml new file mode 100755 index 0000000..14c33f4 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2u0zakwm0kh4.yml @@ -0,0 +1,9 @@ +UID: aqoe2u0zakwm0kh4 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:03:37Z +UpdatedAt: 2021-02-12T00:03:37Z +DeletedAt: 2021-02-12T00:03:36.955701902Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2y1x2v9ulekw.yml b/sample-app/photoprism/storage/albums/album/aqoe2y1x2v9ulekw.yml new file mode 100755 index 0000000..c089c82 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2y1x2v9ulekw.yml @@ -0,0 +1,10 @@ +UID: aqoe2y1x2v9ulekw +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:06:02Z +UpdatedAt: 2021-02-12T00:06:01.997666242Z +DeletedAt: 2021-02-12T00:06:02.008962725Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2y233f9xc3me.yml b/sample-app/photoprism/storage/albums/album/aqoe2y233f9xc3me.yml new file mode 100755 index 0000000..4b7173d --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2y233f9xc3me.yml @@ -0,0 +1,9 @@ +UID: aqoe2y233f9xc3me +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:06:02Z +UpdatedAt: 2021-02-12T00:06:02Z +DeletedAt: 2021-02-12T00:06:02.061930815Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2y23iah7q8dd.yml b/sample-app/photoprism/storage/albums/album/aqoe2y23iah7q8dd.yml new file mode 100755 index 0000000..3cec9bd --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2y23iah7q8dd.yml @@ -0,0 +1,9 @@ +UID: aqoe2y23iah7q8dd +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:06:02Z +UpdatedAt: 2021-02-12T00:06:02Z +DeletedAt: 2021-02-12T00:06:02.107878556Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe2y23n8shfo26.yml b/sample-app/photoprism/storage/albums/album/aqoe2y23n8shfo26.yml new file mode 100755 index 0000000..47fd047 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe2y23n8shfo26.yml @@ -0,0 +1,9 @@ +UID: aqoe2y23n8shfo26 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:06:02Z +UpdatedAt: 2021-02-12T00:06:02Z +DeletedAt: 2021-02-12T00:06:02.083118581Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe310mqejp7sjx.yml b/sample-app/photoprism/storage/albums/album/aqoe310mqejp7sjx.yml new file mode 100755 index 0000000..ac406d7 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe310mqejp7sjx.yml @@ -0,0 +1,9 @@ +UID: aqoe310mqejp7sjx +Slug: novaalbum +Type: album +Title: NovaAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:07:48Z +UpdatedAt: 2021-02-12T00:07:48Z +DeletedAt: 2021-02-12T00:07:48.087397413Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3di2oe0gj7eb.yml b/sample-app/photoprism/storage/albums/album/aqoe3di2oe0gj7eb.yml new file mode 100755 index 0000000..5fae704 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3di2oe0gj7eb.yml @@ -0,0 +1,10 @@ +UID: aqoe3di2oe0gj7eb +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:15:18Z +UpdatedAt: 2021-02-12T00:15:18.326635885Z +DeletedAt: 2021-02-12T00:15:18.337623732Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3di3f013g098.yml b/sample-app/photoprism/storage/albums/album/aqoe3di3f013g098.yml new file mode 100755 index 0000000..151b4c3 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3di3f013g098.yml @@ -0,0 +1,9 @@ +UID: aqoe3di3f013g098 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:15:18Z +UpdatedAt: 2021-02-12T00:15:18Z +DeletedAt: 2021-02-12T00:15:18.387748516Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3di3rfrp4osq.yml b/sample-app/photoprism/storage/albums/album/aqoe3di3rfrp4osq.yml new file mode 100755 index 0000000..e9aeb7d --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3di3rfrp4osq.yml @@ -0,0 +1,9 @@ +UID: aqoe3di3rfrp4osq +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:15:18Z +UpdatedAt: 2021-02-12T00:15:18Z +DeletedAt: 2021-02-12T00:15:18.417353099Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3di9wl91qjy1.yml b/sample-app/photoprism/storage/albums/album/aqoe3di9wl91qjy1.yml new file mode 100755 index 0000000..8c4ee54 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3di9wl91qjy1.yml @@ -0,0 +1,9 @@ +UID: aqoe3di9wl91qjy1 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:15:18Z +UpdatedAt: 2021-02-12T00:15:18Z +DeletedAt: 2021-02-12T00:15:18.441462643Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3go3alpu9g42.yml b/sample-app/photoprism/storage/albums/album/aqoe3go3alpu9g42.yml new file mode 100755 index 0000000..b951c48 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3go3alpu9g42.yml @@ -0,0 +1,9 @@ +UID: aqoe3go3alpu9g42 +Slug: february-2021-2 +Type: album +Title: February 2021 (2) +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:17:12Z +UpdatedAt: 2021-02-12T00:17:12Z +DeletedAt: 2021-02-12T00:25:55.610343844Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3sj140onsu3u.yml b/sample-app/photoprism/storage/albums/album/aqoe3sj140onsu3u.yml new file mode 100755 index 0000000..bdd5863 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3sj140onsu3u.yml @@ -0,0 +1,9 @@ +UID: aqoe3sj140onsu3u +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:24:20Z +UpdatedAt: 2021-02-12T00:24:20Z +DeletedAt: 2021-02-12T00:24:19.584898324Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3sj2oim76rfl.yml b/sample-app/photoprism/storage/albums/album/aqoe3sj2oim76rfl.yml new file mode 100755 index 0000000..e574a59 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3sj2oim76rfl.yml @@ -0,0 +1,10 @@ +UID: aqoe3sj2oim76rfl +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:24:19Z +UpdatedAt: 2021-02-12T00:24:19.452079212Z +DeletedAt: 2021-02-12T00:24:19.46454459Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3sj3d9vpwfs6.yml b/sample-app/photoprism/storage/albums/album/aqoe3sj3d9vpwfs6.yml new file mode 100755 index 0000000..b498869 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3sj3d9vpwfs6.yml @@ -0,0 +1,9 @@ +UID: aqoe3sj3d9vpwfs6 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:24:19Z +UpdatedAt: 2021-02-12T00:24:19Z +DeletedAt: 2021-02-12T00:24:19.513541437Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3sj5v7uxy0xi.yml b/sample-app/photoprism/storage/albums/album/aqoe3sj5v7uxy0xi.yml new file mode 100755 index 0000000..382e0c6 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3sj5v7uxy0xi.yml @@ -0,0 +1,9 @@ +UID: aqoe3sj5v7uxy0xi +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:24:20Z +UpdatedAt: 2021-02-12T00:24:20Z +DeletedAt: 2021-02-12T00:24:19.539899181Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3uk1ztdf4ly1.yml b/sample-app/photoprism/storage/albums/album/aqoe3uk1ztdf4ly1.yml new file mode 100755 index 0000000..21508a4 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3uk1ztdf4ly1.yml @@ -0,0 +1,10 @@ +UID: aqoe3uk1ztdf4ly1 +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:25:32Z +UpdatedAt: 2021-02-12T00:25:32.382246374Z +DeletedAt: 2021-02-12T00:25:32.39451528Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3uk2ssh3wlmu.yml b/sample-app/photoprism/storage/albums/album/aqoe3uk2ssh3wlmu.yml new file mode 100755 index 0000000..e722392 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3uk2ssh3wlmu.yml @@ -0,0 +1,9 @@ +UID: aqoe3uk2ssh3wlmu +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:25:32Z +UpdatedAt: 2021-02-12T00:25:32Z +DeletedAt: 2021-02-12T00:25:32.501491328Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3uk3quu1oau5.yml b/sample-app/photoprism/storage/albums/album/aqoe3uk3quu1oau5.yml new file mode 100755 index 0000000..2a2f4fa --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3uk3quu1oau5.yml @@ -0,0 +1,9 @@ +UID: aqoe3uk3quu1oau5 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:25:32Z +UpdatedAt: 2021-02-12T00:25:32Z +DeletedAt: 2021-02-12T00:25:32.438255604Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe3ukef6k7pr1n.yml b/sample-app/photoprism/storage/albums/album/aqoe3ukef6k7pr1n.yml new file mode 100755 index 0000000..fa3a728 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe3ukef6k7pr1n.yml @@ -0,0 +1,9 @@ +UID: aqoe3ukef6k7pr1n +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:25:32Z +UpdatedAt: 2021-02-12T00:25:32Z +DeletedAt: 2021-02-12T00:25:32.457679012Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe43017x1x557a.yml b/sample-app/photoprism/storage/albums/album/aqoe43017x1x557a.yml new file mode 100755 index 0000000..3965929 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe43017x1x557a.yml @@ -0,0 +1,10 @@ +UID: aqoe43017x1x557a +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:30:36Z +UpdatedAt: 2021-02-12T00:30:36.452565204Z +DeletedAt: 2021-02-12T00:30:36.466024116Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe43038gpo8o62.yml b/sample-app/photoprism/storage/albums/album/aqoe43038gpo8o62.yml new file mode 100755 index 0000000..1131cbf --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe43038gpo8o62.yml @@ -0,0 +1,9 @@ +UID: aqoe43038gpo8o62 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:30:37Z +UpdatedAt: 2021-02-12T00:30:37Z +DeletedAt: 2021-02-12T00:30:36.541728272Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4303e2k7fowx.yml b/sample-app/photoprism/storage/albums/album/aqoe4303e2k7fowx.yml new file mode 100755 index 0000000..7771c32 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4303e2k7fowx.yml @@ -0,0 +1,9 @@ +UID: aqoe4303e2k7fowx +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:30:36Z +UpdatedAt: 2021-02-12T00:30:36Z +DeletedAt: 2021-02-12T00:30:36.515616836Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe430hjepljox7.yml b/sample-app/photoprism/storage/albums/album/aqoe430hjepljox7.yml new file mode 100755 index 0000000..d306a9e --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe430hjepljox7.yml @@ -0,0 +1,9 @@ +UID: aqoe430hjepljox7 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:30:37Z +UpdatedAt: 2021-02-12T00:30:37Z +DeletedAt: 2021-02-12T00:30:36.590399562Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe46u1y7nllowc.yml b/sample-app/photoprism/storage/albums/album/aqoe46u1y7nllowc.yml new file mode 100755 index 0000000..8f6a7e7 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe46u1y7nllowc.yml @@ -0,0 +1,9 @@ +UID: aqoe46u1y7nllowc +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:32:55Z +UpdatedAt: 2021-02-12T00:32:55Z +DeletedAt: 2021-02-12T00:32:54.670452125Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe46u2eytps9ks.yml b/sample-app/photoprism/storage/albums/album/aqoe46u2eytps9ks.yml new file mode 100755 index 0000000..aaebd41 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe46u2eytps9ks.yml @@ -0,0 +1,10 @@ +UID: aqoe46u2eytps9ks +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:32:55Z +UpdatedAt: 2021-02-12T00:32:54.621067369Z +DeletedAt: 2021-02-12T00:32:54.629069306Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe46ugvoopsx2c.yml b/sample-app/photoprism/storage/albums/album/aqoe46ugvoopsx2c.yml new file mode 100755 index 0000000..2b994d5 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe46ugvoopsx2c.yml @@ -0,0 +1,9 @@ +UID: aqoe46ugvoopsx2c +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:32:55Z +UpdatedAt: 2021-02-12T00:32:55Z +DeletedAt: 2021-02-12T00:32:54.738939626Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe46uh3251f3o5.yml b/sample-app/photoprism/storage/albums/album/aqoe46uh3251f3o5.yml new file mode 100755 index 0000000..ea50447 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe46uh3251f3o5.yml @@ -0,0 +1,9 @@ +UID: aqoe46uh3251f3o5 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:32:55Z +UpdatedAt: 2021-02-12T00:32:55Z +DeletedAt: 2021-02-12T00:32:54.694577526Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4k41ws8kl303.yml b/sample-app/photoprism/storage/albums/album/aqoe4k41ws8kl303.yml new file mode 100755 index 0000000..482b9c0 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4k41ws8kl303.yml @@ -0,0 +1,9 @@ +UID: aqoe4k41ws8kl303 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:40:52Z +UpdatedAt: 2021-02-12T00:40:52Z +DeletedAt: 2021-02-12T00:40:52.236143624Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4k420c8937zq.yml b/sample-app/photoprism/storage/albums/album/aqoe4k420c8937zq.yml new file mode 100755 index 0000000..ca24e66 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4k420c8937zq.yml @@ -0,0 +1,10 @@ +UID: aqoe4k420c8937zq +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:40:52Z +UpdatedAt: 2021-02-12T00:40:52.149620745Z +DeletedAt: 2021-02-12T00:40:52.157633931Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4k423kseyeok.yml b/sample-app/photoprism/storage/albums/album/aqoe4k423kseyeok.yml new file mode 100755 index 0000000..2ed345b --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4k423kseyeok.yml @@ -0,0 +1,9 @@ +UID: aqoe4k423kseyeok +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:40:52Z +UpdatedAt: 2021-02-12T00:40:52Z +DeletedAt: 2021-02-12T00:40:52.205835621Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4k42wb7vdpy4.yml b/sample-app/photoprism/storage/albums/album/aqoe4k42wb7vdpy4.yml new file mode 100755 index 0000000..c8027bb --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4k42wb7vdpy4.yml @@ -0,0 +1,9 @@ +UID: aqoe4k42wb7vdpy4 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:40:52Z +UpdatedAt: 2021-02-12T00:40:52Z +DeletedAt: 2021-02-12T00:40:52.346059642Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4m917yd0x5d8.yml b/sample-app/photoprism/storage/albums/album/aqoe4m917yd0x5d8.yml new file mode 100755 index 0000000..cba3661 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4m917yd0x5d8.yml @@ -0,0 +1,9 @@ +UID: aqoe4m917yd0x5d8 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:42:10Z +UpdatedAt: 2021-02-12T00:42:10Z +DeletedAt: 2021-02-12T00:42:09.739048804Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4m91dd475mc2.yml b/sample-app/photoprism/storage/albums/album/aqoe4m91dd475mc2.yml new file mode 100755 index 0000000..06746cf --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4m91dd475mc2.yml @@ -0,0 +1,10 @@ +UID: aqoe4m91dd475mc2 +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:42:10Z +UpdatedAt: 2021-02-12T00:42:09.68534495Z +DeletedAt: 2021-02-12T00:42:09.697602792Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4m9204aigugh.yml b/sample-app/photoprism/storage/albums/album/aqoe4m9204aigugh.yml new file mode 100755 index 0000000..0ca2805 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4m9204aigugh.yml @@ -0,0 +1,9 @@ +UID: aqoe4m9204aigugh +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:42:10Z +UpdatedAt: 2021-02-12T00:42:10Z +DeletedAt: 2021-02-12T01:19:49.19521169Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe4m93kl5118yf.yml b/sample-app/photoprism/storage/albums/album/aqoe4m93kl5118yf.yml new file mode 100755 index 0000000..095790a --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe4m93kl5118yf.yml @@ -0,0 +1,9 @@ +UID: aqoe4m93kl5118yf +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T00:42:10Z +UpdatedAt: 2021-02-12T00:42:10Z +DeletedAt: 2021-02-12T00:42:09.764632667Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5s018umhsg2z.yml b/sample-app/photoprism/storage/albums/album/aqoe5s018umhsg2z.yml new file mode 100755 index 0000000..cc913ac --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5s018umhsg2z.yml @@ -0,0 +1,9 @@ +UID: aqoe5s018umhsg2z +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:07:12Z +UpdatedAt: 2021-02-12T01:07:12Z +DeletedAt: 2021-02-12T01:07:12.278795475Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5s02eypzy49n.yml b/sample-app/photoprism/storage/albums/album/aqoe5s02eypzy49n.yml new file mode 100755 index 0000000..d893c08 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5s02eypzy49n.yml @@ -0,0 +1,10 @@ +UID: aqoe5s02eypzy49n +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:07:12Z +UpdatedAt: 2021-02-12T01:07:12.18606883Z +DeletedAt: 2021-02-12T01:07:12.20368425Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5s02htbyx02a.yml b/sample-app/photoprism/storage/albums/album/aqoe5s02htbyx02a.yml new file mode 100755 index 0000000..cbd2170 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5s02htbyx02a.yml @@ -0,0 +1,9 @@ +UID: aqoe5s02htbyx02a +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:07:12Z +UpdatedAt: 2021-02-12T01:07:12Z +DeletedAt: 2021-02-12T01:07:12.25672608Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5s0kcesnf038.yml b/sample-app/photoprism/storage/albums/album/aqoe5s0kcesnf038.yml new file mode 100755 index 0000000..b90e8c2 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5s0kcesnf038.yml @@ -0,0 +1,9 @@ +UID: aqoe5s0kcesnf038 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:07:12Z +UpdatedAt: 2021-02-12T01:07:12Z +DeletedAt: 2021-02-12T01:07:12.311501625Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5um2nxaam1jf.yml b/sample-app/photoprism/storage/albums/album/aqoe5um2nxaam1jf.yml new file mode 100755 index 0000000..204b405 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5um2nxaam1jf.yml @@ -0,0 +1,9 @@ +UID: aqoe5um2nxaam1jf +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:08:46Z +UpdatedAt: 2021-02-12T01:08:46Z +DeletedAt: 2021-02-12T01:08:46.441203314Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5um3k2bjzdz3.yml b/sample-app/photoprism/storage/albums/album/aqoe5um3k2bjzdz3.yml new file mode 100755 index 0000000..054a095 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5um3k2bjzdz3.yml @@ -0,0 +1,10 @@ +UID: aqoe5um3k2bjzdz3 +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:08:46Z +UpdatedAt: 2021-02-12T01:08:46.349964437Z +DeletedAt: 2021-02-12T01:08:46.364581421Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5umo46cx9up1.yml b/sample-app/photoprism/storage/albums/album/aqoe5umo46cx9up1.yml new file mode 100755 index 0000000..243b858 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5umo46cx9up1.yml @@ -0,0 +1,9 @@ +UID: aqoe5umo46cx9up1 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:08:46Z +UpdatedAt: 2021-02-12T01:08:46Z +DeletedAt: 2021-02-12T01:08:46.414981534Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5zd1dhchzyrt.yml b/sample-app/photoprism/storage/albums/album/aqoe5zd1dhchzyrt.yml new file mode 100755 index 0000000..e8425a0 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5zd1dhchzyrt.yml @@ -0,0 +1,9 @@ +UID: aqoe5zd1dhchzyrt +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:11:37Z +UpdatedAt: 2021-02-12T01:11:37Z +DeletedAt: 2021-02-12T01:11:37.410053582Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5zd1n8nyjezg.yml b/sample-app/photoprism/storage/albums/album/aqoe5zd1n8nyjezg.yml new file mode 100755 index 0000000..028d501 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5zd1n8nyjezg.yml @@ -0,0 +1,10 @@ +UID: aqoe5zd1n8nyjezg +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:11:37Z +UpdatedAt: 2021-02-12T01:11:37.317189151Z +DeletedAt: 2021-02-12T01:11:37.337078186Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe5zdgv8bbtzbn.yml b/sample-app/photoprism/storage/albums/album/aqoe5zdgv8bbtzbn.yml new file mode 100755 index 0000000..ecb3fc6 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe5zdgv8bbtzbn.yml @@ -0,0 +1,9 @@ +UID: aqoe5zdgv8bbtzbn +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:11:37Z +UpdatedAt: 2021-02-12T01:11:37Z +DeletedAt: 2021-02-12T01:11:37.38408389Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe63g15cp92acg.yml b/sample-app/photoprism/storage/albums/album/aqoe63g15cp92acg.yml new file mode 100755 index 0000000..5131335 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe63g15cp92acg.yml @@ -0,0 +1,10 @@ +UID: aqoe63g15cp92acg +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:14:05Z +UpdatedAt: 2021-02-12T01:14:04.617839652Z +DeletedAt: 2021-02-12T01:14:04.630483844Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe63g1hvf4c37t.yml b/sample-app/photoprism/storage/albums/album/aqoe63g1hvf4c37t.yml new file mode 100755 index 0000000..2c95386 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe63g1hvf4c37t.yml @@ -0,0 +1,9 @@ +UID: aqoe63g1hvf4c37t +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:14:05Z +UpdatedAt: 2021-02-12T01:14:05Z +DeletedAt: 2021-02-12T01:14:04.683342935Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe63g1wp37dwns.yml b/sample-app/photoprism/storage/albums/album/aqoe63g1wp37dwns.yml new file mode 100755 index 0000000..e6809cc --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe63g1wp37dwns.yml @@ -0,0 +1,9 @@ +UID: aqoe63g1wp37dwns +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:14:05Z +UpdatedAt: 2021-02-12T01:14:05Z +DeletedAt: 2021-02-12T01:14:04.720807005Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe66r266y7x2ct.yml b/sample-app/photoprism/storage/albums/album/aqoe66r266y7x2ct.yml new file mode 100755 index 0000000..19ee1c5 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe66r266y7x2ct.yml @@ -0,0 +1,10 @@ +UID: aqoe66r266y7x2ct +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:16:03Z +UpdatedAt: 2021-02-12T01:16:03.089952155Z +DeletedAt: 2021-02-12T01:16:03.103617951Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe66r304v81itt.yml b/sample-app/photoprism/storage/albums/album/aqoe66r304v81itt.yml new file mode 100755 index 0000000..06fa6e8 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe66r304v81itt.yml @@ -0,0 +1,9 @@ +UID: aqoe66r304v81itt +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:16:03Z +UpdatedAt: 2021-02-12T01:16:03Z +DeletedAt: 2021-02-12T01:16:03.147574525Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe66r3bjgymp2o.yml b/sample-app/photoprism/storage/albums/album/aqoe66r3bjgymp2o.yml new file mode 100755 index 0000000..62c54ec --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe66r3bjgymp2o.yml @@ -0,0 +1,9 @@ +UID: aqoe66r3bjgymp2o +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:16:03Z +UpdatedAt: 2021-02-12T01:16:03Z +DeletedAt: 2021-02-12T01:16:03.168746489Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe68w1gxzard2c.yml b/sample-app/photoprism/storage/albums/album/aqoe68w1gxzard2c.yml new file mode 100755 index 0000000..d2b8cca --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe68w1gxzard2c.yml @@ -0,0 +1,9 @@ +UID: aqoe68w1gxzard2c +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:17:21Z +UpdatedAt: 2021-02-12T01:17:21Z +DeletedAt: 2021-02-12T01:17:20.582731838Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe68w1lzpyk5zg.yml b/sample-app/photoprism/storage/albums/album/aqoe68w1lzpyk5zg.yml new file mode 100755 index 0000000..b2f5ef0 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe68w1lzpyk5zg.yml @@ -0,0 +1,9 @@ +UID: aqoe68w1lzpyk5zg +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:17:21Z +UpdatedAt: 2021-02-12T01:17:21Z +DeletedAt: 2021-02-12T01:17:20.549276966Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe68w245je8zni.yml b/sample-app/photoprism/storage/albums/album/aqoe68w245je8zni.yml new file mode 100755 index 0000000..928842c --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe68w245je8zni.yml @@ -0,0 +1,9 @@ +UID: aqoe68w245je8zni +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:17:21Z +UpdatedAt: 2021-02-12T01:17:21Z +DeletedAt: 2021-02-12T01:17:20.626364883Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe68wxhb91hvje.yml b/sample-app/photoprism/storage/albums/album/aqoe68wxhb91hvje.yml new file mode 100755 index 0000000..87bbfac --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe68wxhb91hvje.yml @@ -0,0 +1,10 @@ +UID: aqoe68wxhb91hvje +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:17:20Z +UpdatedAt: 2021-02-12T01:17:20.480072684Z +DeletedAt: 2021-02-12T01:17:20.493622671Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe6k91z2qayg4w.yml b/sample-app/photoprism/storage/albums/album/aqoe6k91z2qayg4w.yml new file mode 100755 index 0000000..0eceb8d --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe6k91z2qayg4w.yml @@ -0,0 +1,9 @@ +UID: aqoe6k91z2qayg4w +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:24:10Z +UpdatedAt: 2021-02-12T01:24:10Z +DeletedAt: 2021-02-12T01:24:09.719043974Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe6k922s2v6yp1.yml b/sample-app/photoprism/storage/albums/album/aqoe6k922s2v6yp1.yml new file mode 100755 index 0000000..caecb9e --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe6k922s2v6yp1.yml @@ -0,0 +1,9 @@ +UID: aqoe6k922s2v6yp1 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:24:10Z +UpdatedAt: 2021-02-12T01:24:10Z +DeletedAt: 2021-02-12T01:24:09.794949796Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe6k93d879bjgg.yml b/sample-app/photoprism/storage/albums/album/aqoe6k93d879bjgg.yml new file mode 100755 index 0000000..d3f8c16 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe6k93d879bjgg.yml @@ -0,0 +1,10 @@ +UID: aqoe6k93d879bjgg +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:24:10Z +UpdatedAt: 2021-02-12T01:24:09.652930019Z +DeletedAt: 2021-02-12T01:24:09.664933038Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe6k9k0kkmx79g.yml b/sample-app/photoprism/storage/albums/album/aqoe6k9k0kkmx79g.yml new file mode 100755 index 0000000..0d545ac --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe6k9k0kkmx79g.yml @@ -0,0 +1,9 @@ +UID: aqoe6k9k0kkmx79g +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T01:24:10Z +UpdatedAt: 2021-02-12T01:24:10Z +DeletedAt: 2021-02-12T01:24:09.744169818Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe8ez1jjge2mq2.yml b/sample-app/photoprism/storage/albums/album/aqoe8ez1jjge2mq2.yml new file mode 100755 index 0000000..73d7b21 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe8ez1jjge2mq2.yml @@ -0,0 +1,9 @@ +UID: aqoe8ez1jjge2mq2 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T02:04:11Z +UpdatedAt: 2021-02-12T02:04:11Z +DeletedAt: 2021-02-12T02:04:11.32572869Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe8ez2htvawjx6.yml b/sample-app/photoprism/storage/albums/album/aqoe8ez2htvawjx6.yml new file mode 100755 index 0000000..e28c8d6 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe8ez2htvawjx6.yml @@ -0,0 +1,9 @@ +UID: aqoe8ez2htvawjx6 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T02:04:11Z +UpdatedAt: 2021-02-12T02:04:11Z +DeletedAt: 2021-02-12T02:04:11.277362825Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe8ez3kaiy71vi.yml b/sample-app/photoprism/storage/albums/album/aqoe8ez3kaiy71vi.yml new file mode 100755 index 0000000..678f6c8 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe8ez3kaiy71vi.yml @@ -0,0 +1,10 @@ +UID: aqoe8ez3kaiy71vi +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-12T02:04:11Z +UpdatedAt: 2021-02-12T02:04:11.178898158Z +DeletedAt: 2021-02-12T02:04:11.190112861Z diff --git a/sample-app/photoprism/storage/albums/album/aqoe8ez3vp0ubysv.yml b/sample-app/photoprism/storage/albums/album/aqoe8ez3vp0ubysv.yml new file mode 100755 index 0000000..ffeed16 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqoe8ez3vp0ubysv.yml @@ -0,0 +1,9 @@ +UID: aqoe8ez3vp0ubysv +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-12T02:04:11Z +UpdatedAt: 2021-02-12T02:04:11Z +DeletedAt: 2021-02-12T02:04:11.250601775Z diff --git a/sample-app/photoprism/storage/albums/album/aqohke71tumtrylv.yml b/sample-app/photoprism/storage/albums/album/aqohke71tumtrylv.yml new file mode 100755 index 0000000..32a1cef --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohke71tumtrylv.yml @@ -0,0 +1,9 @@ +UID: aqohke71tumtrylv +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:15:43Z +UpdatedAt: 2021-02-13T21:15:43Z +DeletedAt: 2021-02-13T21:15:43.345731557Z diff --git a/sample-app/photoprism/storage/albums/album/aqohke73547dz1jo.yml b/sample-app/photoprism/storage/albums/album/aqohke73547dz1jo.yml new file mode 100755 index 0000000..dc2f8c3 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohke73547dz1jo.yml @@ -0,0 +1,9 @@ +UID: aqohke73547dz1jo +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:15:43Z +UpdatedAt: 2021-02-13T21:15:43Z +DeletedAt: 2021-02-13T21:15:43.381992763Z diff --git a/sample-app/photoprism/storage/albums/album/aqohke7d7mas6jk2.yml b/sample-app/photoprism/storage/albums/album/aqohke7d7mas6jk2.yml new file mode 100755 index 0000000..4916ff9 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohke7d7mas6jk2.yml @@ -0,0 +1,9 @@ +UID: aqohke7d7mas6jk2 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:15:43Z +UpdatedAt: 2021-02-13T21:15:43Z +DeletedAt: 2021-02-13T21:15:43.317866775Z diff --git a/sample-app/photoprism/storage/albums/album/aqohke7f4o6p2sce.yml b/sample-app/photoprism/storage/albums/album/aqohke7f4o6p2sce.yml new file mode 100755 index 0000000..fea166d --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohke7f4o6p2sce.yml @@ -0,0 +1,10 @@ +UID: aqohke7f4o6p2sce +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:15:43Z +UpdatedAt: 2021-02-13T21:15:43.255151603Z +DeletedAt: 2021-02-13T21:15:43.264952616Z diff --git a/sample-app/photoprism/storage/albums/album/aqohkhe1xjcaqsrd.yml b/sample-app/photoprism/storage/albums/album/aqohkhe1xjcaqsrd.yml new file mode 100755 index 0000000..bb34e0d --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohkhe1xjcaqsrd.yml @@ -0,0 +1,10 @@ +UID: aqohkhe1xjcaqsrd +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:17:39Z +UpdatedAt: 2021-02-13T21:17:38.841222158Z +DeletedAt: 2021-02-13T21:17:38.853503411Z diff --git a/sample-app/photoprism/storage/albums/album/aqohkhe26dqinc9j.yml b/sample-app/photoprism/storage/albums/album/aqohkhe26dqinc9j.yml new file mode 100755 index 0000000..0189643 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohkhe26dqinc9j.yml @@ -0,0 +1,9 @@ +UID: aqohkhe26dqinc9j +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:17:39Z +UpdatedAt: 2021-02-13T21:17:39Z +DeletedAt: 2021-02-13T21:17:38.900597291Z diff --git a/sample-app/photoprism/storage/albums/album/aqohkhe2oipmff1k.yml b/sample-app/photoprism/storage/albums/album/aqohkhe2oipmff1k.yml new file mode 100755 index 0000000..2c43d4a --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohkhe2oipmff1k.yml @@ -0,0 +1,9 @@ +UID: aqohkhe2oipmff1k +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:17:39Z +UpdatedAt: 2021-02-13T21:17:39Z +DeletedAt: 2021-02-13T21:17:38.934138694Z diff --git a/sample-app/photoprism/storage/albums/album/aqohkhe2r37lk7iu.yml b/sample-app/photoprism/storage/albums/album/aqohkhe2r37lk7iu.yml new file mode 100755 index 0000000..29715ed --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohkhe2r37lk7iu.yml @@ -0,0 +1,9 @@ +UID: aqohkhe2r37lk7iu +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:17:39Z +UpdatedAt: 2021-02-13T21:17:39Z +DeletedAt: 2021-02-13T21:17:38.968679721Z diff --git a/sample-app/photoprism/storage/albums/album/aqohkx21cwlrrs71.yml b/sample-app/photoprism/storage/albums/album/aqohkx21cwlrrs71.yml new file mode 100755 index 0000000..019e883 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohkx21cwlrrs71.yml @@ -0,0 +1,9 @@ +UID: aqohkx21cwlrrs71 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:27:02Z +UpdatedAt: 2021-02-13T21:27:02Z +DeletedAt: 2021-02-13T21:27:02.438478307Z diff --git a/sample-app/photoprism/storage/albums/album/aqohkx21dyhq6xa6.yml b/sample-app/photoprism/storage/albums/album/aqohkx21dyhq6xa6.yml new file mode 100755 index 0000000..7d198f3 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohkx21dyhq6xa6.yml @@ -0,0 +1,9 @@ +UID: aqohkx21dyhq6xa6 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:27:02Z +UpdatedAt: 2021-02-13T21:27:02Z +DeletedAt: 2021-02-13T21:27:02.460875532Z diff --git a/sample-app/photoprism/storage/albums/album/aqohkx21j9rj6w4f.yml b/sample-app/photoprism/storage/albums/album/aqohkx21j9rj6w4f.yml new file mode 100755 index 0000000..34335b3 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohkx21j9rj6w4f.yml @@ -0,0 +1,9 @@ +UID: aqohkx21j9rj6w4f +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:27:02Z +UpdatedAt: 2021-02-13T21:27:02Z +DeletedAt: 2021-02-13T21:27:02.505591441Z diff --git a/sample-app/photoprism/storage/albums/album/aqohkx22im2tmqpd.yml b/sample-app/photoprism/storage/albums/album/aqohkx22im2tmqpd.yml new file mode 100755 index 0000000..192715f --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohkx22im2tmqpd.yml @@ -0,0 +1,10 @@ +UID: aqohkx22im2tmqpd +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:27:02Z +UpdatedAt: 2021-02-13T21:27:02.386442236Z +DeletedAt: 2021-02-13T21:27:02.395711612Z diff --git a/sample-app/photoprism/storage/albums/album/aqohl0w1s0skc6f0.yml b/sample-app/photoprism/storage/albums/album/aqohl0w1s0skc6f0.yml new file mode 100755 index 0000000..629408e --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohl0w1s0skc6f0.yml @@ -0,0 +1,9 @@ +UID: aqohl0w1s0skc6f0 +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:29:21Z +UpdatedAt: 2021-02-13T21:29:21Z +DeletedAt: 2021-02-13T21:29:20.538356219Z diff --git a/sample-app/photoprism/storage/albums/album/aqohl0w2dwab02xe.yml b/sample-app/photoprism/storage/albums/album/aqohl0w2dwab02xe.yml new file mode 100755 index 0000000..41a1a9f --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohl0w2dwab02xe.yml @@ -0,0 +1,9 @@ +UID: aqohl0w2dwab02xe +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:29:20Z +UpdatedAt: 2021-02-13T21:29:20Z +DeletedAt: 2021-02-13T21:29:20.486868765Z diff --git a/sample-app/photoprism/storage/albums/album/aqohl0w2xt57x1cb.yml b/sample-app/photoprism/storage/albums/album/aqohl0w2xt57x1cb.yml new file mode 100755 index 0000000..885ea41 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohl0w2xt57x1cb.yml @@ -0,0 +1,10 @@ +UID: aqohl0w2xt57x1cb +Slug: testalbum +Type: album +Title: TestAlbum +Description: An updated album description +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:29:20Z +UpdatedAt: 2021-02-13T21:29:20.397458176Z +DeletedAt: 2021-02-13T21:29:20.415107277Z diff --git a/sample-app/photoprism/storage/albums/album/aqohl0wdspiitn0a.yml b/sample-app/photoprism/storage/albums/album/aqohl0wdspiitn0a.yml new file mode 100755 index 0000000..78ae437 --- /dev/null +++ b/sample-app/photoprism/storage/albums/album/aqohl0wdspiitn0a.yml @@ -0,0 +1,9 @@ +UID: aqohl0wdspiitn0a +Slug: testalbum +Type: album +Title: TestAlbum +Order: oldest +Country: zz +CreatedAt: 2021-02-13T21:29:20Z +UpdatedAt: 2021-02-13T21:29:20Z +DeletedAt: 2021-02-13T21:29:20.461857977Z diff --git a/sample-app/photoprism/storage/albums/folder/aqnzigj1x4er0ld0.yml b/sample-app/photoprism/storage/albums/folder/aqnzigj1x4er0ld0.yml new file mode 100755 index 0000000..48c83d3 --- /dev/null +++ b/sample-app/photoprism/storage/albums/folder/aqnzigj1x4er0ld0.yml @@ -0,0 +1,12 @@ +UID: aqnzigj1x4er0ld0 +Slug: 2021-02 +Type: folder +Title: February 2021 +Filter: path:2021/02 public:true +Order: added +Country: zz +Year: 2021 +Month: 2 +Day: 1 +CreatedAt: 2021-02-04T03:17:07Z +UpdatedAt: 2021-02-04T03:17:07Z diff --git a/sample-app/photoprism/storage/albums/folder/aqnzigu3qbx4y34d.yml b/sample-app/photoprism/storage/albums/folder/aqnzigu3qbx4y34d.yml new file mode 100755 index 0000000..5f2d5ed --- /dev/null +++ b/sample-app/photoprism/storage/albums/folder/aqnzigu3qbx4y34d.yml @@ -0,0 +1,11 @@ +UID: aqnzigu3qbx4y34d +Slug: "2021" +Type: folder +Title: "2021" +Filter: path:2021 public:true +Order: added +Country: zz +Year: 2021 +Month: 2 +CreatedAt: 2021-02-04T03:17:19Z +UpdatedAt: 2021-02-04T03:17:19Z diff --git a/sample-app/photoprism/storage/cache/json/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_exiftool.json b/sample-app/photoprism/storage/cache/json/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_exiftool.json new file mode 100755 index 0000000..bd88b4f --- /dev/null +++ b/sample-app/photoprism/storage/cache/json/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_exiftool.json @@ -0,0 +1,28 @@ +[{ + "SourceFile": "/photoprism/import/upload/1612408626903/IMG_3044.jpg", + "ExifToolVersion": 11.88, + "FileName": "IMG_3044.jpg", + "Directory": "/photoprism/import/upload/1612408626903", + "FileSize": "114 kB", + "FileModifyDate": "2021:02:04 03:17:06+00:00", + "FileAccessDate": "2021:02:04 03:17:06+00:00", + "FileInodeChangeDate": "2021:02:04 03:17:06+00:00", + "FilePermissions": "rw-r--r--", + "FileType": "JPEG", + "FileTypeExtension": "jpg", + "MIMEType": "image/jpeg", + "JFIFVersion": 1.01, + "ResolutionUnit": "None", + "XResolution": 1, + "YResolution": 1, + "ExifByteOrder": "Little-endian (Intel, II)", + "Software": "Google", + "ImageWidth": 520, + "ImageHeight": 924, + "EncodingProcess": "Baseline DCT, Huffman coding", + "BitsPerSample": 8, + "ColorComponents": 3, + "YCbCrSubSampling": "YCbCr4:2:0 (2 2)", + "ImageSize": "520x924", + "Megapixels": 0.480 +}] diff --git a/sample-app/photoprism/storage/cache/json/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_exiftool.json b/sample-app/photoprism/storage/cache/json/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_exiftool.json new file mode 100755 index 0000000..e7ce4da --- /dev/null +++ b/sample-app/photoprism/storage/cache/json/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_exiftool.json @@ -0,0 +1,26 @@ +[{ + "SourceFile": "/photoprism/import/upload/1612408626903/EpTcef3VoAEiaS4.jpeg", + "ExifToolVersion": 11.88, + "FileName": "EpTcef3VoAEiaS4.jpeg", + "Directory": "/photoprism/import/upload/1612408626903", + "FileSize": "592 kB", + "FileModifyDate": "2021:02:04 03:17:06+00:00", + "FileAccessDate": "2021:02:04 03:17:06+00:00", + "FileInodeChangeDate": "2021:02:04 03:17:06+00:00", + "FilePermissions": "rw-r--r--", + "FileType": "JPEG", + "FileTypeExtension": "jpg", + "MIMEType": "image/jpeg", + "JFIFVersion": 1.01, + "ResolutionUnit": "None", + "XResolution": 72, + "YResolution": 72, + "ImageWidth": 1536, + "ImageHeight": 2048, + "EncodingProcess": "Progressive DCT, Huffman coding", + "BitsPerSample": 8, + "ColorComponents": 3, + "YCbCrSubSampling": "YCbCr4:2:0 (2 2)", + "ImageSize": "1536x2048", + "Megapixels": 3.1 +}] diff --git a/sample-app/photoprism/storage/cache/json/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_exiftool.json b/sample-app/photoprism/storage/cache/json/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_exiftool.json new file mode 100755 index 0000000..668b2b2 --- /dev/null +++ b/sample-app/photoprism/storage/cache/json/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_exiftool.json @@ -0,0 +1,26 @@ +[{ + "SourceFile": "/photoprism/import/upload/1612408626903/ElgexEiU8AA-pQO.jpeg", + "ExifToolVersion": 11.88, + "FileName": "ElgexEiU8AA-pQO.jpeg", + "Directory": "/photoprism/import/upload/1612408626903", + "FileSize": "380 kB", + "FileModifyDate": "2021:02:04 03:17:06+00:00", + "FileAccessDate": "2021:02:04 03:17:06+00:00", + "FileInodeChangeDate": "2021:02:04 03:17:06+00:00", + "FilePermissions": "rw-r--r--", + "FileType": "JPEG", + "FileTypeExtension": "jpg", + "MIMEType": "image/jpeg", + "JFIFVersion": 1.01, + "ResolutionUnit": "None", + "XResolution": 72, + "YResolution": 72, + "ImageWidth": 1152, + "ImageHeight": 2048, + "EncodingProcess": "Progressive DCT, Huffman coding", + "BitsPerSample": 8, + "ColorComponents": 3, + "YCbCrSubSampling": "YCbCr4:2:0 (2 2)", + "ImageSize": "1152x2048", + "Megapixels": 2.4 +}] diff --git a/sample-app/photoprism/storage/cache/json/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_exiftool.json b/sample-app/photoprism/storage/cache/json/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_exiftool.json new file mode 100755 index 0000000..9995582 --- /dev/null +++ b/sample-app/photoprism/storage/cache/json/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_exiftool.json @@ -0,0 +1,30 @@ +[{ + "SourceFile": "/photoprism/import/upload/1612408626903/NVA05562.JPG", + "ExifToolVersion": 11.88, + "FileName": "NVA05562.JPG", + "Directory": "/photoprism/import/upload/1612408626903", + "FileSize": "134 kB", + "FileModifyDate": "2021:02:04 03:17:06+00:00", + "FileAccessDate": "2021:02:04 03:17:06+00:00", + "FileInodeChangeDate": "2021:02:04 03:17:06+00:00", + "FilePermissions": "rw-r--r--", + "FileType": "JPEG", + "FileTypeExtension": "jpg", + "MIMEType": "image/jpeg", + "JFIFVersion": 1.01, + "ResolutionUnit": "None", + "XResolution": 1, + "YResolution": 1, + "ExifByteOrder": "Little-endian (Intel, II)", + "Software": "Google", + "ExifVersion": "0220", + "UserComment": "", + "ImageWidth": 1664, + "ImageHeight": 936, + "EncodingProcess": "Baseline DCT, Huffman coding", + "BitsPerSample": 8, + "ColorComponents": 3, + "YCbCrSubSampling": "YCbCr4:2:0 (2 2)", + "ImageSize": "1664x936", + "Megapixels": 1.6 +}] diff --git a/sample-app/photoprism/storage/cache/sessions.json b/sample-app/photoprism/storage/cache/sessions.json new file mode 100644 index 0000000..a204d40 --- /dev/null +++ b/sample-app/photoprism/storage/cache/sessions.json @@ -0,0 +1,892 @@ +{ + "00ded6d09258e5bc8295d378b699fba2ee71540d62134bb3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613676254325991710 + }, + "029567a062c5b7e34cac36f0f7da66a7bfa8ee23fb0a9456": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613511488829185806 + }, + "032e5cd79a2c2e2622b27f167a98a9c92e44fc15c1aefb54": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613514526199122543 + }, + "067f48002c3eb80ae747d7aae13811cc5f86de5b786eff52": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613675155095051774 + }, + "07c2bbcb1df220261ea59e51cb729aa36a792270cbb1d2e6": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613694636430173234 + }, + "0957017ab9576154468a8a0df5fd74798be6965b3f5eef90": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613523028656083744 + }, + "0b41fe7fdd8394795d0fd77aa68f1761178a50abeec9c368": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613694332360000052 + }, + "0bab87ab1e73344a73e4693465cfa7cd20bc3a448c11db72": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613691100770470924 + }, + "0bc03c7776136e860865c7cd2c30d6678e896805d0e0bba8": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613527737294727784 + }, + "0bf52bb31c11c5ca6c56646496b184eb39f33b004a46b203": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613511715216255731 + }, + "0da5bca9e57bbaa0d197ecac76a90a7b15e47a1ec93fec7c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613501612939596202 + }, + "0dc38cde05d9e5740a9e37f2748baddca7c46afd1f838cb4": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613691457078516123 + }, + "0f257f1b73a31dbb0cf7209bfdf46c02094f99da64e21e05": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613684753597482209 + }, + "0f58fcf81fdef7038db70a777b7eef0eee21ec715fdd3eb2": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613511268639958073 + }, + "12b8b7ca5ebe52b071203520353652f21fda9f6e732966ba": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502549045115145 + }, + "136fe308aea8e85f6363ee4660d873eec9cb3095ef9329fb": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502823940492608 + }, + "14387dc41c2f75afa289e88f15f055295e85927dcdc1c2a9": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613693016825633348 + }, + "163e08d6fc94c7c7c07f1af8638fd5db4aa929b0462d5548": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613522078076464014 + }, + "1ba9c019aaf278b159770a919acc5d1583948c1a8de9a5b3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690715601777218 + }, + "1c2319c0a31690d8c0d9c5bb857ce4b94f7bef2e3289ae4a": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613685372068695142 + }, + "1df4c9db0a9092076596fb78727d069689c4b3083372a1fe": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613683482108919987 + }, + "21a2853a53625574889c1b0d653170efaf3ba51489c3da85": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519857033524517 + }, + "22d46e54121f85c332e42948827f7604dc09fb46929796e8": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613695252131862322 + }, + "24227dba42c911f1f3250745252473200d95db38c9006bf6": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613856560374865002 + }, + "2521ed30985fb1991e3d1271cbf6e2b53840d614647361af": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613513903738209742 + }, + "25847336ab7fa37815b6ba9fba455766bb797f81cdb70dc8": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613527778569130528 + }, + "27ecafdd4819a88cc523aa95a0698d353ceb85ac6371cc4e": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613512061416097907 + }, + "28360cf98ae2ecfc4696cf3e057a4df0bb591eb24eb77f25": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613675037559009071 + }, + "2c1925b037218048cae22344ef1073b4bfd4f47a8106ac87": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613515347303158151 + }, + "2cf0991e18a63f088b01b452ea985dbe91612fe0e26f6d84": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613500923020420449 + }, + "2dd6d162775366330abeb66b1e04c4e2baac2dd773c435dc": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613695329661942849 + }, + "2ee26b2287c528af16c9f9102371c71bb6b4235cdfad4c17": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613696833569070827 + }, + "3201e2a3c31f05c72057a8219ef18418d794dd68ebb6da5a": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613500727275894805 + }, + "3413f56c437b01d7761bfc8142cf154f7b8c9cf642303736": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613500755747387098 + }, + "34dd871e663973ef4ae9f00ee7a2a10e264e3d12f60d36db": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613528491291754429 + }, + "35ea7856b7147b81ebe396145fbdabb4fa6ce49b7834f4da": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613686777776704897 + }, + "370c05ea9a50f1e6befe3eba0e59e1a965daaa31da6f028a": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613520870803124902 + }, + "37658c3fdaf681d54dc8a245f7b2e6fc9e1dceebd927ba23": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613676253240643293 + }, + "383cbd715f476ce738e23712a480e3fca123b68f16f2ee69": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613856561720200205 + }, + "3bd19dc60e5a515d2624f0d712db8471f433416935c2a045": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613512395822771302 + }, + "3d8c73dbc3af90fdc4715b4af58d3bfdd8db03db14008b13": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613675004614818639 + }, + "3fac95f9ca118f4e3dfe3fc87a174ef845d608af2a301f31": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613526857034102326 + }, + "40e83ce294fc2dce5fe1e17cee5cf9422a83d85d61a6e6ba": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613686103907054752 + }, + "41a99f15500d1eca9818bc3e0cae7cca319cd6eb2b38bb8d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613512433065437655 + }, + "4344f5002d9ed91b1f75c3d6c82055e9893270ab1c95dd01": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613513662219179033 + }, + "43f0cfcca96a3671d42c3dad5a2feda055c03e95dc4b0ce3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502911243093934 + }, + "441d1ecde9dd3f0b45ac4d5ae289eb65a27e77ce6bc6c952": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519956718633151 + }, + "447da9991224a43c09deb314d41a9f7ff718e1ce75d824cc": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613528419822486762 + }, + "469a249abd7cf70eae9e39abd41c7a311b40d8c1e31f0199": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613509579377741749 + }, + "48d794607621adc21621196a96fe29b631f18d1f15b0e0e3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613685352396869309 + }, + "4b390db50d53378cfd6e3e3b08aa2a02b1df8fdcf1bda5c5": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613683106227931942 + }, + "4ca01d7b57983db5506fbf14a253437f4a4327cc9c416e2f": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697244595185056 + }, + "5013c7649a605d60acdacbb8471c13d13c184207ae632d74": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613693163291656795 + }, + "50d59fc456069245c1fb3862de9faaa06bed34a363347b03": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697363065863348 + }, + "5225f5600acaefec701d3ab1f3cfe2cf4b10ad025f2bf58e": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613512362197250367 + }, + "5233ac815403a62faaa51cea93b3a24c8208cbd7ae996619": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613691455910293847 + }, + "542cf5000fd4adbc7d1b7d6f2919b3d73afcb4620784adb0": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690210163840938 + }, + "54f0731493c76d77c00d186f56ee6adc78e27bebd6b92ff3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613675005710365896 + }, + "55b19c28a5189350d53a979adb17a8335b683d5474a064d1": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613526231902816117 + }, + "589279988dbd4ad774ef7a59392f6bc44f416ff8d34e653e": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502738172098175 + }, + "5973a6f141757700945f48564869ef350bfd0e6c7319aa35": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613527873142005750 + }, + "5a159bc84d1cac8cd025db03de8e1dbf414d6bdefb967885": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502564441892628 + }, + "5c57ac112bc4c8c0e2a6ffd1736ff5e6c28e804022b5c934": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613696927682100180 + }, + "5cddcd34e5e1ec2e4c27731e2f205a25faf5dde9e43974be": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613694333640204990 + }, + "5d748cc67c9c4efec35d910f799113b793a9fc47f9d88bd5": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613686778812288997 + }, + "5e45fef754afe86cd06fdece3654e1d096844e9bb06e656a": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697849631150727 + }, + "5fccb8ed1ac9f5ca4152b071128078b3da8810e88c1d9728": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697364465122850 + }, + "6196c51bd2db97cc8aeaaac53bef1c6400c50774fedc97b5": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613512018478271866 + }, + "674e45bdf14a7b5d6ad2cd21211bebc60930030621c64e1b": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613692798100018887 + }, + "69a5ba6601a0b258d6437ec792376eb0401c31b03b786629": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613689397688309140 + }, + "6b00829c3aa13681213f90fd643a209949649ae88f4eb42f": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519000378880673 + }, + "6fd28f3f6bff7f9542bd20cea0b358cc835cb655370aa961": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502943460686773 + }, + "7481e907c9cae79db11a2c7c4218ef7f6dd5617c417824e4": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613855860314206613 + }, + "7a22f182d99dad428cc639c1c132060a7aaedb2dfdadf260": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613684752546409992 + }, + "7a82ce501006461a4fe1f69fca24f0a4ccdb716b47fe735e": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519264711770335 + }, + "7ad01775ce800f5a065cb187bbdcfe8ff72e81774db5105f": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613526444602833378 + }, + "7bd83ada99d8ef2ddcb389fc9914dc4c9b3bf7596c529b38": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613686726271559883 + }, + "7d381eaaea551483d8d50aa39007d7fc9fdddd3b6a06359d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613513949594487106 + }, + "7f1f06b8c49a3a01e73aebdca48bfdeeaf88ef787d2aee26": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690716677589751 + }, + "800b2a021e4fa6b3caac3c552417ae5d89a6923490f5cab2": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613855744621635920 + }, + "81000ef1dad0e84ef593d3838fb4ccb28a409d60cfaa7ef7": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613685000623682231 + }, + "812e28420b9f150c4469ddfd9b8f42176cdf30eb2bb2aa30": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613691679743858579 + }, + "8173f5cece02b1a41e9bc937bbbbc80960b838d93cef7f2d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613526315102874135 + }, + "8223d8743b700e5c507ff37630f02de3c80dfeb8365b4feb": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613685493224019727 + }, + "82b0a1bdd1ac266855b338513eff6631c000f7187f1e099d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519957592232701 + }, + "84de25dc7ae05b3ecac64025982d1b63fd3886964f2400a5": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697098703845654 + }, + "84f19033c3b06fbfb1493bed3e316a29a2d1c1864fb84b7c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613517781243806242 + }, + "86acf10dff5dfab564a21f7b32c9ec566b4bd36e47eef949": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690562297926322 + }, + "86d5676ec062851e44ab241820311b31efd7ca9b4909952d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697097293896752 + }, + "86e47c8475bbab147dc714ca6ae10b2ea64471d20a74e248": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613510910693289281 + }, + "881c9c31af559947ea4a5cfbcd02f08d9c65a244842ba0fa": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519263888623481 + }, + "88ba10c295a2e1e433d5b846ac5aea7a8fc1b35f90b97992": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613685115509915196 + }, + "88c85b1c7ec632eb070a80bfb5108904551943276989e945": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613855858815200465 + }, + "8b98cdc875e6a849a9ab77ee44abef39bab4311dc7d19493": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613675036520289034 + }, + "8c01731033c100ebab184ac2c6eca0c36ce58a31ecef3857": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613855712406794763 + }, + "8c913bdc6bb46b9bf04573932ec058cf4efdcca6501041f3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613692796708677593 + }, + "8dc3258f4ba5b40648c2917da1a711581f388d88fddfc46c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613513997238837821 + }, + "8df748d6cb902b922dbd7c86dfe1a176ed5ab77d8f6f6397": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613682894304104797 + }, + "8e476122d25b0acc53f7c39d66c41dbd471cb4744f0a649d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690626957554055 + }, + "910c4f6a3943e402e338511b235f43f8728d6f7e18b2c1b3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613501561184983840 + }, + "912737c1f9f4d03fd5c1d742cd7b241086c3810a2c0a63bf": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519074426637459 + }, + "913c078db763f25b4b672b5567a1911f5600bdfe2666282e": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613517780443504679 + }, + "914abb1b046e30bf2f2f91c646d8eab8f2fe74d1ba2bca4d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502766374926483 + }, + "9185bf39909f5d94af059672446e325654f46225100ab6b1": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613500880573233477 + }, + "9220029905f142122fd03387a4d05f8a87f4dd9ac232f2b9": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690625840353698 + }, + "9223b8bc874aa1b1242ecbfc768221a8cd9e888c305700d2": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613516776661303208 + }, + "92f1ec16db743e3a112d6c889834c93e21dd015cba8d8917": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613526336803063121 + }, + "9415a72cc9f5416dae7dea482e44729df6faf81203ea07d4": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613694260717883159 + }, + "961077032ebb89103c4e200be0e7517242cbfd0cbb989afc": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613683429612623757 + }, + "988de1401f8dfe14a3766ea883ac54fa14dfd3149cefff6d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613520871647468457 + }, + "98e5de0d483f3f5d2ae25f8479ae78ae4c4acb77247769ec": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613696926327240659 + }, + "9d382dfa406c01501fc5cc88b025c22d09248834da7e2b8b": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613515573650978919 + }, + "9de096a05ebad4b69de63ebd429069b7f95372c5c9f0952f": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502624809588007 + }, + "9e8c7c0f010bbdf87c0274442c1b35cf98cd4aa521a8a94c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613522128528856443 + }, + "a03f2d8d33fbb447c1c0573735d93632dc2b81e44923f4c1": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613513937752119685 + }, + "a195acf32c21a87fc81c92363ed95faaa01abfc91b481179": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697851138920617 + }, + "a3139951989d33f77e643cf68bdd8e2c7cbb88f344200903": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613518785682114345 + }, + "a55edeeb0ebaeba3f5b9bedf877dc02a71b79743337998ea": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502517447074204 + }, + "a69b726d7a6bfab6bac0435a6673d5c390a732470c910f41": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613856423690963485 + }, + "a83cc511e399c1dab37468d0c64302bf4b68f7e3df5a1e0b": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613527553683560802 + }, + "a93d51e0c61e45954744bb9e567e1a2e3adf66d6f523bfdc": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697245890826574 + }, + "aa9951b3b6533deadac0376a66a51e63ff6b9c306c82f4c8": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613511978587026969 + }, + "ad22f8f82dab51c0c116613cf0c1535bde9afa5b0d6910d9": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613529105851594272 + }, + "aeb3741344eb316aeadb56b74ca8bb6b231ec65813b28a97": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613693018238355548 + }, + "b03c0a0ffd4568804db70522319c1958aed2f46af39d1b5c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613683163586189931 + }, + "b12bcc8e03f51a00b17584596a213e41f3cddb5b4b14a29a": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502660685792657 + }, + "b1fe34099243a851154b4dae23220b31d5f7d846f64570eb": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613700252681272255 + }, + "b50e6818199b7570676580eff73ffa346c4896c9bd9305f0": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613693718301651019 + }, + "b68ba2f95b38fcef5ccb7307406eef6e68b49ec779240e8d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613683356092862862 + }, + "b6edd4e9fe74461c523cbe200db0fec1b482a4519a0fc75c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613693161977188987 + }, + "b796ead30cc71b1a7dc3865f5271f00061a7c81bf7805f5a": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613675188854967428 + }, + "b7effc2db3f4e76c1c89fcd722fafaee3677a78cf4a8a38f": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613691101882965054 + }, + "b964c2f2f93c50c371506e580d133dd3d47d04f5dc7e94f8": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613693719704975163 + }, + "b9a554547ba1cc81f7d42ea5df395a50968294eb9b574d28": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613856422361372143 + }, + "bbdbf96d91d72d87fb819d31d7f175b733164975c1802243": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613700251152122404 + }, + "be6101bcba1fe4f99bc3b1b2f650e659b56d7b29ed028902": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613691678486384988 + }, + "c053cc843cd5a58b6e7e4dfb0b896180734df58c6cf6ca88": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613528519484379600 + }, + "c27771d21e4c9ff2138ce837aa3ec1c17d878ee4ffb1c58d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613689672561735257 + }, + "c3440286c8cf0b619ec0a5883a836115de84752c519f625c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613525841223849602 + }, + "c441f23ff44d11d2f081ca17a69442b088f239589c22ee26": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690209070329699 + }, + "c558cccdd25917056e8b7b72a2a3e5f40215d707a6fac1aa": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613501068844430353 + }, + "c5e9dad483102f3a695c233271be12f3f89129ceaaf8ad21": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613501978437418029 + }, + "c8e57b785e553dc239054cc3dd566013d5b0e172749f6488": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502032233257787 + }, + "ca96e91eb4b29df4126290911525516ff521e1dae19b6544": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613513847101926534 + }, + "ca9f2fe1d2d8a307253b185e073efd437f9f4c9980093f7c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613693268070234462 + }, + "cd761cc3f15466f29eb789f5909bf26757d15661710e778c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690028972954078 + }, + "cf5e23f28813fe367d3e1a5de1fc066b76988cae3d14343d": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613686725223640044 + }, + "d3f79b180ecda15ef16859e1d822e29bb5c801438a8b3ac1": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613675187685124347 + }, + "d5cc9946cfa1d25fe55d42bf32e95d3690c856eaf81b549e": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690972875693176 + }, + "d64186f2514b44277546563171a1ab7109f1fd7016724f0f": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613694259431652776 + }, + "d67b4bf0a826d445959290e5de933409b06a6f593b0c665c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613691068036487540 + }, + "d86c17fdb63eb3ef0665cb91fe3b29e8d823dd04eed50bac": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613502706269686566 + }, + "d8c6abdcb1675cedac502ffecd8b3a1d38d62aaf07d000cd": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613514267386702538 + }, + "da47e471e7e0a996446fc88475ebe001baf4fa0d727a83be": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613690563421338386 + }, + "dcd50767e8b3450a095c535963f521b3b52457d4bdcdb7c6": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613514516062495823 + }, + "dd302423a35c910b5cd65027f2fba9edb7efbf0ee0f81157": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697440458652837 + }, + "e089dfbed493744e24c0cdf9be5f06c81979a17e166d098c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613695253451697577 + }, + "e32e2c906864ae8cd98a474a918c9e1c9cbe64b1acf3e975": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613511459136720858 + }, + "e435fcbb9a19b7f4108d793705366ef9150d368b318787e4": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613689673738164054 + }, + "e8f29a4ea45aff82722b11d21754fc4adcb63d2671545e0c": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613529106728579350 + }, + "e90c5207fefb6712f0a261708de68ca5639dfc60a4dfe6f6": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613526269423740413 + }, + "e98af3258ddfead5fc4ed76278bada0fed9839c111a80b86": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613685151568885713 + }, + "eb57053b27b37cdca1d7829972d0af55f329dad18a7e3c96": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613677531963129666 + }, + "ece6e3ed1d36a43bd26843ee5efa547c662cc23423959316": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519856195963149 + }, + "ee1c3e45cc11af20f614ba75f5510167ac37014b5d8b9515": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613519263054001047 + }, + "ee605667573202ffa29dc053d78ace87675a52ef168d1c91": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613512474632135880 + }, + "eed103dd37ee5347149d459bfb393d682416adceb8da887e": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613697441816718340 + }, + "f27ef3af1a5139eb23ab2d2cd5adb54dd63e147c74f12208": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613522175097030333 + }, + "f448443b75da8fbfd58abbf55b82140e957bd2525827d5f0": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613855743236077584 + }, + "f5495743ebbb224a6d212b84473c2ed92721f113b9c005ff": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613694774594671280 + }, + "f5dd3851137b73d1e039ffa521d0c02e60504aa1f972fe13": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613515512912618531 + }, + "f733dc1a7213485c2d8c78a0839d2d2157d04c108ffd1789": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613525903142014501 + }, + "f9a0201abaa6d9be524db280a664ded3b788753744cac1a3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613694637844188675 + }, + "fac40abbc26627be007290d09f2bf060ddfa60f9b3c31cf3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613696832158347108 + }, + "fcef70746e53856028c122514ee353a7d7ee393f59f9e2e3": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613694775895766029 + }, + "fd6b9df3ddd9716e724a2aeac9d79eac750838c0ff1860c0": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613707997358004286 + }, + "fdbeb275182730c03ee00fc84da57dc080e60fb9d1dc587e": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613682948079600558 + }, + "ff3f257a8a8d59834194117ec388228a6c2c4c799ffee9c6": { + "user": "uqnzie01i1nypnt9", + "tokens": null, + "expiration": 1613526460305916347 + } +} \ No newline at end of file diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_100x100_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_100x100_center.jpg new file mode 100644 index 0000000..449a318 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_100x100_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_1280x1024_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_1280x1024_fit.jpg new file mode 100644 index 0000000..bf49e44 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_1280x1024_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_1920x1200_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_1920x1200_fit.jpg new file mode 100644 index 0000000..bf49e44 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_1920x1200_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_2048x2048_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_2048x2048_fit.jpg new file mode 100644 index 0000000..bf49e44 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_2048x2048_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_center.jpg new file mode 100644 index 0000000..321c752 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_left.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_left.jpg new file mode 100644 index 0000000..18ec70f Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_left.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_right.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_right.jpg new file mode 100644 index 0000000..2ec0c43 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_224x224_right.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_3x3_resize.png b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_3x3_resize.png new file mode 100644 index 0000000..8990bba Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_3x3_resize.png differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_500x500_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_500x500_center.jpg new file mode 100644 index 0000000..29df329 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_500x500_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_50x50_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_50x50_center.jpg new file mode 100644 index 0000000..6b9cb56 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_50x50_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_720x720_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_720x720_fit.jpg new file mode 100644 index 0000000..824c189 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/3/b/0/3b084194e75f1da063ae39669904553a7a701b00_720x720_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_100x100_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_100x100_center.jpg new file mode 100644 index 0000000..a49b7ad Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_100x100_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_1280x1024_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_1280x1024_fit.jpg new file mode 100644 index 0000000..30c6ac2 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_1280x1024_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_1920x1200_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_1920x1200_fit.jpg new file mode 100644 index 0000000..834c5b8 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_1920x1200_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_2048x2048_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_2048x2048_fit.jpg new file mode 100644 index 0000000..596127a Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_2048x2048_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_center.jpg new file mode 100644 index 0000000..722b7a2 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_left.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_left.jpg new file mode 100644 index 0000000..77dbe4c Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_left.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_right.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_right.jpg new file mode 100644 index 0000000..87b410a Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_224x224_right.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_3x3_resize.png b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_3x3_resize.png new file mode 100644 index 0000000..cc1b8cd Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_3x3_resize.png differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_500x500_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_500x500_center.jpg new file mode 100644 index 0000000..8c06b8c Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_500x500_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_50x50_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_50x50_center.jpg new file mode 100644 index 0000000..e237b03 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_50x50_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_720x720_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_720x720_fit.jpg new file mode 100644 index 0000000..0ef73eb Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/9/7/b/97b01540215894bf3a109bb1223ecec14564ecd3_720x720_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_100x100_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_100x100_center.jpg new file mode 100644 index 0000000..5114084 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_100x100_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_1280x1024_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_1280x1024_fit.jpg new file mode 100644 index 0000000..57e2b04 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_1280x1024_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_1920x1200_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_1920x1200_fit.jpg new file mode 100644 index 0000000..fe55a8e Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_1920x1200_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_2048x2048_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_2048x2048_fit.jpg new file mode 100644 index 0000000..6a54ce6 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_2048x2048_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_center.jpg new file mode 100644 index 0000000..1796ffe Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_left.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_left.jpg new file mode 100644 index 0000000..ca02286 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_left.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_right.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_right.jpg new file mode 100644 index 0000000..2415407 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_224x224_right.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_3x3_resize.png b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_3x3_resize.png new file mode 100644 index 0000000..95476d5 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_3x3_resize.png differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_500x500_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_500x500_center.jpg new file mode 100644 index 0000000..aac2877 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_500x500_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_50x50_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_50x50_center.jpg new file mode 100644 index 0000000..905c057 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_50x50_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_720x720_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_720x720_fit.jpg new file mode 100644 index 0000000..bd454ed Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/d/2/2/d22b4efb4dcebab0e8a29ee7333fab31bac66f5f_720x720_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_100x100_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_100x100_center.jpg new file mode 100644 index 0000000..588c5da Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_100x100_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_1280x1024_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_1280x1024_fit.jpg new file mode 100644 index 0000000..a2c8fed Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_1280x1024_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_1920x1200_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_1920x1200_fit.jpg new file mode 100644 index 0000000..6da2d25 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_1920x1200_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_2048x2048_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_2048x2048_fit.jpg new file mode 100644 index 0000000..6da2d25 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_2048x2048_fit.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_center.jpg new file mode 100644 index 0000000..c56f553 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_left.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_left.jpg new file mode 100644 index 0000000..a88c200 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_left.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_right.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_right.jpg new file mode 100644 index 0000000..ec7982a Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_224x224_right.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_3x3_resize.png b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_3x3_resize.png new file mode 100644 index 0000000..a73ae62 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_3x3_resize.png differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_500x500_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_500x500_center.jpg new file mode 100644 index 0000000..fb30870 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_500x500_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_50x50_center.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_50x50_center.jpg new file mode 100644 index 0000000..9b62f93 Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_50x50_center.jpg differ diff --git a/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_720x720_fit.jpg b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_720x720_fit.jpg new file mode 100644 index 0000000..3b57e8e Binary files /dev/null and b/sample-app/photoprism/storage/cache/thumbnails/f/a/a/faaa720ff26ff0e577e0c5ca11eff0efa2ea033b_720x720_fit.jpg differ diff --git a/sample-app/photoprism/storage/config/hub.yml b/sample-app/photoprism/storage/config/hub.yml new file mode 100755 index 0000000..17ecee7 --- /dev/null +++ b/sample-app/photoprism/storage/config/hub.yml @@ -0,0 +1,6 @@ +Key: 11cddc94aa7b4bd8e0a0fb9cd9b26f73682dc182 +Secret: b0f3077d6d0a96e1a9b5f46d6cd9677d +Session: 9be9016f1444e71f653924d94413eee404f913dbdb925fad0d28fd5b40bda689b63bed4005ba1c9cb8ba5f297861690960d6481c831e4ef32c91906aefd7500bb5e3561d480d22fa83278d64ae7503580898cd +Status: unregistered +Version: 210121-07e559df-Linux-x86_64 +Serial: zqnzidyoy2xby5bs diff --git a/sample-app/photoprism/storage/config/settings.yml b/sample-app/photoprism/storage/config/settings.yml new file mode 100755 index 0000000..0e20801 --- /dev/null +++ b/sample-app/photoprism/storage/config/settings.yml @@ -0,0 +1,45 @@ +UI: + Scrollbar: true + Zoom: false + Theme: default + Language: en +Templates: + Default: index.tmpl +Maps: + Animate: 0 + Style: streets +Features: + Upload: true + Download: true + Private: true + Review: true + Files: true + Folders: true + Albums: true + Moments: true + Estimates: true + People: true + Labels: true + Places: true + Edit: true + Archive: true + Delete: false + Share: true + Library: true + Import: true + Logs: true +Import: + Path: / + Move: false +Index: + Path: / + Convert: true + Rescan: true +Stack: + UUID: true + Meta: true + Name: false +Share: + Title: "" +Download: + Name: file diff --git a/sample-app/photoprism/storage/index.db b/sample-app/photoprism/storage/index.db new file mode 100644 index 0000000..5c287af Binary files /dev/null and b/sample-app/photoprism/storage/index.db differ diff --git a/sample-app/photoprism/storage/serial b/sample-app/photoprism/storage/serial new file mode 100755 index 0000000..15227f2 --- /dev/null +++ b/sample-app/photoprism/storage/serial @@ -0,0 +1 @@ +zqnzidyoy2xby5bs \ No newline at end of file diff --git a/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_36A3FD61.yml b/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_36A3FD61.yml new file mode 100755 index 0000000..8b65411 --- /dev/null +++ b/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_36A3FD61.yml @@ -0,0 +1,12 @@ +TakenAt: 2021-02-13T21:07:49Z +UID: pqnzigq3sidxb0j0 +Type: image +Title: Eptcef Voaeias +OriginalName: EpTcef3VoAEiaS4 +Year: -1 +Month: -1 +Day: -1 +Details: + Keywords: black, cat, eptcef, voaeias +CreatedAt: 2021-02-04T03:17:14.849461459Z +UpdatedAt: 2021-02-13T21:15:26.757415543Z diff --git a/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_5B740007.yml b/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_5B740007.yml new file mode 100755 index 0000000..3eb3051 --- /dev/null +++ b/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_5B740007.yml @@ -0,0 +1,17 @@ +TakenAt: 2021-02-13T21:07:49Z +UID: pqnzigq351j2fqgn +Type: image +Title: A really great photo! +TitleSrc: manual +Description: 'Sample App Description: 2021-02-13 13:29:20.603412741 -0800 PST m=+6.504617892' +DescriptionSrc: manual +OriginalName: IMG_3044 +Year: -1 +Month: -1 +Day: -1 +Details: + Keywords: green, tambourine + KeywordsSrc: manual +CreatedAt: 2021-02-04T03:17:14.613092062Z +UpdatedAt: 2021-02-13T21:29:20.611389111Z +EditedAt: 2021-02-13T21:29:21Z diff --git a/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_76642B51.yml b/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_76642B51.yml new file mode 100755 index 0000000..0ecfdb7 --- /dev/null +++ b/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_76642B51.yml @@ -0,0 +1,14 @@ +TakenAt: 2021-02-13T21:07:49Z +UID: pqnzigq156lndozm +Type: image +Title: Test Nova +TitleSrc: manual +OriginalName: ElgexEiU8AA-pQO +Year: -1 +Month: -1 +Day: -1 +Details: + Keywords: blue, elgexeiu, portrait +CreatedAt: 2021-02-04T03:17:14.668332772Z +UpdatedAt: 2021-02-13T21:15:26.714373058Z +EditedAt: 2021-02-09T18:39:46Z diff --git a/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_AE1CC552.yml b/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_AE1CC552.yml new file mode 100755 index 0000000..755ce1d --- /dev/null +++ b/sample-app/photoprism/storage/sidecar/2021/02/20210204_031706_AE1CC552.yml @@ -0,0 +1,12 @@ +TakenAt: 2021-02-13T21:07:49Z +UID: pqnzigq1jb1bibrz +Type: image +Title: Seashore +OriginalName: NVA05562 +Year: -1 +Month: -1 +Day: -1 +Details: + Keywords: grey, seashore +CreatedAt: 2021-02-04T03:17:14.738798274Z +UpdatedAt: 2021-02-13T21:15:26.73725013Z diff --git a/sample-app/plogs b/sample-app/plogs new file mode 100755 index 0000000..ec8f37a --- /dev/null +++ b/sample-app/plogs @@ -0,0 +1,11 @@ +#!/bin/bash +#################################### +##### +### +## +# +# +# Startup Script for the Application +#################################### +docker logs -f --tail 100 photoprism + diff --git a/sample-app/pstart b/sample-app/pstart new file mode 100755 index 0000000..cf7bc72 --- /dev/null +++ b/sample-app/pstart @@ -0,0 +1,19 @@ +#!/bin/bash +#################################### +##### +### +## +# +# +# Startup Script for the Application +#################################### + + +if [ $(docker ps -q -f name=photoprism) ] +then + # Photoprism is running + echo "[SampleApp] is already running..." + exit 1 +fi +echo "Starting [SampleApp]" +docker start photoprism diff --git a/sample-app/pstop b/sample-app/pstop new file mode 100755 index 0000000..5ea4a18 --- /dev/null +++ b/sample-app/pstop @@ -0,0 +1,14 @@ +#!/bin/bash +#################################### +##### +### +## +# +# +# Startup Script for the Application +#################################### +echo "Stopping [SampleApp]" + +docker stop photoprism +#docker rm photoprism + diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..c051da3 --- /dev/null +++ b/test/README.md @@ -0,0 +1,39 @@ +# Local Integration Tests + +To run the tests. + +```bash +sudo -E go test . -v +``` + +### Adding a test + +To add a test please try to have both `Happy` and `Sad` tests defined for all new SDK methods. + +Example test: + +##### mymethod_test.go + +```go + +// TestHappyMethod will test my new method +func TestHappyMethod(t *testing.T) { + params := "my good input" + _, err := Client.V1().Method(params) + if err != nil { + t.Errorf("expected success running method: %v", err) + t.FailNow() + } +} + +// TestSadMethod will false positive test my new method +func TestSadMethod(t *testing.T) { + params := "my bad input" + _, err := Client.V1().Method(params) + if err == nil { + t.Errorf("expected failure running method: %v", err) + t.FailNow() + } +} + +``` diff --git a/test/album_test.go b/test/album_test.go new file mode 100644 index 0000000..5e546e2 --- /dev/null +++ b/test/album_test.go @@ -0,0 +1,269 @@ +package test + +import ( + "testing" + + "github.com/astravexton/photoprism-client-go/api/v1" +) + +func TestHappyGetAlbum(t *testing.T) { + _, err := Client.V1().GetAlbum(WellKnownAlbumID) + if err != nil { + t.Errorf("expected success getting well known album: %v", err) + t.FailNow() + } +} + +func TestSadGetAlbum(t *testing.T) { + album, err := Client.V1().GetAlbum(UnknownAlbumID) + if err != nil { + t.Logf("success returning error for unknown album: %v", err) + return + } + t.Errorf("expected error for unknown album: %d", album.ID) + t.FailNow() +} + +func TestHappyGetAlbumsOptionsCount1(t *testing.T) { + options := api.AlbumOptions{ + Count: 1, + } + albums, err := Client.V1().GetAlbums(&options) + if err != nil { + t.Errorf("expected success listing 1 album: %v", err) + t.FailNow() + } + if len(albums) != 1 { + t.Errorf("expected 1 album length, got: %d", len(albums)) + t.FailNow() + } +} + +func TestHappyGetAlbumsNil(t *testing.T) { + albums, err := Client.V1().GetAlbums(nil) + if err != nil { + t.Errorf("expected success listing albums: %v", err) + t.FailNow() + } + t.Logf("Listed %d albums", len(albums)) +} + +func TestSadGetAlbums(t *testing.T) { + options := api.AlbumOptions{ + Category: UnknownCategory, + } + albums, err := Client.V1().GetAlbums(&options) + if err != nil { + t.Errorf("error listing albums: %v", err) + t.FailNow() + return + } + + // Note: by defualt we return "{}" which counts as 1 album + if len(albums) != 1 { + t.Errorf("Non zero length of albums") + t.FailNow() + } +} + +// TestHappyCreateUpdateDeleteAlbum +func TestHappyCreateUpdateDeleteAlbum(t *testing.T) { + album := api.Album{ + AlbumTitle: WellKnownAlbumTitle, + } + + newAlbum, err := Client.V1().CreateAlbum(album) + if err != nil { + t.Errorf("expected success creating album: %v", err) + t.FailNow() + } + + newAlbum.AlbumDescription = "An updated album description" + newAlbum, err = Client.V1().UpdateAlbum(newAlbum) + if err != nil { + t.Errorf("unable to update test album: %v", err) + // Note: We do NOT FailNow() here because we want to clean up + } + + err = Client.V1().DeleteAlbums([]string{newAlbum.AlbumUID}) + if err != nil { + t.Errorf("expected delete album %s, album not deleted: %v", newAlbum.AlbumUID, err) + t.FailNow() + } + +} + +// TestHappyLikeDislikeAlbum +func TestHappyLikeDislikeAlbum(t *testing.T) { + album := api.Album{ + AlbumTitle: WellKnownAlbumTitle, + } + + newAlbum, err := Client.V1().CreateAlbum(album) + if err != nil { + t.Errorf("expected success creating album: %v", err) + t.FailNow() + } + + err = Client.V1().LikeAlbum(newAlbum.AlbumUID) + if err != nil { + t.Errorf("expected to like album: %v", err) + // Note: We do NOT FailNow() here because we want to clean up + } + + err = Client.V1().DislikeAlbum(newAlbum.AlbumUID) + if err != nil { + t.Errorf("expected to unlike album: %v", err) + // Note: We do NOT FailNow() here because we want to clean up + } + + err = Client.V1().DeleteAlbums([]string{newAlbum.AlbumUID}) + if err != nil { + t.Errorf("expected delete album %s, album not deleted: %v", newAlbum.AlbumUID, err) + t.FailNow() + } +} + +// TestHappyLikeDislikeAlbum +func TestSadLikeDislikeAlbum(t *testing.T) { + err := Client.V1().LikeAlbum(UnknownAlbumID) + if err == nil { + t.Errorf("expected to error during unknown like album: %v", err) + t.FailNow() + } + + err = Client.V1().DislikeAlbum(UnknownAlbumID) + if err == nil { + t.Errorf("expected to error during unknown dislike album: %v", err) + t.FailNow() + } +} + +// CloneAlbums +// TestHappyLikeDislikeAlbum +func TestHappyCloneAlbum(t *testing.T) { + album := api.Album{ + AlbumTitle: WellKnownAlbumTitle, + } + + newAlbum, err := Client.V1().CreateAlbum(album) + if err != nil { + t.Errorf("expected success creating album: %v", err) + t.FailNow() + } + + clonedAlbum, err := Client.V1().CloneAlbum(newAlbum) + if err != nil { + t.Errorf("expected to like album: %v", err) + // Note: We do NOT FailNow() here because we want to clean up + } + + err = Client.V1().DeleteAlbums([]string{newAlbum.AlbumUID, clonedAlbum.AlbumUID}) + if err != nil { + t.Errorf("expected delete album %s, album not deleted: %v", newAlbum.AlbumUID, err) + t.FailNow() + } +} + +// TestSadCloneAlbum +func TestSadCloneAlbum(t *testing.T) { + album := api.Album{ + AlbumUID: UnknownAlbumID, + } + _, err := Client.V1().CloneAlbum(album) + if err == nil { + t.Errorf("expected to error during unknown clone album: %v", err) + t.FailNow() + } +} + +// TestAlbumAddDeletePhoto is a giant integration test +// that will exercise many methods in the SDK +// +// This is the most complete integration test in the suite +// and is the test that will also exercise adding and deleting +// photos from an album +func TestAlbumAddDeletePhoto(t *testing.T) { + album := api.Album{ + AlbumTitle: WellKnownAlbumTitle, + } + + newAlbum, err := Client.V1().CreateAlbum(album) + if err != nil { + t.Errorf("expected success creating album: %v", err) + t.FailNow() + } + + // Add Photos + photos := []string{ + WellKnownPhotoID, + } + err = Client.V1().AddPhotosToAlbum(newAlbum.AlbumUID, photos) + if err != nil { + t.Errorf("expected to add photos to album: %v", err) + // Note: We do NOT FailNow() here because we want to clean up + } + + // Get the photos by album + updatedPhotos, err := Client.V1().GetPhotos(&api.PhotoOptions{ + Count: 100, + AlbumUID: newAlbum.AlbumUID, + }) + if err != nil { + t.Errorf("expecting to list photos by album: %v", err) + // Note: We do NOT FailNow() here because we want to clean up + } + + var updatedPhotoIDs []string + for _, photo := range updatedPhotos { + updatedPhotoIDs = append(updatedPhotoIDs, photo.PhotoUID) + } + if len(updatedPhotos) != 1 { + t.Errorf("expecting 1 well known photo in album, found: %d", len(updatedPhotos)) + } + + err = Client.V1().DeletePhotosFromAlbum(newAlbum.AlbumUID, updatedPhotoIDs) + if err != nil { + t.Errorf("expected to delete newly created photos from album: %v", err) + // Note: We do NOT FailNow() here because we want to clean up + } + + // Get the photos by album + updatedPhotos, err = Client.V1().GetPhotos(&api.PhotoOptions{ + Count: 100, + AlbumUID: newAlbum.AlbumUID, + }) + if err != nil { + t.Errorf("expecting to list photos by album: %v", err) + // Note: We do NOT FailNow() here because we want to clean up + } + + if len(updatedPhotos) != 0 { + t.Errorf("expected empty album, found %d photos", len(updatedPhotos)) + // Note: We do NOT FailNow() here because we want to clean up + } + + err = Client.V1().DeleteAlbums([]string{newAlbum.AlbumUID}) + if err != nil { + t.Errorf("expected delete album %s, album not deleted: %v", newAlbum.AlbumUID, err) + t.FailNow() + } +} + +func TestHappyGetAlbumDownload(t *testing.T) { + // GetAlbumDownload should return a .zip file + bytes, err := Client.V1().GetAlbumDownload(WellKnownAlbumID) + if err != nil { + t.Errorf("expecting album download: %v", err) + t.FailNow() + } + t.Logf("bytes of .zip file downloaded: %db", len(bytes)) +} + +func TestSadGetAlbumDownload(t *testing.T) { + _, err := Client.V1().GetPhotoDownload(UnknownAlbumID) + if err == nil { + t.Errorf("expected failure getting well known album: %v", err) + t.FailNow() + } +} diff --git a/test/index_test.go b/test/index_test.go new file mode 100644 index 0000000..78f9f56 --- /dev/null +++ b/test/index_test.go @@ -0,0 +1,10 @@ +package test + +import "testing" + +func TestHappyIndex(t *testing.T) { + err := Client.V1().Index() + if err != nil { + t.Errorf("failed indexing: %v", err) + } +} diff --git a/test/main_test.go b/test/main_test.go new file mode 100644 index 0000000..e242f3a --- /dev/null +++ b/test/main_test.go @@ -0,0 +1,79 @@ +package test + +import ( + "os" + "strings" + "testing" + + photoprism "github.com/astravexton/photoprism-client-go" + + "github.com/astravexton/logger" + + sampleapp "github.com/astravexton/photoprism-client-go/sample-app" +) + +const ( + WellKnownUser = "admin" + WellKnownPass = "missy" + BadPassword = "charlie" + WellKnownPhotoID = "pqnzigq351j2fqgn" // This is a photo in the persistent sample app + UnknownPhotoID = "1234567890" + WellKnownAlbumID = "aqnzih81icziiyae" + UnknownAlbumID = "1234567890" + WellKnownSampleAppConnectionString = "http://localhost:8080" + UnknownCategory = "Furries" + WellKnownAlbumTitle = "TestAlbum" +) + +// Client is a pre-authenticated client that can be used +// internally to access the SDK +var Client *photoprism.Client + +func TestMain(m *testing.M) { + logger.Level = 4 + app := sampleapp.New() + err := app.Create() + // This System will create a new cluster + // if needed. Otherwise it will log the + // error at the INFO level. + if err != nil { + if !strings.Contains(err.Error(), "The container name \"/photoprism\" is already in use") { + logger.Critical("Unable to create app: %v", err) + os.Exit(1) + } + ///logger.Debug(err.Error()) + } + err = app.Start() + if err == nil { + logger.Always("Stopping Photoprism Sample App for Unit Tests") + defer func() { + err := app.Stop() + if err != nil { + logger.Critical("Failure stopping application: %v", err) + os.Exit(100) + } + logger.Always("Success!") + os.Exit(0) + }() + } else { + logger.Always("Photoprism already running...") + } + + // --- [ Client ] --- + client := photoprism.New(WellKnownSampleAppConnectionString) + err = client.Auth(photoprism.NewClientAuthLogin(WellKnownUser, WellKnownPass)) + if err != nil { + logger.Critical("Error during testing auth: %v", err) + os.Exit(3) + } + Client = client + + // --- [ Tests ] ---- + exitCode := m.Run() + if exitCode != 0 { + logger.Critical("Failure!") + os.Exit(100) + } + // --- [ Tests ] --- + +} diff --git a/test/photo_test.go b/test/photo_test.go new file mode 100644 index 0000000..6c51a6f --- /dev/null +++ b/test/photo_test.go @@ -0,0 +1,102 @@ +package test + +import ( + "fmt" + "path" + "testing" + "time" + + "github.com/astravexton/photoprism-client-go/api/v1" +) + +//TODO Test GetPhotos() + +func TestHappyGetPhotos(t *testing.T) { + _, err := Client.V1().GetPhotos(&api.PhotoOptions{ + Count: 1, + AlbumUID: WellKnownAlbumID, + }) + if err != nil { + t.Errorf("expected success getting well known photo: %v", err) + t.FailNow() + } +} + +func TestHappyGetPhoto(t *testing.T) { + _, err := Client.V1().GetPhoto(WellKnownPhotoID) + if err != nil { + t.Errorf("expected success getting well known photo: %v", err) + t.FailNow() + } +} + +func TestSadGetPhoto(t *testing.T) { + photo, err := Client.V1().GetPhoto(UnknownPhotoID) + if err != nil { + t.Logf("success returning error for unknown photo: %v", err) + return + } + t.Errorf("expected error for unknown photo: %s", photo.UUID) + t.FailNow() +} + +func TestHappyUpdatePhoto(t *testing.T) { + photo, err := Client.V1().GetPhoto(WellKnownPhotoID) + if err != nil { + t.Errorf("error getting well known photo: %v", err) + t.FailNow() + return + } + photo.PhotoDescription = fmt.Sprintf("Sample App Description: %s", time.Now().String()) + _, err = Client.V1().UpdatePhoto(photo) + if err != nil { + t.Errorf("error updating photo: %v", err) + t.FailNow() + return + } +} + +func TestSadUpdatePhoto(t *testing.T) { + photo, err := Client.V1().GetPhoto(WellKnownPhotoID) + if err != nil { + t.Errorf("error getting well known photo: %v", err) + t.FailNow() + return + } + photo.PhotoUID = UnknownPhotoID + photo.PhotoDescription = fmt.Sprintf("Sample App Description: %s", time.Now().String()) + photo, err = Client.V1().UpdatePhoto(photo) + if err != nil { + t.Logf("expecting failure at updating photo unknown photo: %v", err) + return + } + t.Errorf("expecting failure updaitng bad photo id: %s", photo.UUID) + t.FailNow() +} + +func TestHappyGetPhotoDownload(t *testing.T) { + photo, err := Client.V1().GetPhoto(WellKnownPhotoID) + if err != nil { + t.Errorf("error getting well known photo: %v", err) + t.FailNow() + return + } + file, err := Client.V1().GetPhotoDownload(WellKnownPhotoID) + if err != nil { + t.Errorf("expected success getting well known photo: %v", err) + t.FailNow() + } + for _, f := range photo.Files { + fileName := path.Base(f.FileName) + t.Logf("Downloaded [%s]", fileName) + t.Logf("Photo Bytes: %d", len(file)) + } +} + +func TestSadGetPhotoDownload(t *testing.T) { + _, err := Client.V1().GetPhotoDownload(UnknownPhotoID) + if err == nil { + t.Errorf("expected failure getting well known photo: %v", err) + t.FailNow() + } +} diff --git a/test/regression_test.go b/test/regression_test.go new file mode 100644 index 0000000..6e9149e --- /dev/null +++ b/test/regression_test.go @@ -0,0 +1,22 @@ +package test + +import ( + "testing" + + "github.com/astravexton/photoprism-client-go" +) + +// Trailing slash issue +// https://github.com/astravexton/photoprism-client-go/issues/2 +func TestRegressionIssue2(t *testing.T) { + testStrings := []string{"localhost/", "localhost///////", "localhost//"} + goal := "localhost" + for _, str := range testStrings { + client := photoprism.New(str) + if client.ConnectionString() != goal { + t.Error("Failed to trim suffix / in client connection string") + t.FailNow() + } + } + +} diff --git a/test/session_test.go b/test/session_test.go new file mode 100644 index 0000000..912f5c3 --- /dev/null +++ b/test/session_test.go @@ -0,0 +1,27 @@ +package test + +import ( + "testing" + + photoprism "github.com/astravexton/photoprism-client-go" +) + +// TestHappyLogin should succeed with the good password "missy" +func TestHappyLogin(t *testing.T) { + client := photoprism.New(WellKnownSampleAppConnectionString) + err := client.Auth(photoprism.NewClientAuthLogin(WellKnownUser, WellKnownPass)) + if err != nil { + t.Errorf("expected login: %v", err) + t.FailNow() + } +} + +// TestSadLogin should fail with the bad password "charlie" +func TestSadLogin(t *testing.T) { + client := photoprism.New(WellKnownSampleAppConnectionString) + err := client.Auth(photoprism.NewClientAuthLogin(WellKnownUser, BadPassword)) + if err == nil { + t.Errorf("expecting error for known bad password") + t.FailNow() + } +}