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

View File

@ -625,21 +625,6 @@ namespace ShareX.HelpersLib
return result; 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 public static T ByteArrayToStructure<T>(byte[] bytes) where T : struct
{ {
GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned); 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 MaxArgumentsLength = 100;
private const int ConnectTimeout = 5000; private const int ConnectTimeout = 5000;
private readonly Mutex mutex; private readonly MutexManager mutex;
private CancellationTokenSource cts; private CancellationTokenSource cts;
public SingleInstanceManager(string mutexName, string pipeName, string[] args) : this(mutexName, pipeName, true, args) public SingleInstanceManager(string mutexName, string pipeName, string[] args) : this(mutexName, pipeName, true, args)
@ -57,31 +57,21 @@ namespace ShareX.HelpersLib
PipeName = pipeName; PipeName = pipeName;
IsSingleInstance = isSingleInstance; IsSingleInstance = isSingleInstance;
mutex = new Mutex(false, MutexName); mutex = new MutexManager(MutexName, 0);
IsFirstInstance = mutex.HasHandle;
try if (IsSingleInstance)
{ {
IsFirstInstance = mutex.WaitOne(100, false); if (IsFirstInstance)
if (IsSingleInstance)
{ {
if (IsFirstInstance) cts = new CancellationTokenSource();
{
cts = new CancellationTokenSource();
Task.Run(ListenForConnectionsAsync, cts.Token); Task.Run(ListenForConnectionsAsync, cts.Token);
} }
else else
{ {
RedirectArgumentsToFirstInstance(args); 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(); cts.Dispose();
} }
if (mutex != null) mutex?.Dispose();
{
if (IsFirstInstance)
{
mutex.ReleaseMutex();
}
mutex.Dispose();
}
} }
} }
} }

View File

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

View File

@ -34,7 +34,7 @@ namespace ShareX.Steam
{ {
public static class Launcher 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 ContentExecutablePath = Path.Combine(ContentFolderPath, "ShareX.exe");
private static string ContentSteamFilePath = Path.Combine(ContentFolderPath, "Steam"); private static string ContentSteamFilePath = Path.Combine(ContentFolderPath, "Steam");
private static string UpdatingTempFilePath = Path.Combine(ContentFolderPath, "Updating"); private static string UpdatingTempFilePath = Path.Combine(ContentFolderPath, "Updating");
@ -55,11 +55,7 @@ namespace ShareX.Steam
IsStartupRun = Helpers.IsCommandExist(args, "-silent"); IsStartupRun = Helpers.IsCommandExist(args, "-silent");
#if DEBUG
ShowInApp = true;
#else
ShowInApp = File.Exists(ContentSteamFilePath); ShowInApp = File.Exists(ContentSteamFilePath);
#endif
if (!IsShareXRunning()) 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() private static bool IsShareXRunning()
{ {
// Check ShareX mutex. // Check ShareX mutex.