using System.Collections.Generic;
public static void Main()
var repository = new Repository();
var files = repository.ScanFolder();
var dict = new IndexDictionary().GenerateKeyValuePairs(1980, 2016, 0, 50);
var facade = new Facade();
var list = files.PathContains(@"\Season").GetFilesWithIndex(dict);
var list2 = list.GetIndexFromFile();
var localFiles = new LocalFiles(list2);
var res = localFiles.PopulateMediaItem(dict);
var r3 = res.FilesToProcess().Preview();
res.FilesToProcess().RenameFiles();
public IEnumerable<string> GetFilesFromFolder(string path)
var repository = new Repository();
var files = repository.ScanFolder();
var result = files.PathContains(@"\Season");
public static class ListExtensions
public static IEnumerable<string> PathContains(this IEnumerable<string> list, string value)
return list.Where(p => p.Contains(value)).Select( p => p);
public static IEnumerable<string> GetFilesWithIndex(this IEnumerable<string> list, Dictionary<string, IndexItem> dict)
return list.Where(p => p.PathContainsIndex(dict));
public static IEnumerable<LocalFile> GetIndexFromFile (this IEnumerable<string> list)
var fileList = new List<LocalFile>();
foreach (var item in list)
position = file.LastIndexOf(@"\");
int fileLen = file.Length;
string fName = file.Substring(position + 1 ,fileLen - position -1);
int pos = fName.IndexOf(" ");
string _key = fName.Substring(0, pos).Trim();
fileList.Add(new LocalFile() {
SeriesName = item.GetSeriesNameFromFilePath(),
FileNameWithoutIndex = fName.Replace(_key,"").Trim()});
public static IEnumerable<string> Preview(this IEnumerable<KeyValuePair<string,string>> kvp)
return kvp.Select(m => m.Value);
public static void RenameFiles(this IEnumerable<KeyValuePair<string,string>> kvp)
Console.WriteLine(item.Key + " " + item.Value);
public static IEnumerable<KeyValuePair<string,string>> FilesToProcess(this IEnumerable<MediaItem> mediaItems)
return mediaItems.Select(m => new KeyValuePair<string, string>
(m.FilePath, m.SeriesName + " - S" +
m.EpisodeNumber + " - " +
m.FileNameWithoutIndex ));
public string FilePath { get; set; }
public string FileName { get; set; }
public string FileExtension { get; set; }
public string FileNameWithoutExtension { get; set; }
public string SeriesName { get; set; }
public string EpisodeIndex { get; set; }
public string FileWithoutIndex { get; set; }
public string ReplaceWithIndex { get; set; }
public string EpisodeNumber { get; set; }
public string SeasonNumber { get; set; }
public string FileNameWithoutIndex {get; set;}
public string ParentPath {get;set;}
public static class StringExtensions
public static string RenamePattern(this MediaItem m)
return m.SeriesName + " - S" +
m.EpisodeNumber + " - " +
public static bool PathContainsIndex(this string filePath, Dictionary<string, IndexItem> dict)
foreach (var key in dict.Keys)
public static string GetSeriesNameFromFilePath(this string filePath)
Path.GetDirectoryName(filePath)));
private List<LocalFile> _list;
public LocalFiles(IEnumerable<LocalFile> list)
this._list = list.ToList();
public IEnumerable<MediaItem> PopulateMediaItem(Dictionary<string, IndexItem> dict)
var mediaItems = this._list.Join(dict,
EpisodeNumber = d.Value.EpisodeNumber,
SeasonNumber = d.Value.SeasonNumber,
FileNameWithoutIndex = l.FileNameWithoutIndex,
SeriesName = l.SeriesName,
public class IndexDictionary
private Dictionary<string, IndexItem> pair { get; set; }
pair = new Dictionary<string, IndexItem>();
foreach (var item in pair)
Console.WriteLine("{0} {1} {2} {3}", item.Key, item.Value.SeasonNumber, item.Value.EpisodeNumber);
public IEnumerable<string> GetKeys()
public Dictionary<string,IndexItem> GenerateKeyValuePairs(int startYear, int endYear, int startInteger, int endInteger)
this.GenerateIndexesForIntegers(startInteger,endInteger);
this.GenerateIndexesForYears(startYear, endYear, startInteger, endInteger);
private void GenerateIndexesForIntegers(int startInteger, int endInteger)
for (int x = startInteger; x < endInteger; x++)
for (int y = startInteger; y < endInteger; y++)
IndexItem indexItem = new IndexItem();
indexItem.EpisodeNumber = x.ToString("D2");
indexItem.SeasonNumber = y.ToString("D2");
string key = y.ToString("D2") + "x" + x.ToString("D2");
pair.Add(key, indexItem);
private void GenerateIndexesForYears(int startYear, int endYear, int startInteger, int endInteger)
for (int x = startInteger; x < endInteger; x++)
for (int y = startYear; y <= endYear; y++)
IndexItem indexItem = new IndexItem();
indexItem.EpisodeNumber = x.ToString("D2");
indexItem.SeasonNumber = y.ToString("D2");
string key = y.ToString("D2") + "x" + x.ToString("D2");
pair.Add(key, indexItem);
public string SeasonNumber { get; set; }
public string EpisodeNumber { get; set; }
public string FilePath {get; set;}
public string Key {get; set;}
public string SeriesName { get; set;}
public string FileNameWithoutIndex {get; set;}
public string ParentFolder {get; set;}
public IEnumerable<string> ScanFolder()
List<string> files = new List<string>();
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x01 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x02 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x03 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x04 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x05 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x06 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x07 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x08 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\01x09 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 02\02x01 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 02\02x02 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 02\02x03 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 02\02x04 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 02\02x05 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 02\02x06 Opening.mkv");