v3.7
This commit is contained in:
+2
-2
@@ -503,7 +503,7 @@ class QobuzRegionComboBox(QComboBox):
|
|||||||
class SpotiFLACGUI(QWidget):
|
class SpotiFLACGUI(QWidget):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.current_version = "3.6"
|
self.current_version = "3.7"
|
||||||
self.tracks = []
|
self.tracks = []
|
||||||
self.reset_state()
|
self.reset_state()
|
||||||
|
|
||||||
@@ -931,7 +931,7 @@ class SpotiFLACGUI(QWidget):
|
|||||||
spacer = QSpacerItem(20, 6, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
|
spacer = QSpacerItem(20, 6, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
|
||||||
about_layout.addItem(spacer)
|
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;")
|
footer_label.setStyleSheet("font-size: 12px; margin-top: 10px;")
|
||||||
about_layout.addWidget(footer_label, alignment=Qt.AlignmentFlag.AlignCenter)
|
about_layout.addWidget(footer_label, alignment=Qt.AlignmentFlag.AlignCenter)
|
||||||
|
|
||||||
|
|||||||
+17
-4
@@ -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)}"
|
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():
|
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 = [byte ^ ((i % 33) + 9) for i, byte in enumerate(secret_cipher)]
|
||||||
processed_str = "".join(map(str, processed))
|
processed_str = "".join(map(str, processed))
|
||||||
utf8_bytes = processed_str.encode('utf-8')
|
utf8_bytes = processed_str.encode('utf-8')
|
||||||
@@ -36,7 +49,7 @@ def generate_totp():
|
|||||||
server_time = data.get("serverTime")
|
server_time = data.get("serverTime")
|
||||||
if server_time is None:
|
if server_time is None:
|
||||||
raise Exception("Failed to fetch server time from Spotify")
|
raise Exception("Failed to fetch server time from Spotify")
|
||||||
return totp, server_time
|
return totp, server_time, version
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(f"Error getting server time: {str(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():
|
def get_access_token():
|
||||||
try:
|
try:
|
||||||
totp, server_time = generate_totp()
|
totp, server_time, totp_version = generate_totp()
|
||||||
otp_code = totp.at(int(server_time))
|
otp_code = totp.at(int(server_time))
|
||||||
timestamp_ms = int(time.time() * 1000)
|
timestamp_ms = int(time.time() * 1000)
|
||||||
|
|
||||||
@@ -119,7 +132,7 @@ def get_access_token():
|
|||||||
'productType': 'web-player',
|
'productType': 'web-player',
|
||||||
'totp': otp_code,
|
'totp': otp_code,
|
||||||
'totpServerTime': server_time,
|
'totpServerTime': server_time,
|
||||||
'totpVer': '8',
|
'totpVer': str(totp_version),
|
||||||
'sTime': server_time,
|
'sTime': server_time,
|
||||||
'cTime': timestamp_ms,
|
'cTime': timestamp_ms,
|
||||||
'buildVer': 'web-player_2025-07-02_1720000000000_12345678',
|
'buildVer': 'web-player_2025-07-02_1720000000000_12345678',
|
||||||
|
|||||||
Reference in New Issue
Block a user