public static List<ProcessedEpisode> GenerateEpisodes(ShowItem si, SeriesInfo ser, int snum, bool applyRules) { List<ProcessedEpisode> eis = new List<ProcessedEpisode>(); if ((ser == null) || !ser.Seasons.ContainsKey(snum)) return null; // todo.. something? Season seas = ser.Seasons[snum]; if (seas == null) return null; // TODO: warn user foreach (Episode e in seas.Episodes) eis.Add(new ProcessedEpisode(e, si)); // add a copy if (si.DVDOrder) { eis.Sort(new System.Comparison<ProcessedEpisode>(ProcessedEpisode.DVDOrderSorter)); Renumber(eis); } else eis.Sort(new System.Comparison<ProcessedEpisode>(ProcessedEpisode.EPNumberSorter)); if (si.CountSpecials && ser.Seasons.ContainsKey(0)) { // merge specials in foreach (Episode ep in ser.Seasons[0].Episodes) { if (ep.Items.ContainsKey("airsbefore_season") && ep.Items.ContainsKey("airsbefore_episode")) { string seasstr = ep.Items["airsbefore_season"]; string epstr = ep.Items["airsbefore_episode"]; if ((string.IsNullOrEmpty(seasstr)) || (string.IsNullOrEmpty(epstr))) continue; int sease = int.Parse(seasstr); if (sease != snum) continue; int epnum = int.Parse(epstr); for (int i = 0; i < eis.Count; i++) { if ((eis[i].SeasonNumber == sease) && (eis[i].EpNum == epnum)) { ProcessedEpisode pe = new ProcessedEpisode(ep, si) { TheSeason = eis[i].TheSeason, SeasonID = eis[i].SeasonID }; eis.Insert(i, pe); break; } } } } // renumber to allow for specials int epnumr = 1; for (int j = 0; j < eis.Count; j++) { eis[j].EpNum2 = epnumr + (eis[j].EpNum2 - eis[j].EpNum); eis[j].EpNum = epnumr; epnumr++; } } if (applyRules) { List<ShowRule> rules = si.RulesForSeason(snum); if (rules != null) ApplyRules(eis, rules, si); } return eis; }