Exemplo n.º 1
0
        private IEnumerable <ArchivedObject> SortObjects(ArchivedObject[] objects, DirectorySortType sort, bool reverse)
        {
            if (sort == DirectorySortType.DEFAULT && !reverse)
            {
                return(objects);
            }

            IEnumerable <ArchivedObject> result;

            if (sort == DirectorySortType.DEFAULT)
            {
                result = objects.ToArray();
            }
            else if (sort == DirectorySortType.FILE_DATE)
            {
                result = objects.OrderByDescending(x => x.GetLastModified());
            }
            else if (sort == DirectorySortType.NAME)
            {
                result = objects.OrderBy(x => x.GetName());
            }
            else if (sort == DirectorySortType.SIZE)
            {
                result = objects.OrderByDescending(x => x.GetSize());
            }
            else if (sort == DirectorySortType.UPLOADED_DATE)
            {
                result = objects.OrderByDescending(x => x.GetUploadedDate());
            }
            else
            {
                throw new Exception("Unsupported sort method.");
            }

            //Flip
            if (reverse)
            {
                return(result.Reverse());
            }
            else
            {
                return(result);
            }
        }
Exemplo n.º 2
0
        public async Task OnStandardRequest(HttpContext e)
        {
            //Write headers
            e.Response.ContentType = "text/html";

            //Set cookie
            SaveCurrentItemCookie(e);

            //Get the sort type
            DirectorySortType sort = metadata.default_sort;
            bool sortReverse       = false;

            if (e.Request.Query.ContainsKey("sort"))
            {
                Enum.TryParse <DirectorySortType>(e.Request.Query["sort"], out sort);
            }
            if (e.Request.Query.ContainsKey("sort_reverse"))
            {
                sortReverse = bool.TryParse(e.Request.Query["sort_reverse"], out sortReverse);
            }

            //Create path
            string pathElements  = "";
            var    parentElement = this;
            string pathPlain     = "";

            while (parentElement != null)
            {
                string name;
                if (parentElement.isRoot)
                {
                    name = "<span class=\"material-icons\"> folder </span>";
                }
                else
                {
                    name      = HttpUtility.HtmlEncode(parentElement.GetName());
                    pathPlain = " > " + name + pathPlain;
                }
                pathElements  = "<div class=\"head_path_item\"><a href=\"" + site.config.client_pathname_prefix + parentElement.path_urlsafe + "\">" + name + "</a></div><div class=\"head_path_divider\">/</div>" + pathElements;
                parentElement = parentElement.parent;
            }

            //Create HTML meta headers
            string metas = "";

            metas += $"<meta property=\"og:site_name\" content=\"RomanPort Archives{pathPlain}\">\n";
            metas += $"<meta name=\"theme-color\" content=\"#3882dc\">\n";
            metas += $"<meta property=\"og:title\" content=\"{HttpUtility.HtmlEncode(GetName())} (in {HttpUtility.HtmlEncode(parent.metadata.title)})\">\n";
            metas += $"<meta property=\"og:description\" content=\"Last Updated {HttpUtility.HtmlEncode(GetLastModifiedString())}\n{HttpUtility.HtmlEncode(metadata.description)}\">\n";

            //Write pre
            await TemplateManager.WriteTemplate(e.Response.Body, "PAGE.DIR.PRE_CONTENT", new Dictionary <string, string>
            {
                { "FOLDER_TITLE", HttpUtility.HtmlEncode(metadata.title) },
                { "FOLDER_DESCRIPTION", HttpUtility.HtmlEncode(metadata.description) },
                { "URL", site.config.client_pathname_prefix + path_urlsafe },
                { "PATH", pathElements },
                { "CURRENT_SORT", sort.ToString() },
                { "META_TAGS", metas }
            });

            //Write the up directory button
            if (!isRoot)
            {
                await TemplateManager.WriteTemplate(e.Response.Body, "ITEM.UP", new Dictionary <string, string>
                {
                    { "PATH", site.config.client_pathname_prefix + parent.path_urlsafe + "?last=" + HttpUtility.UrlEncode(GetName()) },
                    { "SELECT_SORT_0", sort == DirectorySortType.DEFAULT ? " selected" : "" },
                    { "SELECT_SORT_1", sort == DirectorySortType.FILE_DATE ? " selected" : "" },
                    { "SELECT_SORT_2", sort == DirectorySortType.NAME ? " selected" : "" },
                    { "SELECT_SORT_3", sort == DirectorySortType.SIZE ? " selected" : "" },
                    { "SELECT_SORT_4", sort == DirectorySortType.UPLOADED_DATE ? " selected" : "" }
                });
            }

            //Attempt to get the last served from the cookie. We add a highlight to that item
            string last = "";

            if (e.Request.Cookies.ContainsKey(COOKIE_PREVIOUS_ITEM))
            {
                last = e.Request.Cookies[COOKIE_PREVIOUS_ITEM];
            }

            //Write folders
            foreach (var f in SortObjects(subDirs.ToArray(), sort, sortReverse))
            {
                await WriteObjectListingHere(e, f, last);
            }

            //Write files
            foreach (var f in SortObjects(subFiles.ToArray(), sort, sortReverse))
            {
                await WriteObjectListingHere(e, f, last);
            }

            //Write admin bar if authenticated
            if (site.IsAdminAuthenticated(e))
            {
                await e.WriteString($"<div class=\"adminbar\"><b>Archive Admin</b> - <a href=\"?action=admin_upload\">[Upload File]</a> <a href=\"?action=admin_audio_editor\">[Edit &amp; Upload Audio]</a> <a href=\"?action=admin_mkdir\">[Create Directory]</a> - <a href=\"?action=admin_modify\">[Modify Directory]</a> <a href=\"?action=admin_delete\">[Delete Directory]</a> - <a href=\"{site.config.client_pathname_prefix}/signout\">[Log Out]</a></div>");
            }

            //Write end
            await TemplateManager.WriteTemplate(e.Response.Body, "PAGE.DIR.POST_CONTENT", new Dictionary <string, string>
            {
                { "FOOTER", footer },
                { "ADMIN_SIGNIN_URL", site.config.client_pathname_prefix + "/signin" }
            });
        }