@@ -69,7 +69,7 @@ def check_scan_status(scan_id: str) -> str:
6969 # Get current activities from Plex
7070 from plex_utils import get_plex_activities , is_plex_scanning
7171 activities = get_plex_activities ()
72-
72+
7373 # Check if there are any scanning activities
7474 has_scanning_activity = len (activities ) > 0
7575
@@ -84,20 +84,23 @@ def check_scan_status(scan_id: str) -> str:
8484 # Activities might have librarySectionID in context
8585 context = activity .get ('context' , {})
8686 if isinstance (context , dict ):
87- act_section_id = context .get ('librarySectionID' ) or context .get ('sectionID' )
87+ act_section_id = context .get (
88+ 'librarySectionID' ) or context .get ('sectionID' )
8889 if act_section_id and str (act_section_id ) == str (section_id ):
8990 section_scanning = True
90- logger .info (f"Found scanning activity for section { section_id } " )
91+ logger .info (
92+ f"Found scanning activity for section { section_id } " )
9193 break
92-
94+
9395 # Also check using the section's refreshing attribute
9496 if not section_scanning :
9597 section_scanning = is_plex_scanning (section_id )
96-
98+
9799 if not section_scanning :
98100 # No scanning activity found, check timeout
99101 scan_timestamp = datetime .fromisoformat (scan_info ["timestamp" ])
100- time_since_scan = (datetime .now () - scan_timestamp ).total_seconds ()
102+ time_since_scan = (
103+ datetime .now () - scan_timestamp ).total_seconds ()
101104 # If no activity and it's been more than 2 minutes, assume completed
102105 if time_since_scan > 120 :
103106 scan_info ["status" ] = "completed"
@@ -133,8 +136,10 @@ def check_scan_status(scan_id: str) -> str:
133136 section_id = int (library_key )
134137 is_scanning = is_plex_scanning (section_id )
135138 if not is_scanning :
136- scan_timestamp = datetime .fromisoformat (scan_info ["timestamp" ])
137- time_since_scan = (datetime .now () - scan_timestamp ).total_seconds ()
139+ scan_timestamp = datetime .fromisoformat (
140+ scan_info ["timestamp" ])
141+ time_since_scan = (
142+ datetime .now () - scan_timestamp ).total_seconds ()
138143 if time_since_scan > 120 : # 2 minutes
139144 scan_info ["status" ] = "completed"
140145 scan_info ["completed_at" ] = datetime .now ().isoformat ()
@@ -1093,8 +1098,66 @@ def api_plex_item_scan():
10931098
10941099@app .route ('/api/plex/pending-scans' , methods = ['GET' ])
10951100def api_pending_scans ():
1096- """Gets the list of pending scans."""
1101+ """Gets the list of pending scans, including currently running scans from Plex ."""
10971102 try :
1103+ # First, check Plex activities for any currently running scans
1104+ from plex_utils import get_plex_activities , get_plex_client
1105+ activities = get_plex_activities ()
1106+
1107+ # Track which section IDs we've already seen in PENDING_SCANS
1108+ tracked_sections = set ()
1109+ for scan_info in PENDING_SCANS .values ():
1110+ library_key = scan_info .get ("library_key" )
1111+ if library_key :
1112+ tracked_sections .add (str (library_key ))
1113+
1114+ # Add any running scans from activities that aren't already tracked
1115+ plex = get_plex_client ()
1116+ for activity in activities :
1117+ context = activity .get ('context' , {})
1118+ library_section_id = context .get ('librarySectionID' )
1119+
1120+ if library_section_id and str (library_section_id ) not in tracked_sections :
1121+ # This is a scan we haven't tracked yet, add it
1122+ try :
1123+ # Get library name
1124+ library_name = f"Library { library_section_id } "
1125+ if plex :
1126+ try :
1127+ section = plex .library .sectionByID (int (library_section_id ))
1128+ if section :
1129+ library_name = section .title
1130+ except :
1131+ pass
1132+
1133+ # Get activity details for better naming
1134+ activity_title = activity .get ('title' , '' )
1135+ activity_subtitle = activity .get ('subtitle' , '' )
1136+
1137+ # Use subtitle if available (often contains item name like "Carmen Sandiego (2015)")
1138+ display_name = library_name
1139+ if activity_subtitle :
1140+ display_name = f"{ library_name } : { activity_subtitle } "
1141+ elif activity_title :
1142+ display_name = f"{ library_name } : { activity_title } "
1143+
1144+ # Create a scan ID for this activity
1145+ activity_key = activity .get ('key' , '' )
1146+ scan_id = f"activity_{ library_section_id } _{ activity_key [:8 ] if activity_key else uuid .uuid4 ().hex [:8 ]} "
1147+
1148+ # Only add if we don't already have this scan_id
1149+ if scan_id not in PENDING_SCANS :
1150+ add_pending_scan (
1151+ "library" ,
1152+ scan_id ,
1153+ display_name ,
1154+ library_key = str (library_section_id )
1155+ )
1156+ tracked_sections .add (str (library_section_id ))
1157+ logger .info (f"Added untracked scan from activities: { display_name } (section { library_section_id } )" )
1158+ except Exception as e :
1159+ logger .warning (f"Error adding scan from activity: { e } " )
1160+
10981161 # Update status for all pending scans
10991162 for scan_id in list (PENDING_SCANS .keys ()):
11001163 scan_info = PENDING_SCANS [scan_id ]
0 commit comments