Compare commits

...

13 Commits

Author SHA1 Message Date
afkarxyz 2acd6fcba1 Update v1.6 2025-02-18 09:46:44 +07:00
afkarxyz 85a5bb2321 Update README.md 2025-02-18 09:45:29 +07:00
afkarxyz 70a955f531 Update README.md 2025-02-18 09:10:34 +07:00
afkarxyz 71c8070ec0 Create version.json 2025-02-18 07:58:39 +07:00
afkarxyz 177bc06b79 Update README.md 2025-02-04 14:24:02 +07:00
afkarxyz 2aec9c0185 Update v1.5 2025-02-04 14:22:51 +07:00
afkarxyz a6a84cf869 Update v1.5 2025-02-04 14:22:32 +07:00
afkarxyz 3577574ad8 Update v1.5 2025-02-04 14:22:01 +07:00
afkarxyz 3696fc95a7 Update README.md 2025-02-04 14:21:20 +07:00
afkarxyz effa462810 Update README.md 2025-01-22 12:50:04 +07:00
afkarxyz 921faefecf Update README.md 2025-01-22 05:39:13 +07:00
afkarxyz a4168450d1 Update README.md 2025-01-22 05:35:54 +07:00
afkarxyz 7ba3efb75b Update README.md 2025-01-22 05:34:59 +07:00
5 changed files with 100 additions and 23 deletions
+14 -10
View File
@@ -1,8 +1,14 @@
[![GitHub All Releases](https://img.shields.io/github/downloads/afkarxyz/SpotifyFLAC/total?style=for-the-badge)](https://github.com/afkarxyz/SpotifyFLAC/releases)
[![GitHub All Releases](https://img.shields.io/github/downloads/afkarxyz/SpotiFLAC/total?style=for-the-badge)](https://github.com/afkarxyz/SpotiFLAC/releases)
![spotifyflac](https://github.com/user-attachments/assets/a11fde95-e756-4592-982f-b567d4a85f3c)
![spotiflac](https://github.com/user-attachments/assets/a233a276-14a4-4f4c-b267-f182dd3912a0)
**Spotify FLAC** allows you to download Spotify tracks in true FLAC format through services like Tidal, Amazon Music, Qobuz, and Deezer with the help of Lucida.
<div align="center">
<b>SpotiFLAC</b> allows you to download Spotify tracks in true FLAC format through services like Tidal, Amazon Music and Qobuz with the help of Lucida.
</div>
### [Download](https://github.com/afkarxyz/SpotiFLAC/releases/download/v1.6/SpotiFLAC.exe)
#
> [!NOTE]
> Requires **Google Chrome**
@@ -10,20 +16,18 @@
> [!WARNING]
Sometimes, the **download speed** from Lucida can be fast or slow; it varies unpredictably.
#### [Download](https://github.com/afkarxyz/SpotifyFLAC/releases/download/v1.4/SpotifyFLAC.exe) Spotify FLAC
## Screenshots
![image](https://github.com/user-attachments/assets/c2057543-7f15-470e-beeb-2451a3764d15)
![image](https://github.com/user-attachments/assets/5f36d815-da1d-4fc1-b85e-e7c1fe5c9842)
> - When **Headless** is enabled, the browser runs in the background without a graphical interface, improving performance and allowing seamless automation.
> - When **Fallback** is enabled, it will use the backup server Lucida.su
> - **Filename: Title** means the filename format is `Title - Artist`, and vice versa.
> - I highly recommend **Tidal** or **Amazon Music** because `Qobuz` and `Deezer` occasionally experience issues.
> - I highly recommend **Tidal** or **Amazon Music** because `Qobuz` occasionally experience issues.
![image](https://github.com/user-attachments/assets/75a61cef-05a8-4f2c-b40b-ba5d49885ffe)
![image](https://github.com/user-attachments/assets/cf45ba1b-f048-4284-8d90-dc90d2c37745)
![image](https://github.com/user-attachments/assets/84dfcfec-7c9d-4b5b-8624-3558cd3155be)
![image](https://github.com/user-attachments/assets/adc7c2fe-9758-4371-b186-d690bd06e3b0)
## Lossless Audio Check
@@ -31,4 +35,4 @@ Sometimes, the **download speed** from Lucida can be fast or slow; it varies unp
![image](https://github.com/user-attachments/assets/7649e6e1-d5d1-49b3-b83f-965d44651d05)
#### [Download](https://github.com/afkarxyz/SpotifyFLAC/releases/download/v0/FLAC-Checker.zip) FLAC Checker
### [Download](https://github.com/afkarxyz/SpotiFLAC/releases/download/v0/FLAC-Checker.zip) FLAC Checker
+82 -12
View File
@@ -2,15 +2,16 @@ import sys
import asyncio
import os
import time
import requests
from pathlib import Path
from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QHBoxLayout, QLabel, QLineEdit, QPushButton,
QProgressBar, QFileDialog, QCheckBox, QRadioButton,
QGroupBox, QComboBox)
from PyQt6.QtCore import QThread, pyqtSignal, Qt, QSettings, QSize
from PyQt6.QtGui import QIcon, QPixmap, QCursor
from GetMetadata import get_metadata
from LucidaDownloader import TrackDownloader
QGroupBox, QComboBox, QDialog, QDialogButtonBox)
from PyQt6.QtCore import QThread, pyqtSignal, Qt, QSettings, QSize, QTimer, QUrl
from PyQt6.QtGui import QIcon, QPixmap, QCursor,QDesktopServices
from getMetadata import get_metadata
from getTracks import TrackDownloader
class ImageDownloader(QThread):
finished = pyqtSignal(bytes)
@@ -162,8 +163,7 @@ class ServiceComboBox(QComboBox):
services = [
{'id': 'tidal', 'name': 'Tidal', 'icon': 'tidal.png'},
{'id': 'amazon', 'name': 'Amazon Music', 'icon': 'amazon.png'},
{'id': 'qobuz', 'name': 'Qobuz', 'icon': 'qobuz.png'},
{'id': 'deezer', 'name': 'Deezer', 'icon': 'deezer.png'}
{'id': 'qobuz', 'name': 'Qobuz', 'icon': 'qobuz.png'}
]
for service in services:
@@ -179,11 +179,48 @@ class ServiceComboBox(QComboBox):
pixmap.fill(Qt.GlobalColor.transparent)
pixmap.save(path)
class SpotifyFlacGUI(QMainWindow):
class UpdateDialog(QDialog):
def __init__(self, current_version, new_version, parent=None):
super().__init__(parent)
self.setWindowTitle("Update Available")
self.setFixedWidth(400)
self.setModal(True)
layout = QVBoxLayout()
message = QLabel(f"A new version of SpotiFLAC is available!\n\n"
f"Current version: v{current_version}\n"
f"New version: v{new_version}")
message.setWordWrap(True)
layout.addWidget(message)
self.disable_check = QCheckBox("Turn off update checking")
self.disable_check.setCursor(Qt.CursorShape.PointingHandCursor)
layout.addWidget(self.disable_check)
button_box = QDialogButtonBox()
self.update_button = QPushButton("Update")
self.update_button.setCursor(Qt.CursorShape.PointingHandCursor)
self.cancel_button = QPushButton("Cancel")
self.cancel_button.setCursor(Qt.CursorShape.PointingHandCursor)
button_box.addButton(self.update_button, QDialogButtonBox.ButtonRole.AcceptRole)
button_box.addButton(self.cancel_button, QDialogButtonBox.ButtonRole.RejectRole)
layout.addWidget(button_box)
self.setLayout(layout)
self.update_button.clicked.connect(self.accept)
self.cancel_button.clicked.connect(self.reject)
class SpotiFlacGUI(QMainWindow):
def __init__(self):
super().__init__()
self.settings = QSettings('SpotifyFlac', 'Settings')
self.setWindowTitle("Spotify FLAC")
self.current_version = "1.6"
self.settings = QSettings('SpotiFlac', 'Settings')
self.setWindowTitle("SpotiFLAC")
self.check_for_updates = self.settings.value('check_for_updates', True, type=bool)
icon_path = os.path.join(os.path.dirname(__file__), "icon.svg")
if os.path.exists(icon_path):
@@ -202,6 +239,34 @@ class SpotifyFlacGUI(QMainWindow):
self.load_settings()
self.setup_settings_persistence()
last_url = self.settings.value('last_url', '')
self.url_input.setText(last_url)
self.url_input.textChanged.connect(self.save_url)
if self.check_for_updates:
QTimer.singleShot(0, self.check_updates)
def check_updates(self):
try:
response = requests.get("https://raw.githubusercontent.com/afkarxyz/SpotiFLAC/refs/heads/main/version.json")
if response.status_code == 200:
data = response.json()
new_version = data.get("version")
if new_version and new_version != self.current_version:
dialog = UpdateDialog(self.current_version, new_version, self)
result = dialog.exec()
if dialog.disable_check.isChecked():
self.settings.setValue('check_for_updates', False)
self.check_for_updates = False
if result == QDialog.DialogCode.Accepted:
QDesktopServices.openUrl(QUrl("https://github.com/afkarxyz/SpotiFLAC/releases"))
except Exception as e:
print(f"Error checking for updates: {e}")
def load_settings(self):
headless = self.settings.value('headless', True, type=bool)
fallback = self.settings.value('fallback', False, type=bool)
@@ -427,9 +492,13 @@ class SpotifyFlacGUI(QMainWindow):
self.main_layout.addLayout(bottom_layout)
def save_url(self, url):
self.settings.setValue('last_url', url)
self.validate_url(url)
def open_update_page(self):
import webbrowser
webbrowser.open('https://github.com/afkarxyz/SpotifyFLAC/releases')
webbrowser.open('https://github.com/afkarxyz/SpotiFLAC/releases')
def validate_url(self, url):
url = url.strip()
@@ -530,6 +599,7 @@ class SpotifyFlacGUI(QMainWindow):
self.start_download()
def clear_form(self):
self.settings.setValue('last_url', '')
self.url_input.clear()
self.progress_bar.hide()
self.progress_bar.setValue(0)
@@ -601,7 +671,7 @@ class SpotifyFlacGUI(QMainWindow):
def main():
app = QApplication(sys.argv)
window = SpotifyFlacGUI()
window = SpotiFlacGUI()
window.show()
sys.exit(app.exec())
View File
+3
View File
@@ -0,0 +1,3 @@
{
"version": "1.6"
}