Compare commits

...

2 Commits

Author SHA1 Message Date
afkarxyz af4f1dd401 v3.7 2025-07-13 05:25:13 +07:00
afkarxyz 3414fadbd3 v3.6 2025-07-08 16:44:11 +07:00
4 changed files with 21 additions and 8 deletions
+1 -1
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.5/SpotiFLAC.exe)
### [Download](https://github.com/afkarxyz/SpotiFLAC/releases/download/v3.6/SpotiFLAC.exe)
## Screenshots
+2 -2
View File
@@ -503,7 +503,7 @@ class QobuzRegionComboBox(QComboBox):
class SpotiFLACGUI(QWidget):
def __init__(self):
super().__init__()
self.current_version = "3.6"
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.6 | 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 = [61, 110, 58, 98, 35, 79, 117, 69, 102, 72, 92, 102, 69, 93, 41, 101, 42, 75]
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.5"
"version": "3.6"
}