diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index 43371d5d8..b058f2e80 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -874,7 +874,7 @@ class Upload(models.Model): if self.audio_file: self.mimetype = utils.guess_mimetype(self.audio_file) elif self.source and self.source.startswith("file://"): - self.mimetype = mimetypes.guess_type(self.source)[0] + self.mimetype = utils.guess_mimetype_from_name(self.source) if not self.size and self.audio_file: self.size = self.audio_file.size if not self.checksum: diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index 64a7c24f8..b61c8223b 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -18,12 +18,18 @@ def guess_mimetype(f): b = min(1000000, f.size) t = magic.from_buffer(f.read(b), mime=True) if not t.startswith("audio/"): - # failure, we try guessing by extension - mt, _ = mimetypes.guess_type(f.name) - if mt: - t = mt - else: - t = EXTENSION_TO_MIMETYPE.get(f.name.split(".")[-1]) + t = guess_mimetype_from_name(f.name) + + return t + + +def guess_mimetype_from_name(name): + # failure, we try guessing by extension + mt, _ = mimetypes.guess_type(name) + if mt: + t = mt + else: + t = EXTENSION_TO_MIMETYPE.get(name.split(".")[-1]) return t diff --git a/changes/changelog.d/1165.bugfix b/changes/changelog.d/1165.bugfix new file mode 100644 index 000000000..e1b1b10e2 --- /dev/null +++ b/changes/changelog.d/1165.bugfix @@ -0,0 +1 @@ +Fixed broken mimetype detection during import (#1165)