119 lines
4.2 KiB
Python
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
|
|
|