Fixed #33: sort by track position in album in API vy default, also reuse that information on frontend side

This commit is contained in:
Eliot Berriot 2017-07-10 23:24:04 +02:00
parent f1c05d4f42
commit 0786c58d3d
5 changed files with 29 additions and 6 deletions

View File

@ -27,6 +27,7 @@ class APIModelMixin(models.Model):
api_includes = [] api_includes = []
creation_date = models.DateTimeField(default=timezone.now) creation_date = models.DateTimeField(default=timezone.now)
import_hooks = [] import_hooks = []
class Meta: class Meta:
abstract = True abstract = True
ordering = ['-creation_date'] ordering = ['-creation_date']
@ -291,6 +292,9 @@ class Track(APIModelMixin):
] ]
tags = TaggableManager() tags = TaggableManager()
class Meta:
ordering = ['album', 'position']
def __str__(self): def __str__(self):
return self.title return self.title
@ -386,6 +390,8 @@ class ImportJob(models.Model):
) )
status = models.CharField(choices=STATUS_CHOICES, default='pending', max_length=30) status = models.CharField(choices=STATUS_CHOICES, default='pending', max_length=30)
class Meta:
ordering = ('id', )
@celery.app.task(name='ImportJob.run', filter=celery.task_method) @celery.app.task(name='ImportJob.run', filter=celery.task_method)
def run(self, replace=False): def run(self, replace=False):
try: try:

View File

@ -62,7 +62,15 @@ class TrackSerializer(LyricsMixin):
tags = TagSerializer(many=True, read_only=True) tags = TagSerializer(many=True, read_only=True)
class Meta: class Meta:
model = models.Track model = models.Track
fields = ('id', 'mbid', 'title', 'artist', 'files', 'tags', 'lyrics') fields = (
'id',
'mbid',
'title',
'artist',
'files',
'tags',
'position',
'lyrics')
class TrackSerializerNested(LyricsMixin): class TrackSerializerNested(LyricsMixin):
artist = ArtistSerializer() artist = ArtistSerializer()

View File

@ -22,6 +22,9 @@
</td> </td>
<td colspan="6"> <td colspan="6">
<router-link class="track discrete link" :to="{name: 'library.track', params: {id: track.id }}"> <router-link class="track discrete link" :to="{name: 'library.track', params: {id: track.id }}">
<template v-if="track.position">
{{ track.position }}.
</template>
{{ track.title }} {{ track.title }}
</router-link> </router-link>
</td> </td>

View File

@ -20,9 +20,12 @@
<img class="ui mini image" v-else src="../../..//assets/audio/default-cover.png"> <img class="ui mini image" v-else src="../../..//assets/audio/default-cover.png">
</td> </td>
<td colspan="6"> <td colspan="6">
<router-link class="track" :to="{name: 'library.track', params: {id: track.id }}"> <router-link class="track" :to="{name: 'library.track', params: {id: track.id }}">
{{ track.title }} <template v-if="displayPosition && track.position">
</router-link> {{ track.position }}.
</template>
{{ track.title }}
</router-link>
</td> </td>
<td colspan="6"> <td colspan="6">
<router-link class="artist discrete link" :to="{name: 'library.artist', params: {id: track.artist.id }}"> <router-link class="artist discrete link" :to="{name: 'library.artist', params: {id: track.artist.id }}">
@ -46,7 +49,10 @@ import TrackFavoriteIcon from '@/components/favorites/TrackFavoriteIcon'
import PlayButton from '@/components/audio/PlayButton' import PlayButton from '@/components/audio/PlayButton'
export default { export default {
props: ['tracks'], props: {
tracks: {type: Array, required: true},
displayPosition: {type: Boolean, default: false}
},
components: { components: {
TrackFavoriteIcon, TrackFavoriteIcon,
PlayButton PlayButton

View File

@ -34,7 +34,7 @@
</div> </div>
<div class="ui vertical stripe segment"> <div class="ui vertical stripe segment">
<h2>Tracks</h2> <h2>Tracks</h2>
<track-table v-if="album" :tracks="album.tracks"></track-table> <track-table v-if="album" display-position="true" :tracks="album.tracks"></track-table>
</div> </div>
</template> </template>
</div> </div>