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()