diff --git a/CHANGELOG b/CHANGELOG index c02e7665e1fe5de08762c1cc24ad77dad397b045..dc8f4df03ae49c3a72e71ba0ef4c7140aed2741e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,9 @@ Changelog 0.6 (Unreleased) ---------------- +- Fixed broken file import due to wrong url (#73) +- More accurate mimetype detection + 0.5.1 (2018-02-24) ------------------ diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index a75cf5de8508efaa5df587eb17b01a2e87f1214f..df659cb8057b3c519610ff0a70f2524b973d220f 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -1,4 +1,5 @@ import magic +import mimetypes import re from django.db.models import Q @@ -42,7 +43,13 @@ def get_query(query_string, search_fields): def guess_mimetype(f): b = min(100000, f.size) - return magic.from_buffer(f.read(b), mime=True) + t = magic.from_buffer(f.read(b), mime=True) + if t == 'application/octet-stream': + # failure, we try guessing by extension + mt, _ = mimetypes.guess_type(f.path) + if mt: + t = mt + return t def compute_status(jobs): diff --git a/api/tests/music/test_utils.py b/api/tests/music/test_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0a4f4b99424c34557fb846866b6e1b2958244a88 --- /dev/null +++ b/api/tests/music/test_utils.py @@ -0,0 +1,19 @@ +from funkwhale_api.music import utils + + +def test_guess_mimetype_try_using_extension(factories, mocker): + mocker.patch( + 'magic.from_buffer', return_value='audio/mpeg') + f = factories['music.TrackFile'].build( + audio_file__filename='test.ogg') + + assert utils.guess_mimetype(f.audio_file) == 'audio/mpeg' + + +def test_guess_mimetype_try_using_extension_if_fail(factories, mocker): + mocker.patch( + 'magic.from_buffer', return_value='application/octet-stream') + f = factories['music.TrackFile'].build( + audio_file__filename='test.mp3') + + assert utils.guess_mimetype(f.audio_file) == 'audio/mpeg' diff --git a/front/src/components/library/import/FileUpload.vue b/front/src/components/library/import/FileUpload.vue index 35b7b636ad79200d36e68c9b53a0fff8918edd3d..1b90adc9d71b2d0425603d0cbb9f98de0b51a905 100644 --- a/front/src/components/library/import/FileUpload.vue +++ b/front/src/components/library/import/FileUpload.vue @@ -29,7 +29,7 @@ </button> </div> <div class="ui hidden divider"></div> - <p> + <p v-if="batch"> Once all your files are uploaded, simply head over <router-link :to="{name: 'library.import.batches.detail', params: {id: batch.id }}">import detail page</router-link> to check the import status. </p> <table class="ui single line table"> @@ -73,7 +73,7 @@ export default { data () { return { files: [], - uploadUrl: 'import-jobs/', + uploadUrl: '/api/v1/import-jobs/', batch: null } },