From 93081273429812494bbb00c8be278573d1a731c9 Mon Sep 17 00:00:00 2001 From: Deluan Date: Fri, 31 Mar 2023 15:05:39 -0400 Subject: [PATCH] Add more tracks attributes --- api/spec.yml | 52 ++++++-- api/spec1.yml | 202 -------------------------------- server/api/helpers.go | 34 +++--- server/api/openapi_api.gen.go | 88 +++++++------- server/api/openapi_types.gen.go | 42 ++++++- 5 files changed, 142 insertions(+), 276 deletions(-) delete mode 100644 api/spec1.yml diff --git a/api/spec.yml b/api/spec.yml index 4e5f7548d..842e358c0 100644 --- a/api/spec.yml +++ b/api/spec.yml @@ -440,28 +440,60 @@ components: $ref: '#/components/schemas/TrackRelationships' TrackAttributes: type: object + required: [title, artist, album, albumartist, track, mimetype, duration, channels, bitrate, size] properties: title: type: string description: The title of the track - artist: + artist: # TODO: Remove type: string description: The name of the artist who performed the track - album: + albumartist: # TODO: Remove + type: string + description: The primary artist of the album the track belongs to. + album: # TODO Remove type: string description: The name of the album the track belongs to - composer: + genre: # TODO Remove type: string - description: The name of the composer who created the track + description: The genre of the track. + track: + type: integer + description: The track number within the album. + disc: + type: integer + description: The disc number within a multi-disc album. + year: + type: integer + description: The release year of the track or album. + bpm: + type: integer + description: The beats per minute (BPM) of the track. + recording-mbid: + type: string + description: The MusicBrainz identifier for the recording of the track. + track-mbid: + type: string + description: The MusicBrainz identifier for the track. + comments: + type: string + description: Any additional comments or notes about the track. + mimetype: + type: string + description: The MIME type of the audio file. duration: type: number format: float description: The duration of the track in seconds - required: - - title - - artist - - album - - duration + channels: + type: integer + description: The number of audio channels in the track. + bitrate: + type: integer + description: The bitrate of the audio file in kilobits per second (kbps). + size: + type: integer + description: The size of the audio file in bytes. TrackRelationships: type: object properties: @@ -490,8 +522,6 @@ components: enum: - artist - albumArtist - - composer - - vocalist description: The role of an artist in a track or album Artist: allOf: diff --git a/api/spec1.yml b/api/spec1.yml deleted file mode 100644 index fbcc853b5..000000000 --- a/api/spec1.yml +++ /dev/null @@ -1,202 +0,0 @@ -openapi: "3.0.0" -info: - version: 0.3.0 - title: Navidrome API - description: 'This is heavily based on Aura API: https://auraspec.readthedocs.io/en/latest/api.html' - contact: - name: Navidrome - url: https://navidrome.org -servers: - - url: /api/v2 -security: - - bearerAuth: [] -paths: - /server: - get: - operationId: getServerInfo - responses: - '200': - description: The response’s data key maps to a resource object dictionary representing the server. - content: - application/vnd.api+json: - schema: - type: object - required: [data] - properties: - data: - $ref: '#/components/schemas/ServerInfo' - default: - description: unexpected error - content: - application/vnd.api+json: - schema: - $ref: '#/components/schemas/JSONAPIErrorResponse' - /tracks: - get: - operationId: getTracks - parameters: - - in: query - name: limit - schema: - type: integer - minimum: 0 - default: 0 - responses: - '200': - description: TODO - content: - application/vnd.api+json: - schema: - type: object - required: [data] - properties: - data: - type: array - items: - $ref: '#/components/schemas/Track' - default: - description: unexpected error - content: - application/vnd.api+json: - schema: - $ref: '#/components/schemas/JSONAPIErrorResponse' - -components: - securitySchemes: - bearerAuth: - type: http - scheme: bearer - bearerFormat: JWT - - schemas: - ServerInfo: - type: object - required: [aura-version, server, server-version, auth-required, features] - properties: - aura-version: - type: string - description: The version of the AURA spec implemented. - example: "1.0.0" - server: - type: string - description: The name of the server software. - example: "navidrome" - server-version: - type: string - description: The version number of the server. - example: "0.60.0" - auth-required: - type: boolean - description: Whether the user has access to the server. - example: true - features: - type: array - description: A list of optional features the server supports. - items: - type: string - enum: - - albums - - artists - - images - JSONAPIResourceObject: - title: JSON:API Resource Object - description: | - A JSON:API-compliant resource object. An inheritable object schema that contains the basic framework of a Resource Object from the JSON:API spec. - The `attributes`, `relationship`, and `meta` properties are added, as necessary, by the inheriting schema. - type: object - required: [type, id] - properties: - type: - $ref: '#/components/schemas/JSONAPIType' - id: - $ref: '#/components/schemas/JSONAPIId' - - JSONAPIType: - title: JSON:API type Member - description: | - The `type` member is used to describe resource objects that share common attributes and relationships. - Note: The type member is required in every resource object throughout requests and responses in JSON:API. There are some cases, such as when POSTing to an endpoint representing heterogeneous data, when the type could not be inferred from the endpoint. However, picking and choosing when it is required would be confusing; it would be hard to remember when it was required and when it was not. Therefore, to improve consistency and minimize confusion, type is always required. - type: string - - JSONAPIId: - title: JSON:API id Member - description: Every resource object MUST contain an id member and a type member (exception-the id member is not required when the resource object originates at the client and represents a new resource to be created on the server). Within a given API, each resource object’s type and id pair MUST identify a single, unique resource. - type: string - - Track: - allOf: - - $ref: '#/components/schemas/JSONAPIResourceObject' - - type: object - required: [attributes] - properties: - attributes: - $ref: '#/components/schemas/TrackAttributes' - - TrackAttributes: - type: object - required: [title, artist, album, albumartist, track, mimetype, duration, channels, bitrate, size] - properties: - title: - type: string - artist: - type: string - album: - type: string - albumartist: - type: string - track: - type: integer - disc: - type: integer - year: - type: integer - bpm: - type: integer - genre: - type: string - recording-mbid: - type: string - track-mbid: - type: string - comments: - type: string - mimetype: - type: string - duration: - type: number - channels: - type: integer - bitrate: - type: integer - size: - type: integer - - JSONAPIErrorResponse: - title: JSON:API Resource Object - type: object - required: [errors] - properties: - errors: - type: array - items: - $ref: '#/components/schemas/JSONAPIErrorObject' - JSONAPIErrorObject: - type: object - description: 'A JSON-API error object. see: https://jsonapi.org/format/#errors' - properties: - id: - type: string - description: a unique identifier for this particular occurrence of the problem. - example: 1 - status: - type: integer - description: the HTTP status code applicable to this problem, expressed as a string value. - example: 400 - code: - type: string - description: an application-specific error code, expressed as a string value. - example: invalid_request - detail: - type: string - description: a human-readable explanation specific to this occurrence of the problem. - example: First name must contain at least two characters. diff --git a/server/api/helpers.go b/server/api/helpers.go index feb0b4fc5..36d1bf078 100644 --- a/server/api/helpers.go +++ b/server/api/helpers.go @@ -34,23 +34,23 @@ func toAPITrack(mf model.MediaFile) Track { Type: ResourceTypeTrack, Id: mf.ID, Attributes: &TrackAttributes{ - Album: mf.Album, - //Albumartist: mf.AlbumArtist, - Artist: mf.Artist, - //Bitrate: mf.BitRate, - //Bpm: p(mf.Bpm), - //Channels: mf.Channels, - //Comments: p(mf.Comment), - //Disc: p(mf.DiscNumber), - Duration: mf.Duration, - //Genre: p(mf.Genre), - //Mimetype: mf.ContentType(), - //RecordingMbid: p(mf.MbzTrackID), - //Size: int(mf.Size), - Title: mf.Title, - //Track: mf.TrackNumber, - //TrackMbid: p(mf.MbzReleaseTrackID), - //Year: p(mf.Year), + Album: mf.Album, + Albumartist: mf.AlbumArtist, + Artist: mf.Artist, + Bitrate: mf.BitRate, + Bpm: p(mf.Bpm), + Channels: mf.Channels, + Comments: p(mf.Comment), + Disc: p(mf.DiscNumber), + Duration: mf.Duration, + Genre: p(mf.Genre), + Mimetype: mf.ContentType(), + RecordingMbid: p(mf.MbzTrackID), + Size: int(mf.Size), + Title: mf.Title, + Track: mf.TrackNumber, + TrackMbid: p(mf.MbzReleaseTrackID), + Year: p(mf.Year), }, Relationships: &TrackRelationships{ Albums: &[]AlbumTrackRelationship{toAlbumRelationship(mf)}, diff --git a/server/api/openapi_api.gen.go b/server/api/openapi_api.gen.go index ed12e05f4..7cb3fa302 100644 --- a/server/api/openapi_api.gen.go +++ b/server/api/openapi_api.gen.go @@ -1250,48 +1250,52 @@ func (sh *strictHandler) GetTrack(w http.ResponseWriter, r *http.Request, trackI // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/server/api/openapi_types.gen.go b/server/api/openapi_types.gen.go index 8b23ec8a3..07e035303 100644 --- a/server/api/openapi_types.gen.go +++ b/server/api/openapi_types.gen.go @@ -11,8 +11,6 @@ import ( const ( ArtistRoleAlbumArtist ArtistRole = "albumArtist" ArtistRoleArtist ArtistRole = "artist" - ArtistRoleComposer ArtistRole = "composer" - ArtistRoleVocalist ArtistRole = "vocalist" ) // Defines values for ResourceType. @@ -205,17 +203,53 @@ type TrackAttributes struct { // Album The name of the album the track belongs to Album string `json:"album"` + // Albumartist The primary artist of the album the track belongs to. + Albumartist string `json:"albumartist"` + // Artist The name of the artist who performed the track Artist string `json:"artist"` - // Composer The name of the composer who created the track - Composer *string `json:"composer,omitempty"` + // Bitrate The bitrate of the audio file in kilobits per second (kbps). + Bitrate int `json:"bitrate"` + + // Bpm The beats per minute (BPM) of the track. + Bpm *int `json:"bpm,omitempty"` + + // Channels The number of audio channels in the track. + Channels int `json:"channels"` + + // Comments Any additional comments or notes about the track. + Comments *string `json:"comments,omitempty"` + + // Disc The disc number within a multi-disc album. + Disc *int `json:"disc,omitempty"` // Duration The duration of the track in seconds Duration float32 `json:"duration"` + // Genre The genre of the track. + Genre *string `json:"genre,omitempty"` + + // Mimetype The MIME type of the audio file. + Mimetype string `json:"mimetype"` + + // RecordingMbid The MusicBrainz identifier for the recording of the track. + RecordingMbid *string `json:"recording-mbid,omitempty"` + + // Size The size of the audio file in bytes. + Size int `json:"size"` + // Title The title of the track Title string `json:"title"` + + // Track The track number within the album. + Track int `json:"track"` + + // TrackMbid The MusicBrainz identifier for the track. + TrackMbid *string `json:"track-mbid,omitempty"` + + // Year The release year of the track or album. + Year *int `json:"year,omitempty"` } // TrackRelationships defines model for TrackRelationships.