Code refactoring

This commit is contained in:
Jaex 2024-09-13 05:30:33 +03:00
parent e5b9fdd8c8
commit ec3ce9caeb
6 changed files with 157 additions and 293 deletions

View File

@ -30,229 +30,61 @@ namespace ShareX.HelpersLib
{
public class DarkColorTable : ProfessionalColorTable
{
public override Color ButtonSelectedHighlight
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color ButtonSelectedHighlightBorder
{
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
}
public override Color ButtonPressedHighlight
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color ButtonPressedHighlightBorder
{
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
}
public override Color ButtonCheckedHighlight
{
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
}
public override Color ButtonCheckedHighlightBorder
{
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
}
public override Color ButtonPressedBorder
{
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
}
public override Color ButtonSelectedBorder
{
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
}
public override Color ButtonCheckedGradientBegin
{
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
}
public override Color ButtonCheckedGradientMiddle
{
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
}
public override Color ButtonCheckedGradientEnd
{
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
}
public override Color ButtonSelectedGradientBegin
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color ButtonSelectedGradientMiddle
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color ButtonSelectedGradientEnd
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color ButtonPressedGradientBegin
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color ButtonPressedGradientMiddle
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color ButtonPressedGradientEnd
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color CheckBackground
{
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
}
public override Color CheckSelectedBackground
{
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
}
public override Color CheckPressedBackground
{
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
}
public override Color GripDark
{
get { return ShareXResources.Theme.SeparatorDarkColor; }
}
public override Color GripLight
{
get { return ShareXResources.Theme.SeparatorLightColor; }
}
public override Color ImageMarginGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ImageMarginGradientMiddle
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ImageMarginGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ImageMarginRevealedGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ImageMarginRevealedGradientMiddle
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ImageMarginRevealedGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color MenuStripGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color MenuStripGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color MenuItemSelected
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color MenuItemBorder
{
get { return ShareXResources.Theme.MenuBorderColor; }
}
public override Color MenuBorder
{
get { return ShareXResources.Theme.MenuBorderColor; }
}
public override Color MenuItemSelectedGradientBegin
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color MenuItemSelectedGradientEnd
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color MenuItemPressedGradientBegin
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color MenuItemPressedGradientMiddle
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color MenuItemPressedGradientEnd
{
get { return ShareXResources.Theme.MenuHighlightColor; }
}
public override Color RaftingContainerGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color RaftingContainerGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color SeparatorDark
{
get { return ShareXResources.Theme.SeparatorDarkColor; }
}
public override Color SeparatorLight
{
get { return ShareXResources.Theme.SeparatorLightColor; }
}
public override Color StatusStripGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color StatusStripGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripBorder
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripDropDownBackground
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripGradientMiddle
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripContentPanelGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripContentPanelGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripPanelGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ToolStripPanelGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color OverflowButtonGradientBegin
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color OverflowButtonGradientMiddle
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color OverflowButtonGradientEnd
{
get { return ShareXResources.Theme.BackgroundColor; }
}
public override Color ButtonSelectedHighlight => ShareXResources.Theme.MenuHighlightColor;
public override Color ButtonSelectedHighlightBorder => ShareXResources.Theme.MenuHighlightBorderColor;
public override Color ButtonPressedHighlight => ShareXResources.Theme.MenuHighlightColor;
public override Color ButtonPressedHighlightBorder => ShareXResources.Theme.MenuHighlightBorderColor;
public override Color ButtonCheckedHighlight => ShareXResources.Theme.MenuCheckBackgroundColor;
public override Color ButtonCheckedHighlightBorder => ShareXResources.Theme.MenuHighlightBorderColor;
public override Color ButtonPressedBorder => ShareXResources.Theme.MenuHighlightBorderColor;
public override Color ButtonSelectedBorder => ShareXResources.Theme.MenuHighlightBorderColor;
public override Color ButtonCheckedGradientBegin => ShareXResources.Theme.MenuCheckBackgroundColor;
public override Color ButtonCheckedGradientMiddle => ShareXResources.Theme.MenuCheckBackgroundColor;
public override Color ButtonCheckedGradientEnd => ShareXResources.Theme.MenuCheckBackgroundColor;
public override Color ButtonSelectedGradientBegin => ShareXResources.Theme.MenuHighlightColor;
public override Color ButtonSelectedGradientMiddle => ShareXResources.Theme.MenuHighlightColor;
public override Color ButtonSelectedGradientEnd => ShareXResources.Theme.MenuHighlightColor;
public override Color ButtonPressedGradientBegin => ShareXResources.Theme.MenuHighlightColor;
public override Color ButtonPressedGradientMiddle => ShareXResources.Theme.MenuHighlightColor;
public override Color ButtonPressedGradientEnd => ShareXResources.Theme.MenuHighlightColor;
public override Color CheckBackground => ShareXResources.Theme.MenuCheckBackgroundColor;
public override Color CheckSelectedBackground => ShareXResources.Theme.MenuCheckBackgroundColor;
public override Color CheckPressedBackground => ShareXResources.Theme.MenuCheckBackgroundColor;
public override Color GripDark => ShareXResources.Theme.SeparatorDarkColor;
public override Color GripLight => ShareXResources.Theme.SeparatorLightColor;
public override Color ImageMarginGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color ImageMarginGradientMiddle => ShareXResources.Theme.BackgroundColor;
public override Color ImageMarginGradientEnd => ShareXResources.Theme.BackgroundColor;
public override Color ImageMarginRevealedGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color ImageMarginRevealedGradientMiddle => ShareXResources.Theme.BackgroundColor;
public override Color ImageMarginRevealedGradientEnd => ShareXResources.Theme.BackgroundColor;
public override Color MenuStripGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color MenuStripGradientEnd => ShareXResources.Theme.BackgroundColor;
public override Color MenuItemSelected => ShareXResources.Theme.MenuHighlightColor;
public override Color MenuItemBorder => ShareXResources.Theme.MenuBorderColor;
public override Color MenuBorder => ShareXResources.Theme.MenuBorderColor;
public override Color MenuItemSelectedGradientBegin => ShareXResources.Theme.MenuHighlightColor;
public override Color MenuItemSelectedGradientEnd => ShareXResources.Theme.MenuHighlightColor;
public override Color MenuItemPressedGradientBegin => ShareXResources.Theme.MenuHighlightColor;
public override Color MenuItemPressedGradientMiddle => ShareXResources.Theme.MenuHighlightColor;
public override Color MenuItemPressedGradientEnd => ShareXResources.Theme.MenuHighlightColor;
public override Color RaftingContainerGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color RaftingContainerGradientEnd => ShareXResources.Theme.BackgroundColor;
public override Color SeparatorDark => ShareXResources.Theme.SeparatorDarkColor;
public override Color SeparatorLight => ShareXResources.Theme.SeparatorLightColor;
public override Color StatusStripGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color StatusStripGradientEnd => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripBorder => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripDropDownBackground => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripGradientMiddle => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripGradientEnd => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripContentPanelGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripContentPanelGradientEnd => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripPanelGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color ToolStripPanelGradientEnd => ShareXResources.Theme.BackgroundColor;
public override Color OverflowButtonGradientBegin => ShareXResources.Theme.BackgroundColor;
public override Color OverflowButtonGradientMiddle => ShareXResources.Theme.BackgroundColor;
public override Color OverflowButtonGradientEnd => ShareXResources.Theme.BackgroundColor;
}
}

