diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.Designer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.Designer.cs index 5a9b55f..c338406 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.Designer.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.Designer.cs @@ -45,9 +45,10 @@ this.startCodeEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.openLauncherToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openCodeEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openLauncherToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openMicrosoftCopilotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); @@ -55,10 +56,9 @@ // button1 // this.button1.Image = global::WelsonJS.Launcher.Properties.Resources.icon_zip_128; - this.button1.Location = new System.Drawing.Point(34, 100); - this.button1.Margin = new System.Windows.Forms.Padding(4); + this.button1.Location = new System.Drawing.Point(24, 67); this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(286, 300); + this.button1.Size = new System.Drawing.Size(200, 200); this.button1.TabIndex = 0; this.button1.Text = "From ZIP file..."; this.button1.TextAlign = System.Drawing.ContentAlignment.BottomCenter; @@ -68,10 +68,9 @@ // button2 // this.button2.Image = global::WelsonJS.Launcher.Properties.Resources.icon_link_128; - this.button2.Location = new System.Drawing.Point(329, 100); - this.button2.Margin = new System.Windows.Forms.Padding(4); + this.button2.Location = new System.Drawing.Point(230, 67); this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(286, 300); + this.button2.Size = new System.Drawing.Size(200, 200); this.button2.TabIndex = 1; this.button2.Text = "From external link..."; this.button2.TextAlign = System.Drawing.ContentAlignment.BottomCenter; @@ -81,20 +80,18 @@ // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(34, 62); - this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Location = new System.Drawing.Point(24, 41); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(450, 18); + this.label1.Size = new System.Drawing.Size(312, 12); this.label1.TabIndex = 2; this.label1.Text = "Choose the location of WelsonJS application package."; // // linkLabel1 // this.linkLabel1.AutoSize = true; - this.linkLabel1.Location = new System.Drawing.Point(34, 518); - this.linkLabel1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.linkLabel1.Location = new System.Drawing.Point(24, 345); this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(318, 18); + this.linkLabel1.Size = new System.Drawing.Size(219, 12); this.linkLabel1.TabIndex = 3; this.linkLabel1.TabStop = true; this.linkLabel1.Text = "https://github.com/gnh1201/welsonjs"; @@ -103,10 +100,9 @@ // checkBox1 // this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(37, 422); - this.checkBox1.Margin = new System.Windows.Forms.Padding(4); + this.checkBox1.Location = new System.Drawing.Point(26, 281); this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(256, 22); + this.checkBox1.Size = new System.Drawing.Size(184, 16); this.checkBox1.TabIndex = 4; this.checkBox1.Text = "I want to use specific script "; this.checkBox1.UseVisualStyleBackColor = true; @@ -115,19 +111,17 @@ // textBox1 // this.textBox1.Enabled = false; - this.textBox1.Location = new System.Drawing.Point(306, 417); - this.textBox1.Margin = new System.Windows.Forms.Padding(4); + this.textBox1.Location = new System.Drawing.Point(214, 278); this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(155, 28); + this.textBox1.Size = new System.Drawing.Size(110, 21); this.textBox1.TabIndex = 5; // // checkBox2 // this.checkBox2.AutoSize = true; - this.checkBox2.Location = new System.Drawing.Point(37, 458); - this.checkBox2.Margin = new System.Windows.Forms.Padding(4); + this.checkBox2.Location = new System.Drawing.Point(26, 305); this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(352, 22); + this.checkBox2.Size = new System.Drawing.Size(254, 16); this.checkBox2.TabIndex = 6; this.checkBox2.Text = "This is an Interactive Service Application"; this.checkBox2.UseVisualStyleBackColor = true; @@ -138,8 +132,7 @@ this.settingsToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Padding = new System.Windows.Forms.Padding(9, 3, 0, 3); - this.menuStrip1.Size = new System.Drawing.Size(659, 25); + this.menuStrip1.Size = new System.Drawing.Size(461, 24); this.menuStrip1.TabIndex = 7; this.menuStrip1.Text = "menuStrip1"; // @@ -150,43 +143,44 @@ this.instancesToolStripMenuItem, this.runAsAdministratorToolStripMenuItem, this.globalSettingsToolStripMenuItem, - this.startCodeEditorToolStripMenuItem}); + this.startCodeEditorToolStripMenuItem, + this.openMicrosoftCopilotToolStripMenuItem}); this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; - this.settingsToolStripMenuItem.Size = new System.Drawing.Size(62, 19); + this.settingsToolStripMenuItem.Size = new System.Drawing.Size(62, 20); this.settingsToolStripMenuItem.Text = "Settings"; // // userdefinedVariablesToolStripMenuItem // this.userdefinedVariablesToolStripMenuItem.Name = "userdefinedVariablesToolStripMenuItem"; - this.userdefinedVariablesToolStripMenuItem.Size = new System.Drawing.Size(196, 22); + this.userdefinedVariablesToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.userdefinedVariablesToolStripMenuItem.Text = "User-defined variables"; this.userdefinedVariablesToolStripMenuItem.Click += new System.EventHandler(this.userdefinedVariablesToolStripMenuItem_Click); // // instancesToolStripMenuItem // this.instancesToolStripMenuItem.Name = "instancesToolStripMenuItem"; - this.instancesToolStripMenuItem.Size = new System.Drawing.Size(196, 22); + this.instancesToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.instancesToolStripMenuItem.Text = "Instances"; this.instancesToolStripMenuItem.Click += new System.EventHandler(this.instancesToolStripMenuItem_Click); // // runAsAdministratorToolStripMenuItem // this.runAsAdministratorToolStripMenuItem.Name = "runAsAdministratorToolStripMenuItem"; - this.runAsAdministratorToolStripMenuItem.Size = new System.Drawing.Size(196, 22); + this.runAsAdministratorToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.runAsAdministratorToolStripMenuItem.Text = "Run as Administrator..."; this.runAsAdministratorToolStripMenuItem.Click += new System.EventHandler(this.runAsAdministratorToolStripMenuItem_Click); // // globalSettingsToolStripMenuItem // this.globalSettingsToolStripMenuItem.Name = "globalSettingsToolStripMenuItem"; - this.globalSettingsToolStripMenuItem.Size = new System.Drawing.Size(196, 22); + this.globalSettingsToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.globalSettingsToolStripMenuItem.Text = "Global settings..."; this.globalSettingsToolStripMenuItem.Click += new System.EventHandler(this.globalSettingsToolStripMenuItem_Click); // // startCodeEditorToolStripMenuItem // this.startCodeEditorToolStripMenuItem.Name = "startCodeEditorToolStripMenuItem"; - this.startCodeEditorToolStripMenuItem.Size = new System.Drawing.Size(196, 22); + this.startCodeEditorToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.startCodeEditorToolStripMenuItem.Text = "Start the code editor..."; this.startCodeEditorToolStripMenuItem.Click += new System.EventHandler(this.startCodeEditorToolStripMenuItem_Click); // @@ -203,7 +197,13 @@ this.openCodeEditorToolStripMenuItem, this.exitToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(199, 92); + this.contextMenuStrip1.Size = new System.Drawing.Size(199, 70); + // + // openLauncherToolStripMenuItem + // + this.openLauncherToolStripMenuItem.Name = "openLauncherToolStripMenuItem"; + this.openLauncherToolStripMenuItem.Size = new System.Drawing.Size(198, 22); + this.openLauncherToolStripMenuItem.Text = "Open the launcher..."; // // openCodeEditorToolStripMenuItem // @@ -218,17 +218,18 @@ this.exitToolStripMenuItem.Size = new System.Drawing.Size(198, 22); this.exitToolStripMenuItem.Text = "Exit"; // - // openLauncherToolStripMenuItem + // openMicrosoftCopilotToolStripMenuItem // - this.openLauncherToolStripMenuItem.Name = "openLauncherToolStripMenuItem"; - this.openLauncherToolStripMenuItem.Size = new System.Drawing.Size(198, 22); - this.openLauncherToolStripMenuItem.Text = "Open the launcher..."; + this.openMicrosoftCopilotToolStripMenuItem.Name = "openMicrosoftCopilotToolStripMenuItem"; + this.openMicrosoftCopilotToolStripMenuItem.Size = new System.Drawing.Size(210, 22); + this.openMicrosoftCopilotToolStripMenuItem.Text = "Open Microsoft Copilot..."; + this.openMicrosoftCopilotToolStripMenuItem.Click += new System.EventHandler(this.openMicrosoftCopilotToolStripMenuItem_Click); // // MainForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 18F); + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(659, 573); + this.ClientSize = new System.Drawing.Size(461, 382); this.Controls.Add(this.checkBox2); this.Controls.Add(this.textBox1); this.Controls.Add(this.checkBox1); @@ -240,7 +241,6 @@ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Icon = global::WelsonJS.Launcher.Properties.Resources.favicon; this.MainMenuStrip = this.menuStrip1; - this.Margin = new System.Windows.Forms.Padding(4); this.MaximizeBox = false; this.Name = "MainForm"; this.Text = "WelsonJS Application Launcher"; @@ -273,6 +273,7 @@ private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem openCodeEditorToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem openLauncherToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openMicrosoftCopilotToolStripMenuItem; } } diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs index 18d17c1..0f713b2 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs @@ -270,5 +270,10 @@ namespace WelsonJS.Launcher Process.Start(Program.resourceServer.GetPrefix()); } } + + private void openMicrosoftCopilotToolStripMenuItem_Click(object sender, EventArgs e) + { + Program.OpenWebBrowser("https://copilot.microsoft.com/"); + } } } diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs index 6660b72..f063773 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs @@ -124,5 +124,22 @@ namespace WelsonJS.Launcher return workingDirectory; } + + public static void OpenWebBrowser(string url) + { + string userDataDir = Path.Combine(GetAppDataPath(), "EdgeUserProfile"); + string[] arguments = { + $"\"{url}\"", + "--remote-debugging-port=9222", + $"--user-data-dir=\"{userDataDir}\"" + }; + + Process.Start(new ProcessStartInfo + { + FileName = "msedge.exe", + Arguments = string.Join(" ", arguments), + UseShellExecute = true + }); + } } } diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs index f93f707..b1edfd8 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Net; +using System.Net.Http; using System.Reflection; using System.Text; using System.Threading; @@ -46,7 +46,7 @@ namespace WelsonJS.Launcher _listener.Start(); // Open the web browser - Process.Start(_prefix); + Program.OpenWebBrowser(_prefix); // Run a task with cancellation token _serverTask = Task.Run(() => ListenLoop(_cts.Token)); @@ -85,6 +85,7 @@ namespace WelsonJS.Launcher private void ProcessRequest(HttpListenerContext context) { string path = context.Request.Url.AbsolutePath.TrimStart('/'); + string prefix; // Serve the favicon.ico file if ("favicon.ico".Equals(path, StringComparison.OrdinalIgnoreCase)) @@ -94,9 +95,18 @@ namespace WelsonJS.Launcher } // Serve the code completion (word suggestion) - if (path.StartsWith("completion/", StringComparison.OrdinalIgnoreCase)) + prefix = "completion/"; + if (path.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) { - ServeCompletion(context, path.Substring("completion/".Length)); + ServeCompletion(context, path.Substring(prefix.Length)); + return; + } + + // Serve the DevTools Protocol + prefix = "devtools/"; + if (path.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) + { + ServeDevTools(context, path.Substring(prefix.Length - 1)); return; } @@ -162,6 +172,23 @@ namespace WelsonJS.Launcher } } + private void ServeDevTools(HttpListenerContext context, string endpoint) + { + int statusCode = 200; + + HttpClient client = new HttpClient(); + string url = "http://localhost:9222" + endpoint; + byte[] data = Task.Run(async () => await client.GetByteArrayAsync(url)).Result; + + context.Response.StatusCode = statusCode; + context.Response.ContentType = "application/json"; + context.Response.ContentLength64 = data.Length; + using (Stream outputStream = context.Response.OutputStream) + { + outputStream.Write(data, 0, data.Length); + } + } + private void ServeResource(HttpListenerContext context, byte[] data, string mimeType = "text/html") { int statusCode = 200; diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/WelsonJS.Launcher.csproj b/WelsonJS.Toolkit/WelsonJS.Launcher/WelsonJS.Launcher.csproj index 85c3ec2..c865a4b 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/WelsonJS.Launcher.csproj +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/WelsonJS.Launcher.csproj @@ -66,6 +66,7 @@ True True +