Merge branch '1093-transcoding-issue-channels' into 'master'
Fix #1093: mimetype detection issue that broke transcoding on certain tracks See merge request funkwhale/funkwhale!1110
This commit is contained in:
commit
90427331e6
|
@ -16,20 +16,44 @@ class Command(BaseCommand):
|
||||||
default=False,
|
default=False,
|
||||||
help="Do not execute anything",
|
help="Do not execute anything",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--mimetypes",
|
||||||
|
action="store_true",
|
||||||
|
dest="mimetypes",
|
||||||
|
default=True,
|
||||||
|
help="Check and fix mimetypes",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--audio-data",
|
||||||
|
action="store_true",
|
||||||
|
dest="data",
|
||||||
|
default=False,
|
||||||
|
help="Check and fix bitrate and duration, can be really slow because it needs to access files",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--size",
|
||||||
|
action="store_true",
|
||||||
|
dest="size",
|
||||||
|
default=False,
|
||||||
|
help="Check and fix file size, can be really slow because it needs to access files",
|
||||||
|
)
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
if options["dry_run"]:
|
if options["dry_run"]:
|
||||||
self.stdout.write("Dry-run on, will not commit anything")
|
self.stdout.write("Dry-run on, will not commit anything")
|
||||||
self.fix_mimetypes(**options)
|
if options["mimetypes"]:
|
||||||
self.fix_file_data(**options)
|
self.fix_mimetypes(**options)
|
||||||
self.fix_file_size(**options)
|
if options["data"]:
|
||||||
|
self.fix_file_data(**options)
|
||||||
|
if options["size"]:
|
||||||
|
self.fix_file_size(**options)
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def fix_mimetypes(self, dry_run, **kwargs):
|
def fix_mimetypes(self, dry_run, **kwargs):
|
||||||
self.stdout.write("Fixing missing mimetypes...")
|
self.stdout.write("Fixing missing mimetypes...")
|
||||||
matching = models.Upload.objects.filter(source__startswith="file://").exclude(
|
matching = models.Upload.objects.filter(
|
||||||
mimetype__startswith="audio/"
|
Q(source__startswith="file://") | Q(source__startswith="upload://")
|
||||||
)
|
).exclude(mimetype__startswith="audio/")
|
||||||
self.stdout.write(
|
self.stdout.write(
|
||||||
"[mimetypes] {} entries found with bad or no mimetype".format(
|
"[mimetypes] {} entries found with bad or no mimetype".format(
|
||||||
matching.count()
|
matching.count()
|
||||||
|
|
|
@ -22,6 +22,8 @@ def guess_mimetype(f):
|
||||||
mt, _ = mimetypes.guess_type(f.name)
|
mt, _ = mimetypes.guess_type(f.name)
|
||||||
if mt:
|
if mt:
|
||||||
t = mt
|
t = mt
|
||||||
|
else:
|
||||||
|
t = EXTENSION_TO_MIMETYPE.get(f.name.split(".")[-1])
|
||||||
return t
|
return t
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -824,6 +824,7 @@ def test_user_can_create_draft_upload(
|
||||||
assert upload.source == "upload://test"
|
assert upload.source == "upload://test"
|
||||||
assert upload.import_reference == "test"
|
assert upload.import_reference == "test"
|
||||||
assert upload.import_status == "draft"
|
assert upload.import_status == "draft"
|
||||||
|
assert upload.mimetype == "audio/ogg"
|
||||||
assert upload.track is None
|
assert upload.track is None
|
||||||
m.assert_not_called()
|
m.assert_not_called()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run ``python manage.py fix_uploads --mimetypes`` to set proper mimetypes on existing uploads.
|
Loading…
Reference in New Issue