mirror of
https://github.com/THIS-IS-NOT-A-BACKUP/zspotify.git
synced 2024-11-26 09:53:17 +01:00
Added --temp-download-dir option
This commit is contained in:
parent
cb42b4a878
commit
5a655f96ef
@ -77,6 +77,7 @@ Be aware you have to set boolean values in the commandline like this: `--downloa
|
|||||||
| PRINT_DOWNLOAD_PROGRESS | --print-download-progress | Print the download/playlist progress bars
|
| PRINT_DOWNLOAD_PROGRESS | --print-download-progress | Print the download/playlist progress bars
|
||||||
| PRINT_ERRORS | --print-errors | Print errors
|
| PRINT_ERRORS | --print-errors | Print errors
|
||||||
| PRINT_DOWNLOADS | --print-downloads | Print messages when a song is finished downloading
|
| PRINT_DOWNLOADS | --print-downloads | Print messages when a song is finished downloading
|
||||||
|
| TEMP_DOWNLOAD_DIR | --temp-download-dir | Download tracks to a temporary directory first
|
||||||
|
|
||||||
### Output format:
|
### Output format:
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ PRINT_SKIPS = 'PRINT_SKIPS'
|
|||||||
PRINT_DOWNLOAD_PROGRESS = 'PRINT_DOWNLOAD_PROGRESS'
|
PRINT_DOWNLOAD_PROGRESS = 'PRINT_DOWNLOAD_PROGRESS'
|
||||||
PRINT_ERRORS = 'PRINT_ERRORS'
|
PRINT_ERRORS = 'PRINT_ERRORS'
|
||||||
PRINT_DOWNLOADS = 'PRINT_DOWNLOADS'
|
PRINT_DOWNLOADS = 'PRINT_DOWNLOADS'
|
||||||
|
TEMP_DOWNLOAD_DIR = 'TEMP_DOWNLOAD_DIR'
|
||||||
|
|
||||||
CONFIG_VALUES = {
|
CONFIG_VALUES = {
|
||||||
ROOT_PATH: { 'default': '../ZSpotify Music/', 'type': str, 'arg': '--root-path' },
|
ROOT_PATH: { 'default': '../ZSpotify Music/', 'type': str, 'arg': '--root-path' },
|
||||||
@ -50,6 +51,7 @@ CONFIG_VALUES = {
|
|||||||
PRINT_DOWNLOAD_PROGRESS: { 'default': 'True', 'type': bool, 'arg': '--print-download-progress' },
|
PRINT_DOWNLOAD_PROGRESS: { 'default': 'True', 'type': bool, 'arg': '--print-download-progress' },
|
||||||
PRINT_ERRORS: { 'default': 'True', 'type': bool, 'arg': '--print-errors' },
|
PRINT_ERRORS: { 'default': 'True', 'type': bool, 'arg': '--print-errors' },
|
||||||
PRINT_DOWNLOADS: { 'default': 'False', 'type': bool, 'arg': '--print-downloads' },
|
PRINT_DOWNLOADS: { 'default': 'False', 'type': bool, 'arg': '--print-downloads' },
|
||||||
|
TEMP_DOWNLOAD_DIR: { 'default': '', 'type': str, 'arg': '--temp-download-dir' },
|
||||||
}
|
}
|
||||||
|
|
||||||
OUTPUT_DEFAULT_PLAYLIST = '{playlist}/{artist} - {song_name}.{ext}'
|
OUTPUT_DEFAULT_PLAYLIST = '{playlist}/{artist} - {song_name}.{ext}'
|
||||||
@ -187,6 +189,12 @@ class Config:
|
|||||||
def get_credentials_location(cls) -> str:
|
def get_credentials_location(cls) -> str:
|
||||||
return cls.get(CREDENTIALS_LOCATION)
|
return cls.get(CREDENTIALS_LOCATION)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_temp_download_dir(cls) -> str:
|
||||||
|
if cls.get(TEMP_DOWNLOAD_DIR) == '':
|
||||||
|
return ''
|
||||||
|
return os.path.join(ZSpotify.CONFIG.get_root_path(), cls.get(TEMP_DOWNLOAD_DIR))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_output(cls, mode: str) -> str:
|
def get_output(cls, mode: str) -> str:
|
||||||
v = cls.get(OUTPUT)
|
v = cls.get(OUTPUT)
|
||||||
|
@ -2,6 +2,7 @@ import math
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
|
import uuid
|
||||||
from typing import Any, Tuple, List
|
from typing import Any, Tuple, List
|
||||||
|
|
||||||
from librespot.audio.decoders import AudioQuality
|
from librespot.audio.decoders import AudioQuality
|
||||||
@ -83,6 +84,8 @@ def download_track(mode: str, track_id: str, extra_keys={}, disable_progressbar=
|
|||||||
for k in extra_keys:
|
for k in extra_keys:
|
||||||
output_template = output_template.replace("{"+k+"}", fix_filename(extra_keys[k]))
|
output_template = output_template.replace("{"+k+"}", fix_filename(extra_keys[k]))
|
||||||
|
|
||||||
|
ext = EXT_MAP.get(ZSpotify.CONFIG.get_download_format().lower())
|
||||||
|
|
||||||
output_template = output_template.replace("{artist}", fix_filename(artists[0]))
|
output_template = output_template.replace("{artist}", fix_filename(artists[0]))
|
||||||
output_template = output_template.replace("{album}", fix_filename(album_name))
|
output_template = output_template.replace("{album}", fix_filename(album_name))
|
||||||
output_template = output_template.replace("{song_name}", fix_filename(name))
|
output_template = output_template.replace("{song_name}", fix_filename(name))
|
||||||
@ -91,11 +94,15 @@ def download_track(mode: str, track_id: str, extra_keys={}, disable_progressbar=
|
|||||||
output_template = output_template.replace("{track_number}", fix_filename(track_number))
|
output_template = output_template.replace("{track_number}", fix_filename(track_number))
|
||||||
output_template = output_template.replace("{id}", fix_filename(scraped_song_id))
|
output_template = output_template.replace("{id}", fix_filename(scraped_song_id))
|
||||||
output_template = output_template.replace("{track_id}", fix_filename(track_id))
|
output_template = output_template.replace("{track_id}", fix_filename(track_id))
|
||||||
output_template = output_template.replace("{ext}", EXT_MAP.get(ZSpotify.CONFIG.get_download_format().lower()))
|
output_template = output_template.replace("{ext}", ext)
|
||||||
|
|
||||||
filename = os.path.join(os.path.dirname(__file__), ZSpotify.CONFIG.get_root_path(), output_template)
|
filename = os.path.join(os.path.dirname(__file__), ZSpotify.CONFIG.get_root_path(), output_template)
|
||||||
filedir = os.path.dirname(filename)
|
filedir = os.path.dirname(filename)
|
||||||
|
|
||||||
|
filename_temp = filename
|
||||||
|
if ZSpotify.CONFIG.get_temp_download_dir() != '':
|
||||||
|
filename_temp = os.path.join(ZSpotify.CONFIG.get_temp_download_dir(), f'zspotify_{str(uuid.uuid4())}_{track_id}.{ext}')
|
||||||
|
|
||||||
check_name = os.path.isfile(filename) and os.path.getsize(filename)
|
check_name = os.path.isfile(filename) and os.path.getsize(filename)
|
||||||
check_id = scraped_song_id in get_directory_song_ids(filedir)
|
check_id = scraped_song_id in get_directory_song_ids(filedir)
|
||||||
check_all_time = scraped_song_id in get_previously_downloaded()
|
check_all_time = scraped_song_id in get_previously_downloaded()
|
||||||
@ -128,14 +135,13 @@ def download_track(mode: str, track_id: str, extra_keys={}, disable_progressbar=
|
|||||||
if track_id != scraped_song_id:
|
if track_id != scraped_song_id:
|
||||||
track_id = scraped_song_id
|
track_id = scraped_song_id
|
||||||
track_id = TrackId.from_base62(track_id)
|
track_id = TrackId.from_base62(track_id)
|
||||||
stream = ZSpotify.get_content_stream(
|
stream = ZSpotify.get_content_stream(track_id, ZSpotify.DOWNLOAD_QUALITY)
|
||||||
track_id, ZSpotify.DOWNLOAD_QUALITY)
|
|
||||||
create_download_directory(filedir)
|
create_download_directory(filedir)
|
||||||
total_size = stream.input_stream.size
|
total_size = stream.input_stream.size
|
||||||
|
|
||||||
time_start = time.time()
|
time_start = time.time()
|
||||||
downloaded = 0
|
downloaded = 0
|
||||||
with open(filename, 'wb') as file, Printer.progress(
|
with open(filename_temp, 'wb') as file, Printer.progress(
|
||||||
desc=song_name,
|
desc=song_name,
|
||||||
total=total_size,
|
total=total_size,
|
||||||
unit='B',
|
unit='B',
|
||||||
@ -155,9 +161,12 @@ def download_track(mode: str, track_id: str, extra_keys={}, disable_progressbar=
|
|||||||
|
|
||||||
time_downloaded = time.time()
|
time_downloaded = time.time()
|
||||||
|
|
||||||
convert_audio_format(filename)
|
convert_audio_format(filename_temp)
|
||||||
set_audio_tags(filename, artists, name, album_name, release_year, disc_number, track_number)
|
set_audio_tags(filename_temp, artists, name, album_name, release_year, disc_number, track_number)
|
||||||
set_music_thumbnail(filename, image_url)
|
set_music_thumbnail(filename_temp, image_url)
|
||||||
|
|
||||||
|
if filename_temp != filename:
|
||||||
|
os.rename(filename_temp, filename)
|
||||||
|
|
||||||
time_finished = time.time()
|
time_finished = time.time()
|
||||||
|
|
||||||
@ -176,8 +185,8 @@ def download_track(mode: str, track_id: str, extra_keys={}, disable_progressbar=
|
|||||||
Printer.print(PrintChannel.ERRORS, '### SKIPPING: ' + song_name + ' (GENERAL DOWNLOAD ERROR) ###')
|
Printer.print(PrintChannel.ERRORS, '### SKIPPING: ' + song_name + ' (GENERAL DOWNLOAD ERROR) ###')
|
||||||
Printer.print(PrintChannel.ERRORS, str(e) + "\n")
|
Printer.print(PrintChannel.ERRORS, str(e) + "\n")
|
||||||
Printer.print(PrintChannel.ERRORS, "".join(traceback.TracebackException.from_exception(e).format()) + "\n")
|
Printer.print(PrintChannel.ERRORS, "".join(traceback.TracebackException.from_exception(e).format()) + "\n")
|
||||||
if os.path.exists(filename):
|
if os.path.exists(filename_temp):
|
||||||
os.remove(filename)
|
os.remove(filename_temp)
|
||||||
|
|
||||||
|
|
||||||
def convert_audio_format(filename) -> None:
|
def convert_audio_format(filename) -> None:
|
||||||
|
Loading…
Reference in New Issue
Block a user