Merge branch 'master' into net6
This commit is contained in:
14
Pilz.Cryptography/IUniquieIDHost.cs
Normal file
14
Pilz.Cryptography/IUniquieIDHost.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Pilz.Cryptography
|
||||
{
|
||||
/// <summary>
|
||||
/// Can be implemented on objects that provides an UniquieID.
|
||||
/// </summary>
|
||||
public interface IUniquieIDHost
|
||||
{
|
||||
UniquieID ID { get; }
|
||||
}
|
||||
}
|
||||
@@ -2,30 +2,28 @@
|
||||
using Pilz.Cryptography;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Pilz.Json.Converters
|
||||
{
|
||||
public class UniquiIDStringJsonConverter<TargetType> : JsonConverter
|
||||
public class UniquieIDStringJsonConverter : JsonConverter
|
||||
{
|
||||
public static bool EnableCheckForDepricatedTypes { get; set; } = true;
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return typeof(UniquieID<TargetType>).IsAssignableFrom(objectType);
|
||||
return typeof(UniquieID).IsAssignableFrom(objectType);
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
var idString = serializer.Deserialize<string>(reader);
|
||||
UniquieID<TargetType> id;
|
||||
UniquieID id;
|
||||
|
||||
if (existingValue is object)
|
||||
id = (UniquieID<TargetType>)existingValue;
|
||||
if (existingValue is UniquieID existingID && (!EnableCheckForDepricatedTypes || existingID.GetType() == typeof(UniquieID)))
|
||||
id = existingID;
|
||||
else
|
||||
id = new UniquieID<TargetType>();
|
||||
id = new UniquieID();
|
||||
|
||||
id.ID = idString;
|
||||
|
||||
@@ -34,7 +32,7 @@ namespace Pilz.Json.Converters
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
serializer.Serialize(writer, ((UniquieID<TargetType>)value).ID);
|
||||
serializer.Serialize(writer, ((UniquieID)value).ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,31 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Management;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Pilz.Cryptography
|
||||
{
|
||||
public class UniquieID<TargetType> : IUniquieID
|
||||
[JsonConverter(typeof(Json.Converters.UniquieIDStringJsonConverter))]
|
||||
public class UniquieID : IUniquieID
|
||||
{
|
||||
private static int currentSimpleID = 0;
|
||||
protected static ulong currentSimpleID = 0;
|
||||
|
||||
[JsonProperty(nameof(ID))]
|
||||
private string _iD;
|
||||
protected string _iD;
|
||||
|
||||
[JsonIgnore]
|
||||
public string ID
|
||||
public virtual bool SimpleMode { get; }
|
||||
|
||||
[JsonIgnore]
|
||||
public virtual bool GenerateOnGet { get; }
|
||||
|
||||
[JsonIgnore]
|
||||
public virtual bool HasID => !string.IsNullOrEmpty(_iD);
|
||||
|
||||
[JsonIgnore]
|
||||
public virtual string ID
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -29,36 +37,96 @@ namespace Pilz.Cryptography
|
||||
=> _iD = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool HasID { get => !string.IsNullOrEmpty(_iD); }
|
||||
[JsonIgnore]
|
||||
public bool SimpleMode { get; set; } = false;
|
||||
[JsonIgnore]
|
||||
public bool GenerateOnGet { get; set; } = false;
|
||||
|
||||
public UniquieID() : this(false)
|
||||
public UniquieID() : this(UniquieIDGenerationMode.None)
|
||||
{
|
||||
}
|
||||
|
||||
public UniquieID(bool autoGenerate)
|
||||
public UniquieID(UniquieIDGenerationMode mode) : this(mode, false)
|
||||
{
|
||||
if (autoGenerate)
|
||||
}
|
||||
|
||||
public UniquieID(UniquieIDGenerationMode mode, bool simpleMode)
|
||||
{
|
||||
SimpleMode = simpleMode;
|
||||
|
||||
if (mode == UniquieIDGenerationMode.GenerateOnInit)
|
||||
GenerateIfNull();
|
||||
else if (mode == UniquieIDGenerationMode.GenerateOnGet)
|
||||
GenerateOnGet = true;
|
||||
}
|
||||
|
||||
public void Generate()
|
||||
[Obsolete]
|
||||
public UniquieID(bool autoGenerate) : this(autoGenerate ? UniquieIDGenerationMode.GenerateOnInit : UniquieIDGenerationMode.None)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void Generate()
|
||||
{
|
||||
if (SimpleMode)
|
||||
ID = typeof(TargetType).ToString() + currentSimpleID++.ToString();
|
||||
ID = GenerateSimple();
|
||||
else
|
||||
ID = GenerateUniquieID<TargetType>(string.Empty);
|
||||
ID = GenerateDefault();
|
||||
}
|
||||
public void GenerateIfNull()
|
||||
|
||||
protected virtual string GenerateSimple()
|
||||
{
|
||||
return new Random().Next().ToString() + DateTime.Now.ToString("yyyyMMddHHmmssfffffff") + currentSimpleID++.ToString();
|
||||
}
|
||||
|
||||
protected virtual string GenerateDefault()
|
||||
{
|
||||
return GenerateUniquieID<UniquieID>(currentSimpleID++.ToString());
|
||||
}
|
||||
|
||||
public virtual void GenerateIfNull()
|
||||
{
|
||||
if (!HasID) Generate();
|
||||
}
|
||||
|
||||
private static string GenerateUniquieID<T>(string var)
|
||||
public override string ToString()
|
||||
{
|
||||
return ID;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return -1430039477 + EqualityComparer<string>.Default.GetHashCode(_iD);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj is UniquieID iD)
|
||||
{
|
||||
if (ReferenceEquals(obj, iD))
|
||||
return true;
|
||||
else
|
||||
{
|
||||
var leftHasID = iD.HasID;
|
||||
var rightHasID = HasID;
|
||||
|
||||
if (!leftHasID && iD.GenerateOnGet)
|
||||
{
|
||||
iD.Generate();
|
||||
leftHasID = iD.HasID;
|
||||
}
|
||||
|
||||
if (!rightHasID && GenerateOnGet)
|
||||
{
|
||||
Generate();
|
||||
rightHasID = HasID;
|
||||
}
|
||||
|
||||
if (leftHasID && rightHasID)
|
||||
return _iD.Equals(iD._iD);
|
||||
}
|
||||
}
|
||||
|
||||
return base.Equals(obj);
|
||||
}
|
||||
|
||||
#region Statics for Generation
|
||||
|
||||
protected static string GenerateUniquieID<T>(string var)
|
||||
{
|
||||
var sn = TryGetSerialNumberOfFirstHardDrive();
|
||||
var dateTime = DateTime.UtcNow.ToString("yyyyMMddHHmmssfffffff");
|
||||
@@ -92,52 +160,13 @@ namespace Pilz.Cryptography
|
||||
return Win32_PhysicalMedia_SerialNumber;
|
||||
}
|
||||
|
||||
public override string ToString() => ID;
|
||||
#endregion
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
var res = false;
|
||||
var iD = obj as UniquieID<TargetType>;
|
||||
public static implicit operator string(UniquieID id) => id.ID;
|
||||
public static implicit operator UniquieID(string id) => new UniquieID() { ID = id };
|
||||
public static implicit operator UniquieID(int id) => new UniquieID() { ID = Convert.ToString(id) };
|
||||
|
||||
if (iD is object)
|
||||
{
|
||||
if (ReferenceEquals(res, iD))
|
||||
res = true;
|
||||
else
|
||||
{
|
||||
var leftHasID = iD.HasID;
|
||||
var rightHasID = HasID;
|
||||
|
||||
if (!leftHasID && iD.GenerateOnGet)
|
||||
{
|
||||
iD.Generate();
|
||||
leftHasID = iD.HasID;
|
||||
}
|
||||
|
||||
if (!rightHasID && GenerateOnGet)
|
||||
{
|
||||
Generate();
|
||||
rightHasID = HasID;
|
||||
}
|
||||
|
||||
if (leftHasID && rightHasID)
|
||||
res = _iD.Equals(iD._iD);
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return -1430039477 + EqualityComparer<string>.Default.GetHashCode(_iD);
|
||||
}
|
||||
|
||||
public static implicit operator string(UniquieID<TargetType> id) => id.ID;
|
||||
public static implicit operator UniquieID<TargetType>(string id) => new UniquieID<TargetType>() { ID = id };
|
||||
public static implicit operator UniquieID<TargetType>(int id) => new UniquieID<TargetType>() { ID = Convert.ToString(id) };
|
||||
|
||||
public static bool operator ==(UniquieID<TargetType> left, UniquieID<TargetType> right) => left.ID.Equals(right.ID);
|
||||
public static bool operator !=(UniquieID<TargetType> left, UniquieID<TargetType> right) => !left.ID.Equals(right.ID);
|
||||
public static bool operator ==(UniquieID left, UniquieID right) => left.ID.Equals(right.ID);
|
||||
public static bool operator !=(UniquieID left, UniquieID right) => !left.ID.Equals(right.ID);
|
||||
}
|
||||
}
|
||||
|
||||
13
Pilz.Cryptography/UniquieIDGenerationMode.cs
Normal file
13
Pilz.Cryptography/UniquieIDGenerationMode.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Pilz.Cryptography
|
||||
{
|
||||
public enum UniquieIDGenerationMode
|
||||
{
|
||||
None,
|
||||
GenerateOnGet,
|
||||
GenerateOnInit
|
||||
}
|
||||
}
|
||||
26
Pilz.IO/Extensions.cs
Normal file
26
Pilz.IO/Extensions.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using Pilz.Runtime;
|
||||
using Pilz.Win32.Native;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
|
||||
namespace Pilz.IO
|
||||
{
|
||||
public static class Extensions
|
||||
{
|
||||
static readonly int MAX_PATH = 255;
|
||||
|
||||
public static string GetExecutablePath(bool checkRealOS = false)
|
||||
{
|
||||
if (RuntimeInformationsEx.IsOSPlatform(OSType.Windows, checkRealOS))
|
||||
{
|
||||
var sb = new StringBuilder(MAX_PATH);
|
||||
Kernel32.GetModuleFileName(IntPtr.Zero, sb, MAX_PATH);
|
||||
return sb.ToString();
|
||||
}
|
||||
else
|
||||
return Process.GetCurrentProcess().MainModule.FileName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,4 +86,8 @@
|
||||
<LastGenOutput>Application.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Pilz.Win32\Pilz.Win32.vbproj" />
|
||||
<ProjectReference Include="..\Pilz\Pilz.vbproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -644,7 +644,7 @@ Public Class PaintingControl
|
||||
End Sub
|
||||
|
||||
Private Sub CheckMouseWheel(sender As Object, e As MouseEventArgs) Handles Me.MouseWheel
|
||||
If pressedControl Then
|
||||
If pressedAlt Then
|
||||
Dim val As Single = e.Delta / 120 / 10
|
||||
ZoomFactor = New SizeF(Math.Max(ZoomFactor.Width + val, 0.25), Math.Max(ZoomFactor.Height + val, 0.25))
|
||||
Refresh()
|
||||
|
||||
16
Pilz.Win32/Native/Kernel32.vb
Normal file
16
Pilz.Win32/Native/Kernel32.vb
Normal file
@@ -0,0 +1,16 @@
|
||||
Imports System.Runtime.InteropServices
|
||||
Imports System.Text
|
||||
|
||||
Namespace Native
|
||||
|
||||
Public Class Kernel32
|
||||
|
||||
Private Const LIB_KERNEL32 As String = "kernel32.dll"
|
||||
|
||||
<DllImport(LIB_KERNEL32)>
|
||||
Public Shared Function GetModuleFileName(hModule As IntPtr, lpFilename As StringBuilder, nSize As Integer) As UInteger
|
||||
End Function
|
||||
|
||||
End Class
|
||||
|
||||
End Namespace
|
||||
@@ -4,11 +4,13 @@ Namespace Native
|
||||
|
||||
Public Class User32
|
||||
|
||||
<DllImport("user32")>
|
||||
Private Const LIB_USER32 As String = "user32.dll"
|
||||
|
||||
<DllImport(LIB_USER32)>
|
||||
Public Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef r As RECT) As Boolean
|
||||
End Function
|
||||
|
||||
<DllImport("user32.dll")>
|
||||
<DllImport(LIB_USER32)>
|
||||
Public Shared Function ChildWindowFromPointEx(ByVal hWndParent As IntPtr, ByVal pt As POINT, ByVal uFlags As UInteger) As IntPtr
|
||||
End Function
|
||||
|
||||
|
||||
@@ -72,6 +72,10 @@ Namespace Runtime
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Function IsOSPlatform(os As OSType, checkRealOS As Boolean) As Boolean
|
||||
Return If(checkRealOS, RealOSType, OSType) = os
|
||||
End Function
|
||||
|
||||
End Module
|
||||
|
||||
End Namespace
|
||||
|
||||
Reference in New Issue
Block a user