Some checks failed
Pipeline: Test, Lint, Build / Get version info (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test JS code (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint i18n files (push) Has been cancelled
Pipeline: Test, Lint, Build / Check Docker configuration (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v5) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v6) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v7) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to GHCR (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to Docker Hub (push) Has been cancelled
Pipeline: Test, Lint, Build / Cleanup digest artifacts (push) Has been cancelled
Pipeline: Test, Lint, Build / Build Windows installers (push) Has been cancelled
Pipeline: Test, Lint, Build / Package/Release (push) Has been cancelled
Pipeline: Test, Lint, Build / Upload Linux PKG (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
POEditor import / update-translations (push) Has been cancelled
62 lines
2.2 KiB
Go
62 lines
2.2 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/navidrome/navidrome/utils/slice"
|
|
)
|
|
|
|
type Library struct {
|
|
ID int `json:"id" db:"id"`
|
|
Name string `json:"name" db:"name"`
|
|
Path string `json:"path" db:"path"`
|
|
RemotePath string `json:"remotePath" db:"remote_path"`
|
|
LastScanAt time.Time `json:"lastScanAt" db:"last_scan_at"`
|
|
LastScanStartedAt time.Time `json:"lastScanStartedAt" db:"last_scan_started_at"`
|
|
FullScanInProgress bool `json:"fullScanInProgress" db:"full_scan_in_progress"`
|
|
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
|
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
|
TotalSongs int `json:"totalSongs" db:"total_songs"`
|
|
TotalAlbums int `json:"totalAlbums" db:"total_albums"`
|
|
TotalArtists int `json:"totalArtists" db:"total_artists"`
|
|
TotalFolders int `json:"totalFolders" db:"total_folders"`
|
|
TotalFiles int `json:"totalFiles" db:"total_files"`
|
|
TotalMissingFiles int `json:"totalMissingFiles" db:"total_missing_files"`
|
|
TotalSize int64 `json:"totalSize" db:"total_size"`
|
|
TotalDuration float64 `json:"totalDuration" db:"total_duration"`
|
|
DefaultNewUsers bool `json:"defaultNewUsers" db:"default_new_users"`
|
|
}
|
|
|
|
const (
|
|
DefaultLibraryID = 1
|
|
DefaultLibraryName = "Music Library"
|
|
)
|
|
|
|
type Libraries []Library
|
|
|
|
func (l Libraries) IDs() []int {
|
|
return slice.Map(l, func(lib Library) int { return lib.ID })
|
|
}
|
|
|
|
type LibraryRepository interface {
|
|
Get(id int) (*Library, error)
|
|
// GetPath returns the path of the library with the given ID.
|
|
// Its implementation must be optimized to avoid unnecessary queries.
|
|
GetPath(id int) (string, error)
|
|
GetAll(...QueryOptions) (Libraries, error)
|
|
CountAll(...QueryOptions) (int64, error)
|
|
Put(*Library) error
|
|
Delete(id int) error
|
|
StoreMusicFolder() error
|
|
AddArtist(id int, artistID string) error
|
|
|
|
// User-library association methods
|
|
GetUsersWithLibraryAccess(libraryID int) (Users, error)
|
|
|
|
// TODO These methods should be moved to a core service
|
|
ScanBegin(id int, fullScan bool) error
|
|
ScanEnd(id int) error
|
|
ScanInProgress() (bool, error)
|
|
RefreshStats(id int) error
|
|
}
|