mirror of
https://github.com/navidrome/navidrome.git
synced 2026-08-31 07:30:32 +00:00
Add more tracks attributes
This commit is contained in:
parent
141edb881e
commit
9308127342
52
api/spec.yml
52
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:
|
||||
|
||||
202
api/spec1.yml
202
api/spec1.yml
@ -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.
|
||||
@ -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)},
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user