Documentation ¶
Overview ¶
Package catalog provides tools to maintain an index of all medias that have been backed up.
Index ¶
- Variables
- func AssignIdsToNewMedias(owner string, signatures []*MediaSignature) (map[MediaSignature]string, error)
- func Create(createRequest CreateAlbum) error
- func DeleteAlbum(owner string, folderNameToDelete string, emptyOnly bool) error
- func GenerateMediaId(signature MediaSignature) (string, error)
- func Init(repositoryAdapter RepositoryAdapter, archive CArchiveAdapter)
- func InsertMedias(owner string, medias []CreateMediaRequest) error
- func RenameAlbum(owner string, folderName, newName string, renameFolder bool) error
- func UpdateAlbum(owner string, folderName string, start, end time.Time) error
- type Album
- type CArchiveAdapter
- type CreateAlbum
- type CreateMediaRequest
- type FindMediaRequest
- type MediaDetails
- type MediaMeta
- type MediaOrientation
- type MediaPage
- type MediaSignature
- type MediaType
- type PageRequest
- type PrioritySegment
- type RepositoryAdapter
- type TimeRange
- type Timeline
- func (t *Timeline) AppendAlbum(album *Album) (*Timeline, error)
- func (t *Timeline) FindAllAt(date time.Time) []*Album
- func (t *Timeline) FindAt(date time.Time) (*Album, bool)
- func (t *Timeline) FindBetween(start, end time.Time) (segments []PrioritySegment, missed []PrioritySegment)
- func (t *Timeline) FindForAlbum(owner, folderName string) (segments []PrioritySegment)
Constants ¶
This section is empty.
Variables ¶
var ( NotFoundError = errors.New("Album hasn't been found") NotEmptyError = errors.New("Album is not empty") )
var (
MediaNotFoundError = fmt.Errorf("media not found")
)
Functions ¶
func AssignIdsToNewMedias ¶
func AssignIdsToNewMedias(owner string, signatures []*MediaSignature) (map[MediaSignature]string, error)
AssignIdsToNewMedias filters out signatures that are already known and compute a unique ID for the others.
func DeleteAlbum ¶
DeleteAlbum delete an album, medias it contains are dispatched to other albums.
func GenerateMediaId ¶
func GenerateMediaId(signature MediaSignature) (string, error)
GenerateMediaId generate a unique ID for a media.
func Init ¶
func Init(repositoryAdapter RepositoryAdapter, archive CArchiveAdapter)
Init must be called before using this package.
func InsertMedias ¶
func InsertMedias(owner string, medias []CreateMediaRequest) error
InsertMedias stores metadata and location of photo and videos
func RenameAlbum ¶
RenameAlbum updates the displayed named of the album. Optionally changes the folder in which media will be stored and flag all its media to be moved to the new one.
Types ¶
type Album ¶
type Album struct { Owner string // Owner is a PK with FolderName Name string // Name for displaying purpose, not unique FolderName string // FolderName is unique with Owner, and immutable Start time.Time // Start is datetime inclusive End time.Time // End is the datetime exclusive TotalCount int // TotalCount is the number of media (of any type) }
Album defines how medias are physically re-grouped.
func FindAlbum ¶
FindAlbum get an album by its business key (its folder name), or returns NotFoundError
func FindAllAlbums ¶
FindAllAlbums find all albums owned by root user
type CArchiveAdapter ¶
CArchiveAdapter forward events to archive package
type CreateAlbum ¶
type CreateAlbum struct { Owner string Name string Start time.Time End time.Time ForcedFolderName string }
func (*CreateAlbum) String ¶
func (c *CreateAlbum) String() string
type CreateMediaRequest ¶
type CreateMediaRequest struct { Id string // Id is generated from its signature with GenerateMediaId(MediaSignature) Signature MediaSignature // Signature is the business key of a media FolderName string // FolderName is the name of the album the media is in Filename string // Filename is a user-friendly name that have the right extension. Type MediaType Details MediaDetails }
CreateMediaRequest is the request to add a new media to the It's within an Owner context.
type FindMediaRequest ¶
type FindMediaRequest struct { Owner string AlbumFolderNames map[string]interface{} // AlbumFolderNames is a set of folder names (map value is nil) Ranges []TimeRange // Ranges is optional, if empty no restriction will be applied }
FindMediaRequest is a filter that is applied to find medias within a time range.
func NewFindMediaRequest ¶
func NewFindMediaRequest(owner string) *FindMediaRequest
func (*FindMediaRequest) String ¶
func (m *FindMediaRequest) String() string
func (*FindMediaRequest) WithAlbum ¶
func (m *FindMediaRequest) WithAlbum(folderNames ...string) *FindMediaRequest
func (*FindMediaRequest) WithinRange ¶
func (m *FindMediaRequest) WithinRange(start, end time.Time) *FindMediaRequest
type MediaDetails ¶
type MediaDetails struct {
Width, Height int
DateTime time.Time
Orientation MediaOrientation
Make string
Model string
GPSLatitude, GPSLongitude float64
Duration int64 // Duration is the length, in milliseconds, of a video
VideoEncoding string // VideoEncoding is the codec used to encode the video (ex: 'H264')
}
MediaDetails are extracted from the metadata within photos and videos and stored as it.
type MediaMeta ¶
type MediaMeta struct { Id string // Id is the unique identifier to use across all domains Signature MediaSignature // Signature is the key used to get the image (or its location) Filename string // Filename original filename when image was uploaded Type MediaType Details MediaDetails }
MediaMeta is an entry (read) of a media in the catalog
type MediaOrientation ¶
type MediaOrientation string
type MediaPage ¶
type MediaPage struct { NextPage string // NextPage is empty if no other pages Content []*MediaMeta }
MediaPage is the current page MediaMeta, and the token of the next page
func ListMedias ¶
func ListMedias(owner string, folderName string, request PageRequest) (*MediaPage, error)
ListMedias return a page of medias within an album
type MediaSignature ¶
func DecodeMediaId ¶
func DecodeMediaId(encodedId string) (*MediaSignature, error)
DecodeMediaId reverse what the GenerateMediaId has done to find original signature.
func FindSignatures ¶
func FindSignatures(owner string, signatures []*MediaSignature) ([]*MediaSignature, error)
FindSignatures returns a list of the medias already known ; they can't be duplicated
func (MediaSignature) String ¶
func (s MediaSignature) String() string
type PageRequest ¶
type PrioritySegment ¶
type RepositoryAdapter ¶
type RepositoryAdapter interface { FindAllAlbums(owner string) ([]*Album, error) InsertAlbum(album Album) error DeleteEmptyAlbum(owner string, folderName string) error // FindAlbum returns (nil, NotFoundError) when not found FindAlbum(owner string, folderName string) (*Album, error) // UpdateAlbum updates data of matching Album.FolderName UpdateAlbum(album Album) error // InsertMedias bulks insert medias InsertMedias(owner string, media []CreateMediaRequest) error // FindMedias is a paginated search for media with their details FindMedias(request *FindMediaRequest) (medias []*MediaMeta, err error) // FindMediaIds is a paginated search to only get the media ids FindMediaIds(request *FindMediaRequest) (ids []string, err error) // FindExistingSignatures returns the signatures that are already known FindExistingSignatures(owner string, signatures []*MediaSignature) ([]*MediaSignature, error) // TransferMedias to a different album, and returns list of moved media ids TransferMedias(owner string, mediaIds []string, newFolderName string) error }
RepositoryAdapter brings persistence layer to catalog package
type TimeRange ¶
TimeRange is of days, start is inclusive (at the second), end is exclusive (at the second)
func NewTimeRangeFromAlbum ¶
type Timeline ¶
type Timeline struct {
// contains filtered or unexported fields
}
Timeline can be used to find to which album a media will belongs.
func NewTimeline ¶
NewTimeline creates a Timeline object used to compute overlaps between Album. List of albums must be sorted by Start date ASC (End sorting do not matter).
func (*Timeline) AppendAlbum ¶
AppendAlbum generates a new timeline from memory
func (*Timeline) FindBetween ¶
func (t *Timeline) FindBetween(start, end time.Time) (segments []PrioritySegment, missed []PrioritySegment)
func (*Timeline) FindForAlbum ¶
func (t *Timeline) FindForAlbum(owner, folderName string) (segments []PrioritySegment)