From 55669ec45f0f645d4c24f39b5ce98c83b154100c Mon Sep 17 00:00:00 2001 From: afkarxyz Date: Sun, 5 Oct 2025 03:59:50 +0700 Subject: [PATCH] v4.7 --- SpotiFLAC.py | 309 ++--------------------------------------------- amazon.png | Bin 83747 -> 0 bytes amazonDL.py | 128 -------------------- au.svg | 8 -- br.svg | 45 ------- eu.svg | 28 ----- jp.svg | 11 -- qobuz.png | Bin 42467 -> 0 bytes qobuzAutoDL.py | 251 -------------------------------------- qobuzRegionDL.py | 255 -------------------------------------- requirements.txt | 8 ++ us.svg | 9 -- 12 files changed, 21 insertions(+), 1031 deletions(-) delete mode 100644 amazon.png delete mode 100644 amazonDL.py delete mode 100644 au.svg delete mode 100644 br.svg delete mode 100644 eu.svg delete mode 100644 jp.svg delete mode 100644 qobuz.png delete mode 100644 qobuzAutoDL.py delete mode 100644 qobuzRegionDL.py create mode 100644 requirements.txt delete mode 100644 us.svg diff --git a/SpotiFLAC.py b/SpotiFLAC.py index d150a50..925bbb3 100644 --- a/SpotiFLAC.py +++ b/SpotiFLAC.py @@ -20,11 +20,8 @@ from PyQt6.QtGui import QIcon, QTextCursor, QDesktopServices, QPixmap, QBrush from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply from getMetadata import get_filtered_data, parse_uri, SpotifyInvalidUrlException -from qobuzAutoDL import QobuzDownloader as QobuzAutoDownloader -from qobuzRegionDL import QobuzDownloader as QobuzRegionDownloader from tidalDL import TidalDownloader from deezerDL import DeezerDownloader -from amazonDL import LucidaDownloader @dataclass class Track: @@ -64,7 +61,7 @@ class DownloadWorker(QThread): def __init__(self, tracks, outpath, is_single_track=False, is_album=False, is_playlist=False, album_or_playlist_name='', filename_format='title_artist', use_track_numbers=True, - use_artist_subfolders=False, use_album_subfolders=False, service="tidal", qobuz_region="us", qobuz_mode="auto"): + use_artist_subfolders=False, use_album_subfolders=False, service="tidal"): super().__init__() self.tracks = tracks self.outpath = outpath @@ -77,8 +74,6 @@ class DownloadWorker(QThread): self.use_artist_subfolders = use_artist_subfolders self.use_album_subfolders = use_album_subfolders self.service = service - self.qobuz_region = qobuz_region - self.qobuz_mode = qobuz_mode self.is_paused = False self.is_stopped = False self.failed_tracks = [] @@ -96,17 +91,10 @@ class DownloadWorker(QThread): def run(self): try: - if self.service == "qobuz": - if self.qobuz_mode == "auto": - downloader = QobuzAutoDownloader() - else: - downloader = QobuzRegionDownloader(self.qobuz_region) - elif self.service == "tidal": + if self.service == "tidal": downloader = TidalDownloader() elif self.service == "deezer": downloader = DeezerDownloader() - elif self.service == "amazon": - downloader = LucidaDownloader() else: downloader = TidalDownloader() @@ -161,24 +149,7 @@ class DownloadWorker(QThread): self.skipped_tracks.append(track) continue - if self.service == "qobuz": - if not track.isrc: - self.progress.emit(f"No ISRC found for track: {track.title}. Skipping.", 0) - self.failed_tracks.append((track.title, track.artists, "No ISRC available")) - continue - - self.progress.emit(f"Getting track from Qobuz with ISRC: {track.isrc}", 0) - - is_paused_callback = lambda: self.is_paused - is_stopped_callback = lambda: self.is_stopped - - downloaded_file = downloader.download( - track.isrc, - track_outpath, - is_paused_callback=is_paused_callback, - is_stopped_callback=is_stopped_callback - ) - elif self.service == "tidal": + if self.service == "tidal": if not track.isrc: self.progress.emit(f"No ISRC found for track: {track.title}. Skipping.", 0) self.failed_tracks.append((track.title, track.artists, "No ISRC available")) @@ -236,21 +207,6 @@ class DownloadWorker(QThread): raise Exception("Downloaded file not found") else: raise Exception("Deezer download failed") - elif self.service == "amazon": - self.progress.emit(f"Downloading from Amazon Music: {track.title} - {track.artists}", 0) - - is_paused_callback = lambda: self.is_paused - is_stopped_callback = lambda: self.is_stopped - - downloaded_file = downloader.download( - track.id, - track_outpath, - is_paused_callback=is_paused_callback, - is_stopped_callback=is_stopped_callback - ) - - if not downloaded_file or not os.path.exists(downloaded_file): - raise Exception("Amazon Music download failed") else: track_id = track.id self.progress.emit(f"Getting track info for ID: {track_id} from {self.service}", 0) @@ -373,26 +329,6 @@ class TidalStatusChecker(QThread): self.error.emit(f"Error checking Tidal (API) status: {str(e)}") self.status_updated.emit(False) -class QobuzStatusChecker(QThread): - status_updated = pyqtSignal(bool) - error = pyqtSignal(str) - - def __init__(self, region="us", mode="auto"): - super().__init__() - self.region = region - self.mode = mode - - def run(self): - try: - if self.mode == "auto": - response = requests.get("https://qobuz.squid.wtf", timeout=5) - else: - response = requests.get(f"https://{self.region}.qqdl.site", timeout=5) - self.status_updated.emit(response.status_code == 200) - except Exception as e: - self.error.emit(f"Error checking Qobuz status: {str(e)}") - self.status_updated.emit(False) - class DeezerStatusChecker(QThread): status_updated = pyqtSignal(bool) error = pyqtSignal(str) @@ -406,19 +342,6 @@ class DeezerStatusChecker(QThread): self.error.emit(f"Error checking Deezer status: {str(e)}") self.status_updated.emit(False) -class AmazonStatusChecker(QThread): - status_updated = pyqtSignal(bool) - error = pyqtSignal(str) - - def run(self): - try: - response = requests.get("https://lucida.to/api/load?url=%2Fapi%2Fcountries%3Fservice%3Damazon", timeout=5) - is_online = response.status_code == 200 - self.status_updated.emit(is_online) - except Exception as e: - self.error.emit(f"Error checking Amazon Music status: {str(e)}") - self.status_updated.emit(False) - class StatusIndicatorDelegate(QStyledItemDelegate): def paint(self, painter, option, index): item_data = index.data(Qt.ItemDataRole.UserRole) @@ -463,25 +386,14 @@ class ServiceComboBox(QComboBox): self.deezer_status_timer = QTimer(self) self.deezer_status_timer.timeout.connect(self.refresh_deezer_status) - self.deezer_status_timer.start(60000) - - self.amazon_status_checker = AmazonStatusChecker() - self.amazon_status_checker.status_updated.connect(self.update_amazon_service_status) - self.amazon_status_checker.error.connect(lambda e: print(f"Amazon Music status check error: {e}")) - self.amazon_status_checker.start() - - self.amazon_status_timer = QTimer(self) - self.amazon_status_timer.timeout.connect(self.refresh_amazon_status) - self.amazon_status_timer.start(60000) + self.deezer_status_timer.start(60000) def setup_items(self): current_dir = os.path.dirname(os.path.abspath(__file__)) self.services = [ - {'id': 'qobuz', 'name': 'Qobuz', 'icon': 'qobuz.png', 'online': False}, {'id': 'tidal', 'name': 'Tidal', 'icon': 'tidal.png', 'online': False}, - {'id': 'deezer', 'name': 'Deezer', 'icon': 'deezer.png', 'online': False}, - {'id': 'amazon', 'name': 'Amazon Music', 'icon': 'amazon.png', 'online': False} + {'id': 'deezer', 'name': 'Deezer', 'icon': 'deezer.png', 'online': False} ] for service in self.services: @@ -537,120 +449,13 @@ class ServiceComboBox(QComboBox): self.deezer_status_checker.error.connect(lambda e: print(f"Deezer status check error: {e}")) self.deezer_status_checker.start() - def update_amazon_service_status(self, is_online): - self.update_service_status('amazon', is_online) - - def refresh_amazon_status(self): - if hasattr(self, 'amazon_status_checker') and self.amazon_status_checker.isRunning(): - self.amazon_status_checker.quit() - self.amazon_status_checker.wait() - - self.amazon_status_checker = AmazonStatusChecker() - self.amazon_status_checker.status_updated.connect(self.update_amazon_service_status) - self.amazon_status_checker.error.connect(lambda e: print(f"Amazon Music status check error: {e}")) - self.amazon_status_checker.start() - def currentData(self, role=Qt.ItemDataRole.UserRole + 1): return super().currentData(role) - def update_qobuz_status(self, region_id, is_online): - for i in range(self.count()): - service_id = self.itemData(i, Qt.ItemDataRole.UserRole + 1) - - if service_id == 'qobuz': - service_data = self.itemData(i, Qt.ItemDataRole.UserRole) - if isinstance(service_data, dict): - if is_online or service_data.get('online', False): - service_data['online'] = True - self.setItemData(i, service_data, Qt.ItemDataRole.UserRole) - break - - self.update() - -class QobuzRegionComboBox(QComboBox): - status_updated = pyqtSignal(str, bool) - - def __init__(self, parent=None): - super().__init__(parent) - self.setIconSize(QSize(16, 16)) - - self.setItemDelegate(StatusIndicatorDelegate()) - - self.setup_items() - - self.status_checkers = {} - self.check_status() - - self.status_timer = QTimer(self) - self.status_timer.timeout.connect(self.check_status) - self.status_timer.start(60000) - - def setup_items(self): - current_dir = os.path.dirname(os.path.abspath(__file__)) - - self.regions = [ - {'id': 'us', 'name': 'USA', 'icon': 'us.svg', 'online': False}, - {'id': 'eu', 'name': 'Europe', 'icon': 'eu.svg', 'online': False}, - {'id': 'br', 'name': 'Brazil', 'icon': 'br.svg', 'online': False}, - {'id': 'jp', 'name': 'Japan', 'icon': 'jp.svg', 'online': False}, - {'id': 'au', 'name': 'Australia', 'icon': 'au.svg', 'online': False} - ] - - for region in self.regions: - icon_path = os.path.join(current_dir, region['icon']) - if not os.path.exists(icon_path): - self.create_placeholder_icon(icon_path) - - icon = QIcon(icon_path) - - self.addItem(icon, region['name']) - item_index = self.count() - 1 - self.setItemData(item_index, region['id'], Qt.ItemDataRole.UserRole + 1) - self.setItemData(item_index, region, Qt.ItemDataRole.UserRole) - - def create_placeholder_icon(self, path): - pixmap = QPixmap(16, 16) - pixmap.fill(Qt.GlobalColor.transparent) - pixmap.save(path) - - def update_region_status(self, region_id, is_online): - for i in range(self.count()): - current_region_id = self.itemData(i, Qt.ItemDataRole.UserRole + 1) - - if current_region_id == region_id: - region_data = self.itemData(i, Qt.ItemDataRole.UserRole) - if isinstance(region_data, dict): - region_data['online'] = is_online - self.setItemData(i, region_data, Qt.ItemDataRole.UserRole) - break - - self.update() - - def check_status(self): - for region_id, checker in self.status_checkers.items(): - if checker.isRunning(): - checker.quit() - checker.wait() - self.status_checkers.clear() - - for region in self.regions: - region_id = region['id'] - checker = QobuzStatusChecker(region_id, "region") - checker.status_updated.connect(lambda status, rid=region_id: self.handle_status_update(rid, status)) - checker.start() - self.status_checkers[region_id] = checker - - def handle_status_update(self, region_id, is_online): - self.update_region_status(region_id, is_online) - self.status_updated.emit(region_id, is_online) - - def currentData(self, role=Qt.ItemDataRole.UserRole + 1): - return super().currentData(role) - class SpotiFLACGUI(QWidget): def __init__(self): super().__init__() - self.current_version = "4.6" + self.current_version = "4.7" self.tracks = [] self.all_tracks = [] self.successful_downloads = [] @@ -665,8 +470,6 @@ class SpotiFLACGUI(QWidget): self.use_artist_subfolders = self.settings.value('use_artist_subfolders', False, type=bool) self.use_album_subfolders = self.settings.value('use_album_subfolders', False, type=bool) self.service = self.settings.value('service', 'tidal') - self.qobuz_region = self.settings.value('qobuz_region', 'us') - self.qobuz_mode = self.settings.value('qobuz_mode', 'auto') self.check_for_updates = self.settings.value('check_for_updates', True, type=bool) self.current_theme_color = self.settings.value('theme_color', '#2196F3') self.track_list_format = self.settings.value('track_list_format', 'track_artist_date_duration') @@ -1027,18 +830,19 @@ class SpotiFLACGUI(QWidget): control_layout = QHBoxLayout() self.stop_btn = QPushButton('Stop') self.pause_resume_btn = QPushButton('Pause') - self.remove_successful_btn = QPushButton('Remove Finished Songs') self.stop_btn.setFixedWidth(120) self.pause_resume_btn.setFixedWidth(120) - self.remove_successful_btn.setFixedWidth(200) self.stop_btn.setCursor(Qt.CursorShape.PointingHandCursor) self.pause_resume_btn.setCursor(Qt.CursorShape.PointingHandCursor) - self.remove_successful_btn.setCursor(Qt.CursorShape.PointingHandCursor) self.stop_btn.clicked.connect(self.stop_download) self.pause_resume_btn.clicked.connect(self.toggle_pause_resume) + + self.remove_successful_btn = QPushButton('Remove Finished Songs') + self.remove_successful_btn.setFixedWidth(200) + self.remove_successful_btn.setCursor(Qt.CursorShape.PointingHandCursor) self.remove_successful_btn.clicked.connect(self.remove_successful_downloads) control_layout.addStretch() @@ -1228,29 +1032,6 @@ class SpotiFLACGUI(QWidget): service_fallback_layout.addWidget(service_label) service_fallback_layout.addWidget(self.service_dropdown) - service_fallback_layout.addSpacing(10) - - self.qobuz_mode_label = QLabel('Mode:') - self.qobuz_mode_dropdown = QComboBox() - self.qobuz_mode_dropdown.addItem("Auto", "auto") - self.qobuz_mode_dropdown.addItem("Region", "region") - self.qobuz_mode_dropdown.currentIndexChanged.connect(self.on_qobuz_mode_changed) - service_fallback_layout.addWidget(self.qobuz_mode_label) - service_fallback_layout.addWidget(self.qobuz_mode_dropdown) - - service_fallback_layout.addSpacing(10) - - self.region_label = QLabel('Region:') - self.qobuz_region_dropdown = QobuzRegionComboBox() - self.qobuz_region_dropdown.currentIndexChanged.connect(self.save_qobuz_region_setting) - service_fallback_layout.addWidget(self.region_label) - service_fallback_layout.addWidget(self.qobuz_region_dropdown) - - self.qobuz_mode_label.hide() - self.qobuz_mode_dropdown.hide() - self.region_label.hide() - self.qobuz_region_dropdown.hide() - service_fallback_layout.addStretch() auth_layout.addLayout(service_fallback_layout) @@ -1259,17 +1040,9 @@ class SpotiFLACGUI(QWidget): settings_tab.setLayout(settings_layout) self.tab_widget.addTab(settings_tab, "Settings") self.set_combobox_value(self.service_dropdown, self.service) - self.set_combobox_value(self.qobuz_region_dropdown, self.qobuz_region) - self.set_combobox_value(self.qobuz_mode_dropdown, self.qobuz_mode) self.set_combobox_value(self.track_list_format_dropdown, self.track_list_format) self.set_combobox_value(self.date_format_dropdown, self.date_format) - self.update_service_ui() - - self.qobuz_region_dropdown.status_updated.connect( - lambda region_id, is_online: self.service_dropdown.update_qobuz_status(region_id, is_online) - ) - def setup_theme_tab(self): theme_tab = QWidget() theme_layout = QVBoxLayout() @@ -1471,7 +1244,7 @@ class SpotiFLACGUI(QWidget): about_layout.addWidget(section_widget) - footer_label = QLabel(f"v{self.current_version} | September 2025") + footer_label = QLabel(f"v{self.current_version} | October 2025") about_layout.addWidget(footer_label, alignment=Qt.AlignmentFlag.AlignCenter) about_tab.setLayout(about_layout) @@ -1482,44 +1255,8 @@ class SpotiFLACGUI(QWidget): self.service = service self.settings.setValue('service', service) self.settings.sync() - - self.update_service_ui() self.log_output.append(f"Service changed to: {self.service_dropdown.currentText()}") - def on_qobuz_mode_changed(self, index): - mode = self.qobuz_mode_dropdown.currentData() - self.qobuz_mode = mode - self.settings.setValue('qobuz_mode', mode) - self.settings.sync() - - self.update_qobuz_mode_ui() - self.log_output.append(f"Qobuz mode changed to: {self.qobuz_mode_dropdown.currentText()}") - - def update_service_ui(self): - service = self.service - - if service == "qobuz": - self.qobuz_mode_label.show() - self.qobuz_mode_dropdown.show() - self.update_qobuz_mode_ui() - else: - self.qobuz_mode_label.hide() - self.qobuz_mode_dropdown.hide() - self.region_label.hide() - self.qobuz_region_dropdown.hide() - - def update_qobuz_mode_ui(self): - mode = self.qobuz_mode_dropdown.currentData() - if mode is None: - mode = self.qobuz_mode - - if mode == "region": - self.region_label.show() - self.qobuz_region_dropdown.show() - else: - self.region_label.hide() - self.qobuz_region_dropdown.hide() - def save_url(self): self.settings.setValue('spotify_url', self.spotify_url.text().strip()) self.settings.sync() @@ -1549,13 +1286,6 @@ class SpotiFLACGUI(QWidget): self.settings.setValue('use_album_subfolders', self.use_album_subfolders) self.settings.sync() - def save_qobuz_region_setting(self): - region = self.qobuz_region_dropdown.currentData() - self.qobuz_region = region - self.settings.setValue('qobuz_region', region) - self.settings.sync() - self.log_output.append(f"Qobuz region setting saved: {self.qobuz_region_dropdown.currentText()}") - def save_track_list_format(self): format_value = self.track_list_format_dropdown.currentData() self.track_list_format = format_value @@ -1952,8 +1682,6 @@ class SpotiFLACGUI(QWidget): def start_download_worker(self, tracks_to_download, outpath): service = self.service_dropdown.currentData() - qobuz_region = self.qobuz_region_dropdown.currentData() if service == "qobuz" else "us" - qobuz_mode = self.qobuz_mode_dropdown.currentData() if service == "qobuz" else "auto" self.worker = DownloadWorker( tracks_to_download, @@ -1966,9 +1694,7 @@ class SpotiFLACGUI(QWidget): self.use_track_numbers, self.use_artist_subfolders, self.use_album_subfolders, - service, - qobuz_region, - qobuz_mode + service ) self.worker.finished.connect(lambda success, message, failed_tracks, successful_tracks, skipped_tracks: self.on_download_finished(success, message, failed_tracks, successful_tracks, skipped_tracks)) self.worker.progress.connect(self.update_progress) @@ -2052,7 +1778,6 @@ class SpotiFLACGUI(QWidget): self.pause_resume_btn.setText('Resume') def remove_successful_downloads(self): - """Remove successfully downloaded and skipped tracks from the dashboard""" successful_tracks = getattr(self, 'successful_downloads', []) skipped_tracks = getattr(self, 'skipped_downloads', []) @@ -2062,7 +1787,6 @@ class SpotiFLACGUI(QWidget): tracks_to_remove = [] - # Check for successful downloads for track in self.tracks: for successful_track in successful_tracks: if (track.title == successful_track.title and @@ -2071,13 +1795,12 @@ class SpotiFLACGUI(QWidget): tracks_to_remove.append(track) break - # Check for skipped tracks (already exists) for track in self.tracks: for skipped_track in skipped_tracks: if (track.title == skipped_track.title and track.artists == skipped_track.artists and track.album == skipped_track.album): - if track not in tracks_to_remove: # Avoid duplicates + if track not in tracks_to_remove: tracks_to_remove.append(track) break @@ -2151,12 +1874,6 @@ class SpotiFLACGUI(QWidget): checker.quit() checker.wait() - if hasattr(self, 'qobuz_region_dropdown'): - for checker in self.qobuz_region_dropdown.status_checkers.values(): - if checker.isRunning(): - checker.quit() - checker.wait() - if hasattr(self, 'worker') and self.worker and self.worker.isRunning(): self.worker.stop() self.worker.quit() diff --git a/amazon.png b/amazon.png deleted file mode 100644 index c0c593b6427de7e44a3327409b83911817b98aeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83747 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

