Exemplo n.º 1
0
        public static async Task WriteDirList(TextWriter p, string path, bool withUpDir)
        {
            if (withUpDir)
            {
                await p.WriteLineAsync("<div class='item dir up'><a href=\"../\">../</a></div>");
            }
            var data = new TemplaterData();

            foreach (var item in Directory.EnumerateDirectories(path))
            {
                var name = Path.GetFileName(item);
                data.Dict["url"]  = HttpUtil.UrlEncode(name);
                data.Dict["name"] = HttpUtil.HtmlAttributeEncode(name);
                await Engine.Instance.RunAsync(dirTmpl, data, p);
            }
            foreach (var item in Directory.EnumerateFiles(path))
            {
                var name = Path.GetFileName(item);
                data.Dict["url"]  = HttpUtil.UrlEncode(name);
                data.Dict["name"] = HttpUtil.HtmlAttributeEncode(name);
                await Engine.Instance.RunAsync(fileTmpl, data, p);

                //await p.WriteLineAsync($"<div class='item file'><a href=\"{HttpUtil.UrlEncode(name)}\">{HttpUtil.HtmlAttributeEncode(name)}</a></div>");
            }
        }
Exemplo n.º 2
0
        public static void SetDirListData(HttpConnection p, string path, TemplaterData data)
        {
            data.Add("list", async x => {
                try {
                    await WriteDirList(x, path, p.Url_path != "/");
                } catch (UnauthorizedAccessException e) {
                    await x.WriteAsync($"<p>Unauthorized</p>");
                }
            });
            string prefix = null;

            if (p.RealPathEscaped.EndsWith("/"))
            {
                data.Add("upPath", p.Url_path == "/" ? null : "../");
            }
            else
            {
                data.Add("upPath", p.Url_path == "/" ? null : "./");
                int slashIndex = p.RealPathEscaped.LastIndexOf('/');
                if (slashIndex >= 0)
                {
                    prefix = p.RealPathEscaped.Substring(slashIndex + 1) + "/";
                }
            }
            data.Add("dirPath", p.Url_path);
            var subData = new TemplaterData();

            data.Add("dirs", Directory.EnumerateDirectories(path).Select(x => {
                var name             = Path.GetFileName(x);
                subData.Dict["url"]  = prefix + HttpUtil.UrlEncode(name);
                subData.Dict["name"] = HttpUtil.HtmlAttributeEncode(name);
                return(subData);
            }));
            data.Add("files", Directory.EnumerateFiles(path).Select(x => {
                var fi               = new FileInfo(x);
                var name             = fi.Name;
                subData.Dict["url"]  = prefix + HttpUtil.UrlEncode(name);
                subData.Dict["name"] = HttpUtil.HtmlAttributeEncode(name);
                long length;
                try {
                    length = fi.Length;
                } catch (Exception) {
                    length = -1;
                }
                subData.Dict["size_n"] = length.ToString("N0");
                return(subData);
            }));
        }
Exemplo n.º 3
0
 public static async Task WriteDirListPage(HttpConnection p, string path, Template tmpl, TemplaterData data)
 {
     tmpl = tmpl ?? lazyListTmpl.Value;
     data = data ?? new TemplaterData();
     SetDirListData(p, path, data);
     await Engine.Instance.RunAsync(tmpl, data, p.outputWriter);
 }