Implement demo fallback for missing Jellyfin credentials in mac_cocoa.py

Co-authored-by: Copilot <[email protected]>
This commit is contained in:
Pat TeruelandCopilot committed 2026-03-01 11:32:50 +08:00
1 parent 46470ced11
commit 62c69cc5d9
1 file changed
+28 -5
+28 -5
View File
@@ -142,14 +142,38 @@ class AppDelegate(NSObject):
previous = get_previous_sunday() previous = get_previous_sunday()
latest_dt = datetime.fromisoformat(latest.replace("Z", "+00:00")) latest_dt = datetime.fromisoformat(latest.replace("Z", "+00:00"))
previous_dt = datetime.fromisoformat(previous.replace("Z", "+00:00")) previous_dt = datetime.fromisoformat(previous.replace("Z", "+00:00"))
user_id = os.environ.get("JELLYFIN_USER_ID")
if not user_id:
raise RuntimeError("JELLYFIN_USER_ID not set in environment")
host = os.environ.get("JELLYFIN_HOST")
key = os.environ.get("JELLYFIN_API_KEY")
user_id = os.environ.get("JELLYFIN_USER_ID")
total_episodes = int(os.environ.get("TOTAL_EPISODES", 1155))
# If credentials are missing, provide a demo report so UI can be validated without Jellyfin
if not (host and key and user_id):
demo_ep = min(total_episodes, 1000)
prev_ep = max(0, demo_ep - 3)
watched_this_week = demo_ep - prev_ep
week_start, week_end, _ = current_week()
date_range = format_date_range(week_start, week_end)
report_text = (
f"ONE PIECE PROGRESS (DEMO MODE) ({date_range})\n"
f"Episode {demo_ep}/{total_episodes}\n"
f"Around {watched_this_week} episodes watched this week!"
)
payload = {"report": report_text, "debug": "Demo mode: Jellyfin credentials not set."}
self.performSelectorOnMainThread_withObject_waitUntilDone_("updateUI:", payload, False)
return
# Try real Jellyfin calls; on failure show error (with debug logs)
try:
ep_info = jellyfin.find_last_one_piece_episode(latest_dt, user_id) ep_info = jellyfin.find_last_one_piece_episode(latest_dt, user_id)
prev_ep_info = jellyfin.find_last_one_piece_before_previous_sunday(previous_dt, user_id) prev_ep_info = jellyfin.find_last_one_piece_before_previous_sunday(previous_dt, user_id)
except Exception as e:
payload = {"error": "Failed to contact Jellyfin: " + str(e), "debug": jellyfin.get_debug_logs()}
self.performSelectorOnMainThread_withObject_waitUntilDone_("showError:", payload, False)
return
previous_episode = prev_ep_info["episode_number"] previous_episode = prev_ep_info["episode_number"]
total_episodes = int(os.environ.get("TOTAL_EPISODES", 1155))
watched_this_week = ep_info["episode_number"] - previous_episode watched_this_week = ep_info["episode_number"] - previous_episode
week_start, week_end, _ = current_week() week_start, week_end, _ = current_week()
date_range = format_date_range(week_start, week_end) date_range = format_date_range(week_start, week_end)
@@ -162,7 +186,6 @@ class AppDelegate(NSObject):
debug_output = jellyfin.get_debug_logs() debug_output = jellyfin.get_debug_logs()
payload = {"report": report_text, "debug": debug_output} payload = {"report": report_text, "debug": debug_output}
# Update UI on main thread
self.performSelectorOnMainThread_withObject_waitUntilDone_("updateUI:", payload, False) self.performSelectorOnMainThread_withObject_waitUntilDone_("updateUI:", payload, False)
except Exception as e: except Exception as e:
payload = {"error": str(e), "debug": jellyfin.get_debug_logs()} payload = {"error": str(e), "debug": jellyfin.get_debug_logs()}