using System.Collections.Generic;
public static void Main()
var repository = new Repository ().GetFilesFromFolder();
var dict = new IndexDictionary().GenerateKeyValuePairs(2016,2016,0,50);
var renamer = new Renamer(repository);
var list = renamer.PreviewChanges(dict);
var caretaker = new MementoCaretaker ();
caretaker.Memento = renamer.SaveMemento();
var result = renamer.RestoreMemento(caretaker.Memento);
var caretaker1 = new MementoCaretaker ();
caretaker1.Memento = renamer.SaveMemento();
var result1 = renamer.RestoreMemento(caretaker1.Memento);
foreach(var file in result1)
Console.WriteLine(file.Key + file.Value
private IEnumerable<KeyValuePair<string,string>> _kvp;
public Memento(IEnumerable<KeyValuePair<string,string>> kvp)
public IEnumerable<KeyValuePair<string,string>> KVP
public class MementoCaretaker
private Memento _memento;
private List<string> _list;
private IEnumerable<KeyValuePair<string,string>> _kvp;
public Renamer(IEnumerable<string> list)
this._list = list.ToList();
public IEnumerable<string> DisplayPaths()
public IEnumerable<KeyValuePair<string,string>> PreviewChanges(Dictionary<string, IndexItem> dict)
_kvp = this._list.PathIncludes(@"\Season")
.PathExcludes(@"\metadata")
public Memento SaveMemento()
return new Memento(this._kvp);
public IEnumerable<KeyValuePair<string,string>> RestoreMemento (Memento memento)
return this._kvp = memento.KVP.Select( p => new KeyValuePair<string,string>(p.Value, p.Key));
public static class StringEtensions
public static string GetSeriesNameFromFilePath(this string filePath)
Path.GetDirectoryName(filePath)));
public static class ListExtensions
public static IEnumerable<KeyValuePair<string,string>> WithNewIndexPattern(this IEnumerable<MediaItem> mediaItems)
return mediaItems.Select( p => new KeyValuePair<string,string>(p.FilePath,p.SeasonNumber));
public static IEnumerable<MediaItem> PathContainsIndex(this IEnumerable<string> files, Dictionary<string, IndexItem> dict)
var list = new List<MediaItem> ();
foreach(KeyValuePair<string,IndexItem> item in dict)
var mediaItem = files.Where(f =>f.Contains(item.Key))
.Select(f => new MediaItem()
SeasonNumber = item.Value.SeasonNumber,
EpisodeNumber = item.Value.EpisodeNumber,
SeriesName = f.GetSeriesNameFromFilePath (),
FileNameWithoutIndex = f.Replace(item.Key,"").Trim()
list.RemoveAll(f => f == null);
public static IEnumerable<string> PathIncludes(this IEnumerable<string> files, string name)
return files.Where( f => f.Contains(name));
public static IEnumerable<string> PathExcludes(this IEnumerable<string> files, string name)
return files.Where( f => !f.Contains(name));
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 IEnumerable<string> GetFilesFromFolder()
List<string> files = new List<string>();
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\metadata\04x01 Opening.mkv");
files.Add(@"\\TOWER\Media\Video\TV\Colony\Season 01\metadata\04x02 Opening.mkv");
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");
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; }