@@ -182,25 +182,29 @@ def run():
182182
183183 db .upsert_course (course_id , course_title , teacher )
184184
185+ # Deduplicate by sub_title on the full lecture list first
186+ # (school system sometimes lists duplicates; doing this on the raw list
187+ # ensures consistent dedup across runs, not just for pending lectures)
188+ seen_sub_titles : set [str ] = set ()
189+ deduped_lectures = []
190+ for lec in lectures :
191+ title = lec .get ("sub_title" , "" )
192+ if title and title in seen_sub_titles :
193+ print (f" [Dedup] Skipping duplicate: { title } "
194+ f" (sub_id={ lec ['sub_id' ]} )" )
195+ continue
196+ if title :
197+ seen_sub_titles .add (title )
198+ deduped_lectures .append (lec )
199+ lectures = deduped_lectures
200+
185201 # Find new lectures with playback + previously failed (unprocessed) ones
186202 known_processed = db .get_processed_sub_ids (course_id )
187203 new_lectures = [
188204 lec for lec in lectures
189205 if lec .get ("has_playback" )
190206 and str (lec ["sub_id" ]) not in known_processed
191207 ]
192- # Deduplicate by sub_title (school system sometimes lists duplicates)
193- seen_titles = set ()
194- deduped = []
195- for lec in new_lectures :
196- title = lec .get ("sub_title" , "" )
197- if title in seen_titles :
198- print (f" [Dedup] Skipping duplicate: { title } "
199- f" (sub_id={ lec ['sub_id' ]} )" )
200- continue
201- seen_titles .add (title )
202- deduped .append (lec )
203- new_lectures = deduped
204208 # Also retry any previously inserted but unprocessed
205209 unprocessed = db .get_unprocessed_lectures (course_id )
206210 new_ids = {str (lec ["sub_id" ]) for lec in new_lectures }
0 commit comments