diff --git a/mac_cocoa.py b/mac_cocoa.py index 39efe5c..184dc01 100644 --- a/mac_cocoa.py +++ b/mac_cocoa.py @@ -142,14 +142,38 @@ class AppDelegate(NSObject): previous = get_previous_sunday() latest_dt = datetime.fromisoformat(latest.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") - 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) - previous_episode = prev_ep_info["episode_number"] + 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) + 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"] watched_this_week = ep_info["episode_number"] - previous_episode week_start, week_end, _ = current_week() date_range = format_date_range(week_start, week_end) @@ -162,7 +186,6 @@ class AppDelegate(NSObject): debug_output = jellyfin.get_debug_logs() payload = {"report": report_text, "debug": debug_output} - # Update UI on main thread self.performSelectorOnMainThread_withObject_waitUntilDone_("updateUI:", payload, False) except Exception as e: payload = {"error": str(e), "debug": jellyfin.get_debug_logs()}