diff --git a/README.md b/README.md index 11de180..db12a9f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@
-Ironic Redistribution System -=== +# Ironic Redistribution System [![License: GNU](https://img.shields.io/badge/license-gnu-yellow.svg?style=flat-square)](http://www.gnu.org/licenses/gpl.html) [![Stars](https://img.shields.io/github/stars/kepoorhampond/irs.svg?style=flat-square)](https://github.com/kepoorhampond/irs/stargazers) @@ -17,7 +16,6 @@ Ironic Redistribution System A tool to download your music with metadata. It uses [Spotify](https://www.spotify.com/) for finding metadata and [Youtube](https://www.youtube.com/) for the actual audio source. Works with Python 2 and 3. -___ ## Demo and Usages @@ -59,7 +57,7 @@ $ irs -s "Bohemian Rhapsody" $ irs -p "Best Nirvana" ``` -## Install & The Dependencies (my new band name) +## Install & The Dependencies (my new band name \s) Really there's only one actual external dependency: `ffmpeg`. For windows, you'll want to follow [this](http://www.wikihow.com/Install-FFmpeg-on-Windows) guide. For OSX, you'll want to install it through [`brew`](https://brew.sh/) with this command: ``` diff --git a/irs/ripper.py b/irs/ripper.py index 6d89cbc..83a42c7 100644 --- a/irs/ripper.py +++ b/irs/ripper.py @@ -42,6 +42,8 @@ class Ripper: if self.args["hook-text"].get("converting") is not None: CONFIG["converting"] = self.args["hook-text"]["converting"] + self.args = ObjManip.set_utf8_encoding(self.args) + self.locations = [] self.type = None try: @@ -79,7 +81,7 @@ class Ripper: # those flaws for being exclusive to them. # And if those flaws are really enough to turn you off of them, # then you *probably* don't really want to be with them anyways. - # Either way, it's up to you. + # Either way, it's up to you. (I'd just ignore this) if Config.parse_organize(self): if self.type in ("album", "song"): @@ -193,7 +195,7 @@ album".split(" ") return ("https://youtube.com" + self.code["href"], self.code["title"]) - def album(self, title, artist=None): # Alias for `spotify_list("album", ...)` + def album(self, title, artist=None): # Alias for spotify_list("album", ..) return self.spotify_list("album", title=title, artist=artist) def playlist(self, title, username): @@ -248,7 +250,9 @@ with init, or in method arguments.") if the_list is not None: YdlUtils.clear_line() - print(self.args["hook-text"].get("list") + the_list = ObjManip.set_utf8_encoding(the_list) + + print(unicode(self.args["hook-text"].get("list")) .format(type.title(), the_list["name"], the_list["artists"][0]["name"])) @@ -361,6 +365,7 @@ init, or in method arguments.") if data == {}: data = self.parse_song_data(song, artist) if data != {}: + data = ObjManip.set_utf8_encoding(data) song = data["name"] artist = data["artist"] @@ -369,7 +374,7 @@ init, or in method arguments.") video_url, video_title = self.find_yt_url(song, artist) - print(self.args["hook-text"].get("song").format(song, artist)) + print(unicode(self.args["hook-text"].get("song")).format(song, artist)) file_name = str(data["file_prefix"] + ObjManip.blank(song, False) + ".mp3") diff --git a/irs/utils.py b/irs/utils.py index dc24f98..4d78271 100644 --- a/irs/utils.py +++ b/irs/utils.py @@ -56,6 +56,20 @@ class YdlUtils: # Object Manipulation and Checking # ================================ +def set_utf8_encoding(ld): # ld => a list or dictionary with strings in it + if type(ld) == dict: + for k, v in ld.iteritems(): + if type(v) == dict or type(v) == list: + ld[k] = set_utf8_encoding(v) + elif type(v) == str: + ld[k] = v.encode('utf-8') + elif type(ld) == list: + for index, datum in enumerate(ld): + if type(datum) == str: + ld[index] = datum.encode('utf-8') + return ld + + @staticmethods class ObjManip: # Object Manipulation def limit_song_name(song): @@ -118,11 +132,14 @@ class ObjManip: # Object Manipulation del new_d[x] return new_d + def set_utf8_encoding(ld): # ld => a list or dictionary with strings in it + return set_utf8_encoding(ld) # ======================================== # Download Log Reading/Updating/Formatting # ======================================== + @staticmethods class DLog: def format_download_log_line(t, download_status="not downloaded"):