Beispiel #1
0
        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;
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
              }
        }
Beispiel #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);
                }
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
 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);
         });
     });
 }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
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);
     }
       }
 }