public override IMediaFolder Transform(IMediaFolder Root) { var root = new VirtualClonedFolder(Root); var series = new SimpleKeyedVirtualFolder(root, "Series"); SortFolder(root, series); foreach (var f in series.ChildFolders.ToList()) { if (f.ChildCount < 2) { foreach (var file in f.ChildItems) { root.AddResource(file); } continue; } var fsmi = f as VirtualFolder; root.AdoptFolder(fsmi); } if (!cascade || root.ChildFolders.LongCount() <= 50) { return root; } var cascaded = new DoubleKeyedVirtualFolder(root, "Series"); foreach (var i in root.ChildFolders.ToList()) { var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper()); folder.AdoptFolder(i); } foreach (var i in root.ChildItems.ToList()) { var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper()); folder.AddResource(i); } return cascaded; }
protected override void SortFolder(IMediaFolder folder, SimpleKeyedVirtualFolder series) { foreach (var f in folder.ChildFolders.ToList()) { SortFolder(f, series); } foreach (var i in folder.ChildItems.ToList()) { try { var title = i.Title; if (string.IsNullOrWhiteSpace(title)) { throw new Exception("No title"); } var m = regSites.Match(title); if (!m.Success) { throw new Exception("No match"); } var site = m.Groups["site"].Value; if (string.IsNullOrEmpty(site)) { throw new Exception("No site"); } site = site.Replace(" ", "").Replace("\t", "").Replace("-", ""); site = regNumberStrip.Replace(site, string.Empty).TrimEnd(); if (!regWord.IsMatch(site)) { throw new Exception("Not a site"); } folder.RemoveResource(i); series.GetFolder(site.StemNameBase()).AddResource(i); } catch (Exception ex) { DebugFormat("{0} - {1}", ex.Message, i.Title); folder.RemoveResource(i); series.AddResource(i); } } }
private static void SortFolder(VirtualFolder folder, SimpleKeyedVirtualFolder titles) { foreach (var f in folder.ChildFolders.ToList()) { SortFolder(f as VirtualFolder, titles); } foreach (var c in folder.ChildItems.ToList()) { var pre = GetTitle(c); pre = pre[0].ToString().ToUpperInvariant(); titles.GetFolder(pre).AddResource(c); folder.RemoveResource(c); } }
public override IMediaFolder Transform(IMediaFolder Root) { var root = new VirtualClonedFolder(Root); var titles = new SimpleKeyedVirtualFolder(root, "titles"); SortFolder(root, titles); foreach (var i in root.ChildFolders.ToList()) { root.ReleaseFolder(i); } foreach (var i in titles.ChildFolders.ToList()) { if (i.ChildCount > 100) { _logger.ErrorFormat("Partioning folder {0}", i.Title); PartitionChildren(i as VirtualFolder, new Prefixer()); } root.AdoptFolder(i); } return root; }
public override IMediaFolder Transform(IMediaFolder oldRoot) { var root = new VirtualClonedFolder(oldRoot); var sorted = new SimpleKeyedVirtualFolder(root, Name); SortFolder(root, sorted); DebugFormat("sort {0} - {1}", sorted.ChildFolders.Count(), sorted.ChildItems.Count()); DebugFormat("root {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count()); foreach (var f in sorted.ChildFolders.ToList()) { if (f.ChildCount < 2) { foreach (var file in f.ChildItems) { root.AddResource(file); } continue; } var fsmi = f as VirtualFolder; root.AdoptFolder(fsmi); } foreach (var f in sorted.ChildItems.ToList()) { root.AddResource(f); } DebugFormat("merg {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count()); MergeFolders(root, root); DebugFormat("done {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count()); if (!cascade || root.ChildFolders.LongCount() <= 50) { return root; } var cascaded = new DoubleKeyedVirtualFolder(root, "Series"); foreach (var i in root.ChildFolders.ToList()) { var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper()); folder.AdoptFolder(i); } foreach (var i in root.ChildItems.ToList()) { var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper()); folder.AddResource(i); } return cascaded; }
private static void SortFolder(IMediaFolder folder, SimpleKeyedVirtualFolder series) { foreach (var f in folder.ChildFolders.ToList()) { SortFolder(f, series); } foreach (var i in folder.ChildItems.ToList()) { var title = i.Title; if (string.IsNullOrWhiteSpace(title)) { continue; } var m = re_series.Match(title); if (!m.Success) { continue; } var ser = m.Groups[1].Value; if (string.IsNullOrEmpty(ser)) { continue; } series.GetFolder(ser.StemNameBase()).AddResource(i); folder.RemoveResource(i); } }
protected abstract void SortFolder(IMediaFolder folder, SimpleKeyedVirtualFolder series);