Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
 public ScanSettings(List <ShowItem> list, bool unattended, bool hidden, TVSettings.ScanType st, CancellationToken tok)
 {
     Shows      = list;
     Unattended = unattended;
     Hidden     = hidden;
     Type       = st;
     Token      = tok;
 }
Ejemplo n.º 3
0
 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)
     });
Ejemplo n.º 4
0
        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();
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 9
0
 public override bool ApplicableFor(TVSettings.ScanType st)
 {
     return(st == TVSettings.ScanType.Full);
 }
Ejemplo n.º 10
0
 public abstract bool ApplicableFor(TVSettings.ScanType st);
Ejemplo n.º 11
0
 public override bool ApplicableFor(TVSettings.ScanType st) => true;
Ejemplo n.º 12
0
 public override bool ApplicableFor(TVSettings.ScanType st) => st == TVSettings.ScanType.Full;