mirror of
https://github.com/2dust/v2rayN.git
synced 2026-02-28 13:13:04 +00:00
Some checks failed
release Linux / build (Release) (push) Has been cancelled
release macOS / build (Release) (push) Has been cancelled
release Windows desktop (Avalonia UI) / build (Release) (push) Has been cancelled
release Windows / build (Release) (push) Has been cancelled
release Linux / rpm (push) Has been cancelled
Renamed FileManager to FileUtils and updated all references accordingly. Moved SemanticVersion to the Models namespace. Replaced WindowsJob with WindowsJobService, relocating and updating the implementation. Updated usages in CoreManager and related classes to use the new service and utility names. These changes improve code organization and naming consistency.
186 lines
4.2 KiB
C#
186 lines
4.2 KiB
C#
namespace ServiceLib.Models;
|
|
|
|
public class SemanticVersion
|
|
{
|
|
private readonly int major;
|
|
private readonly int minor;
|
|
private readonly int patch;
|
|
private readonly string version;
|
|
|
|
public SemanticVersion(int major, int minor, int patch)
|
|
{
|
|
this.major = major;
|
|
this.minor = minor;
|
|
this.patch = patch;
|
|
version = $"{major}.{minor}.{patch}";
|
|
}
|
|
|
|
public SemanticVersion(string? version)
|
|
{
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(version))
|
|
{
|
|
major = 0;
|
|
minor = 0;
|
|
patch = 0;
|
|
return;
|
|
}
|
|
this.version = version.RemovePrefix('v');
|
|
|
|
var parts = this.version.Split('.');
|
|
if (parts.Length == 2)
|
|
{
|
|
major = int.Parse(parts.First());
|
|
minor = int.Parse(parts.Last());
|
|
patch = 0;
|
|
}
|
|
else if (parts.Length is 3 or 4)
|
|
{
|
|
major = int.Parse(parts[0]);
|
|
minor = int.Parse(parts[1]);
|
|
patch = int.Parse(parts[2]);
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentException("Invalid version string");
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
major = 0;
|
|
minor = 0;
|
|
patch = 0;
|
|
}
|
|
}
|
|
|
|
public override bool Equals(object? obj)
|
|
{
|
|
if (obj is SemanticVersion other)
|
|
{
|
|
return major == other.major && minor == other.minor && patch == other.patch;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return major.GetHashCode() ^ minor.GetHashCode() ^ patch.GetHashCode();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Use ToVersionString(string? prefix) instead if possible.
|
|
/// </summary>
|
|
/// <returns>major.minor.patch</returns>
|
|
public override string ToString()
|
|
{
|
|
return version;
|
|
}
|
|
|
|
public string ToVersionString(string? prefix = null)
|
|
{
|
|
if (prefix == null)
|
|
{
|
|
return version;
|
|
}
|
|
else
|
|
{
|
|
return $"{prefix}{version}";
|
|
}
|
|
}
|
|
|
|
public static bool operator ==(SemanticVersion v1, SemanticVersion v2)
|
|
{ return v1.Equals(v2); }
|
|
|
|
public static bool operator !=(SemanticVersion v1, SemanticVersion v2)
|
|
{ return !v1.Equals(v2); }
|
|
|
|
public static bool operator >=(SemanticVersion v1, SemanticVersion v2)
|
|
{ return v1.GreaterEquals(v2); }
|
|
|
|
public static bool operator <=(SemanticVersion v1, SemanticVersion v2)
|
|
{ return v1.LessEquals(v2); }
|
|
|
|
#region Private
|
|
|
|
private bool GreaterEquals(SemanticVersion other)
|
|
{
|
|
if (major < other.major)
|
|
{
|
|
return false;
|
|
}
|
|
else if (major > other.major)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
if (minor < other.minor)
|
|
{
|
|
return false;
|
|
}
|
|
else if (minor > other.minor)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
if (patch < other.patch)
|
|
{
|
|
return false;
|
|
}
|
|
else if (patch > other.patch)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool LessEquals(SemanticVersion other)
|
|
{
|
|
if (major < other.major)
|
|
{
|
|
return true;
|
|
}
|
|
else if (major > other.major)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
if (minor < other.minor)
|
|
{
|
|
return true;
|
|
}
|
|
else if (minor > other.minor)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
if (patch < other.patch)
|
|
{
|
|
return true;
|
|
}
|
|
else if (patch > other.patch)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion Private
|
|
}
|