private OrgItem UpdateItemFromPrevious(OrgPath orgPath, OrgItem reuseItem, bool threaded, bool fast, bool skipMatching) { switch (reuseItem.Action) { case OrgAction.Delete: OrgItem copyItem = new OrgItem(reuseItem); copyItem.SourcePath = orgPath.Path; copyItem.BuildDestination(); return(copyItem); case OrgAction.Move: case OrgAction.Copy: if (reuseItem.Category == FileCategory.MovieVideo) { OrgItem item; CreateMovieAction(orgPath, orgPath.Path, out item, threaded, fast, skipMatching, reuseItem.Movie); return(item); } else if (reuseItem.Category == FileCategory.TvVideo) { if (!Organization.Shows.Contains(reuseItem.TvEpisode.Show) && !temporaryShows.Contains(reuseItem.TvEpisode.Show)) { lock (directoryScanLock) temporaryShows.Add(reuseItem.TvEpisode.Show); } } break; default: break; } return(null); }
private void GetTorrent() { List <TvEpisode> selEpisodes = new List <TvEpisode>(); foreach (TvEpisode episode in this.SelectedEpisodes) { selEpisodes.Add(episode); } List <string> unmatchedEps = new List <string>(); List <OrgItem> items = new List <OrgItem>(); for (int i = 0; i < selEpisodes.Count; i++) { OrgItem newItem = new OrgItem(OrgStatus.Missing, OrgAction.Torrent, selEpisodes[i], null, FileCategory.TvVideo, null); newItem.BuildDestination(); items.Add(newItem); } if (items.Count > 0) { OnItemsToQueue(items); } }
/// <summary> /// Run through all TV shows all looks for episodes that may need to be renamed and for missing episodes. /// For missing episodes it attempts to match them to files from the search directories. /// </summary> /// <param name="shows">Shows to scan</param> /// <param name="queuedItems">Items currently in queue (to be skipped)</param> /// <returns></returns> public List <OrgItem> RunScan(List <Content> shows, List <OrgItem> queuedItems, bool fast) { // Set running flag scanRunning = true; cancelRequested = false; // Do directory check on all directories (to look for missing episodes) while (!TvItemInScanDirHelper.Initialized) { Thread.Sleep(100); } List <OrgItem> directoryItems = TvItemInScanDirHelper.Items; // Initialiaze scan items List <OrgItem> missingCheckItem = new List <OrgItem>(); // Initialize item numbers int number = 0; double progressPerShow = 1D / shows.Count * 100D; // Go through each show for (int i = 0; i < shows.Count; i++) { TvShow show = (TvShow)shows[i]; if (cancelRequested) { break; } double showsProgress = (double)i * progressPerShow; OnProgressChange(ScanProcess.TvMissing, shows[i].DatabaseName, (int)Math.Round(showsProgress)); double progressPerEp = 1D / show.Episodes.Count * progressPerShow; // Go through missing episodes for (int j = 0; j < show.Episodes.Count; j++) { // Get episode TvEpisode ep = show.Episodes[j]; // Update progress OnProgressChange(ScanProcess.TvMissing, shows[i].DatabaseName, (int)Math.Round(showsProgress + j * progressPerEp)); // Check for cancellation if (cancelRequested) { break; } // Skipped ignored episodes if (ep.Ignored || !show.DoMissingCheck) { continue; } // Init found flag bool found = false; // Check if episode is missing if (ep.Missing == MissingStatus.Missing || ep.Missing == MissingStatus.InScanDirectory) { // Check directory item for episode foreach (OrgItem item in directoryItems) { if ((item.Action == OrgAction.Move || item.Action == OrgAction.Copy) && item.TvEpisode != null && item.TvEpisode.Show.DatabaseName == show.DatabaseName) { // Only add item for first part of multi-part file if (ep.Equals(item.TvEpisode)) { OrgItem newItem = new OrgItem(OrgStatus.Found, item.Action, item.SourcePath, item.DestinationPath, ep, item.TvEpisode2, FileCategory.TvVideo, item.ScanDirectory); newItem.Enable = true; newItem.Number = number++; if (!show.DoMissingCheck) { newItem.Category = FileCategory.Ignored; } missingCheckItem.Add(newItem); found = true; break; } else if (ep.Equals(item.TvEpisode2)) { found = true; break; } } } } else { continue; } // Add empty item for missing if (!found && ep.Aired && show.DoMissingCheck) { OrgItem newItem; TvEpisodeTorrent ezTvEpisode = TvTorrentHelper.GetEpisodeTorrent(ep); if (ezTvEpisode != null) { newItem = new OrgItem(OrgStatus.Missing, OrgAction.Torrent, ep, null, FileCategory.TvVideo, null); newItem.BuildDestination(); } else { newItem = new OrgItem(OrgStatus.Missing, OrgAction.None, ep, null, FileCategory.TvVideo, null); } newItem.Number = number++; missingCheckItem.Add(newItem); } } } // Update progress OnProgressChange(ScanProcess.TvMissing, string.Empty, 100); // Clear flags scanRunning = false; // Return results return(missingCheckItem); }