79 lines
2.2 KiB
Python
79 lines
2.2 KiB
Python
import sqlite3
|
|
from datetime import datetime
|
|
|
|
import meilisearch
|
|
|
|
|
|
def tzunit(dt) -> datetime:
|
|
if dt.tzinfo is not None:
|
|
return dt.replace(tzinfo=None)
|
|
return dt
|
|
|
|
|
|
client = meilisearch.Client("http://127.0.0.1:7700", "aSampleMasterKey")
|
|
index = client.index("itunes-albums")
|
|
|
|
con = sqlite3.connect("navidrome.db")
|
|
cur = con.cursor()
|
|
instertor = con.cursor()
|
|
update_statement = """UPDATE album SET
|
|
persistent_id = ?,
|
|
itunes_date = ?,
|
|
meili_nb_res = ?,
|
|
meili_title = ?,
|
|
meili_artist = ?,
|
|
meili_doc = ?,
|
|
meili_song_count = ?,
|
|
validated = ?
|
|
WHERE id = ?"""
|
|
|
|
for row in cur.execute("SELECT * FROM album;"):
|
|
msearch = index.search(
|
|
row[1], {"filter": [f'Artist="{row[2]}"'], "showRankingScore": True}
|
|
)
|
|
meili_result_len = len(msearch["hits"])
|
|
if meili_result_len > 0:
|
|
meili_hit = msearch["hits"][0]
|
|
|
|
if meili_hit["_rankingScore"] > 0.5:
|
|
meili_artist = (
|
|
[meili_hit["Album Artist"]]
|
|
if "Album Artist" in meili_hit
|
|
else meili_hit["Artist"]
|
|
)
|
|
|
|
nv_date = tzunit(datetime.fromisoformat(row[4]))
|
|
itunes_date = tzunit(datetime.fromisoformat(meili_hit["Date Added"]))
|
|
timedelta = nv_date - itunes_date
|
|
|
|
val_score = 0
|
|
if timedelta.days < 1:
|
|
val_score = -1
|
|
else:
|
|
if meili_result_len == 1:
|
|
val_score += 50
|
|
if meili_hit["Track Count"] == row[3]:
|
|
val_score += 40
|
|
if meili_hit["Name"] == row[1]:
|
|
val_score += 30
|
|
if row[2] in meili_artist:
|
|
val_score += 10
|
|
|
|
meili_artist = (
|
|
str(meili_artist[0]) if len(meili_artist) == 1 else str(meili_artist)
|
|
)
|
|
data = (
|
|
meili_hit["Persistent ID"],
|
|
meili_hit["Date Added"],
|
|
meili_result_len,
|
|
meili_hit["Name"],
|
|
str(meili_artist),
|
|
str(meili_hit),
|
|
meili_hit["Track Count"],
|
|
val_score,
|
|
row[0],
|
|
)
|
|
print(f"Update {row[1]}")
|
|
instertor.execute(update_statement, data)
|
|
con.commit()
|