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"]
|
||||
|
||||
|
||||
@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):
|
||||
for library in queryset:
|
||||
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):
|
||||
if isinstance(instance, UploadVersion):
|
||||
return common_utils.ChunkedPath("transcoded")(instance, filename)
|
||||
|
||||
if instance.library.actor.get_user():
|
||||
return common_utils.ChunkedPath("tracks")(instance, filename)
|
||||
else:
|
||||
|
@ -742,6 +745,28 @@ class Upload(models.Model):
|
|||
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 = (
|
||||
("pending", "Pending"),
|
||||
("finished", "Finished"),
|
||||
|
|
Loading…
Reference in New Issue