private void ScanWorker(object o) { try { ScanSettings settings = (ScanSettings)o; //When doing a full scan the show list is null indicating that all shows should be checked List <ShowItem> specific = settings.Shows ?? Library.Values.ToList(); while (!Args.Hide && Environment.UserInteractive && ((scanProgDlg is null) || (!scanProgDlg.Ready))) { Thread.Sleep(10); // wait for thread to create the dialog } TheActionList = new ItemList(); SetProgressDelegate noProgress = NoProgress; if (!settings.Unattended && settings.Type != TVSettings.ScanType.SingleShow) { new FindNewShowsInDownloadFolders(this).Check((scanProgDlg is null) ? noProgress : scanProgDlg.AddNewProg, 0, 50, specific, settings); new FindNewShowsInLibrary(this).Check((scanProgDlg is null) ? noProgress : scanProgDlg.AddNewProg, 50, 100, specific, settings); } new CheckShows(this).Check((scanProgDlg is null) ? noProgress : scanProgDlg.MediaLibProg, specific, settings); new CleanDownloadDirectory(this).Check((scanProgDlg is null) ? noProgress : scanProgDlg.DownloadFolderProg, specific, settings); localFinders.Check((scanProgDlg is null) ? noProgress : scanProgDlg.LocalSearchProg, specific, settings); downloadFinders.Check((scanProgDlg is null) ? noProgress : scanProgDlg.DownloadingProg, specific, settings); searchFinders.Check((scanProgDlg is null)? noProgress : scanProgDlg.ToBeDownloadedProg, specific, settings); if (settings.Token.IsCancellationRequested) { TheActionList.Clear(); LastScanComplete = false; return; } // sort Action list by type TheActionList.Sort(new ActionItemSorter()); // was new ActionSorter() Stats().FindAndOrganisesDone++; lastScanType = settings.Type; LastScanComplete = true; } catch (TVRenameOperationInterruptedException) { Logger.Warn("Scan cancelled by user"); TheActionList.Clear(); LastScanComplete = false; } catch (Exception e) { Logger.Fatal(e, "Unhandled Exception in ScanWorker"); LastScanComplete = false; } finally { scanProgDlg?.Done(); } }
public ScanSettings(List <ShowItem> list, bool unattended, bool hidden, TVSettings.ScanType st, CancellationToken tok) { Shows = list; Unattended = unattended; Hidden = hidden; Type = st; Token = tok; }
public static string PrettyPrint(this TVSettings.ScanType st) { return(st switch { TVSettings.ScanType.Quick => "Quick", TVSettings.ScanType.Full => "Full", TVSettings.ScanType.Recent => "Recent", TVSettings.ScanType.SingleShow => "Single", _ => throw new ArgumentOutOfRangeException(nameof(st), st, null) });
public void Scan(List <ShowItem> shows, bool unattended, TVSettings.ScanType st, bool hidden) { try { PreventAutoScan("Scan " + st.PrettyPrint()); //Get the default set of shows defined by the specified type if (shows is null) { shows = GetShowList(st); } //If still null then return if (shows is null) { Logger.Warn("No Shows Provided to Scan"); return; } if (!DoDownloadsFG(unattended, hidden)) { return; } Thread actionWork = new Thread(ScanWorker) { Name = "ActionWork" }; CancellationTokenSource cts = new CancellationTokenSource(); actionWork.SetApartmentState(ApartmentState.STA); //needed to allow DragDrop on any UI this thread creates SetupScanUi(hidden); actionWork.Start(new ScanSettings(shows.ToList(), unattended, hidden, st, cts.Token)); if (scanProgDlg != null && scanProgDlg.ShowDialog() == DialogResult.Cancel) { cts.Cancel(); } else { actionWork.Join(); } downloadIdentifiers.Reset(); OutputActionFiles(); //Save missing shows to XML (and others) } catch (Exception e) { Logger.Fatal(e, "Unhandled Exception in Scan"); } finally { AllowAutoScan(); } }
private List <ShowItem> GetShowList(TVSettings.ScanType st) { switch (st) { case TVSettings.ScanType.Full: return(Library.GetShowItems()); case TVSettings.ScanType.Quick: return(GetQuickShowsToScan(true, true)); case TVSettings.ScanType.Recent: return(Library.GetRecentShows()); default: return(null); } }
private List <ShowItem> GetShowList(TVSettings.ScanType st) { if (st == TVSettings.ScanType.Full) { return(Library.GetShowItems()); } if (st == TVSettings.ScanType.Quick) { return(GetQuickShowsToScan(true, true)); } if (st == TVSettings.ScanType.Recent) { return(Library.GetRecentShows()); } return(null); }
public static string PrettyPrint(this TVSettings.ScanType st) { switch (st) { case TVSettings.ScanType.Quick: return("Quick"); case TVSettings.ScanType.Full: return("Full"); case TVSettings.ScanType.Recent: return("Recent"); case TVSettings.ScanType.SingleShow: return("Single"); default: throw new ArgumentOutOfRangeException(nameof(st), st, null); } }
private IEnumerable <ShowItem> GetShowList(TVSettings.ScanType st, IEnumerable <ShowItem> passedShows) { switch (st) { case TVSettings.ScanType.Full: return(Library.GetShowItems()); case TVSettings.ScanType.Quick: return(GetQuickShowsToScan(true, true)); case TVSettings.ScanType.Recent: return(Library.GetRecentShows()); case TVSettings.ScanType.SingleShow: return(passedShows); default: return(null); } }
public override bool ApplicableFor(TVSettings.ScanType st) { return(st == TVSettings.ScanType.Full); }
public abstract bool ApplicableFor(TVSettings.ScanType st);
public override bool ApplicableFor(TVSettings.ScanType st) => true;
public override bool ApplicableFor(TVSettings.ScanType st) => st == TVSettings.ScanType.Full;