release / govulncheck (push) Successful in 29s
release / web (push) Successful in 1m58s
release / go (push) Successful in 2m14s
release / integration (push) Successful in 5m17s
release / android (push) Successful in 6m21s
release / Build signed APK (releases and dev) (push) Successful in 6m38s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 2m1s
release / Verify release artifacts (tag releases only) (push) Skipped
ArtistResource has no top-level `monitor`. Lidarr reads the choice from AddOptions (AddArtistOptions, a MonitoringOptions), so the "all"/"future" we sent there was dropped on deserialisation. AddOptions.Monitor stayed Unknown, and AlbumMonitoredService.SetAlbumMonitoredStatus returns early on Unknown. The request's monitoring was never applied. Send monitor and monitored inside addOptions with searchForMissingAlbums, the shape Lidarr's getNewArtist.js posts, and set monitorNewItems "all" explicitly: both choices mean new releases are watched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
98 lines
3.6 KiB
Go
98 lines
3.6 KiB
Go
// Package lidarr is a typed HTTP client for Lidarr's v1 API. It is the
|
|
// only place in the codebase that knows about Lidarr's wire format.
|
|
// Callers receive value structs, never raw JSON.
|
|
package lidarr
|
|
|
|
// LookupResult is the normalized shape returned by Lookup{Artist,Album,Track}.
|
|
// MBID is the kind's primary identifier (foreignArtistId / foreignAlbumId /
|
|
// foreignTrackId from Lidarr). ArtistMBID and AlbumMBID carry parent
|
|
// identifiers when the kind has them — request creation and admin
|
|
// approval need them to construct the lidarr_requests row and the
|
|
// AddArtist/AddAlbum API calls.
|
|
type LookupResult struct {
|
|
MBID string // foreignArtistId / foreignAlbumId / foreignTrackId
|
|
ArtistMBID string // parent artist's foreignArtistId — set on album/track results, empty on artist results
|
|
AlbumMBID string // parent album's foreignAlbumId — set on track results only
|
|
Name string // artist name; album/track returns Title here too
|
|
Secondary string // genre + album count for artist; year for album; album for track
|
|
ImageURL string // cover-art URL Lidarr surfaced (may be empty)
|
|
}
|
|
|
|
// lidarrImage is the wire shape for image entries in Lidarr's API responses.
|
|
type lidarrImage struct {
|
|
CoverType string `json:"coverType"`
|
|
RemoteURL string `json:"remoteUrl"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
// QualityProfile is the dropdown choice in /admin/integrations.
|
|
type QualityProfile struct {
|
|
ID int
|
|
Name string
|
|
}
|
|
|
|
// MetadataProfile controls which release types Lidarr tracks for an artist
|
|
// (album / single / EP / compilation). It's a separate Lidarr concept from
|
|
// quality profile and is required on POST /api/v1/artist — Lidarr 4xx's
|
|
// the request with "'Metadata Profile Id' must be greater than '0'" if
|
|
// it's missing or zero.
|
|
type MetadataProfile struct {
|
|
ID int
|
|
Name string
|
|
}
|
|
|
|
// RootFolder is the dropdown choice in /admin/integrations.
|
|
type RootFolder struct {
|
|
Path string
|
|
Accessible bool
|
|
FreeSpace int64
|
|
}
|
|
|
|
// AddArtistParams are the fields Lidarr requires on POST /api/v1/artist.
|
|
// ArtistName and MetadataProfileID are both required; omitting either
|
|
// produces a 400 with field-validation errors.
|
|
type AddArtistParams struct {
|
|
ForeignArtistID string
|
|
ArtistName string
|
|
QualityProfileID int
|
|
MetadataProfileID int
|
|
RootFolderPath string
|
|
MonitorAll bool // true => addOptions.monitor="all"; false => "future"
|
|
}
|
|
|
|
// AddAlbumParams identify the album to add and carry the settings Lidarr
|
|
// needs when it has to create the parent artist on the fly (an album by an
|
|
// artist not yet in Lidarr). The artist fields are a fallback only: the
|
|
// album lookup normally supplies the artist itself.
|
|
type AddAlbumParams struct {
|
|
ForeignAlbumID string
|
|
ForeignArtistID string // Lidarr requires the artist's foreign id too
|
|
ArtistName string
|
|
QualityProfileID int
|
|
MetadataProfileID int
|
|
RootFolderPath string
|
|
}
|
|
|
|
// PingResult is the response shape from GET /api/v1/system/status.
|
|
type PingResult struct {
|
|
Version string
|
|
}
|
|
|
|
// LidarrArtist is the subset of Lidarr's artist resource used by M5b
|
|
// admin actions. The "id" field is Lidarr's internal numeric ID — needed
|
|
// for DELETE /api/v1/artist/{id} calls.
|
|
type LidarrArtist struct {
|
|
ID int `json:"id"`
|
|
ForeignArtistID string `json:"foreignArtistId"` // MBID
|
|
ArtistName string `json:"artistName"`
|
|
}
|
|
|
|
// LidarrAlbum is the subset of Lidarr's album resource used by M5b
|
|
// admin actions.
|
|
type LidarrAlbum struct {
|
|
ID int `json:"id"`
|
|
ForeignAlbumID string `json:"foreignAlbumId"` // MBID
|
|
Title string `json:"title"`
|
|
ArtistID int `json:"artistId"`
|
|
}
|