change tools -> dashboard (2.3.8)
This commit is contained in:
1 parent
2a8b403901
commit
14e05ae658
10 files changed
+348
-162
No files matched your search
Generated
+32
-32
@@ -51,6 +51,8 @@ namespace XPSLauncher
|
|||||||
this.button8 = new System.Windows.Forms.Button();
|
this.button8 = new System.Windows.Forms.Button();
|
||||||
this.label7 = new System.Windows.Forms.Label();
|
this.label7 = new System.Windows.Forms.Label();
|
||||||
this.label8 = new System.Windows.Forms.Label();
|
this.label8 = new System.Windows.Forms.Label();
|
||||||
|
this.pictureBox13 = new System.Windows.Forms.PictureBox();
|
||||||
|
this.pictureBox12 = new System.Windows.Forms.PictureBox();
|
||||||
this.pictureBox11 = new System.Windows.Forms.PictureBox();
|
this.pictureBox11 = new System.Windows.Forms.PictureBox();
|
||||||
this.pictureBox10 = new System.Windows.Forms.PictureBox();
|
this.pictureBox10 = new System.Windows.Forms.PictureBox();
|
||||||
this.pictureBox9 = new System.Windows.Forms.PictureBox();
|
this.pictureBox9 = new System.Windows.Forms.PictureBox();
|
||||||
@@ -62,8 +64,8 @@ namespace XPSLauncher
|
|||||||
this.pictureBox3 = new System.Windows.Forms.PictureBox();
|
this.pictureBox3 = new System.Windows.Forms.PictureBox();
|
||||||
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
||||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||||
this.pictureBox12 = new System.Windows.Forms.PictureBox();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox13)).BeginInit();
|
||||||
this.pictureBox13 = new System.Windows.Forms.PictureBox();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).BeginInit();
|
||||||
@@ -75,8 +77,6 @@ namespace XPSLauncher
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).BeginInit();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox13)).BeginInit();
|
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// button1
|
// button1
|
||||||
@@ -315,6 +315,30 @@ namespace XPSLauncher
|
|||||||
this.label8.Visible = false;
|
this.label8.Visible = false;
|
||||||
this.label8.Click += new System.EventHandler(this.ToggleMultiInstance);
|
this.label8.Click += new System.EventHandler(this.ToggleMultiInstance);
|
||||||
//
|
//
|
||||||
|
// pictureBox13
|
||||||
|
//
|
||||||
|
this.pictureBox13.Image = global::XPS.Properties.Resources.Checked;
|
||||||
|
this.pictureBox13.Location = new System.Drawing.Point(109, 119);
|
||||||
|
this.pictureBox13.Name = "pictureBox13";
|
||||||
|
this.pictureBox13.Size = new System.Drawing.Size(31, 31);
|
||||||
|
this.pictureBox13.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||||
|
this.pictureBox13.TabIndex = 34;
|
||||||
|
this.pictureBox13.TabStop = false;
|
||||||
|
this.pictureBox13.Visible = false;
|
||||||
|
this.pictureBox13.Click += new System.EventHandler(this.ToggleCloseOnLoad);
|
||||||
|
//
|
||||||
|
// pictureBox12
|
||||||
|
//
|
||||||
|
this.pictureBox12.Image = global::XPS.Properties.Resources.Checked;
|
||||||
|
this.pictureBox12.Location = new System.Drawing.Point(135, 170);
|
||||||
|
this.pictureBox12.Name = "pictureBox12";
|
||||||
|
this.pictureBox12.Size = new System.Drawing.Size(31, 31);
|
||||||
|
this.pictureBox12.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||||
|
this.pictureBox12.TabIndex = 33;
|
||||||
|
this.pictureBox12.TabStop = false;
|
||||||
|
this.pictureBox12.Visible = false;
|
||||||
|
this.pictureBox12.Click += new System.EventHandler(this.ToggleMultiInstance);
|
||||||
|
//
|
||||||
// pictureBox11
|
// pictureBox11
|
||||||
//
|
//
|
||||||
this.pictureBox11.Image = global::XPS.Properties.Resources.Unchecked;
|
this.pictureBox11.Image = global::XPS.Properties.Resources.Unchecked;
|
||||||
@@ -366,14 +390,14 @@ namespace XPSLauncher
|
|||||||
// pictureBox7
|
// pictureBox7
|
||||||
//
|
//
|
||||||
this.pictureBox7.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.pictureBox7.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.pictureBox7.Image = global::XPS.Properties.Resources.Tools;
|
this.pictureBox7.Image = global::XPS.Properties.Resources.Dashboard;
|
||||||
this.pictureBox7.Location = new System.Drawing.Point(4, 520);
|
this.pictureBox7.Location = new System.Drawing.Point(4, 520);
|
||||||
this.pictureBox7.Name = "pictureBox7";
|
this.pictureBox7.Name = "pictureBox7";
|
||||||
this.pictureBox7.Size = new System.Drawing.Size(155, 62);
|
this.pictureBox7.Size = new System.Drawing.Size(155, 62);
|
||||||
this.pictureBox7.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
this.pictureBox7.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||||
this.pictureBox7.TabIndex = 11;
|
this.pictureBox7.TabIndex = 11;
|
||||||
this.pictureBox7.TabStop = false;
|
this.pictureBox7.TabStop = false;
|
||||||
this.pictureBox7.Click += new System.EventHandler(this.ToolsButton);
|
this.pictureBox7.Click += new System.EventHandler(this.DashboardButton);
|
||||||
//
|
//
|
||||||
// pictureBox6
|
// pictureBox6
|
||||||
//
|
//
|
||||||
@@ -446,30 +470,6 @@ namespace XPSLauncher
|
|||||||
this.pictureBox1.TabIndex = 5;
|
this.pictureBox1.TabIndex = 5;
|
||||||
this.pictureBox1.TabStop = false;
|
this.pictureBox1.TabStop = false;
|
||||||
//
|
//
|
||||||
// pictureBox12
|
|
||||||
//
|
|
||||||
this.pictureBox12.Image = global::XPS.Properties.Resources.Checked;
|
|
||||||
this.pictureBox12.Location = new System.Drawing.Point(135, 170);
|
|
||||||
this.pictureBox12.Name = "pictureBox12";
|
|
||||||
this.pictureBox12.Size = new System.Drawing.Size(31, 31);
|
|
||||||
this.pictureBox12.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
|
||||||
this.pictureBox12.TabIndex = 33;
|
|
||||||
this.pictureBox12.TabStop = false;
|
|
||||||
this.pictureBox12.Visible = false;
|
|
||||||
this.pictureBox12.Click += new System.EventHandler(this.ToggleMultiInstance);
|
|
||||||
//
|
|
||||||
// pictureBox13
|
|
||||||
//
|
|
||||||
this.pictureBox13.Image = global::XPS.Properties.Resources.Checked;
|
|
||||||
this.pictureBox13.Location = new System.Drawing.Point(109, 119);
|
|
||||||
this.pictureBox13.Name = "pictureBox13";
|
|
||||||
this.pictureBox13.Size = new System.Drawing.Size(31, 31);
|
|
||||||
this.pictureBox13.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
|
||||||
this.pictureBox13.TabIndex = 34;
|
|
||||||
this.pictureBox13.TabStop = false;
|
|
||||||
this.pictureBox13.Visible = false;
|
|
||||||
this.pictureBox13.Click += new System.EventHandler(this.ToggleCloseOnLoad);
|
|
||||||
//
|
|
||||||
// Form1
|
// Form1
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
@@ -512,6 +512,8 @@ namespace XPSLauncher
|
|||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
this.Name = "Form1";
|
this.Name = "Form1";
|
||||||
this.Text = "XPS";
|
this.Text = "XPS";
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox13)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).EndInit();
|
||||||
@@ -523,8 +525,6 @@ namespace XPSLauncher
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).EndInit();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox13)).EndInit();
|
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
|
||||||
|
|||||||
+199
-113
@@ -10,13 +10,15 @@ using System.Windows.Forms;
|
|||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Management;
|
||||||
|
|
||||||
namespace XPSLauncher
|
namespace XPSLauncher
|
||||||
{
|
{
|
||||||
public partial class Form1 : Form
|
public partial class Form1 : Form
|
||||||
{
|
{
|
||||||
private static readonly HttpClient client = new HttpClient();
|
private static readonly HttpClient client = new HttpClient();
|
||||||
private static readonly string currentVersion = "2.3.7";
|
private static readonly string currentVersion = "2.3.8";
|
||||||
private PrivateFontCollection privateFonts = new PrivateFontCollection();
|
private PrivateFontCollection privateFonts = new PrivateFontCollection();
|
||||||
private Dictionary<string, bool> downloadingVersions = new Dictionary<string, bool>()
|
private Dictionary<string, bool> downloadingVersions = new Dictionary<string, bool>()
|
||||||
{
|
{
|
||||||
@@ -35,6 +37,17 @@ namespace XPSLauncher
|
|||||||
private static bool settingsOpen = false;
|
private static bool settingsOpen = false;
|
||||||
private static bool settingCloseOnLoad = false;
|
private static bool settingCloseOnLoad = false;
|
||||||
private static bool settingAllowMultipleInstances = false;
|
private static bool settingAllowMultipleInstances = false;
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
private static extern bool SetForegroundWindow(IntPtr hWnd);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
|
||||||
|
|
||||||
|
private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
|
||||||
|
|
||||||
public Form1()
|
public Form1()
|
||||||
{
|
{
|
||||||
@@ -47,9 +60,9 @@ namespace XPSLauncher
|
|||||||
}
|
}
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.FormBorderStyle = FormBorderStyle.FixedSingle;
|
FormBorderStyle = FormBorderStyle.FixedSingle;
|
||||||
this.MaximizeBox = false;
|
MaximizeBox = false;
|
||||||
this.pictureBox1.SendToBack();
|
pictureBox1.SendToBack();
|
||||||
ConvertOnLoad();
|
ConvertOnLoad();
|
||||||
LoadFontFromFile();
|
LoadFontFromFile();
|
||||||
CheckVersion();
|
CheckVersion();
|
||||||
@@ -58,6 +71,7 @@ namespace XPSLauncher
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MessageBox.Show($"Error loading XPS. Error message: {ex.Message}", $"Error loading XPS", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
MessageBox.Show($"Error loading XPS. Error message: {ex.Message}", $"Error loading XPS", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +136,7 @@ namespace XPSLauncher
|
|||||||
|
|
||||||
private void launchGDPS(string version)
|
private void launchGDPS(string version)
|
||||||
{
|
{
|
||||||
if (!this.button1.Visible || !this.button2.Visible || !this.button3.Visible || !this.button4.Visible)
|
if (!button1.Visible || !button2.Visible || !button3.Visible || !button4.Visible)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -176,7 +190,12 @@ namespace XPSLauncher
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MessageBox.Show(Text = $"XPS {version} is already running. If you would like to open another instance, enable the \"Allow multiple instances\" setting in the settings menu.", $"Error loading version {version}", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
List<int> pids = GetPIDsByApplicationPath(path);
|
||||||
|
|
||||||
|
foreach (int pid in pids)
|
||||||
|
{
|
||||||
|
SelectApp(pid);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -232,9 +251,9 @@ namespace XPSLauncher
|
|||||||
OpenUrl("https://xps.xytriza.com");
|
OpenUrl("https://xps.xytriza.com");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ToolsButton(object sender, EventArgs e)
|
private void DashboardButton(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
OpenUrl("https://xps.xytriza.com/tools");
|
OpenUrl("https://dashboard.xps.xytriza.com");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SettingsButton(object sender, EventArgs e)
|
private void SettingsButton(object sender, EventArgs e)
|
||||||
@@ -316,10 +335,10 @@ namespace XPSLauncher
|
|||||||
private async void CheckVersion()
|
private async void CheckVersion()
|
||||||
{
|
{
|
||||||
var versionCheckResult = await CheckVersionAsync();
|
var versionCheckResult = await CheckVersionAsync();
|
||||||
this.button1.UseWaitCursor = false;
|
button1.UseWaitCursor = false;
|
||||||
this.button2.UseWaitCursor = false;
|
button2.UseWaitCursor = false;
|
||||||
this.button3.UseWaitCursor = false;
|
button3.UseWaitCursor = false;
|
||||||
this.button4.UseWaitCursor = false;
|
button4.UseWaitCursor = false;
|
||||||
if (versionCheckResult.HasError)
|
if (versionCheckResult.HasError)
|
||||||
{
|
{
|
||||||
MessageBox.Show("Error checking version. Check your internet connection or try again later", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
MessageBox.Show("Error checking version. Check your internet connection or try again later", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
@@ -331,16 +350,16 @@ namespace XPSLauncher
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.button1.Cursor = Cursors.Hand;
|
button1.Cursor = Cursors.Hand;
|
||||||
this.button2.Cursor = Cursors.Hand;
|
button2.Cursor = Cursors.Hand;
|
||||||
this.button3.Cursor = Cursors.Hand;
|
button3.Cursor = Cursors.Hand;
|
||||||
this.button4.Cursor = Cursors.Hand;
|
button4.Cursor = Cursors.Hand;
|
||||||
this.button1.Click += new EventHandler(this.load22);
|
button1.Click += new EventHandler(load22);
|
||||||
this.button2.Click += new EventHandler(this.load21);
|
button2.Click += new EventHandler(load21);
|
||||||
this.button3.Click += new EventHandler(this.load20);
|
button3.Click += new EventHandler(load20);
|
||||||
this.button4.Click += new EventHandler(this.load19);
|
button4.Click += new EventHandler(this.load19);
|
||||||
this.KeyPreview = true;
|
KeyPreview = true;
|
||||||
this.KeyPress += MainForm_KeyPress;
|
KeyPress += MainForm_KeyPress;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -545,89 +564,89 @@ namespace XPSLauncher
|
|||||||
if (settingsOpen)
|
if (settingsOpen)
|
||||||
{
|
{
|
||||||
//enable stuff
|
//enable stuff
|
||||||
this.button1.Visible = true;
|
button1.Visible = true;
|
||||||
this.button2.Visible = true;
|
button2.Visible = true;
|
||||||
this.button3.Visible = true;
|
button3.Visible = true;
|
||||||
this.button4.Visible = true;
|
button4.Visible = true;
|
||||||
this.label1.Visible = true;
|
label1.Visible = true;
|
||||||
this.pictureBox7.Visible = true;
|
pictureBox7.Visible = true;
|
||||||
this.pictureBox6.Visible = true;
|
pictureBox6.Visible = true;
|
||||||
this.pictureBox5.Visible = true;
|
pictureBox5.Visible = true;
|
||||||
this.pictureBox4.Visible = true;
|
pictureBox4.Visible = true;
|
||||||
this.pictureBox3.Visible = true;
|
pictureBox3.Visible = true;
|
||||||
this.pictureBox2.Visible = true;
|
pictureBox2.Visible = true;
|
||||||
|
|
||||||
//disable stuff
|
//disable stuff
|
||||||
this.button5.Visible = false;
|
button5.Visible = false;
|
||||||
this.button6.Visible = false;
|
button6.Visible = false;
|
||||||
this.button7.Visible = false;
|
button7.Visible = false;
|
||||||
this.button8.Visible = false;
|
button8.Visible = false;
|
||||||
this.label2.Visible = false;
|
label2.Visible = false;
|
||||||
this.panel1.Visible = false;
|
panel1.Visible = false;
|
||||||
this.label3.Visible = false;
|
label3.Visible = false;
|
||||||
this.panel2.Visible = false;
|
panel2.Visible = false;
|
||||||
this.label4.Visible = false;
|
label4.Visible = false;
|
||||||
this.panel3.Visible = false;
|
panel3.Visible = false;
|
||||||
this.label5.Visible = false;
|
label5.Visible = false;
|
||||||
this.panel4.Visible = false;
|
panel4.Visible = false;
|
||||||
this.label6.Visible = false;
|
label6.Visible = false;
|
||||||
this.label7.Visible = false;
|
label7.Visible = false;
|
||||||
this.label8.Visible = false;
|
label8.Visible = false;
|
||||||
this.pictureBox10.Visible = false;
|
pictureBox10.Visible = false;
|
||||||
this.pictureBox11.Visible = false;
|
pictureBox11.Visible = false;
|
||||||
this.pictureBox12.Visible = false;
|
pictureBox12.Visible = false;
|
||||||
this.pictureBox13.Visible = false;
|
pictureBox13.Visible = false;
|
||||||
this.button1.Focus();
|
button1.Focus();
|
||||||
settingsOpen = false;
|
settingsOpen = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//disable stuff
|
//disable stuff
|
||||||
this.button1.Visible = false;
|
button1.Visible = false;
|
||||||
this.button2.Visible = false;
|
button2.Visible = false;
|
||||||
this.button3.Visible = false;
|
button3.Visible = false;
|
||||||
this.button4.Visible = false;
|
button4.Visible = false;
|
||||||
this.label1.Visible = false;
|
label1.Visible = false;
|
||||||
this.pictureBox7.Visible = false;
|
pictureBox7.Visible = false;
|
||||||
this.pictureBox6.Visible = false;
|
pictureBox6.Visible = false;
|
||||||
this.pictureBox5.Visible = false;
|
pictureBox5.Visible = false;
|
||||||
this.pictureBox4.Visible = false;
|
pictureBox4.Visible = false;
|
||||||
this.pictureBox3.Visible = false;
|
pictureBox3.Visible = false;
|
||||||
this.pictureBox2.Visible = false;
|
pictureBox2.Visible = false;
|
||||||
|
|
||||||
//enable stuff
|
//enable stuff
|
||||||
this.button5.Visible = true;
|
button5.Visible = true;
|
||||||
this.button6.Visible = true;
|
button6.Visible = true;
|
||||||
this.button7.Visible = true;
|
button7.Visible = true;
|
||||||
this.button8.Visible = true;
|
button8.Visible = true;
|
||||||
this.label2.Visible = true;
|
label2.Visible = true;
|
||||||
this.panel1.Visible = true;
|
panel1.Visible = true;
|
||||||
this.label3.Visible = true;
|
label3.Visible = true;
|
||||||
this.panel2.Visible = true;
|
panel2.Visible = true;
|
||||||
this.label4.Visible = true;
|
label4.Visible = true;
|
||||||
this.panel3.Visible = true;
|
panel3.Visible = true;
|
||||||
this.label5.Visible = true;
|
label5.Visible = true;
|
||||||
this.panel4.Visible = true;
|
panel4.Visible = true;
|
||||||
this.label6.Visible = true;
|
label6.Visible = true;
|
||||||
this.label7.Visible = true;
|
label7.Visible = true;
|
||||||
this.label8.Visible = true;
|
label8.Visible = true;
|
||||||
if (!settingCloseOnLoad)
|
if (!settingCloseOnLoad)
|
||||||
{
|
{
|
||||||
this.pictureBox11.Visible = true;
|
pictureBox11.Visible = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.pictureBox13.Visible = true;
|
pictureBox13.Visible = true;
|
||||||
}
|
}
|
||||||
if (!settingAllowMultipleInstances)
|
if (!settingAllowMultipleInstances)
|
||||||
{
|
{
|
||||||
this.pictureBox10.Visible = true;
|
pictureBox10.Visible = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.pictureBox12.Visible = true;
|
pictureBox12.Visible = true;
|
||||||
}
|
}
|
||||||
this.button5.Focus();
|
button5.Focus();
|
||||||
settingsOpen = true;
|
settingsOpen = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -715,32 +734,39 @@ namespace XPSLauncher
|
|||||||
|
|
||||||
private void ConvertOnLoad()
|
private void ConvertOnLoad()
|
||||||
{
|
{
|
||||||
dynamic config = ReadConfig();
|
try
|
||||||
|
{
|
||||||
|
dynamic config = ReadConfig();
|
||||||
|
|
||||||
if (config.lastVersion == "2.2.0")
|
if (config.lastVersion == "2.2.0")
|
||||||
{
|
{
|
||||||
RemoveConfigValue("closeOnExit");
|
RemoveConfigValue("closeOnExit");
|
||||||
WriteConfig("closeOnLoad", config.closeOnExit ?? false);
|
WriteConfig("closeOnLoad", config.closeOnExit ?? false);
|
||||||
WriteConfig("allowMultipleInstances", false);
|
WriteConfig("allowMultipleInstances", false);
|
||||||
WriteConfig("theme", 0);
|
WriteConfig("theme", 0);
|
||||||
config.allowMultipleInstances = false;
|
config.allowMultipleInstances = false;
|
||||||
config.closeOnLoad = config.closeOnExit ?? false;
|
config.closeOnLoad = config.closeOnExit ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
settingCloseOnLoad = config.closeOnLoad;
|
settingCloseOnLoad = config.closeOnLoad;
|
||||||
settingAllowMultipleInstances = config.allowMultipleInstances;
|
settingAllowMultipleInstances = config.allowMultipleInstances;
|
||||||
if (settingsOpen && settingCloseOnLoad)
|
if (settingsOpen && settingCloseOnLoad)
|
||||||
{
|
{
|
||||||
pictureBox13.Visible = false;
|
pictureBox13.Visible = false;
|
||||||
pictureBox11.Visible = true;
|
pictureBox11.Visible = true;
|
||||||
|
}
|
||||||
|
if (settingsOpen && settingAllowMultipleInstances)
|
||||||
|
{
|
||||||
|
pictureBox12.Visible = false;
|
||||||
|
pictureBox10.Visible = true;
|
||||||
|
}
|
||||||
|
LoadTheme();
|
||||||
|
WriteConfig("lastVersion", currentVersion);
|
||||||
}
|
}
|
||||||
if (settingsOpen && settingAllowMultipleInstances)
|
catch
|
||||||
{
|
{
|
||||||
pictureBox12.Visible = false;
|
ResetConfig();
|
||||||
pictureBox10.Visible = true;
|
|
||||||
}
|
}
|
||||||
LoadTheme();
|
|
||||||
WriteConfig("lastVersion", currentVersion);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadTheme()
|
private void LoadTheme()
|
||||||
@@ -774,14 +800,14 @@ namespace XPSLauncher
|
|||||||
private void SetThemeColor(Color color)
|
private void SetThemeColor(Color color)
|
||||||
{
|
{
|
||||||
this.BackColor = color;
|
this.BackColor = color;
|
||||||
this.pictureBox8.BackColor = color;
|
pictureBox8.BackColor = color;
|
||||||
this.pictureBox7.BackColor = color;
|
pictureBox7.BackColor = color;
|
||||||
this.pictureBox6.BackColor = color;
|
pictureBox6.BackColor = color;
|
||||||
this.pictureBox5.BackColor = color;
|
pictureBox5.BackColor = color;
|
||||||
this.pictureBox4.BackColor = color;
|
pictureBox4.BackColor = color;
|
||||||
this.pictureBox3.BackColor = color;
|
pictureBox3.BackColor = color;
|
||||||
this.pictureBox2.BackColor = color;
|
pictureBox2.BackColor = color;
|
||||||
this.pictureBox1.BackColor = color;
|
pictureBox1.BackColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ToggleCloseOnLoad(object sender = null, EventArgs e = null)
|
private void ToggleCloseOnLoad(object sender = null, EventArgs e = null)
|
||||||
@@ -817,6 +843,66 @@ namespace XPSLauncher
|
|||||||
}
|
}
|
||||||
WriteConfig("allowMultipleInstances", settingAllowMultipleInstances);
|
WriteConfig("allowMultipleInstances", settingAllowMultipleInstances);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IntPtr FindWindowHandle(int pid)
|
||||||
|
{
|
||||||
|
IntPtr windowHandle = IntPtr.Zero;
|
||||||
|
|
||||||
|
EnumWindows(delegate (IntPtr hWnd, IntPtr lParam)
|
||||||
|
{
|
||||||
|
uint windowPid;
|
||||||
|
GetWindowThreadProcessId(hWnd, out windowPid);
|
||||||
|
if (windowPid == pid)
|
||||||
|
{
|
||||||
|
windowHandle = hWnd;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}, IntPtr.Zero);
|
||||||
|
|
||||||
|
return windowHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SelectApp(int pid)
|
||||||
|
{
|
||||||
|
IntPtr hWnd = FindWindowHandle(pid);
|
||||||
|
if (hWnd != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
SetForegroundWindow(hWnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<int> GetPIDsByApplicationPath(string applicationPath)
|
||||||
|
{
|
||||||
|
var pids = new List<int>();
|
||||||
|
var query = $"Get-WmiObject Win32_Process | Where-Object {{$_.ExecutablePath -eq '{applicationPath}'}} | Select-Object ProcessId";
|
||||||
|
var startInfo = new ProcessStartInfo("powershell", $"-Command \"{query}\"")
|
||||||
|
{
|
||||||
|
RedirectStandardOutput = true,
|
||||||
|
UseShellExecute = false,
|
||||||
|
CreateNoWindow = true
|
||||||
|
};
|
||||||
|
|
||||||
|
using (var process = Process.Start(startInfo))
|
||||||
|
{
|
||||||
|
if (process != null)
|
||||||
|
{
|
||||||
|
string output = process.StandardOutput.ReadToEnd();
|
||||||
|
process.WaitForExit();
|
||||||
|
|
||||||
|
var lines = output.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
foreach (var line in lines)
|
||||||
|
{
|
||||||
|
if (int.TryParse(line, out var pid))
|
||||||
|
{
|
||||||
|
pids.Add(pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pids;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -117,6 +117,108 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="button1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="button2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="button3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="button4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="button5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="button6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="panel1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="label3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="label4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="panel2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="label5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="panel3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="label6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="panel4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="button7.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="button8.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="label7.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="label8.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox13.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox12.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox11.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox10.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox9.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox8.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox7.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="pictureBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace XPSLauncher
|
namespace XPSLauncher
|
||||||
|
|||||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("2.3.3")]
|
[assembly: AssemblyVersion("2.3.8")]
|
||||||
[assembly: AssemblyFileVersion("2.3.3")]
|
[assembly: AssemblyFileVersion("2.3.8")]
|
||||||
+10
-10
@@ -70,6 +70,16 @@ namespace XPS.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap Dashboard {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("Dashboard", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -120,16 +130,6 @@ namespace XPS.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
|
||||||
/// </summary>
|
|
||||||
internal static System.Drawing.Bitmap Tools {
|
|
||||||
get {
|
|
||||||
object obj = ResourceManager.GetObject("Tools", resourceCulture);
|
|
||||||
return ((System.Drawing.Bitmap)(obj));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -136,8 +136,8 @@
|
|||||||
<data name="Twitter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="Twitter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\Twitter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\Twitter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Tools" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="Dashboard" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\Tools.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\Dashboard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Unchecked" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="Unchecked" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\Unchecked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\Unchecked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 8.0 KiB |
@@ -70,6 +70,7 @@
|
|||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<EmbeddedResource Include="Form1.resx">
|
<EmbeddedResource Include="Form1.resx">
|
||||||
<DependentUpon>Form1.cs</DependentUpon>
|
<DependentUpon>Form1.cs</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
|||||||
Reference in new issue
Block a user