`TopResult` was the one projection here that shipped `inLibrary` and no local id, so the top-results cards had no choice but to read the weaker flag. Every sibling model — `MBArtist`, `MBReleaseGroup`, `MBRecording` — already carries `LocalID`, and the candidate builders had the value in hand at every construction site. `LocalID` is set and cleared by a test against `audio_files`, so it means "there is something of mine here". `InLibrary` is written by the same pass but is a one-way ratchet the prune can only clear alongside a local id; it stays for scoring, which is where an approximate answer is fine.
474 lines
12 KiB
TypeScript
474 lines
12 KiB
TypeScript
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
|
// This file is automatically generated. DO NOT EDIT
|
|
|
|
/**
|
|
* AlbumCompleteFunc answers "is the local album with this id complete",
|
|
* i.e. do its files declare a track total the library actually has.
|
|
*/
|
|
export type AlbumCompleteFunc = any;
|
|
|
|
/**
|
|
* CreditPart is one credited artist within a credit, in credit order.
|
|
*
|
|
* CreditedName is the name *as credited*, which is not the artist's own
|
|
* name: MusicBrainz credits "Snoop Dogg" on a track by the artist
|
|
* called "Snoop Doggy Dogg". Display uses it; navigation uses
|
|
* ArtistMBID. JoinPhrase is the literal connector that follows this
|
|
* part, so a credit renders by concatenation and never by searching a
|
|
* name inside a credit string.
|
|
*/
|
|
export interface CreditPart {
|
|
"position": number;
|
|
"artistMbid": string;
|
|
"creditedName": string;
|
|
"joinPhrase": string;
|
|
}
|
|
|
|
/**
|
|
* IndexStatus is the full index build status, exposed to the frontend.
|
|
*/
|
|
export interface IndexStatus {
|
|
"building": boolean;
|
|
"ready": boolean;
|
|
|
|
/**
|
|
* RFC3339 timestamp of last complete build
|
|
*/
|
|
"lastBuilt"?: string;
|
|
"tiers": TierStatus[] | null;
|
|
"artists": number;
|
|
"recordings": number;
|
|
"releaseGroups": number;
|
|
"totalRows": number;
|
|
}
|
|
|
|
/**
|
|
* LBSimilarArtist represents a similar artist from the
|
|
* ListenBrainz labs API.
|
|
*/
|
|
export interface LBSimilarArtist {
|
|
"artistMbid": string;
|
|
"name": string;
|
|
"score": number;
|
|
}
|
|
|
|
/**
|
|
* LBTopRecording represents a popular recording from the
|
|
* ListenBrainz popularity API.
|
|
*
|
|
* JSON tags use camelCase for Wails→frontend serialization.
|
|
* The API response uses snake_case, so we unmarshal into
|
|
* lbTopRecordingWire first, then convert.
|
|
*/
|
|
export interface LBTopRecording {
|
|
"recordingMbid": string;
|
|
"artistName": string;
|
|
"trackName": string;
|
|
"totalListenCount": number;
|
|
"caaReleaseMbid": string;
|
|
|
|
/**
|
|
* ReleaseGroupMBID is resolved from CAAReleaseMBID so a top-track
|
|
* row can link to its album page with the track highlighted.
|
|
*/
|
|
"releaseGroupMbid"?: string;
|
|
"releaseName": string;
|
|
|
|
/**
|
|
* milliseconds (from LB API)
|
|
*/
|
|
"length": number;
|
|
"inLibrary": boolean;
|
|
"localId"?: number;
|
|
}
|
|
|
|
/**
|
|
* LBTopReleaseGroup represents a popular release group from the
|
|
* ListenBrainz popularity API.
|
|
*/
|
|
export interface LBTopReleaseGroup {
|
|
"releaseGroupMbid": string;
|
|
"title": string;
|
|
"artistName": string;
|
|
"type": string;
|
|
"date": string;
|
|
"totalListenCount": number;
|
|
"caaReleaseMbid": string;
|
|
"inLibrary": boolean;
|
|
"localId"?: number;
|
|
}
|
|
|
|
/**
|
|
* LyricsResult is a single lyric-search hit, mapped from the DB layer
|
|
* into the camelCase shape the frontend consumes.
|
|
*/
|
|
export interface LyricsResult {
|
|
"audioFileId": number;
|
|
"filePath": string;
|
|
"lengthMs": number;
|
|
"title": string;
|
|
"artist": string;
|
|
"album": string;
|
|
}
|
|
|
|
/**
|
|
* MBArtist is a Wails-friendly projection of a MusicBrainz artist.
|
|
*/
|
|
export interface MBArtist {
|
|
"mbid": string;
|
|
"name": string;
|
|
"sortName": string;
|
|
"englishName"?: string;
|
|
"type": string;
|
|
"country": string;
|
|
"disambiguation": string;
|
|
"score": number;
|
|
|
|
/**
|
|
* raw LB listen count (0 if unknown)
|
|
*/
|
|
"popularity": number;
|
|
"listenerCount": number;
|
|
|
|
/**
|
|
* true if the user owns music by this artist
|
|
*/
|
|
"inLibrary": boolean;
|
|
|
|
/**
|
|
* local artist row ID for navigation
|
|
*/
|
|
"localId"?: number;
|
|
}
|
|
|
|
/**
|
|
* MBRecording is a Wails-friendly projection of a MusicBrainz
|
|
* recording.
|
|
*/
|
|
export interface MBRecording {
|
|
"mbid": string;
|
|
"title": string;
|
|
"length": number;
|
|
"artistCredit": string;
|
|
|
|
/**
|
|
* for linking the artist to its detail page
|
|
*/
|
|
"artistMbid"?: string;
|
|
"score": number;
|
|
|
|
/**
|
|
* raw LB listen count (0 if unknown)
|
|
*/
|
|
"popularity": number;
|
|
"listenerCount": number;
|
|
|
|
/**
|
|
* parent release, for album navigation
|
|
*/
|
|
"caaReleaseMbid"?: string;
|
|
|
|
/**
|
|
* ReleaseGroupMBID is resolved from CAAReleaseMBID so a track can
|
|
* link to its album page with the track highlighted, matching how
|
|
* tracks behave everywhere else.
|
|
*/
|
|
"releaseGroupMbid"?: string;
|
|
|
|
/**
|
|
* album title
|
|
*/
|
|
"releaseName"?: string;
|
|
|
|
/**
|
|
* true if the user owns this recording
|
|
*/
|
|
"inLibrary": boolean;
|
|
|
|
/**
|
|
* local recording row ID
|
|
*/
|
|
"localId"?: number;
|
|
}
|
|
|
|
/**
|
|
* MBRelease is a Wails-friendly projection of a MusicBrainz release.
|
|
*/
|
|
export interface MBRelease {
|
|
"mbid": string;
|
|
"title": string;
|
|
"date": string;
|
|
"country": string;
|
|
"status": string;
|
|
"artistCredit"?: string;
|
|
"tracks"?: MBTrack[] | null;
|
|
|
|
/**
|
|
* ReleaseGroupMBID is the parent release group's MBID. Empty unless
|
|
* the lookup requested the "release-groups" include (LookupRelease
|
|
* does); used to resolve a release-level MBID (what many taggers
|
|
* write) back to the release-group MBID everything else on the
|
|
* album page is keyed by.
|
|
*/
|
|
"releaseGroupMbid"?: string;
|
|
}
|
|
|
|
/**
|
|
* MBReleaseGroup is a Wails-friendly projection of a MusicBrainz
|
|
* release group.
|
|
*/
|
|
export interface MBReleaseGroup {
|
|
"mbid": string;
|
|
"title": string;
|
|
"primaryType": string;
|
|
"secondaryTypes"?: string[] | null;
|
|
"firstReleaseDate": string;
|
|
"artistCredit": string;
|
|
|
|
/**
|
|
* for linking the artist to its detail page
|
|
*/
|
|
"artistMbid"?: string;
|
|
|
|
/**
|
|
* raw LB listen count (0 if unknown)
|
|
*/
|
|
"popularity": number;
|
|
"listenerCount": number;
|
|
|
|
/**
|
|
* true if the user owns this album
|
|
*/
|
|
"inLibrary": boolean;
|
|
|
|
/**
|
|
* local release_group row ID
|
|
*/
|
|
"localId"?: number;
|
|
|
|
/**
|
|
* TotalTracks is the catalog's track count for this release group,
|
|
* or 0 for "the catalog does not say". It answers "how much of
|
|
* this album do I have" for an album whose files declared no total
|
|
* -- the case GetAlbumCompleteness cannot answer -- and it is not
|
|
* filled by the MusicBrainz path below, which has the real
|
|
* tracklist and does not need a denominator.
|
|
*/
|
|
"totalTracks": number;
|
|
}
|
|
|
|
/**
|
|
* MBSearchResult aggregates the three searchable entity types
|
|
* returned by the MusicBrainz search API.
|
|
*/
|
|
export interface MBSearchResult {
|
|
"artists"?: MBArtist[] | null;
|
|
"releaseGroups"?: MBReleaseGroup[] | null;
|
|
"recordings"?: MBRecording[] | null;
|
|
"topResults"?: TopResult[] | null;
|
|
}
|
|
|
|
/**
|
|
* MBTrack is a Wails-friendly projection of a MusicBrainz track.
|
|
*/
|
|
export interface MBTrack {
|
|
"position": number;
|
|
"discNumber": number;
|
|
"title": string;
|
|
"length": number;
|
|
"mbid": string;
|
|
"inLibrary": boolean;
|
|
"localId"?: number;
|
|
}
|
|
|
|
/**
|
|
* Shelf is one horizontal row on the Explore page.
|
|
*
|
|
* A shelf carries albums or artists, never both: they route to
|
|
* different pages and render as different cards, and a row that is
|
|
* sometimes one and sometimes the other is two components pretending to
|
|
* be one.
|
|
*/
|
|
export interface Shelf {
|
|
"id": string;
|
|
"kind": ShelfKind;
|
|
|
|
/**
|
|
* Title is the row heading.
|
|
*/
|
|
"title": string;
|
|
|
|
/**
|
|
* Subtitle says why these are here. As on Home it is not
|
|
* decoration: without it a shelf is indistinguishable from a
|
|
* random grid.
|
|
*/
|
|
"subtitle": string;
|
|
"albums"?: MBReleaseGroup[] | null;
|
|
"artists"?: MBArtist[] | null;
|
|
}
|
|
|
|
/**
|
|
* ShelfKind identifies what a shelf is built from, so the frontend can
|
|
* pick an icon and a spec can assert on a shelf without matching
|
|
* display copy.
|
|
*/
|
|
export enum ShelfKind {
|
|
/**
|
|
* The Go zero value for the underlying type of the enum.
|
|
*/
|
|
$zero = "",
|
|
|
|
/**
|
|
* Shelf kinds.
|
|
*/
|
|
ShelfPopularAlbums = "popular-albums",
|
|
ShelfPopularArtists = "popular-artists",
|
|
ShelfMoreFromOwned = "more-from-owned",
|
|
};
|
|
|
|
/**
|
|
* ShelfPage is what Explore renders before a query.
|
|
*
|
|
* State exists because "no shelves" has three different causes here and
|
|
* the page must not present them identically — a blank panel is the bug
|
|
* this whole feature is fixing, and a blank panel that says nothing
|
|
* about why is the same bug with more code behind it.
|
|
*/
|
|
export interface ShelfPage {
|
|
"shelves": Shelf[] | null;
|
|
|
|
/**
|
|
* State is one of:
|
|
*
|
|
* "ready" — the catalog is here and the shelves are below.
|
|
* "building" — it is being fetched or built right now.
|
|
* "no-index" — there is no catalog. Search still works over
|
|
* whatever is in the index, which may be nothing;
|
|
* the page says so and points at Settings.
|
|
*/
|
|
"state": string;
|
|
}
|
|
|
|
/**
|
|
* ThumbnailRequest is a single item in a batch thumbnail request.
|
|
*/
|
|
export interface ThumbnailRequest {
|
|
"mbid": string;
|
|
"albumName": string;
|
|
"artistName": string;
|
|
}
|
|
|
|
/**
|
|
* TierStatus represents the state of a single index tier.
|
|
*/
|
|
export interface TierStatus {
|
|
"name": string;
|
|
|
|
/**
|
|
* "pending", "running", "complete", "error", "skipped"
|
|
*/
|
|
"state": string;
|
|
"total": number;
|
|
"completed": number;
|
|
"error"?: string;
|
|
|
|
/**
|
|
* Detail is a human-readable progress line for stages whose raw
|
|
* completed/total numbers say little on their own — the listens
|
|
* stream reports "42.3 / 205.1 GB · 18 MB/s · ~3h20m left" here.
|
|
*/
|
|
"detail"?: string;
|
|
}
|
|
|
|
/**
|
|
* TopResult represents a single top-result card shown above the
|
|
* categorized search lists. Computed by intent scoring after all
|
|
* reranking is complete.
|
|
*/
|
|
export interface TopResult {
|
|
/**
|
|
* "artist", "release_group", "recording"
|
|
*/
|
|
"entityType": string;
|
|
"mbid": string;
|
|
"name": string;
|
|
|
|
/**
|
|
* for tracks/albums
|
|
*/
|
|
"artistCredit"?: string;
|
|
|
|
/**
|
|
* for linking the artist subtitle
|
|
*/
|
|
"artistMbid"?: string;
|
|
"intentScore": number;
|
|
|
|
/**
|
|
* Artist-specific
|
|
* "Group", "Person"
|
|
*/
|
|
"artistType"?: string;
|
|
"country"?: string;
|
|
|
|
/**
|
|
* Album-specific
|
|
*/
|
|
"primaryType"?: string;
|
|
"year"?: string;
|
|
|
|
/**
|
|
* Track-specific. ReleaseGroupMBID is resolved (from CAAReleaseMBID)
|
|
* so a track click can open its album page with the track highlighted,
|
|
* matching how tracks behave everywhere else. ReleaseName is the album
|
|
* title used for the album page header.
|
|
*/
|
|
"length"?: number;
|
|
"caaReleaseMbid"?: string;
|
|
"releaseGroupMbid"?: string;
|
|
"releaseName"?: string;
|
|
|
|
/**
|
|
* Library status — populated from index cross-reference columns.
|
|
*
|
|
* LocalID is the one the cards read. It is the local row behind
|
|
* this entity — an album, a file, an artist — and it is set and
|
|
* cleared by a test against `audio_files`, so it means "there is
|
|
* something of mine here". InLibrary is written by the same pass
|
|
* but is a one-way ratchet the prune can only clear alongside a
|
|
* local id, so it is the weaker of the two and stays for scoring
|
|
* (`fwInLibrary`), which is where an approximate answer is fine.
|
|
*/
|
|
"inLibrary": boolean;
|
|
"localId"?: number;
|
|
}
|
|
|
|
/**
|
|
* TrackLyrics is the stored or freshly-fetched lyrics for one track.
|
|
* Source is "embedded" (from the file's tags / library DB), "lrclib"
|
|
* (fetched on demand), or "" when none are available.
|
|
*/
|
|
export interface TrackLyrics {
|
|
"plain": string;
|
|
"synced": string;
|
|
"instrumental": boolean;
|
|
"source": string;
|
|
}
|
|
|
|
/**
|
|
* TrackThumbnailRequest is a single item in a batch track thumbnail
|
|
* request. Either ReleaseMBID or ReleaseGroupMBID may be empty;
|
|
* the proxy tries whichever is present.
|
|
*/
|
|
export interface TrackThumbnailRequest {
|
|
/**
|
|
* stable key used in the returned map
|
|
*/
|
|
"key": string;
|
|
"releaseMbid": string;
|
|
"releaseGroupMbid": string;
|
|
"albumName": string;
|
|
"artistName": string;
|
|
}
|