protected override void Check([NotNull] ShowItem si, DirFilesCache dfc, TVDoc.ScanSettings settings) { if (!si.DoMissingCheck && !si.DoRename) { return; // skip } Dictionary <int, List <string> > flocs = si.AllProposedFolderLocations(); List <string> ignoredLocations = new List <string>(); foreach (int snum in si.GetSeasonKeys()) { // show MissingFolderAction for any folders that are missing // throw Exception if user cancels if (si.IgnoreSeasons.Contains(snum)) { continue; // ignore this season } if (snum == 0 && si.CountSpecials) { continue; // no specials season, they're merged into the seasons themselves } if (snum == 0 && TVSettings.Instance.IgnoreAllSpecials) { continue; } List <string> folders = new List <string>(); if (flocs.ContainsKey(snum)) { folders = flocs[snum]; } if (si.SeasonEpisodes[snum].All(episode => !MightWeProcess(episode, folders))) { //All episodes in this season are ignored continue; } if (folders.Count == 0 && si.AutoAddNewSeasons()) { // no folders defined for this season, and autoadd didn't find any, so suggest the autoadd folder name instead folders.Add(si.AutoFolderNameForSeason(snum)); } if (folders.Count == 0 && !si.AutoAddNewSeasons()) { // no folders defined for this season, and autoadd didn't find any, so suggest the autoadd folder name instead folders.Add(string.Empty); } CreateSeasonFolders(si, snum, folders, ignoredLocations); } // for each snum }
public void ForceUpdateImages([NotNull] ShowItem si) { TheActionList = new ItemList(); Logger.Info("*******************************"); Logger.Info("Force Update Images: " + si.ShowName); Dictionary <int, List <string> > allFolders = si.AllExistngFolderLocations(); if (!string.IsNullOrEmpty(si.AutoAddFolderBase) && allFolders.Any()) { TheActionList.Add( downloadIdentifiers.ForceUpdateShow(DownloadIdentifier.DownloadType.downloadImage, si)); si.BannersLastUpdatedOnDisk = DateTime.Now; SetDirty(); } // process each folder for each season... foreach (int snum in si.GetSeasonKeys()) { if (si.IgnoreSeasons.Contains(snum) || !allFolders.ContainsKey(snum)) { continue; // ignore/skip this season } if (snum == 0 && si.CountSpecials) { continue; // don't process the specials season, as they're merged into the seasons themselves } if (snum == 0 && TVSettings.Instance.IgnoreAllSpecials) { continue; } // all the folders for this particular season List <string> folders = allFolders[snum]; foreach (string folder in folders) { //Image series checks here TheActionList.Add( downloadIdentifiers.ForceUpdateSeason(DownloadIdentifier.DownloadType.downloadImage, si, folder, snum)); } } // for each season of this show RemoveIgnored(); }
protected override void Check(ShowItem si, DirFilesCache dfc, TVDoc.ScanSettings settings) { if (settings.Token.IsCancellationRequested) { throw new TVRenameOperationInterruptedException(); } if (!Active()) { return; } Dictionary <int, List <string> > allFolders = si.AllExistngFolderLocations(); if (allFolders.Count == 0) // no folders defined for this show { return; // so, nothing to do. } // process each folder for each season... foreach (int snum in si.GetSeasonKeys()) { if (settings.Token.IsCancellationRequested) { throw new TVRenameOperationInterruptedException(); } if (si.IgnoreSeasons.Contains(snum) || !allFolders.ContainsKey(snum)) { continue; } // all the folders for this particular season MergeShowEpisodes(si, dfc, settings.Token, snum, allFolders[snum]); } // for each season of this show }
protected override void Check(ShowItem si, DirFilesCache dfc, TVDoc.ScanSettings settings) { if (settings.Token.IsCancellationRequested) { throw new TVRenameOperationInterruptedException(); } if (!TVSettings.Instance.AutoMergeLibraryEpisodes) { return; } Dictionary <int, List <string> > allFolders = si.AllExistngFolderLocations(); if (allFolders.Count == 0) // no folders defined for this show { return; // so, nothing to do. } // process each folder for each season... foreach (int snum in si.GetSeasonKeys()) { if (settings.Token.IsCancellationRequested) { throw new TVRenameOperationInterruptedException(); } if (si.IgnoreSeasons.Contains(snum) || !allFolders.ContainsKey(snum)) { continue; // ignore/skip this season } if (snum == 0 && si.CountSpecials) { continue; // don't process the specials season, as they're merged into the seasons themselves } if (snum == 0 && TVSettings.Instance.IgnoreAllSpecials) { continue; } // all the folders for this particular season List <string> folders = allFolders[snum]; List <ProcessedEpisode> eps = si.SeasonEpisodes[snum]; List <ShowRule> rulesToAdd = new List <ShowRule>(); foreach (string folder in folders) { if (settings.Token.IsCancellationRequested) { throw new TVRenameOperationInterruptedException(); } FileInfo[] files = dfc.GetFiles(folder); if (files is null) { continue; } foreach (FileInfo fi in files) { if (settings.Token.IsCancellationRequested) { throw new TVRenameOperationInterruptedException(); } if (!fi.IsMovieFile()) { continue; //not a video file, so ignore } if (!FinderHelper.FindSeasEp(fi, out int seasNum, out int epNum, out int maxEp, si, out TVSettings.FilenameProcessorRE _)) { continue; // can't find season & episode, so this file is of no interest to us } if (seasNum == -1) { seasNum = snum; } int epIdx = eps.FindIndex(x => x.AppropriateEpNum == epNum && x.AppropriateSeasonNumber == seasNum); if (epIdx == -1) { continue; // season+episode number don't correspond to any episode we know of from thetvdb } ProcessedEpisode ep = eps[epIdx]; if (ep.Type != ProcessedEpisode.ProcessedEpisodeType.merged && maxEp != -1) { LOGGER.Info( $"Looking at {ep.Show.ShowName} and have identified that episode {epNum} and {maxEp} of season {seasNum} should be merged into one file {fi.FullName}"); ShowRule sr = new ShowRule { DoWhatNow = RuleAction.kMerge, First = epNum, Second = maxEp }; rulesToAdd.Add(sr); } } // foreach file in folder } // for each folder for this season of this show foreach (ShowRule sr in rulesToAdd) { si.AddSeasonRule(snum, sr); LOGGER.Info($"Added new rule automatically for {sr}"); //Regenerate the episodes with the new rule added ShowLibrary.GenerateEpisodeDict(si); } } // for each season of this show }