Commit Graph

642 Commits

Author SHA1 Message Date
sbcrumb 86235142a0 Fix Discord link and improve README content
Updated README to enhance clarity and correct links.
2025-09-16 20:42:36 -04:00
sbcrumb 44fdc1cdf0 Update README with alpha notice and Discord link
Added alpha software notice and Discord plugin information to README.
2025-09-16 17:03:46 -04:00
sbcrumb f272baf2a4 Add sample Docker Compose configuration for NFOGuard
This file contains a sample Docker Compose configuration for NFOGuard, including service definitions, environment variables, volume mappings, health checks, and setup instructions.
2025-09-16 17:01:12 -04:00
sbcrumb aae36ac145 Add .env.secrets template for configuration 2025-09-16 16:58:55 -04:00
sbcrumb faa320d299 Clarify Radarr database connection requirements
Updated Radarr database connection comments for clarity and requirements.
2025-09-16 16:56:51 -04:00
sbcrumb fab3da938f Update README.md 2025-09-16 16:49:53 -04:00
sbcrumb 0e9b117ff4 Revise LICENSE with new copyright and terms 2025-09-16 16:47:30 -04:00
sbcrumb cd31caf313 Update download links in README.md 2025-09-16 16:43:10 -04:00
sbcrumb b7d695ab62 Create README.md for NFOGuard project 2025-09-16 16:41:27 -04:00
sbcrumb 2c13fd778a Initial commit 2025-09-16 16:39:22 -04:00
sbcrumb 220ca3ab5f Fix VERSION conflict and add v1.5.5 release notes 2025-09-16 16:08:37 -04:00
sbcrumb 768eb01563 update version number 2025-09-16 16:04:15 -04:00
sbcrumb 722f260726 Fix Docker build with PostgreSQL dependencies 2025-09-16 16:02:23 -04:00
sbcrumb 5e2a3b1aba Fix Docker build with PostgreSQL dependencies 2025-09-16 15:59:13 -04:00
sbcrumb 552addbdb9 Fix docker build missing context 2025-09-16 15:55:36 -04:00
sbcrumb 9df0b969b0 fix python 2025-09-16 15:53:47 -04:00
sbcrumb 571d0400b2 python fix 2025-09-16 15:47:54 -04:00
sbcrumb 339d023b85 update to python 3.13 2025-09-16 15:38:51 -04:00
sbcrumb bc63d6a5a4 git docker hub perm issue 2025-09-16 15:32:17 -04:00
sbcrumb 9e5c6feb47 adding docker workflow 2025-09-16 15:29:22 -04:00
sbcrumb 1353b53cc8 CRITICAL: Fix database upsert bug preventing manual scan date persistence
**Root Cause**: upsert_movie_dates() was UPDATE-only, not proper upsert
- Manual scans failed to save dateadded to database (NULL values)
- Webhooks found database entries but with NULL dateadded
- Fell back to current timestamp instead of using proper import dates

**Database Fix**:
- Changed core/database.py upsert_movie_dates() from UPDATE to INSERT OR REPLACE
- Now properly saves dateadded during manual scans
- Preserves existing path with COALESCE fallback

**Webhook Enhancement**:
- Added comprehensive debug logging for database lookups
- Enhanced webhook date decision logic with proper fallback chain
- Only uses current timestamp as absolute last resort

