Update zspotify.py

This commit is contained in:
Footsiefat 2021-10-14 19:41:49 +13:00 committed by GitHub
parent 89096db1c7
commit 97c2812522
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -230,8 +230,9 @@ def getSongInfo(songId):
disc_number = info['tracks'][0]['disc_number'] disc_number = info['tracks'][0]['disc_number']
track_number = info['tracks'][0]['track_number'] track_number = info['tracks'][0]['track_number']
scrapedSongId = info['tracks'][0]['id'] scrapedSongId = info['tracks'][0]['id']
isPlayAble = info['tracks'][0]['is_playable']
return artists, albumName, name, imageUrl, releaseYear, disc_number, track_number, scrapedSongId return artists, albumName, name, imageUrl, releaseYear, disc_number, track_number, scrapedSongId, isPlayAble
@ -339,69 +340,71 @@ def get_album_name(access_token, album_id):
#Functions directly related to downloading stuff #Functions directly related to downloading stuff
def downloadTrack(track_id_str: str, extra_paths = ""): def downloadTrack(track_id_str: str, extra_paths = ""):
global rootPath, skipExistingFiles global rootPath, skipExistingFiles
track_id = TrackId.from_base62(track_id_str) track_id = TrackId.from_base62(track_id_str)
artists, albumName, name, imageUrl, releaseYear, disc_number, track_number, scrapedSongId = getSongInfo(track_id_str) artists, albumName, name, imageUrl, releaseYear, disc_number, track_number, scrapedSongId, isPlayAble = getSongInfo(track_id_str)
songName = artists[0] + " - " + name songName = artists[0] + " - " + name
filename = rootPath + extra_paths + songName + '.mp3' filename = rootPath + extra_paths + songName + '.mp3'
skipExistingFiles if not isPlayAble:
print("### SKIPPING:", songName, "(SONG IS UNAVAILABLE) ###")
if os.path.isfile(filename) and skipExistingFiles:
print("### SKIPPING:", songName, "(SONG ALREADY EXISTS) ###")
else: else:
if track_id_str != scrapedSongId: if os.path.isfile(filename) and skipExistingFiles:
print("### APPLYING PATCH TO LET SONG DOWNLOAD ###") print("### SKIPPING:", songName, "(SONG ALREADY EXISTS) ###")
track_id_str = scrapedSongId else:
track_id = TrackId.from_base62(track_id_str) if track_id_str != scrapedSongId:
print("### APPLYING PATCH TO LET SONG DOWNLOAD ###")
track_id_str = scrapedSongId
track_id = TrackId.from_base62(track_id_str)
print("### FOUND SONG:", songName, " ###") print("### FOUND SONG:", songName, " ###")
stream = session.content_feeder().load( stream = session.content_feeder().load(
track_id, VorbisOnlyAudioQuality(quality), False, None) track_id, VorbisOnlyAudioQuality(quality), False, None)
print("### DOWNLOADING RAW AUDIO ###") print("### DOWNLOADING RAW AUDIO ###")
if not os.path.isdir(rootPath + extra_paths): if not os.path.isdir(rootPath + extra_paths):
os.makedirs(rootPath + extra_paths) os.makedirs(rootPath + extra_paths)
with open(filename,'wb') as f: with open(filename,'wb') as f:
''' '''
chunk_size = 1024 * 16 chunk_size = 1024 * 16
buffer = bytearray(chunk_size) buffer = bytearray(chunk_size)
bpos = 0 bpos = 0
''' '''
#With the updated version of librespot my faster download method broke so we are using the old fallback method #With the updated version of librespot my faster download method broke so we are using the old fallback method
while True: while True:
byte = stream.input_stream.stream().read() byte = stream.input_stream.stream().read()
if byte == b'': if byte == b'':
break break
f.write(byte) f.write(byte)
''' '''
while True: while True:
byte = stream.input_stream.stream().read() byte = stream.input_stream.stream().read()
if byte == -1: if byte == -1:
# flush buffer before breaking # flush buffer before breaking
if bpos > 0: if bpos > 0:
f.write(buffer[0:bpos]) f.write(buffer[0:bpos])
break break
print(bpos) print(bpos)
buffer[bpos] = byte buffer[bpos] = byte
bpos += 1 bpos += 1
if bpos == (chunk_size): if bpos == (chunk_size):
f.write(buffer) f.write(buffer)
bpos = 0 bpos = 0
''' '''
convertToMp3(filename) convertToMp3(filename)
setAudioTags(filename, artists, name, albumName, releaseYear, disc_number, track_number) setAudioTags(filename, artists, name, albumName, releaseYear, disc_number, track_number)
setMusicThumbnail(filename, imageUrl) setMusicThumbnail(filename, imageUrl)
def downloadAlbum(album): def downloadAlbum(album):
token = session.tokens().get("user-read-email") token = session.tokens().get("user-read-email")