private static bool TransformInternal(VirtualFolder root, VirtualFolder current) { foreach (var f in current.ChildFolders.ToList()) { var vf = f as VirtualFolder; if (TransformInternal(root, vf)) { current.ReleaseFolder(vf); } } if (current == root || current.ChildItems.Count() > 3) { return false; } var newParent = (VirtualFolder)current.Parent; foreach (var c in current.ChildItems.ToList()) { current.RemoveResource(c); newParent.AddResource(c); } if (current.ChildCount != 0) { MergeFolders(current, newParent); foreach (var f in current.ChildFolders.ToList()) { newParent.AdoptFolder(f); } foreach (var f in current.ChildItems.ToList()) { current.RemoveResource(f); newParent.AddResource(f); } } return true; }
private static bool TransformInternal(VirtualFolder root, VirtualFolder current) { foreach (var f in current.ChildFolders.ToList()) { var vf = f as VirtualFolder; if (TransformInternal(root, vf)) { current.ReleaseFolder(vf); } } if (current == root || current.ChildItems.Count() > 3) { return(false); } var newParent = (VirtualFolder)current.Parent; foreach (var c in current.ChildItems.ToList()) { current.RemoveResource(c); newParent.AddResource(c); } if (current.ChildCount != 0) { MergeFolders(current, newParent); foreach (var f in current.ChildFolders.ToList()) { newParent.AdoptFolder(f); } foreach (var f in current.ChildItems.ToList()) { current.RemoveResource(f); newParent.AddResource(f); } } return(true); }
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); } }
private void PartitionChildren(VirtualFolder folder, Prefixer prefixer, int startfrom = 1) { for (var wordcount = startfrom;;) { var curwc = wordcount; var groups = from i in folder.ChildItems.ToList() let prefix = prefixer.GetWordPrefix(GetTitle(i), curwc) where !string.IsNullOrWhiteSpace(prefix) group i by prefix.ToLowerInvariant() into g let gcount = g.LongCount() where gcount > 3 orderby g.LongCount() descending select g; var longest = groups.FirstOrDefault(); if (longest == null) { if (wordcount++ > 5) { return; } continue; } var newfolder = new VirtualFolder(folder, longest.Key); foreach (var item in longest) { folder.RemoveResource(item); newfolder.AddResource(item); } if (newfolder.ChildCount > 100) { PartitionChildren(newfolder, prefixer, wordcount + 1); } if (newfolder.ChildFolders.LongCount() == 1) { foreach (var f in newfolder.ChildFolders.ToList()) { folder.AdoptFolder(f); } } else { folder.AdoptFolder(newfolder); } } }
private static void SortFolder(VirtualFolder folder, TitlesFolder titles) { folder.AllItems.GroupBy( r => (r is IMetaInfo) ? ((r as IMetaInfo).InfoDate.ToString("yyyy-MMM")) : "Unknown", r => r, (k, g) => new { Key = k, Lst = g.ToList() } ) .ToList() .ForEach(i => { var tf = titles.GetFolder(i.Key); i.Lst.ForEach(r => { tf.AddResource(r); folder.RemoveResource(r); }); }); }
private static void SortFolder(VirtualFolder folder, TitlesFolder titles) { foreach (var f in folder.ChildFolders.ToList()) { SortFolder(f as VirtualFolder, titles); } foreach (var c in folder.ChildItems.ToList()) { var pre = c.Title.StemCompareBase(); if (string.IsNullOrEmpty(pre)) { pre = "Unnamed"; } pre = pre.First().ToString().ToUpperInvariant(); titles.GetFolder(pre).AddResource(c); folder.RemoveResource(c); } }