shoko/Protocols/AboutProtoHandler.cs

97 lines
2.8 KiB
C#

using System.Reflection;
using System.Text;
using System.Web;
using ImGuiNET;
using Raylib_cs;
namespace Shoko;
[Protocol("about")]
[Protocol("shoko")]
class AboutProtoHandler : ProtoHandler
{
string txtDebug = "";
public AboutProtoHandler(Uri url)
{
URL = url;
}
public override Task Load()
{
var path = new UriBuilder(URL).Path;
Content = new MemoryStream(new byte[]{});
switch(path)
{
case "blank":
case "":
case "about":
case "shoko":
case "version":
case "demo":
break;
case "debugtext":
txtDebug = HttpUtility.UrlDecode(URL.Query);
if(txtDebug.Length > 0) txtDebug = txtDebug[1..];
break;
default:
throw new NotImplementedException();
}
MediaType = "text/plain";
Status = "OK";
OnLoaded();
return Task.CompletedTask;
}
public override void Render()
{
var path = new UriBuilder(URL).Path;
switch(path)
{
case "":
case "about":
case "shoko":
case "version":
var info = Assembly.GetExecutingAssembly().GetName();
ImGui.Text("硝子 (shōko) v"+info.Version.ToString());
ImGui.Text("an experimental browser");
ImGui.Separator();
ImGui.Text("(c) 2023 a39 studios");
ImGui.Text("licensed under LiLiQ-P");
ImGui.Separator();
ImGui.Text(".NET v" + Environment.Version.ToString());
ImGui.Text("Dear ImGui v" + ImGui.GetVersion());
ImGui.Text("Raylib v" + Raylib.RAYLIB_VERSION);
ImGui.Separator();
Gui.TreeNode("Supported protos", ()=>{
foreach(var proto in SupportedProtos)
ImGui.BulletText(proto);
});
Gui.TreeNode("Supported media", ()=>{
foreach(var media in MediaHandler.SupportedMedia)
ImGui.BulletText(media);
});
break;
case "demo":
ImGui.ShowDemoWindow();
break;
case "debugtext":
ImGui.InputText("Text", ref txtDebug, 1024);
ImGui.SameLine();
Gui.Button("Debug", ()=>{
var tourl = new UriBuilder(URL)
{
Query = txtDebug
};
CurrentTab.Load(tourl.Uri.ToString());
});
ImGui.DebugTextEncoding(HttpUtility.UrlDecode(URL.Query));
break;
default:
break;
}
}
}