This commit is contained in:
mike
2026-06-28 02:29:31 +02:00
parent 3f91694491
commit 6ad11fc6c0
2 changed files with 122 additions and 28 deletions

View File

@@ -2227,6 +2227,63 @@
// --- HYDRATION_START --- // --- HYDRATION_START ---
const PRELOADED_IMAGES = [ const PRELOADED_IMAGES = [
"20260628_020853_pad_20260628_015651_img_12.nobg.png",
"20260628_020642_pad_20260628_015651_img_12.nobg.png",
"20260628_020610_pad_20260628_015651_img_12.nobg.png",
"20260628_020546_pad_20260628_015651_img_12.nobg.png",
"20260628_020519_pad_20260628_015651_img_12.nobg.png",
"20260628_020428_pad_20260628_015651_img_12.nobg.png",
"20260628_020302_pad_20260628_015651_img_12.nobg.png",
"20260628_020125_pad_20260628_015651_img_12.nobg.png",
"20260628_015815_pad_20260628_015651_img_12.nobg.png",
"20260628_015832_pad_20260628_015651_img_12.png",
"20260628_015815_pad_20260628_015651_img_12.png",
"20260628_015707_img_12.png",
"20260628_015651_img_12.png",
"20260615_153426_img_12.png",
"20260628_015423_img_12.png",
"cg_5991f3f2_face.png",
"20260628_012806_pad_20260624_143523_Screenshot_From_2026-06-17_07-41-27.nobg.nobg.png",
"20260628_014614_p10.nobg.png",
"p10.png_face.png",
"20260628_014614_p10.png",
"20260628_014603_p10.png",
"up_2687be75_face.png",
"20260628_013521_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_013511_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_013459_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_013429_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_013429_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.png",
"20260628_013412_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.png",
"20260628_012832_pad_20260624_143523_Screenshot_From_2026-06-17_07-41-27.nobg.nobg.png",
"_turntable/cg_5991f3f2/views/view_022_330deg.png",
"20260628_011700_pad_20260624_154318_img_72.png",
"20260628_012006_pad_20260624_154318_img_72.png",
"20260628_011837_pad_20260624_154318_img_72.png",
"20260628_012240_crop_20260628_011837_pad_20260624_154318_img_72.png",
"20260628_011227_dup_Pasted image (9).png",
"20260628_011118_pad_20260628_010755_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.nobg.png",
"20260628_010957_pad_20260628_010755_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.nobg.png",
"20260628_010947_pad_20260628_010755_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.nobg.png",
"20260628_010858_pad_20260628_010755_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.nobg.png",
"20260628_010858_pad_20260628_010755_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.png",
"20260628_010841_pad_20260628_010755_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.png",
"20260628_010755_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.png",
"20260628_010630_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.png",
"20260628_010408_image.png",
"20260627_203626_image.png",
"up_7b6eaabb_face.png",
"cg_809653a0_face.png",
"bb_01.png_face.png",
"_turntable/up_aa1add4d/views/view_023_345deg.png",
"_turntable/up_aa1add4d/views/view_003_045deg.png",
"_turntable/up_aa1add4d/views/view_001_015deg.png",
"_turntable/up_7b6eaabb/views/view_001_015deg.png",
"_turntable/up_7b6eaabb/views/view_000_000deg.png",
"_turntable/up_6ed4293c/views/view_023_345deg.png",
"_turntable/up_6ed4293c/views/view_022_330deg.png",
"_turntable/up_6ed4293c/views/view_021_315deg.png",
"_turntable/up_6ed4293c/views/view_020_300deg.png",
"_turntable/up_6ed4293c/views/view_019_285deg.png", "_turntable/up_6ed4293c/views/view_019_285deg.png",
"_turntable/up_6ed4293c/views/view_018_270deg.png", "_turntable/up_6ed4293c/views/view_018_270deg.png",
"_turntable/up_6ed4293c/views/view_017_255deg.png", "_turntable/up_6ed4293c/views/view_017_255deg.png",
@@ -2285,9 +2342,6 @@
"_turntable/cg_7c7b22c9/views/view_022_330deg.png", "_turntable/cg_7c7b22c9/views/view_022_330deg.png",
"20260618_015124_20260618_010617_20260615_153426_img_12.nobg.png", "20260618_015124_20260618_010617_20260615_153426_img_12.nobg.png",
"_turntable/cg_5991f3f2/views/view_002_030deg.png", "_turntable/cg_5991f3f2/views/view_002_030deg.png",
"_turntable/cg_5991f3f2/views/view_022_330deg.png",
"_turntable/up_6ed4293c/views/view_021_315deg.png",
"_turntable/up_6ed4293c/views/view_020_300deg.png",
"20260627_213910_best_02_person_0.874_2026-06-27_12-18-49.png", "20260627_213910_best_02_person_0.874_2026-06-27_12-18-49.png",
"20260627_213840_best_02_person_0.874_2026-06-27_12-18-49.png", "20260627_213840_best_02_person_0.874_2026-06-27_12-18-49.png",
"20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.png", "20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.png",
@@ -2368,10 +2422,8 @@
"_turntable/cg_75340e8e/views/view_001_015deg.png", "_turntable/cg_75340e8e/views/view_001_015deg.png",
"_turntable/cg_75340e8e/views/view_000_000deg.png", "_turntable/cg_75340e8e/views/view_000_000deg.png",
"20260627_203706_11_20260627_200330_image.png", "20260627_203706_11_20260627_200330_image.png",
"up_7b6eaabb_face.png",
"20260627_203654_11_20260627_200330_image.png", "20260627_203654_11_20260627_200330_image.png",
"20260627_203642_11_20260627_200330_image.png", "20260627_203642_11_20260627_200330_image.png",
"20260627_203626_image.png",
"20260627_203607_image.png", "20260627_203607_image.png",
"20260627_203549_image.png", "20260627_203549_image.png",
"20260627_203531_Screenshot_From_2026-06-27_20-04-11.png", "20260627_203531_Screenshot_From_2026-06-27_20-04-11.png",
@@ -2416,7 +2468,6 @@
"_turntable/up_c8be3aa7/views/view_004_060deg.png", "_turntable/up_c8be3aa7/views/view_004_060deg.png",
"_turntable/up_c8be3aa7/views/view_001_015deg.png", "_turntable/up_c8be3aa7/views/view_001_015deg.png",
"20260627_200711_11_20260627_200330_image.png", "20260627_200711_11_20260627_200330_image.png",
"20260627_200632_9_20260627_200330_image.png",
"20260627_200506_image.png", "20260627_200506_image.png",
"20260627_200422_2_20260627_200330_image.png", "20260627_200422_2_20260627_200330_image.png",
"20260627_200414_image.png", "20260627_200414_image.png",
@@ -2447,7 +2498,6 @@
"_turntable/img_87.png/views/view_017_255deg.png", "_turntable/img_87.png/views/view_017_255deg.png",
"_turntable/img_87.png/views/view_016_240deg.png", "_turntable/img_87.png/views/view_016_240deg.png",
"_turntable/img_87.png/views/view_015_225deg.png", "_turntable/img_87.png/views/view_015_225deg.png",
"_turntable/up_aa1add4d/views/view_023_345deg.png",
"_turntable/up_aa1add4d/views/view_022_330deg.png", "_turntable/up_aa1add4d/views/view_022_330deg.png",
"_turntable/up_aa1add4d/views/view_021_315deg.png", "_turntable/up_aa1add4d/views/view_021_315deg.png",
"_turntable/up_aa1add4d/views/view_020_300deg.png", "_turntable/up_aa1add4d/views/view_020_300deg.png",
@@ -2467,9 +2517,7 @@
"_turntable/up_aa1add4d/views/view_006_090deg.png", "_turntable/up_aa1add4d/views/view_006_090deg.png",
"_turntable/up_aa1add4d/views/view_005_075deg.png", "_turntable/up_aa1add4d/views/view_005_075deg.png",
"_turntable/up_aa1add4d/views/view_004_060deg.png", "_turntable/up_aa1add4d/views/view_004_060deg.png",
"_turntable/up_aa1add4d/views/view_003_045deg.png",
"_turntable/up_aa1add4d/views/view_002_030deg.png", "_turntable/up_aa1add4d/views/view_002_030deg.png",
"_turntable/up_aa1add4d/views/view_001_015deg.png",
"_turntable/up_aa1add4d/views/view_000_000deg.png", "_turntable/up_aa1add4d/views/view_000_000deg.png",
"_turntable/up_ae825fce/views/view_023_345deg.png", "_turntable/up_ae825fce/views/view_023_345deg.png",
"_turntable/up_ae825fce/views/view_022_330deg.png", "_turntable/up_ae825fce/views/view_022_330deg.png",
@@ -4335,7 +4383,6 @@
"_turntable/cg_f0049873/views/view_002_030deg.png", "_turntable/cg_f0049873/views/view_002_030deg.png",
"_turntable/cg_f0049873/views/view_001_015deg.png", "_turntable/cg_f0049873/views/view_001_015deg.png",
"_turntable/cg_f0049873/views/view_000_000deg.png", "_turntable/cg_f0049873/views/view_000_000deg.png",
"_turntable/cg_08203e88/turntable.mp4",
"_turntable/cg_08203e88/views/view_023_345deg.png", "_turntable/cg_08203e88/views/view_023_345deg.png",
"_turntable/cg_08203e88/views/view_022_330deg.png", "_turntable/cg_08203e88/views/view_022_330deg.png",
"_turntable/cg_08203e88/views/view_021_315deg.png", "_turntable/cg_08203e88/views/view_021_315deg.png",
@@ -4633,7 +4680,6 @@
"20260626_021942_pad_20260625_205913_8_20260625_205722_image.png", "20260626_021942_pad_20260625_205913_8_20260625_205722_image.png",
"20260626_021533_pad_20260625_205828_4_20260625_205722_image.png", "20260626_021533_pad_20260625_205828_4_20260625_205722_image.png",
"20260626_014422_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.png", "20260626_014422_pad_20260626_005644_dup_20260626_005504_Pasted image (9).nobg.png",
"cg_809653a0_face.png",
"20260626_005644_dup_20260626_005504_Pasted image (9).nobg.png", "20260626_005644_dup_20260626_005504_Pasted image (9).nobg.png",
"20260626_005504_Pasted image (9).nobg.png", "20260626_005504_Pasted image (9).nobg.png",
"20260626_005504_Pasted image (9).png", "20260626_005504_Pasted image (9).png",
@@ -5002,7 +5048,6 @@
"20260624_154453_img_72.png", "20260624_154453_img_72.png",
"20260624_154442_img_72.png", "20260624_154442_img_72.png",
"20260624_154318_img_72.png", "20260624_154318_img_72.png",
"cg_b7e71d34_face.png",
"20260624_154236_img_72.png", "20260624_154236_img_72.png",
"20260624_154125_img_72.png", "20260624_154125_img_72.png",
"20260624_153940_img_72.png", "20260624_153940_img_72.png",
@@ -5010,7 +5055,6 @@
"20260624_153614_Screenshot_From_2026-06-17_07-41-27.png", "20260624_153614_Screenshot_From_2026-06-17_07-41-27.png",
"20260624_153417_Screenshot_From_2026-06-17_07-41-27.png", "20260624_153417_Screenshot_From_2026-06-17_07-41-27.png",
"20260624_153344_Screenshot_From_2026-06-17_07-41-27.png", "20260624_153344_Screenshot_From_2026-06-17_07-41-27.png",
"20260624_153311_Screenshot_From_2026-06-17_07-41-27.png",
"20260624_153102_Screenshot_From_2026-06-17_07-41-27.png", "20260624_153102_Screenshot_From_2026-06-17_07-41-27.png",
"20260624_153051_Screenshot_From_2026-06-17_07-41-27.png", "20260624_153051_Screenshot_From_2026-06-17_07-41-27.png",
"20260624_153040_Screenshot_From_2026-06-17_07-41-27.png", "20260624_153040_Screenshot_From_2026-06-17_07-41-27.png",
@@ -6623,7 +6667,6 @@
"20260616_004250_img_18.png", "20260616_004250_img_18.png",
"20260616_003916_img_15.png", "20260616_003916_img_15.png",
"20260616_003803_img_14.png", "20260616_003803_img_14.png",
"20260615_153426_img_12.png",
"20260615_152252_imgxxx.png", "20260615_152252_imgxxx.png",
"20260615_151829_img_92.png", "20260615_151829_img_92.png",
"20260615_151614_img_93.png", "20260615_151614_img_93.png",

View File

@@ -307,6 +307,8 @@ def _idle_turntable_daemon():
fname, group_id, sort_order = row[0], row[2], row[6] fname, group_id, sort_order = row[0], row[2], row[6]
if not group_id: if not group_id:
continue continue
if fname.startswith("_turntable/"):
continue
if group_id not in groups: if group_id not in groups:
groups[group_id] = (fname, sort_order) groups[group_id] = (fname, sort_order)
else: else:
@@ -1378,24 +1380,73 @@ def _write_turntable_static() -> None:
except Exception: except Exception:
group_names = {} group_names = {}
# Preferred filename per group (sort_order=0) # Fetch active and existing group IDs and filenames from the database (excluding turntable assets)
preferred: dict = {} all_db_gids = set()
active_db_gids = set()
all_db_filenames = set()
active_db_filenames = set()
try: try:
for row in database.list_persons(): conn = database.get_db_connection()
fname, gid, sort_order = row[0], row[2], row[6] cur = conn.cursor()
if not gid: cur.execute("""
continue SELECT filename, group_id, archived, hidden
if gid not in preferred: FROM person
preferred[gid] = (fname, sort_order) WHERE NOT (filename LIKE '_turntable/%')
else: """)
cur = preferred[gid][1] for fname, gid, archived, hidden in cur.fetchall():
if sort_order is not None and (cur is None or sort_order < cur): is_archived = bool(archived) if archived is not None else False
preferred[gid] = (fname, sort_order) is_hidden = bool(hidden) if hidden is not None else False
except Exception:
pass all_db_filenames.add(fname)
if not is_archived and not is_hidden:
active_db_filenames.add(fname)
if gid:
all_db_gids.add(gid)
if not is_archived and not is_hidden:
active_db_gids.add(gid)
cur.close()
database._put_db_connection(conn)
except Exception as db_err:
print(f"[static] DB check error: {db_err}")
turntables = [] turntables = []
for gid in tc.list_cached_group_ids(output_dir): for gid in tc.list_cached_group_ids(output_dir):
is_orphaned = False
is_active = False
if gid.startswith("file_"):
fname = gid[5:]
if all_db_filenames and fname not in all_db_filenames:
is_orphaned = True
elif active_db_filenames and fname in active_db_filenames:
is_active = True
else:
if all_db_gids and gid not in all_db_gids:
is_orphaned = True
elif active_db_gids and gid in active_db_gids:
is_active = True
# 1. Truly orphaned turntable caches (no associated base images or files in DB)
if is_orphaned:
print(f"[static] Deleting truly orphaned turntable cache and DB records for group/file {gid}")
tc.delete_state(output_dir, gid)
try:
conn = database.get_db_connection()
cur = conn.cursor()
cur.execute("DELETE FROM person WHERE group_id = %s", (gid,))
conn.commit()
cur.close()
database._put_db_connection(conn)
except Exception as del_err:
print(f"[static] Failed to clean DB records for orphaned group/file {gid}: {del_err}")
continue
# 2. Inactive turntable caches (associated group/file is fully archived or hidden)
if not is_active:
# Keep cache on disk but do not write to turntables.json (hide from UI)
continue
state = tc.load_state(output_dir, gid) state = tc.load_state(output_dir, gid)
if not state: if not state:
continue continue