Compare commits

...

5 Commits

Author SHA1 Message Date
afkarxyz 9928968ffb v3.7 2025-07-13 05:30:59 +07:00
afkarxyz af4f1dd401 v3.7 2025-07-13 05:25:13 +07:00
afkarxyz 3414fadbd3 v3.6 2025-07-08 16:44:11 +07:00
afkarxyz 457f30da99 v3.6 2025-07-08 16:37:45 +07:00
afkarxyz d4e621b36c v3.5 2025-07-02 13:50:01 +07:00
4 changed files with 21 additions and 10 deletions
+1 -3
View File
@@ -6,7 +6,7 @@
<b>SpotiFLAC</b> allows you to download Spotify tracks in true FLAC format through services like Qobuz & Tidal.
</div>
### [Download](https://github.com/afkarxyz/SpotiFLAC/releases/download/v3.4/SpotiFLAC.exe)
### [Download](https://github.com/afkarxyz/SpotiFLAC/releases/download/v3.7/SpotiFLAC.exe)
## Screenshots
@@ -18,8 +18,6 @@
![image](https://github.com/user-attachments/assets/1feec621-f8bf-4b2a-ae73-afcb1fb1deba)
![image](https://github.com/user-attachments/assets/12ba7b43-7cf7-4eca-9cf2-a97b5d8c78e2)
## Lossless Audio Check
![image](https://github.com/user-attachments/assets/d63b422d-0ea3-4307-850f-96c99d7eaa9a)
+2 -2
View File
@@ -503,7 +503,7 @@ class QobuzRegionComboBox(QComboBox):
class SpotiFLACGUI(QWidget):
def __init__(self):
super().__init__()
self.current_version = "3.5"
self.current_version = "3.7"
self.tracks = []
self.reset_state()
@@ -931,7 +931,7 @@ class SpotiFLACGUI(QWidget):
spacer = QSpacerItem(20, 6, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
about_layout.addItem(spacer)
footer_label = QLabel("v3.5 | July 2025")
footer_label = QLabel("v3.7 | July 2025")
footer_label.setStyleSheet("font-size: 12px; margin-top: 10px;")
about_layout.addWidget(footer_label, alignment=Qt.AlignmentFlag.AlignCenter)
+17 -4
View File
@@ -13,7 +13,20 @@ 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)}"
def generate_totp():
secret_cipher = [37, 84, 32, 76, 87, 90, 87, 47, 13, 75, 48, 54, 44, 28, 19, 21, 22]
url = "https://raw.githubusercontent.com/Thereallo1026/spotify-secrets/refs/heads/main/secrets/secretBytes.json"
try:
resp = requests.get(url, timeout=10)
if resp.status_code != 200:
raise Exception(f"Failed to fetch TOTP secrets from GitHub. Status: {resp.status_code}")
secrets_list = resp.json()
latest_entry = max(secrets_list, key=lambda x: x["version"])
version = latest_entry["version"]
secret_cipher = latest_entry["secret"]
except Exception as e:
raise Exception(f"Failed to fetch secrets from GitHub: {str(e)}")
processed = [byte ^ ((i % 33) + 9) for i, byte in enumerate(secret_cipher)]
processed_str = "".join(map(str, processed))
utf8_bytes = processed_str.encode('utf-8')
@@ -36,7 +49,7 @@ def generate_totp():
server_time = data.get("serverTime")
if server_time is None:
raise Exception("Failed to fetch server time from Spotify")
return totp, server_time
return totp, server_time, version
except Exception as e:
raise Exception(f"Error getting server time: {str(e)}")
@@ -110,7 +123,7 @@ def get_json_from_api(api_url, access_token):
def get_access_token():
try:
totp, server_time = generate_totp()
totp, server_time, totp_version = generate_totp()
otp_code = totp.at(int(server_time))
timestamp_ms = int(time.time() * 1000)
@@ -119,7 +132,7 @@ def get_access_token():
'productType': 'web-player',
'totp': otp_code,
'totpServerTime': server_time,
'totpVer': '8',
'totpVer': str(totp_version),
'sTime': server_time,
'cTime': timestamp_ms,
'buildVer': 'web-player_2025-07-02_1720000000000_12345678',
+1 -1
View File
@@ -1,3 +1,3 @@
{
"version": "3.4"
"version": "3.7"
}