View File

@ -625,21 +625,6 @@ namespace ShareX.HelpersLib
return result;
}
public static bool IsRunning(string name)
{
try
{
Mutex mutex = Mutex.OpenExisting(name);
mutex.ReleaseMutex();
}
catch
{
return false;
}
return true;
}
public static T ByteArrayToStructure<T>(byte[] bytes) where T : struct
{
GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);

View File

@ -0,0 +1,84 @@
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright (c) 2007-2024 ShareX Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using System;
using System.Threading;
namespace ShareX.HelpersLib
{
public class MutexManager : IDisposable
{
public bool HasHandle { get; private set; }
private Mutex mutex;
public MutexManager(string mutexName) : this(mutexName, Timeout.Infinite)
{
}
public MutexManager(string mutexName, int timeout)
{
mutex = new Mutex(false, mutexName);
try
{
HasHandle = mutex.WaitOne(timeout, false);
}
catch (AbandonedMutexException)
{
HasHandle = true;
}
}
public static bool IsRunning(string mutexName)
{
try
{
using (Mutex mutex = new Mutex(false, mutexName, out bool createdNew))
{
return !createdNew;
}
}
catch
{
}
return false;
}
public void Dispose()
{
if (mutex != null)
{
if (HasHandle)
{
mutex.ReleaseMutex();
}
mutex.Dispose();
}
}
}
}

