localwrappedmusicstatus-com.../musicstatus.py
2024-12-19 01:34:07 +03:00

119 lines
4.2 KiB
Python

import subprocess
import re
import time
import sqlite3
import os
import requests
def get_working_directory():
# If you see this function, that means you are using the pyinstaller. Use this command to create the executable:
# pyinstaller -s -F musicstatus-pyi.py --runtime-tmpdir /data/local/tmp
if os.path.exists("/sdcard/localwrapped"):
return "/sdcard/localwrapped"
elif os.path.exists("/storage/emulated/0/localwrapped"):
return "/storage/emulated/0/localwrapped"
elif os.path.exists("/data/media/0/localwrapped"):
return "/data/media/0/localwrapped"
elif os.path.exists("/mnt/user/0/emulated/0/localwrapped"):
return "/mnt/user/0/emulated/0/localwrapped"
else:
print("Local Wrapped directory not found.")
if not os.path.exists(f"{get_working_directory()}/key.txt"):
print("Key not exist")
exit()
if not os.path.exists(f"{get_working_directory()}/music.db"):
try:
getmusicdb = requests.get("https://halhadus.rocks/assets/localwrapped/music.db")
with open(f"{get_working_directory()}/music.db", "wb") as f:
f.write(getmusicdb.content)
except:
print("music.db not exist and download failed.")
def get_verification_code():
try:
with open(f'{get_working_directory()/key.txt}')
key = f.read()
try:
verifyrequest = requests.post(os.environ["MSSERVER"] + "/verifykey", json={"key": key})
if verifyrequest.text == "0":
print("Verification failed")
return None
elif len(verifyrequest.text) == 64:
print("Verification success")
return verifyrequest.text
else:
print("Unexpected response")
return None
except:
print("Can't reach the server.")
time.sleep(15)
get_verification_code()
except:
print("Key not exist")
return None
def get_music():
dumpsys_output = subprocess.check_output("dumpsys media_session", shell=True).decode("utf-8").split("\n")
if not [line for line in dumpsys_output if "PLAYING" in line]:
return None
else:
description = [line for line in dumpsys_output if "description=" in line]
try:
return description[0].split("description=")[1]
except:
return None
def get_db_values():
musicconn = sqlite3.connect(f"{get_working_directory()}/music.db")
musicc = musicconn.cursor()
musicc.execute("SELECT * FROM music")
musicrows = musicc.fetchall()
musicconn.close()
musicvalues = []
for row in musicrows:
musicvalues.append({
"listmusicname": row[0],
"fileartistname": row[4],
"filealbumname": row[5],
"filemusictitle": row[6]
})
return musicvalues
a = 0
last_written = None
resetstatus = "true"
while True:
if get_music() == None:
continue
last_music = get_music()
time.sleep(5)
if last_music == get_music():
if last_written == last_music:
continue
a += 1
if a == 1:
for i in get_db_values():
if i["filealbumname"] == None:
full_name = i["filemusictitle"] + ", " + i["fileartistname"] + ", " + "Music"
else:
full_name = i["filemusictitle"] + ", " + i["fileartistname"] + ", " + i["filealbumname"]
if full_name == last_music:
try:
verificationcode = get_verification_code()
if verificationcode == None:
continue
requests.post(os.environ["MSSERVER"] + "/musicstatus.html", json={"music": i["listmusicname"], "time": str(int(time.time())), "verificationcode": verificationcode, "resetstatus": resetstatus})
print("Sent")
resetstatus = "false"
except:
print("Can't reach the server.")
time.sleep(15)
last_written = last_music
a = 0
continue
else:
a = 0
continue