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>"); } }
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); })); }
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); }