View File

@ -44,7 +44,7 @@ namespace ShareX.HelpersLib
private const int MaxArgumentsLength = 100;
private const int ConnectTimeout = 5000;
private readonly Mutex mutex;
private readonly MutexManager mutex;
private CancellationTokenSource cts;
public SingleInstanceManager(string mutexName, string pipeName, string[] args) : this(mutexName, pipeName, true, args)
@ -57,31 +57,21 @@ namespace ShareX.HelpersLib
PipeName = pipeName;
IsSingleInstance = isSingleInstance;
mutex = new Mutex(false, MutexName);
mutex = new MutexManager(MutexName, 0);
IsFirstInstance = mutex.HasHandle;
try
if (IsSingleInstance)
{
IsFirstInstance = mutex.WaitOne(100, false);
if (IsSingleInstance)
if (IsFirstInstance)
{
if (IsFirstInstance)
{
cts = new CancellationTokenSource();
cts = new CancellationTokenSource();
Task.Run(ListenForConnectionsAsync, cts.Token);
}
else
{
RedirectArgumentsToFirstInstance(args);
}
Task.Run(ListenForConnectionsAsync, cts.Token);
}
else
{
RedirectArgumentsToFirstInstance(args);
}
}
catch (AbandonedMutexException)
{
DebugHelper.WriteLine("Single instance mutex found abandoned from another process.");
IsFirstInstance = true;
}
}
@ -175,15 +165,7 @@ namespace ShareX.HelpersLib
cts.Dispose();
}
if (mutex != null)
{
if (IsFirstInstance)
{
mutex.ReleaseMutex();
}
mutex.Dispose();
}
mutex?.Dispose();
}
}
}

View File

@ -47,21 +47,20 @@ namespace ShareX.Steam
return Path.GetFullPath(path);
}
public static bool IsRunning(string name)
public static bool IsRunning(string mutexName)
{
bool createdNew = true;
try
{
using (Mutex mutex = new Mutex(false, name, out createdNew))
using (Mutex mutex = new Mutex(false, mutexName, out bool createdNew))
{
return !createdNew;
}
}
catch
{
}
return !createdNew;
return false;
}
/// <summary>

View File

@ -34,7 +34,7 @@ namespace ShareX.Steam
{
public static class Launcher
{
private static string ContentFolderPath = GetContentFolderPath();
private static string ContentFolderPath = Helpers.GetAbsolutePath("ShareX");
private static string ContentExecutablePath = Path.Combine(ContentFolderPath, "ShareX.exe");
private static string ContentSteamFilePath = Path.Combine(ContentFolderPath, "Steam");
private static string UpdatingTempFilePath = Path.Combine(ContentFolderPath, "Updating");
@ -55,11 +55,7 @@ namespace ShareX.Steam
IsStartupRun = Helpers.IsCommandExist(args, "-silent");
#if DEBUG
ShowInApp = true;
#else
ShowInApp = File.Exists(ContentSteamFilePath);
#endif
if (!IsShareXRunning())
{
@ -136,20 +132,6 @@ namespace ShareX.Steam
}
}
private static string GetContentFolderPath()
{
#if DEBUG
string path = Helpers.GetAbsolutePath(@"..\..\..\ShareX\bin\Debug");
if (Directory.Exists(path))
{
return path;
}
#endif
return Helpers.GetAbsolutePath("ShareX");
}
private static bool IsShareXRunning()
{
// Check ShareX mutex.