See #272: added admin and model for transcoding
This commit is contained in:
parent
f06295a5b3
commit
baf5a350b3
|
@ -78,6 +78,28 @@ class UploadAdmin(admin.ModelAdmin):
|
||||||
list_filter = ["mimetype", "import_status", "library__privacy_level"]
|
list_filter = ["mimetype", "import_status", "library__privacy_level"]
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(models.UploadVersion)
|
||||||
|
class UploadVersionAdmin(admin.ModelAdmin):
|
||||||
|
list_display = [
|
||||||
|
"upload",
|
||||||
|
"audio_file",
|
||||||
|
"mimetype",
|
||||||
|
"size",
|
||||||
|
"bitrate",
|
||||||
|
"creation_date",
|
||||||
|
"accessed_date",
|
||||||
|
]
|
||||||
|
list_select_related = ["upload"]
|
||||||
|
search_fields = [
|
||||||
|
"upload__source",
|
||||||
|
"upload__acoustid_track_id",
|
||||||
|
"upload__track__title",
|
||||||
|
"upload__track__album__title",
|
||||||
|
"upload__track__artist__name",
|
||||||
|
]
|
||||||
|
list_filter = ["mimetype"]
|
||||||
|
|
||||||
|
|
||||||
def launch_scan(modeladmin, request, queryset):
|
def launch_scan(modeladmin, request, queryset):
|
||||||
for library in queryset:
|
for library in queryset:
|
||||||
library.schedule_scan(actor=request.user.actor, force=True)
|
library.schedule_scan(actor=request.user.actor, force=True)
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
# Generated by Django 2.0.9 on 2018-10-23 18:37
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import django.utils.timezone
|
||||||
|
import funkwhale_api.music.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('music', '0032_track_file_to_upload'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='UploadVersion',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('mimetype', models.CharField(choices=[('audio/ogg', 'ogg'), ('audio/mpeg', 'mp3'), ('audio/x-flac', 'flac')], max_length=50)),
|
||||||
|
('creation_date', models.DateTimeField(default=django.utils.timezone.now)),
|
||||||
|
('accessed_date', models.DateTimeField(blank=True, null=True)),
|
||||||
|
('audio_file', models.FileField(max_length=255, upload_to=funkwhale_api.music.models.get_file_path)),
|
||||||
|
('bitrate', models.PositiveIntegerField()),
|
||||||
|
('size', models.IntegerField()),
|
||||||
|
('upload', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='versions', to='music.Upload')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='album',
|
||||||
|
name='from_activity',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='federation.Activity'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='artist',
|
||||||
|
name='from_activity',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='federation.Activity'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='track',
|
||||||
|
name='from_activity',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='federation.Activity'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='work',
|
||||||
|
name='from_activity',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='federation.Activity'),
|
||||||
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='uploadversion',
|
||||||
|
unique_together={('upload', 'mimetype', 'bitrate')},
|
||||||
|
),
|
||||||
|
]
|
|
@ -578,6 +578,9 @@ TRACK_FILE_IMPORT_STATUS_CHOICES = (
|
||||||
|
|
||||||
|
|
||||||
def get_file_path(instance, filename):
|
def get_file_path(instance, filename):
|
||||||
|
if isinstance(instance, UploadVersion):
|
||||||
|
return common_utils.ChunkedPath("transcoded")(instance, filename)
|
||||||
|
|
||||||
if instance.library.actor.get_user():
|
if instance.library.actor.get_user():
|
||||||
return common_utils.ChunkedPath("tracks")(instance, filename)
|
return common_utils.ChunkedPath("tracks")(instance, filename)
|
||||||
else:
|
else:
|
||||||
|
@ -742,6 +745,28 @@ class Upload(models.Model):
|
||||||
return self.track.listen_url + "?upload={}".format(self.uuid)
|
return self.track.listen_url + "?upload={}".format(self.uuid)
|
||||||
|
|
||||||
|
|
||||||
|
MIMETYPE_CHOICES = [
|
||||||
|
(mt, ext) for ext, mt in utils.AUDIO_EXTENSIONS_AND_MIMETYPE
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class UploadVersion(models.Model):
|
||||||
|
upload = models.ForeignKey(Upload, related_name='versions', on_delete=models.CASCADE)
|
||||||
|
mimetype = models.CharField(max_length=50, choices=MIMETYPE_CHOICES)
|
||||||
|
creation_date = models.DateTimeField(default=timezone.now)
|
||||||
|
accessed_date = models.DateTimeField(null=True, blank=True)
|
||||||
|
audio_file = models.FileField(upload_to=get_file_path, max_length=255)
|
||||||
|
bitrate = models.PositiveIntegerField()
|
||||||
|
size = models.IntegerField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
unique_together = ('upload', 'mimetype', 'bitrate')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def filename(self):
|
||||||
|
return self.upload.filename
|
||||||
|
|
||||||
|
|
||||||
IMPORT_STATUS_CHOICES = (
|
IMPORT_STATUS_CHOICES = (
|
||||||
("pending", "Pending"),
|
("pending", "Pending"),
|
||||||
("finished", "Finished"),
|
("finished", "Finished"),
|
||||||
|
|
Loading…
Reference in New Issue