**Impact**:
- Movies: Manual scans now persist dates, webhooks find existing entries 
- TV Shows: Not affected - already using proper INSERT OR REPLACE 
- Version: 1.5.5
2025-09-15 12:18:53 -04:00
sbcrumb ed4a9c0a19 Fix Radarr rename event handling - add missing event type filtering
- Add event type filtering to Radarr webhook handler (Download, Upgrade, Rename)
- Ensures consistency with Sonarr webhook processing
- Fixes issue where Radarr rename events weren't properly updating NFO files
- Bump version to v1.5.3
- Update SUMMARY.md with complete webhook workflow documentation
2025-09-15 09:35:41 -04:00
sbcrumb df04cf9aec update 2025-09-15 09:16:28 -04:00
sbcrumb 75b8338b86 remove hardcode debug statments in favor of variables 2025-09-14 14:38:14 -04:00
sbcrumb 1dae7df3d2 updates to paths again 2025-09-14 14:23:25 -04:00
sbcrumb 1a562f7b41 missing path 2025-09-14 14:21:09 -04:00
sbcrumb f5ae8c7768 cleanup 2025-09-14 14:19:39 -04:00
sbcrumb a9c90d2939 remove debug 2025-09-14 14:15:19 -04:00
sbcrumb 2657729975 dates for TV shows 2025-09-14 13:56:31 -04:00
sbcrumb d7db924510 dates at bottom 2025-09-14 13:54:04 -04:00
sbcrumb 179f8f51d7 nfo dates to the bottom 2025-09-14 13:49:15 -04:00
sbcrumb e7b65cfed6 nfo fix again 2025-09-14 13:44:56 -04:00
sbcrumb 49266d651a fix nfo 2025-09-14 13:40:22 -04:00
sbcrumb 05ba16666e another DB table 2025-09-14 13:31:54 -04:00
sbcrumb b1f670415d database fix 2025-09-14 13:29:02 -04:00
sbcrumb 609f17713a fix path mapping wrong with smartstring 2025-09-14 13:25:32 -04:00
sbcrumb d168cc8317 path helper 2025-09-14 13:21:05 -04:00
sbcrumb 7b72d2d20b update DB tables 2025-09-14 13:15:48 -04:00
sbcrumb 04b0202903 removal of hard codeing 2025-09-14 13:13:13 -04:00
sbcrumb c20cefb571 fix hardcoded paths 2025-09-14 13:07:50 -04:00
sbcrumb bbe5f8c892 push updates to paths again 2025-09-14 13:03:41 -04:00
sbcrumb 27cc2f878e update movie paths 2025-09-14 12:56:47 -04:00
jskala ec11a54e02 Merge pull request 'github-claude' (#4) from github-claude into dev
Reviewed-on: jskala/NFOguard#4
2025-09-14 12:51:54 -04:00
sbcrumb ebd1191598 updates to flow 2025-09-14 12:51:15 -04:00
sbcrumb e741e4b046 fix: isolate movie and TV webhook processing to prevent cross-contamination
- Add prefixed batch keys (movie:imdbid, tv:imdbid) to prevent IMDb ID collisions
- Add path existence validation for Radarr webhooks to reject invalid mappings early
- Remove duplicate Radarr webhook handler code
- Add debug scripts for troubleshooting webhook and path mapping issues
- Create corrected .env template with fixed TV_PATHS and SONARR_ROOT_FOLDERS

This fixes the issue where TV path mapping failures caused movie webhooks
to process wrong movies due to shared batch queue corruption.
2025-09-14 12:43:07 -04:00
sbcrumb 91881262ce docs: complete API keys documentation in README.md
Documentation Enhancement:
- Add missing TVDB_API_KEY to all relevant sections in README.md
- Create comprehensive API keys reference table with purposes and sources
- Add centralized API Keys Configuration section with clear examples
- Document how to resolve "TVDB API key not configured" warnings
- Include direct links to obtain API keys from each service

API Keys Covered:
- TMDB_API_KEY - Movie release dates and metadata fallbacks
- TVDB_API_KEY - TV show metadata and Emby compatibility (was missing!)
- RADARR_API_KEY - Movie import history and database access
- SONARR_API_KEY - TV episode import history

This resolves user questions about the TVDB API key warning and provides
complete documentation for all external API integrations.
2025-09-14 12:07:23 -04:00
sbcrumb 5b7d4cdbd0 feat: improve NFO file organization by moving NFOGuard elements to bottom
NFO Organization Enhancement:
- Move all NFOGuard elements (dateadded, lockdata, comments) to bottom of NFO files
- Remove existing NFOGuard elements and re-add at bottom for clean organization
- Provides better separation between media metadata and NFOGuard management
- Easier to read NFO files when Radarr/Sonarr has already populated extensive metadata

Before: NFOGuard elements mixed throughout existing metadata
After: All media metadata first, then NFOGuard elements grouped at bottom

This addresses user feedback about NFO readability when files already contain
extensive metadata from Radarr, making it easier to see both media info and
NFOGuard management details in a logical order.
2025-09-14 11:21:44 -04:00
sbcrumb df5785e8ad feat: MAJOR - implement webhook-first architecture with database priority
Revolutionary Workflow Changes (v0.7.0):
This fundamentally changes how NFOGuard handles timestamps and processing priority.

Webhooks = Source of Truth:
- First webhook fires → Use current timestamp → Store as permanent database entry
- Subsequent webhooks (upgrades) → Check database → Use original first-seen timestamp
- No more API calls during webhook processing → Webhook timing is ultimate authority
- Movies and TV episodes both use webhook-first approach

Manual Scans = Smart Fallback Logic:
- Priority 1: Our database (webhook timestamps) - database always wins
- Priority 2: Sonarr/Radarr import history (first import only)
- Priority 3: Air date as dateadded (final fallback)

Technical Implementation:
- Enhanced _get_webhook_episode_date() to use current timestamp as source of truth
- Added webhook_mode parameter to process_movie() for separate webhook logic
- All manual scans prioritize database entries before making API calls
- All timestamps converted to container timezone (Eastern Time)
- Enhanced debug logging for database lookups and timestamp decisions

Expected Workflow:
First download at 8:30am → webhook timestamp stored in database
Upgrade at 2:00pm → database entry found → original 8:30am timestamp preserved
Manual scan → database entry found → 8:30am timestamp used

This ensures the first-seen webhook timestamp is the permanent source of truth,
with upgrades and manual scans always preserving the original download time.
2025-09-14 10:52:43 -04:00
sbcrumb e188706001 fix: webhook episode processing now uses real Sonarr import history
Critical Fix for Episode Import Dates:
- Webhook episodes now query Sonarr import history instead of using current time
- Fix _get_webhook_episode_date() to follow same logic as manual scans
- Convert import dates from UTC to local timezone for NFO dateadded fields
- Episodes now show 'sonarr:history.import' source instead of 'webhook:new_download'

Before: <dateadded>2025-09-14T12:40:07+00:00</dateadded> (current webhook time)
After:  <dateadded>2025-09-14T08:40:07-04:00</dateadded> (real import time in local timezone)

This fixes the issue where episodes downloaded at 8:40am EST were showing
12:40pm UTC webhook time instead of the actual import timestamp.

Enhanced webhook processing now:
1. Checks database for existing entries (prevents duplicates)
2. Queries Sonarr import history for real import dates
3. Converts UTC import dates to local timezone
4. Only uses current time as last resort for true new downloads
2025-09-14 10:41:43 -04:00
sbcrumb d8754e41a7 fix: NFO timestamp consistency and enhanced episode processing debug
NFO Management Timestamp Fix:
- Fix NFO management comments to use local timezone instead of UTC
- Both movie and TV episode NFO files now show consistent local timezone
- Comments now show: <!-- managed by NFOGuard at 2025-09-14T09:29:06-04:00 -->

Enhanced Episode Processing Debug:
- Add comprehensive debug logging for webhook episode database lookups
- Track IMDb ID and season/episode info throughout processing pipeline
- Add database write verification to catch storage issues immediately
- Enhanced logging will help identify duplicate processing root causes

This addresses the issue where episodes were being treated as new downloads
instead of finding existing database entries, helping prevent duplicate processing.
2025-09-14 10:27:05 -04:00