diff --git a/README.md b/README.md index d338ab9..f91cf5b 100755 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ scdl me -f --client-id [id] Specify the client_id to use --auth-token [token] Specify the auth token to use --overwrite Overwrite file if it already exists +--strict Fail if setting metadata fails ``` diff --git a/scdl/scdl.py b/scdl/scdl.py index c07e1e2..6b286ad 100755 --- a/scdl/scdl.py +++ b/scdl/scdl.py @@ -8,7 +8,7 @@ Usage: [-o ][--hidewarnings][--debug | --error][--path ][--addtofile][--addtimestamp] [--onlymp3][--hide-progress][--min-size ][--max-size ][--remove][--no-album-tag] [--no-playlist-folder][--download-archive ][--extract-artist][--flac][--original-art] -[--original-name][--no-original][--only-original][--name-format ] +[--original-name][--no-original][--only-original][--name-format ][--strict] [--playlist-name-format ][--client-id ][--auth-token ][--overwrite] scdl -h | --help scdl --version @@ -58,6 +58,7 @@ Options: --client-id [id] Specify the client_id to use --auth-token [token] Specify the auth token to use --overwrite Overwrite file if it already exists + --strict Fail if setting metadata fails """ import configparser @@ -398,12 +399,9 @@ def get_filename(track: BasicTrack, original_filename=None, aac=False, playlist_ ext = ".m4a" if aac else ".mp3" # contain aac in m4a to write metadata if original_filename is not None: - original_filename.encode("utf-8", "ignore").decode("utf8") + original_filename = original_filename.encode("utf-8", "ignore").decode("utf-8") ext = os.path.splitext(original_filename)[1] - # get filename to 255 bytes - while len(title.encode("utf-8")) > 255 - len(ext.encode("utf-8")): - title = title[:-1] - filename = title + ext.lower() + filename = limit_filename_length(title, ext) filename = sanitize_filename(filename) return filename @@ -468,7 +466,7 @@ def download_original_file(client: SoundCloud, track: BasicTrack, title: str, pl shutil.move(temp.name, os.path.join(os.getcwd(), filename)) if kwargs.get("flac") and can_convert(filename): logger.info("Converting to .flac...") - newfilename = filename[:-4] + ".flac" + newfilename = limit_filename_length(filename[:-4], ".flac") commands = ["ffmpeg", "-i", filename, newfilename, "-loglevel", "error"] logger.debug(f"Commands: {commands}") @@ -587,6 +585,9 @@ def download_track(client: SoundCloud, track: BasicTrack, playlist_info=None, ** set_metadata(track, filename, playlist_info, **kwargs) except: logger.exception("Error trying to set the tags...") + if kwargs.get("strict"): + os.remove(filename) + sys.exit(1) else: logger.error("This type of audio doesn't support tagging...") @@ -771,6 +772,10 @@ def set_metadata(track: BasicTrack, filename: str, playlist_info=None, **kwargs) a["covr"] = [mutagen.mp4.MP4Cover(out_file.read())] a.save() +def limit_filename_length(name: str, ext: str, max_bytes=255): + while len(name.encode("utf-8")) + len(ext.encode("utf-8")) > max_bytes: + name = name[:-1] + return name + ext def signal_handler(signal, frame): """ @@ -779,13 +784,11 @@ def signal_handler(signal, frame): logger.info("\nGood bye!") sys.exit(0) - def is_ffmpeg_available(): """ Returns true if ffmpeg is available in the operating system """ return shutil.which("ffmpeg") is not None - if __name__ == "__main__": main()