mirror of
https://github.com/cooperhammond/irs.git
synced 2024-12-22 17:35:28 +00:00
Ability to place songs from playlists all into one folder. Use flag.
This commit is contained in:
parent
a28525f144
commit
ca5cbea5ea
11
README.md
11
README.md
|
@ -30,15 +30,16 @@ irs -A "Sadnecessary" # -a "Milky Chance"
|
||||||
Full usage:
|
Full usage:
|
||||||
```
|
```
|
||||||
usage:
|
usage:
|
||||||
irs (-h | -v)
|
irs (-h | -v | -C)
|
||||||
irs [-l]
|
irs [-l] [-sa]
|
||||||
irs -p PLAYLIST [-c COMMAND] [-l]
|
irs -p PLAYLIST [-c COMMAND] [-l] [-sa]
|
||||||
irs -A ALBUM [-c COMMAND] [-l]
|
irs -A ALBUM [-c COMMAND] [-l] [-sa]
|
||||||
irs -a ARTIST -s SONG [-c COMMAND] [-l]
|
irs -a ARTIST -s SONG [-c COMMAND] [-l]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-v, --version Display the version and exit.
|
-v, --version Display the version and exit.
|
||||||
|
-C, --config Return location of configuration file.
|
||||||
-A ALBUM, --album ALBUM
|
-A ALBUM, --album ALBUM
|
||||||
Search spotify for an album.
|
Search spotify for an album.
|
||||||
-p PLAYLIST, --playlist PLAYLIST
|
-p PLAYLIST, --playlist PLAYLIST
|
||||||
|
@ -53,6 +54,8 @@ Options:
|
||||||
-a/--artist
|
-a/--artist
|
||||||
-l, --choose-link If supplied, will bring up a console choice for what
|
-l, --choose-link If supplied, will bring up a console choice for what
|
||||||
link you want to download based off a list of titles.
|
link you want to download based off a list of titles.
|
||||||
|
-sa, --start-at A song index to start at if something goes wrong while
|
||||||
|
downloading and you have to restart.
|
||||||
```
|
```
|
||||||
Make a note that capitalization and spelling matters a lot in this program.
|
Make a note that capitalization and spelling matters a lot in this program.
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@ HELP = \
|
||||||
"""
|
"""
|
||||||
usage:
|
usage:
|
||||||
irs (-h | -v | -C)
|
irs (-h | -v | -C)
|
||||||
irs [-l]
|
irs [-l] [-sa]
|
||||||
irs -p PLAYLIST [-c COMMAND] [-l]
|
irs -p PLAYLIST [-c COMMAND] [-l] [-sa]
|
||||||
irs -A ALBUM [-c COMMAND] [-l]
|
irs -A ALBUM [-c COMMAND] [-l] [-sa]
|
||||||
irs -a ARTIST -s SONG [-c COMMAND] [-l]
|
irs -a ARTIST -s SONG [-c COMMAND] [-l]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
@ -35,6 +35,12 @@ Options:
|
||||||
|
|
||||||
-l, --choose-link If supplied, will bring up a console choice for what
|
-l, --choose-link If supplied, will bring up a console choice for what
|
||||||
link you want to download based off a list of titles.
|
link you want to download based off a list of titles.
|
||||||
|
|
||||||
|
-sa, --start-at A song index to start at if something goes wrong while
|
||||||
|
downloading and you have to restart.
|
||||||
|
|
||||||
|
-of, --one-folder To place all songs downloaded from a playlist into one
|
||||||
|
folder.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# For exiting
|
# For exiting
|
||||||
|
@ -62,9 +68,14 @@ def main():
|
||||||
parser.add_argument('-l', '--choose-link', action='store_true', dest="link", \
|
parser.add_argument('-l', '--choose-link', action='store_true', dest="link", \
|
||||||
help="Whether or not to choose the link from a list of titles.")
|
help="Whether or not to choose the link from a list of titles.")
|
||||||
|
|
||||||
|
parser.add_argument('-sa', '--start-at', dest="start_at", help="An index to start at if downloading a list.")
|
||||||
|
|
||||||
parser.add_argument('-p', '--playlist', dest="playlist", \
|
parser.add_argument('-p', '--playlist', dest="playlist", \
|
||||||
help="Specify playlist filename. Each line should be formatted like so: SONGNAME - ARTIST")
|
help="Specify playlist filename. Each line should be formatted like so: SONGNAME - ARTIST")
|
||||||
|
|
||||||
|
parser.add_argument('-of', '--one-folder', action="store_true", dest="one_folder", \
|
||||||
|
help="Place all downloaded playlist songs into one folder")
|
||||||
|
|
||||||
media = parser.add_mutually_exclusive_group()
|
media = parser.add_mutually_exclusive_group()
|
||||||
media.add_argument('-s', '--song', dest="song", help="Specify song name of the artist.")
|
media.add_argument('-s', '--song', dest="song", help="Specify song name of the artist.")
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,14 @@ CONFIG = dict(
|
||||||
# default_flags = '-c rhythmbox %(loc)s',
|
# default_flags = '-c rhythmbox %(loc)s',
|
||||||
# To make choosing of links default:
|
# To make choosing of links default:
|
||||||
# default_flags = '-l',
|
# default_flags = '-l',
|
||||||
|
# To place all playlist songs into one folder:
|
||||||
|
# default_flags = '-of',
|
||||||
default_flags = '',
|
default_flags = '',
|
||||||
|
|
||||||
|
|
||||||
# These are necessary to download Spotify playlists
|
# These are necessary to download Spotify playlists
|
||||||
client_id = '',
|
client_id = 'e4198f6a3f7b48029366f22528b5dc66',
|
||||||
client_secret = '',
|
client_secret = '69adc699f79e4640a6fd7610635b025f',
|
||||||
|
|
||||||
# For a custom directory. Note that `~` will not work as a shortcut.
|
# For a custom directory. Note that `~` will not work as a shortcut.
|
||||||
directory = str(expanduser("~")) + "/Music",
|
directory = str(expanduser("~")) + "/Music",
|
||||||
|
@ -20,5 +22,5 @@ CONFIG = dict(
|
||||||
numbered_file_names = True,
|
numbered_file_names = True,
|
||||||
|
|
||||||
# Downloaded file names
|
# Downloaded file names
|
||||||
download_file_names = True,
|
download_file_names = False,
|
||||||
)
|
)
|
||||||
|
|
|
@ -164,6 +164,7 @@ class Manager:
|
||||||
spotify_list = choose_from_spotify_list(items, length=length)
|
spotify_list = choose_from_spotify_list(items, length=length)
|
||||||
|
|
||||||
list_type = spotify_list["type"]
|
list_type = spotify_list["type"]
|
||||||
|
name = spotify_list["name"]
|
||||||
if list_type != "playlist":
|
if list_type != "playlist":
|
||||||
spotify_list = eval("spotify.%s" % list_type)(spotify_list["uri"])
|
spotify_list = eval("spotify.%s" % list_type)(spotify_list["uri"])
|
||||||
else:
|
else:
|
||||||
|
@ -195,10 +196,10 @@ class Manager:
|
||||||
album = spotify_list
|
album = spotify_list
|
||||||
|
|
||||||
songs.append({
|
songs.append({
|
||||||
"name": song["name"],
|
"name": song["name"].split(" - ")[0],
|
||||||
"artist": artist["name"],
|
"artist": artist["name"],
|
||||||
"album": album["name"],
|
"album": album["name"],
|
||||||
"tracknum": song["track_number"],
|
"tracknum": increment,
|
||||||
"album_cover": album["images"][0]["url"]
|
"album_cover": album["images"][0]["url"]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -209,9 +210,41 @@ class Manager:
|
||||||
print ("\t" + song["name"] + " - " + song["artist"])
|
print ("\t" + song["name"] + " - " + song["artist"])
|
||||||
print (bc.ENDC + "\n")
|
print (bc.ENDC + "\n")
|
||||||
|
|
||||||
for song in songs:
|
if self.args.start_at:
|
||||||
self.rip_mp3(song["name"], song["artist"], album=song["album"], \
|
start_at = int(self.args.start_at) - 1
|
||||||
tracknum=song["tracknum"], album_art_url=song["album_cover"])
|
if start_at < 0:
|
||||||
|
start_at = 0
|
||||||
|
else:
|
||||||
|
start_at = 0
|
||||||
|
|
||||||
|
for song in songs[start_at:]:
|
||||||
|
|
||||||
|
already_there = False
|
||||||
|
if os.path.isdir(CONFIG["directory"] + "/" + song["artist"]):
|
||||||
|
already_there = True
|
||||||
|
|
||||||
|
song_loc = self.rip_mp3(song["name"], song["artist"], album=song["album"], \
|
||||||
|
tracknum=song["tracknum"], album_art_url=song["album_cover"], \
|
||||||
|
out_of="%s/%s - " % (song["tracknum"], len(songs)))
|
||||||
|
|
||||||
|
if self.args.one_folder:
|
||||||
|
|
||||||
|
one_folder = CONFIG["directory"] + "/" + strip_special_chars(name[:30])
|
||||||
|
|
||||||
|
if not os.path.isdir(one_folder):
|
||||||
|
os.makedirs(one_folder)
|
||||||
|
|
||||||
|
new_loc = one_folder + "/" + song_loc.split("/")[-1]
|
||||||
|
|
||||||
|
os.rename(song_loc, new_loc)
|
||||||
|
|
||||||
|
if not already_there:
|
||||||
|
import shutil
|
||||||
|
shutil.rmtree(CONFIG["directory"] + "/" + song["artist"])
|
||||||
|
|
||||||
|
if self.args.command:
|
||||||
|
os.system((self.args.command.replace("%(loc)s", '"%s"' % new_loc) + " &"))
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print (bc.FAIL + "No results were found. Make sure to use proper spelling and capitalization." + bc.ENDC)
|
print (bc.FAIL + "No results were found. Make sure to use proper spelling and capitalization." + bc.ENDC)
|
||||||
|
@ -221,7 +254,7 @@ class Manager:
|
||||||
album=None, # if you want to specify an album and save a bit of time.
|
album=None, # if you want to specify an album and save a bit of time.
|
||||||
tracknum=None, # to specify the tracknumber in the album.
|
tracknum=None, # to specify the tracknumber in the album.
|
||||||
album_art_url=None, # if you want to save a lot of time trying to find album cover.
|
album_art_url=None, # if you want to save a lot of time trying to find album cover.
|
||||||
organize=True
|
out_of="", # For a string to put before the song title.
|
||||||
):
|
):
|
||||||
|
|
||||||
|
|
||||||
|
@ -231,6 +264,8 @@ class Manager:
|
||||||
if not artist:
|
if not artist:
|
||||||
artist = self.args.artist
|
artist = self.args.artist
|
||||||
|
|
||||||
|
|
||||||
|
print (color(out_of, ["UNDERLINE"]), end="")
|
||||||
audio_code = self.find_mp3(song=song, artist=artist)
|
audio_code = self.find_mp3(song=song, artist=artist)
|
||||||
|
|
||||||
if CONFIG["numbered_file_names"] and tracknum:
|
if CONFIG["numbered_file_names"] and tracknum:
|
||||||
|
|
|
@ -123,7 +123,7 @@ def fail_oauth():
|
||||||
print (get_config_file_path())
|
print (get_config_file_path())
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
def choose_from_spotify_list(thelist, length=10):
|
def choose_from_spotify_list(thelist, length=100000):
|
||||||
spotify = spotipy.Spotify()
|
spotify = spotipy.Spotify()
|
||||||
|
|
||||||
thelist = list(thelist)
|
thelist = list(thelist)
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -2,7 +2,7 @@ from setuptools import setup
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='irs',
|
name='irs',
|
||||||
version='4.8.23',
|
version='3.1.0',
|
||||||
description='A music downloader that just gets metadata.',
|
description='A music downloader that just gets metadata.',
|
||||||
url='https://github.com/kepoorhampond/irs',
|
url='https://github.com/kepoorhampond/irs',
|
||||||
author='Kepoor Hampond',
|
author='Kepoor Hampond',
|
||||||
|
|
Loading…
Reference in a new issue