Пример #1
0
        public override IMediaFolder Transform(IMediaFolder oldRoot)
        {
            var root   = new VirtualClonedFolder(oldRoot);
            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)
                {
                    DebugFormat("Partioning folder {0}", i.Title);
                    using (var prefixer = new Prefixer())
                    {
                        PartitionChildren(i as VirtualFolder, prefixer);
                    }
                }

                root.AdoptFolder(i);
            }

            return(root);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
 public override IMediaFolder Transform(IMediaFolder oldRoot)
 {
     var root = new VirtualClonedFolder(oldRoot);
       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) {
       DebugFormat("Partioning folder {0}", i.Title);
       using (var prefixer = new Prefixer()) {
     PartitionChildren(i as VirtualFolder, prefixer);
       }
     }
     root.AdoptFolder(i);
       }
       return root;
 }
Пример #4
0
 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);
     }
       }
 }