my-local-wrapped/localwrapped-pyi.py

138 lines
5.4 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 localwrapped-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("Path not found.")
try:
if os.path.exists("/sdcard"):
os.mkdir("/sdcard/localwrapped")
return "/sdcard/localwrapped"
else:
raise Exception
except:
try:
if os.path.exists("/storage/emulated/0"):
os.mkdir("/storage/emulated/0/localwrapped")
return "/storage/emulated/0/localwrapped"
else:
raise Exception
except:
try:
if os.path.exists("/data/media/0"):
os.mkdir("/data/media/0/localwrapped")
return "/data/media/0/localwrapped"
else:
raise Exception
except:
try:
if os.path.exists("/mnt/user/0/emulated/0"):
os.mkdir("/mnt/user/0/emulated/0/localwrapped")
return "/mnt/user/0/emulated/0/localwrapped"
else:
raise Exception
except:
print("Path not found and could not be created.")
exit()
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(url: str = "https://halhadus.rocks/assets/localwrapped/music.db"):
if not os.path.exists(get_working_directory() + "/music.db"):
try:
download = requests.get(url)
with open(get_working_directory() + "/music.db", "wb") as f:
f.write(download.content)
except:
print("Could not download the database.")
exit()
musicconn = sqlite3.connect(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
if not os.path.exists(get_working_directory() + "/count.db"):
countconn = sqlite3.connect(get_working_directory() + "/count.db")
countc = countconn.cursor()
countc.execute("CREATE TABLE count (musicname TEXT, count INTEGER)")
countconn.commit()
countconn.close()
a = 0
last_written = None
while True:
if get_music() == None:
continue
last_music = get_music()
time.sleep(3)
if last_music == get_music():
if last_written == last_music:
continue
a += 1
if a == 20:
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:
countconn = sqlite3.connect(get_working_directory() + "/count.db")
countc = countconn.cursor()
countc.execute("SELECT * FROM count")
countdbrows = countc.fetchall()
countdbvalues = []
for row in countdbrows:
countdbvalues.append({
"musicname": row[0],
"count": row[1]
})
if not [row for row in countdbvalues if row["musicname"] == i["listmusicname"]]:
countc.execute("INSERT INTO count VALUES (?, ?)", (i["listmusicname"], 1))
countconn.commit()
countconn.close()
else:
countc.execute("UPDATE count SET count = count + 1 WHERE musicname = ?", (i["listmusicname"],))
countconn.commit()
countconn.close()
print(f"Local Wrapped: {i['listmusicname']} has been played.")
os.system(f"echo {i['listmusicname']} has been played. >> /cache/magisk.log")
last_written = last_music
a = 0
continue
else:
a = 0
continue