;^Q4;z9 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

{$jy8B#ffiMI-HsrN|Ye8KL`^m~h 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:"/\\|?*': - file_name = file_name.replace(char, '') - file_name = file_name.strip() - - file_path = os.path.join(output_dir, file_name) - print(f"Downloading...") - - with open(file_path, 'wb') as f: - for chunk in response.iter_content(chunk_size=8192): - if chunk: - f.write(chunk) - - print("Download complete") - print("Done") - return file_path - - except Exception as e: - print(f"Error: {str(e)}") - return None - -class LucidaDownloader: - def __init__(self): - self.progress_callback = None - - def set_progress_callback(self, callback): - self.progress_callback = callback - - def download(self, track_id, output_dir, is_paused_callback=None, is_stopped_callback=None): - try: - return download_track(track_id, service="amazon", output_dir=output_dir) - except Exception as e: - raise Exception(f"Amazon Music download failed: {str(e)}") - -if __name__ == "__main__": - print("=== AmazonDL - Amazon Music Downloader ===") - track_id = "2plbrEY59IikOBgBGLjaoe" - service = "amazon" - - download_track(track_id, service) \ No newline at end of file diff --git a/au.svg b/au.svg deleted file mode 100644 index 96e8076..0000000 --- a/au.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/br.svg b/br.svg deleted file mode 100644 index 719a763..0000000 --- a/br.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eu.svg b/eu.svg deleted file mode 100644 index b0874c1..0000000 --- a/eu.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jp.svg b/jp.svg deleted file mode 100644 index cc1c181..0000000 --- a/jp.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/qobuz.png b/qobuz.png deleted file mode 100644 index a66fe4b7492951e8909c396f770966b8d277b167..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42467 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�yj1d_#O(=srGKYfa9ZExrF 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

Di0Rt*S}H^Fx)2JiQDuKx-%PPMTq+c`d@(9l6k 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 l;%((m-aL7mtNVP7-rbINW6i(l#}xcW 0: - percent = (current / total) * 100 - print(f"\r{percent:.2f}% ({current}/{total})", end="") - else: - print(f"\r{current / (1024 * 1024):.2f} MB", end="") - -class QobuzDownloader: - def __init__(self, timeout=30): - self.timeout = timeout - self.session = requests.Session() - self.headers = { - 'User-Agent': get_random_user_agent() - } - self.base_api_url = "https://qobuz.squid.wtf/api" - self.download_chunk_size = 256 * 1024 - self.progress_callback = ProgressCallback() - - def set_progress_callback(self, callback): - self.progress_callback = callback - - def sanitize_filename(self, filename): - if not filename: - return "Unknown Track" - sanitized = re.sub(r'[\\/*?:"<>|]', "", str(filename)) - return re.sub(r'\s+', ' ', sanitized).strip() or "Unnamed Track" - - def get_track_info(self, isrc): - print(f"Fetching: {isrc}") - search_url = f"{self.base_api_url}/get-music" - params = {'q': isrc, 'offset': 0, 'limit': 10, 'region': 'auto'} - - try: - response = self.session.get(search_url, params=params, timeout=self.timeout) - response.raise_for_status() - data = response.json() - - selected_track = None - if data and data.get("success"): - items = data.get("data", {}).get("tracks", {}).get("items", []) - priority = {24: 1, 16: 2} - for track in items: - if track.get("isrc") == isrc: - current_prio = priority.get(track.get("maximum_bit_depth"), 3) - if selected_track is None or current_prio < priority.get(selected_track.get("maximum_bit_depth"), 3): - selected_track = track - if current_prio == 1: - break - - if not selected_track: - raise Exception(f"Track not found: {isrc}") - - title = selected_track.get('title', 'Unknown') - bit_depth = selected_track.get('maximum_bit_depth', 'Unknown') - print(f"Found: {title} ({bit_depth}b)") - return selected_track - - except requests.exceptions.RequestException as e: - raise Exception(f"Request error: {e}") - except Exception as e: - raise Exception(f"Error: {e}") - - def get_download_url(self, track_id): - print("Fetching URL...") - download_api_url = f"{self.base_api_url}/download-music" - params = {'track_id': track_id, 'quality': 27, 'region': 'auto'} - - try: - response = self.session.get(download_api_url, params=params, timeout=self.timeout) - response.raise_for_status() - data = response.json() - - if data and data.get("success") and data.get("data", {}).get("url"): - download_url = data["data"]["url"] - print("URL found") - return download_url - else: - error_msg = data.get('error', {}).get('message', 'Unknown API error') - raise Exception(f"API error: {error_msg}") - - except requests.exceptions.RequestException as e: - raise Exception(f"Request error: {e}") - except Exception as e: - raise Exception(f"Error: {e}") - - def download(self, isrc, output_dir=".", is_paused_callback=None, is_stopped_callback=None): - if output_dir != ".": - try: - os.makedirs(output_dir, exist_ok=True) - except OSError as e: - raise Exception(f"Directory error: {e}") - - track_info = self.get_track_info(isrc) - track_id = track_info.get("id") - - if not track_id: - raise Exception("No track ID found") - - artist_name = self.sanitize_filename(track_info.get('performer', {}).get('name')) - track_title = self.sanitize_filename(track_info.get('title')) - output_filename = os.path.join(output_dir, f"{artist_name} - {track_title}.flac") - - if os.path.exists(output_filename): - file_size = os.path.getsize(output_filename) - if file_size > 0: - print(f"File already exists: {output_filename} ({file_size / (1024 * 1024):.2f} MB)") - return output_filename - - download_url = self.get_download_url(track_id) - temp_filename = output_filename + ".part" - - print(f"Downloading...") - try: - response = self.session.get(download_url, timeout=900) - response.raise_for_status() - - if is_stopped_callback and is_stopped_callback(): - raise Exception("Download stopped") - - while is_paused_callback and is_paused_callback(): - time.sleep(0.1) - if is_stopped_callback and is_stopped_callback(): - raise Exception("Download stopped") - - with open(temp_filename, 'wb') as f: - f.write(response.content) - - downloaded_size = len(response.content) - total_size = downloaded_size - - if self.progress_callback: - self.progress_callback(downloaded_size, total_size) - - os.rename(temp_filename, output_filename) - print("Download complete") - - except requests.exceptions.RequestException as e: - if os.path.exists(temp_filename): - os.remove(temp_filename) - raise Exception(f"Download failed: {e}") - except Exception as e: - if os.path.exists(temp_filename): - os.remove(temp_filename) - raise Exception(f"File error: {e}") - - print("Adding metadata...") - try: - self._embed_metadata(output_filename, track_info) - print("Metadata saved") - except Exception as e: - print(f"Tagging failed: {e}") - - print(f"Done") - return output_filename - - def _embed_metadata(self, filename, track_info): - try: - audio = FLAC(filename) - audio.delete() - audio.clear_pictures() - - album_info = track_info.get('album', {}) - artist = track_info.get('performer', {}).get('name') - - if track_info.get('title'): - audio['TITLE'] = track_info['title'] - if artist: - audio['ARTIST'] = artist - if album_info.get('title'): - audio['ALBUM'] = album_info['title'] - if album_info.get('artist', {}).get('name', artist): - audio['ALBUMARTIST'] = album_info.get('artist', {}).get('name', artist) - if track_info.get('track_number'): - audio['TRACKNUMBER'] = str(track_info['track_number']) - if track_info.get('release_date_original'): - audio['DATE'] = track_info['release_date_original'] - try: - audio['YEAR'] = str(datetime.strptime(track_info['release_date_original'], '%Y-%m-%d').year) - except ValueError: - pass - if album_info.get('genre', {}).get('name'): - audio['GENRE'] = album_info['genre']['name'] - if track_info.get('copyright'): - audio['COPYRIGHT'] = track_info['copyright'] - if track_info.get('isrc'): - audio['ISRC'] = track_info['isrc'] - if album_info.get('label', {}).get('name'): - audio['ORGANIZATION'] = album_info['label']['name'] - - img_info = album_info.get('image', {}) - cover_url = img_info.get('large') or img_info.get('small') or img_info.get('thumbnail') - if cover_url: - try: - img_response = self.session.get(cover_url, timeout=30) - img_response.raise_for_status() - mime_type = img_response.headers.get('Content-Type', 'image/jpeg').lower() - if mime_type in ['image/jpeg', 'image/png']: - picture = Picture() - picture.data = img_response.content - picture.type = PictureType.COVER_FRONT - picture.mime = mime_type - audio.add_picture(picture) - print("Cover added") - except Exception as e: - print(f"Cover error: {str(e)}") - - audio.save() - - except Exception as e: - raise Exception(f"Metadata error: {e}") - -def main(): - print("=== QobuzDL - Qobuz Downloader (Auto) ===") - downloader = QobuzDownloader() - - isrc = "USAT22409172" - output_dir = "." - - try: - downloaded_file = downloader.download(isrc, output_dir) - print(f"Success: File saved as {downloaded_file}") - except Exception as e: - print(f"Error: {str(e)}") - -if __name__ == "__main__": - try: - import sys - if sys.platform == "win32": - import os - os.system("chcp 65001 > nul") - try: - sys.stdout.reconfigure(encoding='utf-8') - except: - pass - except: - pass - - main() \ No newline at end of file diff --git a/qobuzRegionDL.py b/qobuzRegionDL.py deleted file mode 100644 index bafc02d..0000000 --- a/qobuzRegionDL.py +++ /dev/null @@ -1,255 +0,0 @@ -import requests -import time -import os -import re -from datetime import datetime -from mutagen.flac import FLAC, Picture -from mutagen.id3 import PictureType -from random import randrange - -def get_random_user_agent(): - return f"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_{randrange(11, 15)}_{randrange(4, 9)}) AppleWebKit/{randrange(530, 537)}.{randrange(30, 37)} (KHTML, like Gecko) Chrome/{randrange(80, 105)}.0.{randrange(3000, 4500)}.{randrange(60, 125)} Safari/{randrange(530, 537)}.{randrange(30, 36)}" - -class ProgressCallback: - def __call__(self, current, total): - if total > 0: - percent = (current / total) * 100 - print(f"\r{percent:.2f}% ({current}/{total})", end="") - else: - print(f"\r{current / (1024 * 1024):.2f} MB", end="") - -class QobuzDownloader: - def __init__(self, region="us", timeout=30): - if region not in ["us", "eu", "br", "jp", "au"]: - raise ValueError("Region must be one of: 'us', 'eu', 'br', 'jp', 'au'") - - self.region = region - self.timeout = timeout - self.session = requests.Session() - self.headers = { - 'User-Agent': get_random_user_agent() - } - self.base_api_url = f"https://{region}.qqdl.site/api" - self.download_chunk_size = 256 * 1024 - self.progress_callback = ProgressCallback() - - def set_progress_callback(self, callback): - self.progress_callback = callback - - def sanitize_filename(self, filename): - if not filename: - return "Unknown Track" - sanitized = re.sub(r'[\\/*?:"<>|]', "", str(filename)) - return re.sub(r'\s+', ' ', sanitized).strip() or "Unnamed Track" - - def get_track_info(self, isrc): - print(f"Fetching: {isrc}") - search_url = f"{self.base_api_url}/get-music" - params = {'q': isrc, 'offset': 0, 'limit': 10} - - try: - response = self.session.get(search_url, params=params, timeout=self.timeout) - response.raise_for_status() - data = response.json() - - selected_track = None - if data and data.get("success"): - items = data.get("data", {}).get("tracks", {}).get("items", []) - priority = {24: 1, 16: 2} - for track in items: - if track.get("isrc") == isrc: - current_prio = priority.get(track.get("maximum_bit_depth"), 3) - if selected_track is None or current_prio < priority.get(selected_track.get("maximum_bit_depth"), 3): - selected_track = track - if current_prio == 1: - break - - if not selected_track: - raise Exception(f"Track not found: {isrc}") - - title = selected_track.get('title', 'Unknown') - bit_depth = selected_track.get('maximum_bit_depth', 'Unknown') - print(f"Found: {title} ({bit_depth}b)") - return selected_track - - except requests.exceptions.RequestException as e: - raise Exception(f"Request error: {e}") - except Exception as e: - raise Exception(f"Error: {e}") - - def get_download_url(self, track_id): - print("Fetching URL...") - download_api_url = f"{self.base_api_url}/download-music" - params = {'track_id': track_id, 'quality': 27} - - try: - response = self.session.get(download_api_url, params=params, timeout=self.timeout) - response.raise_for_status() - data = response.json() - - if data and data.get("success") and data.get("data", {}).get("url"): - download_url = data["data"]["url"] - print("URL found") - return download_url - else: - error_msg = data.get('error', {}).get('message', 'Unknown API error') - raise Exception(f"API error: {error_msg}") - - except requests.exceptions.RequestException as e: - raise Exception(f"Request error: {e}") - except Exception as e: - raise Exception(f"Error: {e}") - - def download(self, isrc, output_dir=".", is_paused_callback=None, is_stopped_callback=None): - if output_dir != ".": - try: - os.makedirs(output_dir, exist_ok=True) - except OSError as e: - raise Exception(f"Directory error: {e}") - - track_info = self.get_track_info(isrc) - track_id = track_info.get("id") - - if not track_id: - raise Exception("No track ID found") - - artist_name = self.sanitize_filename(track_info.get('performer', {}).get('name')) - track_title = self.sanitize_filename(track_info.get('title')) - output_filename = os.path.join(output_dir, f"{artist_name} - {track_title}.flac") - - if os.path.exists(output_filename): - file_size = os.path.getsize(output_filename) - if file_size > 0: - print(f"File already exists: {output_filename} ({file_size / (1024 * 1024):.2f} MB)") - return output_filename - - download_url = self.get_download_url(track_id) - temp_filename = output_filename + ".part" - - print(f"Downloading...") - try: - response = self.session.get(download_url, timeout=900) - response.raise_for_status() - - if is_stopped_callback and is_stopped_callback(): - raise Exception("Download stopped") - - while is_paused_callback and is_paused_callback(): - time.sleep(0.1) - if is_stopped_callback and is_stopped_callback(): - raise Exception("Download stopped") - - with open(temp_filename, 'wb') as f: - f.write(response.content) - - downloaded_size = len(response.content) - total_size = downloaded_size - - if self.progress_callback: - self.progress_callback(downloaded_size, total_size) - - os.rename(temp_filename, output_filename) - print("Download complete") - - except requests.exceptions.RequestException as e: - if os.path.exists(temp_filename): - os.remove(temp_filename) - raise Exception(f"Download failed: {e}") - except Exception as e: - if os.path.exists(temp_filename): - os.remove(temp_filename) - raise Exception(f"File error: {e}") - - print("Adding metadata...") - try: - self._embed_metadata(output_filename, track_info) - print("Metadata saved") - except Exception as e: - print(f"Tagging failed: {e}") - - print(f"Done") - return output_filename - - def _embed_metadata(self, filename, track_info): - try: - audio = FLAC(filename) - audio.delete() - audio.clear_pictures() - - album_info = track_info.get('album', {}) - artist = track_info.get('performer', {}).get('name') - - if track_info.get('title'): - audio['TITLE'] = track_info['title'] - if artist: - audio['ARTIST'] = artist - if album_info.get('title'): - audio['ALBUM'] = album_info['title'] - if album_info.get('artist', {}).get('name', artist): - audio['ALBUMARTIST'] = album_info.get('artist', {}).get('name', artist) - if track_info.get('track_number'): - audio['TRACKNUMBER'] = str(track_info['track_number']) - if track_info.get('release_date_original'): - audio['DATE'] = track_info['release_date_original'] - try: - audio['YEAR'] = str(datetime.strptime(track_info['release_date_original'], '%Y-%m-%d').year) - except ValueError: - pass - if album_info.get('genre', {}).get('name'): - audio['GENRE'] = album_info['genre']['name'] - if track_info.get('copyright'): - audio['COPYRIGHT'] = track_info['copyright'] - if track_info.get('isrc'): - audio['ISRC'] = track_info['isrc'] - if album_info.get('label', {}).get('name'): - audio['ORGANIZATION'] = album_info['label']['name'] - - img_info = album_info.get('image', {}) - cover_url = img_info.get('large') or img_info.get('small') or img_info.get('thumbnail') - if cover_url: - try: - img_response = self.session.get(cover_url, timeout=30) - img_response.raise_for_status() - mime_type = img_response.headers.get('Content-Type', 'image/jpeg').lower() - if mime_type in ['image/jpeg', 'image/png']: - picture = Picture() - picture.data = img_response.content - picture.type = PictureType.COVER_FRONT - picture.mime = mime_type - audio.add_picture(picture) - print("Cover added") - except Exception as e: - print(f"Cover error: {str(e)}") - - audio.save() - - except Exception as e: - raise Exception(f"Metadata error: {e}") - -def main(): - print("=== QobuzDL - Qobuz Downloader (Region) ===") - downloader = QobuzDownloader(region="us") - - isrc = "USAT22409172" - output_dir = "." - - try: - downloaded_file = downloader.download(isrc, output_dir) - print(f"Success: File saved as {downloaded_file}") - except Exception as e: - print(f"Error: {str(e)}") - -if __name__ == "__main__": - try: - import sys - if sys.platform == "win32": - import os - os.system("chcp 65001 > nul") - try: - sys.stdout.reconfigure(encoding='utf-8') - except: - pass - except: - pass - - main() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2ae380a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +PyQt6 +pyqt6-tools +pyqtdarktheme +requests +mutagen +pyotp +packaging +pyinstaller \ No newline at end of file diff --git a/us.svg b/us.svg deleted file mode 100644 index 9cfd0c9..0000000 --- a/us.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -