public string BuildHtmlDirTree(int root)
        {
            string success;
            DirTreeSuccessModel dirTreeModel = new DirTreeSuccessModel();

            try
            {
                IEnumerable <VwDirTree> VwDirTrees = new List <VwDirTree>();
                using (var db = new OggleBoobleMySqlContext())
                {
                    // wow did this speed things up
                    VwDirTrees = db.VwDirTrees.ToList().OrderBy(v => v.Id);
                }

                var vRootNode             = VwDirTrees.Where(v => v.Id == root).First();
                DirTreeModelNode rootNode = new DirTreeModelNode()
                {
                    ThisNode = vRootNode
                };
                DirTreeModelNode startNode = new DirTreeModelNode();
                dirTreeModel.SubDirs.Add(startNode);
                startNode.SubDirs.Add(rootNode);
                GetDirTreeChildNodes(dirTreeModel, rootNode, VwDirTrees, "");

                HtmlDirTreeRecurr(startNode);
                sbDirTree.Append("<div id='dirTreeCtxMenu'></div>");

                WriteFileToDisk(sbDirTree.ToString());

                success = "ok";
            }
            catch (Exception ex) { success = Helpers.ErrorDetails(ex); }
            return(success);
        }
        public DirTreeSuccessModel BuildDirTree(int root)
        {
            DirTreeSuccessModel dirTreeModel = new DirTreeSuccessModel();

            try
            {
                var timer = new System.Diagnostics.Stopwatch();
                timer.Start();
                IEnumerable <VwDirTree> VwDirTrees = new List <VwDirTree>();
                using (var db = new OggleBoobleMySqlContext())
                {
                    // wow did this speed things up
                    VwDirTrees = db.VwDirTrees.ToList().OrderBy(v => v.Id);
                }

                var vRootNode             = VwDirTrees.Where(v => v.Id == root).First();
                DirTreeModelNode rootNode = new DirTreeModelNode()
                {
                    ThisNode = vRootNode
                };
                dirTreeModel.SubDirs.Add(rootNode);

                GetDirTreeChildNodes(dirTreeModel, rootNode, VwDirTrees, "");
                timer.Stop();
                dirTreeModel.TimeTook = timer.Elapsed;
                System.Diagnostics.Debug.WriteLine("RebuildCatTree took: " + timer.Elapsed);
                dirTreeModel.Success = "ok";
            }
            catch (Exception ex) { dirTreeModel.Success = Helpers.ErrorDetails(ex); }
            return(dirTreeModel);
        }
        private void GetDirTreeChildNodes(DirTreeSuccessModel dirTreeModel, DirTreeModelNode parentNode, IEnumerable <VwDirTree> VwDirTrees, string dPath)
        {
            List <VwDirTree> vwDirTreeNodes = VwDirTrees.Where(v => v.Parent == parentNode.ThisNode.Id).OrderBy(f => f.SortOrder).ThenBy(f => f.FolderName).ToList();

            foreach (VwDirTree vNode in vwDirTreeNodes)
            {
                DirTreeModelNode childNode = new DirTreeModelNode()
                {
                    ThisNode  = vNode,
                    DanniPath = dPath + "/" + WebUtility.HtmlEncode(vNode.FolderName)  //  .Replace(" ", "%20")
                };
                parentNode.SubDirs.Add(childNode);
                if (vNode.IsStepChild == 0)
                {
                    GetDirTreeChildNodes(dirTreeModel, childNode, VwDirTrees, WebUtility.HtmlEncode(dPath + "/" + vNode.FolderName));
                }
            }
        }
        private void HtmlDirTreeRecurr(DirTreeModelNode parentNode)
        {
            dirTreeTab += dirTreeTabIndent;
            string txtFileCount = "", expandClass = "", folderImage = "";

            foreach (DirTreeModelNode vwDir in parentNode.SubDirs)
            {
                if (vwDir.ThisNode.FolderImage == null)
                {
                    folderImage = "Images/redballon.png";
                }
                else
                {
                    folderImage = settingsImgRepo + vwDir.ThisNode.FolderImage;
                }

                expandMode  = "-";
                expandClass = "";
                if (dirTreeTab / dirTreeTabIndent > expandDepth)
                {
                    expandClass = "displayHidden";
                    if (vwDir.SubDirs.Count > 0)
                    {
                        expandMode = "+";
                    }
                }
                if (vwDir.ThisNode.SubFolderCount > 0)
                {
                    //txtFileCount = "(" + parentNode.SubDirs.length + ")";
                    if (vwDir.ThisNode.FileCount > 0)
                    {
                        txtFileCount = "[" + vwDir.ThisNode.SubFolderCount + "] (" + String.Format("{0:n0}", vwDir.ThisNode.TotalChildFiles) + ") {" + vwDir.ThisNode.FileCount + "}";
                    }
                    else
                    {
                        if (vwDir.SubDirs.Count == vwDir.ThisNode.SubFolderCount)
                        {
                            txtFileCount = vwDir.SubDirs.Count + " (" + String.Format("{0:n0}", vwDir.ThisNode.TotalChildFiles) + ")";
                        }
                        else
                        {
                            txtFileCount = vwDir.SubDirs.Count + " [" + vwDir.ThisNode.SubFolderCount + " / " + String.Format("{0:n0}", vwDir.ThisNode.TotalChildFiles) + "]";
                        }
                    }
                }
                else
                {
                    txtFileCount = "(" + vwDir.ThisNode.FileCount + ")";
                }

                randomId = Guid.NewGuid().ToString();

                treeNodeClass = "treeLabelDiv";
                if (vwDir.ThisNode.IsStepChild == 1)
                {
                    treeNodeClass = "stepchildTreeLabel";
                }

                if (vwDir.ThisNode.FolderName == null)
                {
                    vwDir.ThisNode.FolderName = "unknown";
                }

                sbDirTree.Append(
                    "<div class='dirTreeNode clickable' style='text-indent:" + dirTreeTab + "px'>"
                    + "<span id='DQ33" + randomId + "' onclick='toggleDirTree(\"" + randomId + "\")' >[" + expandMode + "] </span>"
                    + "<div id='" + randomId + "aq' class='" + treeNodeClass + "' "
                    + "onclick='commonDirTreeClick(\"" + vwDir.DanniPath + "\"," + vwDir.ThisNode.Id + ")' "
                    + "oncontextmenu='showDirTreeContextMenu(" + vwDir.ThisNode.Id + ")' "
                    + "onmouseover='showFolderImage(\"" + folderImage + "\")' onmouseout='hideFolderImage()'>"
                    + vwDir.ThisNode.FolderName + "</div><span class='fileCount'>  : "
                    + txtFileCount + "</span></div>" + "\n<div class='" + expandClass + "' id='Q88" + randomId + "'>");

                dirTreeTabIndent = 22;
                HtmlDirTreeRecurr(vwDir);
                sbDirTree.Append("</div>");
                dirTreeTab -= dirTreeTabIndent;
            }
        }