11 Commits
Author SHA1 Message Date
BlubbFish 61f26e69af [1.6.0] HttpEndpoint added 2022-01-09 23:01:53 +01:00
BlubbFish 528dcabf59 make mirror on github.com 2021-08-22 00:12:41 +02:00
BlubbFish baed3c9e08 Add GetEvent so you can call events by string
Add OwnSingeton class
2021-04-10 01:18:21 +02:00
BlubbFish edb3069bb0 Make netcore as default, also using 3.1 now 2021-01-08 23:50:43 +01:00
BlubbFish a5249f8fac Update CmdArgs to have more flexibility 2020-05-22 13:20:47 +02:00
BlubbFish b4e17972b9 Add field helper 2019-12-25 23:48:26 +01:00
BlubbFish 65fdcdc12c add file Changelog.md 2019-12-01 17:54:32 +01:00
BlubbFish 69f5534523 prevent to display things double in console 2019-11-29 14:45:42 +01:00
BlubbFish 4296649dca ups 2019-11-24 20:10:26 +01:00
BlubbFish 126632b4c9 Some issues with core 2019-11-24 19:00:17 +01:00
BlubbFish 2b40c85203 Refactoring and add net core project 2019-11-24 18:29:02 +01:00
21 changed files with 921 additions and 645 deletions
+173
View File
@@ -0,0 +1,173 @@
# Changelog
## 1.6.0 - 2022-01-09 - HttpEndpoint added
### New Features
* Add HttpEndpoint
### Bugfixes
### Changes
* Change Readme that its link to the normal repo
* Codingstyles
* Fixing history
## 1.5.0 - 2021-04-10 - Add GetEvent so you can call events by string; Add OwnSingeton class
### New Features
* More allowed Chars for Chapters in inifile
* Add Contribution, Licence and readme
* Adding netcore
* Add changelog
* Filedhelper to helpter
* CmdArgs improvements
* Make netcore to default
* Add OwnSingleton
### Bugfixes
* WriteLine in Programmlogger sometimes make nonesense
* Writeline event are wrong
### Changes
* Remove the binary files
* Move all Classes to subfolder
* Codingstyles
## 1.4.0 - 2018-11-27 - Add Helper to Utils
### New Features
* Add Helper
### Bugfixes
### Changes
## 1.1.3 - 2018-10-02 - Improve CmdArgs
### New Features
* CmdArgs now throw extensions if there is something wrong
### Bugfixes
### Changes
## 1.1.2 - 2018-09-11 - Tiny Codingstyles
### New Features
### Bugfixes
### Changes
* Codingstyles
## 1.1.1 - 2018-05-29 - ProgrammLogger neets to cleanup
### New Features
* Delete the Mess behind
### Bugfixes
### Changes
## 1.1.0 - 2018-05-15 - ProgrammLogger
### New Features
* Add Programmlogger
### Bugfixes
### Changes
* Codingstyles
## 1.0.7.0 - 2018-05-08 - Yet another IniReader improvemnt round again
### New Features
### Bugfixes
### Changes
* Move searchpath to its own function
## 1.0.6.0 - 2017-12-22 - Yet another IniReader improvemnt round
### New Features
* Posibillity to add complete sections to an ini file
### Bugfixes
### Changes
## 1.0.5.2 - 2017-09-26 - And Improve IniReader again
### New Features
* IniReader returns the Sections with or without Brackets now
### Bugfixes
### Changes
## 1.0.5.1 - 2017-09-24 - Improve IniReader again
### New Features
### Bugfixes
* IniReader now supports umlaute
* IniReader matches with Brackets and without
### Changes
## 1.0.5.0 - 2017-08-09 - Improve IniReader
### New Features
* IniReader can now return a whole segemt
### Bugfixes
### Changes
## 1.0.4.1 - 2017-08-08 - Cleanup OwnView
### New Features
### Bugfixes
### Changes
* remove Init from OwnView
## 1.0.4.0 - 2017-04-30 - More Updater
### New Features
* continue Development of Updater
### Bugfixes
### Changes
## 1.0.3.2 - 2017-04-26 - Next Updater
### New Features
* continue Development of Updater
### Bugfixes
### Changes
## 1.0.3.1 - 2017-04-25 - EventArgsHelper
### New Features
* Add EventArgsHelper
### Bugfixes
### Changes
* Codingstyles
* Moves LogEventArgs to EventArgsHelper
* Moves UpdaterEventArgs to EventArgsHelper
## 1.0.2.6 - 2017-04-24 - Better Updater
### New Features
* Add Updater
* Add Disposable Interface
* Using LogEventArgs now for Logging
* Make UpdaterEventArgs as Child of EventArgs
* Updater now using Ownobject as Parent
* Add VersionsInfo to Updater
* Updater spawns a Background Task to Check for Updates
### Bugfixes
### Changes
## 1.0.2.5 - 2017-04-19 - Logging in OwnObject
### New Features
* Add Logging to OwnObject
### Bugfixes
* Avoid nullpointer exception in FileMutex
### Changes
* Codingstyles
## 1.0.2.3 - 2017-04-16 - OwnModel better
### New Features
* Add Remove observer on OwnModel
### Bugfixes
### Changes
* Codingstyles
## 1.0.2.2 - 2017-03-09 - Make it nice
### New Features
### Bugfixes
### Changes
* Codingstyles
## 1.0.2.1 - 2017-03-09 - Filemutex
### New Features
* Add Filemutex
### Bugfixes
* Filelogger backet on wrong pos
### Changes
## 1.0.0.1 - 2016-12-03 - Filelogger improvements
### New Features
* Check Directory and if not exist add it
* Now logs with timestamp
* Can select logdir
* Add Abstract dispose to OwnController
### Bugfixes
### Changes
## 1.0.0.0 - 2015-11-16 - Init
### New Features
* Add CmdArgs, FileLogger, IniReader, OwnController, OwnModel, OwnObject, OwnView,
### Bugfixes
### Changes
+2
View File
@@ -1,2 +1,4 @@
# BlubbFish.Utils (Utils)
Library containing helpfull utils
Maybe you find this Repo on Github. This is a mirror from [here](https://git.blubbfish.net/vs_utils/Utils).
+22
View File
@@ -0,0 +1,22 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29215.179
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "Utils\Utils-4.7.1.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
+11 -6
View File
@@ -1,7 +1,9 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "Utils\Utils.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}"
# Visual Studio Version 16
VisualStudioVersion = 16.0.29215.179
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "Utils\Utils.csproj", "{A289C67C-BC49-46A0-8657-B444C605079E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -9,12 +11,15 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.Build.0 = Release|Any CPU
{A289C67C-BC49-46A0-8657-B444C605079E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A289C67C-BC49-46A0-8657-B444C605079E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A289C67C-BC49-46A0-8657-B444C605079E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A289C67C-BC49-46A0-8657-B444C605079E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A7224DC4-69F1-4273-BE78-3D9DC80A28C5}
EndGlobalSection
EndGlobal
+22 -8
View File
@@ -14,19 +14,25 @@ namespace BlubbFish.Utils
#region Classes
public struct VaildArguments
{
public VaildArguments(ArgLength length, Boolean required)
public VaildArguments(ArgLength length, Boolean required, String @default = "", String description = "")
{
this.Required = required;
this.Length = length;
this.Description = description;
this.@Default = @default;
}
public VaildArguments(ArgLength length)
public VaildArguments(ArgLength length, String @default = "", String description = "")
{
this.Required = false;
this.Length = length;
this.Description = description;
this.@Default = @default;
}
public ArgLength Length { get; private set; }
public Boolean Required { get; private set; }
public String Description { get; private set; }
public String Default { get; private set; }
}
private struct ArgTouple
{
@@ -107,16 +113,18 @@ namespace BlubbFish.Utils
this.argList.Add(arg);
}
}
foreach(KeyValuePair<String, VaildArguments> item in this.argsPosible) {
if(!this.HasArgumentType(item.Key) && item.Value.Length == ArgLength.Touple && item.Value.Default != "") {
this.argList.Add(new ArgTouple(item.Key, item.Value.Default));
}
}
}
/// <summary>
/// Menge der angegebenen Komandozeilen-Argumente
/// </summary>
/// <returns>Menge</returns>
public Int32 GetArgsLength()
{
return this.argList.Count;
}
public Int32 GetArgsLength() => this.argList.Count;
/// <summary>
/// Gibt zurück ob ein Argument angegeben wurde
@@ -165,7 +173,10 @@ namespace BlubbFish.Utils
String opt = "";
foreach (KeyValuePair<String, VaildArguments> item in this.argsPosible) {
if (item.Value.Required) {
req += item.Key + " " + ((item.Value.Length == ArgLength.Touple) ? " [data]\n" : "\n");
req += item.Key + " " + ((item.Value.Length == ArgLength.Touple) ? (item.Value.Default != "" ? " " + item.Value.Default + "\n" : " [data]\n") : "\n");
if(item.Value.Description != "") {
req += "\t" + item.Value.Description + "\n";
}
}
}
if (req != "") {
@@ -173,7 +184,10 @@ namespace BlubbFish.Utils
}
foreach (KeyValuePair<String, VaildArguments> item in this.argsPosible) {
if (!item.Value.Required) {
opt += item.Key + " " + ((item.Value.Length == ArgLength.Touple) ? " [data]\n" : "\n");
opt += item.Key + " " + ((item.Value.Length == ArgLength.Touple) ? (item.Value.Default != "" ? " " + item.Value.Default + "\n" : " [data]\n") : "\n");
if (item.Value.Description != "") {
opt += "\t" + item.Value.Description + "\n";
}
}
}
if (opt != "") {
+1 -3
View File
@@ -11,9 +11,7 @@ namespace BlubbFish.Utils {
}
public class UpdaterFailEventArgs : EventArgs {
public UpdaterFailEventArgs(Exception e) {
this.Except = e;
}
public UpdaterFailEventArgs(Exception e) => this.Except = e;
public Exception Except { get; private set; }
}
+6 -9
View File
@@ -9,7 +9,7 @@ namespace BlubbFish.Utils
{
public class FileLogger
{
private static Dictionary<String, FileLogger> instances = new Dictionary<String, FileLogger>();
private static readonly Dictionary<String, FileLogger> instances = new Dictionary<String, FileLogger>();
private static String logDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar;
private readonly StreamWriter file;
private FileLogger(String filename, Boolean append)
@@ -18,7 +18,7 @@ namespace BlubbFish.Utils
if (!File.Exists(filename)) {
String folder = Path.GetDirectoryName(Path.GetFullPath(filename));
if (!Directory.Exists(folder)) {
Directory.CreateDirectory(folder);
_ = Directory.CreateDirectory(folder);
}
}
this.file = new StreamWriter(filename, append, Encoding.UTF8) {
@@ -40,11 +40,11 @@ namespace BlubbFish.Utils
if (Directory.Exists(v)) {
logDir = v;
} else {
Directory.CreateDirectory(v);
_ = Directory.CreateDirectory(v);
logDir = v;
}
if (logDir.Substring(logDir.Length - 1) != Path.DirectorySeparatorChar.ToString()) {
logDir = logDir + Path.DirectorySeparatorChar;
if (logDir[^1..] != Path.DirectorySeparatorChar.ToString()) {
logDir += Path.DirectorySeparatorChar;
}
}
@@ -59,9 +59,6 @@ namespace BlubbFish.Utils
this.file.WriteLine(text);
this.file.Flush();
}
public void SetLine(String text, DateTime d)
{
this.SetLine(d.ToString("[yyyy-MM-dd HH:mm:ss.ffff] ") + text);
}
public void SetLine(String text, DateTime d) => this.SetLine(d.ToString("[yyyy-MM-dd HH:mm:ss.ffff] ") + text);
}
}
+5 -3
View File
@@ -25,7 +25,9 @@ namespace BlubbFish.Utils
public void SetName(String name)
{
String path = AppDomain.CurrentDomain.BaseDirectory;
this.filename = path + String.Join(String.Empty, Array.ConvertAll(new SHA512Managed().ComputeHash(Encoding.UTF8.GetBytes(name)), b => b.ToString("X2"))) + ".lock.txt";
SHA512Managed sha = new SHA512Managed();
this.filename = path + String.Join(String.Empty, Array.ConvertAll(sha.ComputeHash(Encoding.UTF8.GetBytes(name)), b => b.ToString("X2"))) + ".lock.txt";
sha.Dispose();
}
public Boolean Create()
@@ -35,7 +37,7 @@ namespace BlubbFish.Utils
}
this.file = new StreamWriter(this.filename);
InitFile();
this.InitFile();
return File.Exists(this.filename) && this.file != null;
}
@@ -64,7 +66,7 @@ namespace BlubbFish.Utils
}
public void Dispose() {
Dispose(true);
this.Dispose(true);
GC.SuppressFinalize(this);
}
}
+21 -26
View File
@@ -17,10 +17,7 @@ namespace BlubbFish.Utils {
public static Object GetProperty(this Object o, String name) {
PropertyInfo prop = o.GetType().GetProperty(name);
if (prop.CanRead) {
return prop.GetValue(o);
}
return null;
return prop.CanRead ? prop.GetValue(o) : null;
}
public static void SetProperty(this Object o, String name, String value) {
@@ -47,6 +44,23 @@ namespace BlubbFish.Utils {
}
#endregion
#region FieldHelper
public static Object GetField(this Object o, String name) {
FieldInfo field = o.GetType().GetField(name);
return field.IsPublic ? field.GetValue(o) : null;
}
public static Object GetField(this Type o, String name) {
FieldInfo field = o.GetField(name);
return field.IsPublic ? field.GetValue(o) : null;
}
public static T GetEvent<T>(this Object o, String name) {
FieldInfo field = o.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic);
return (T)field?.GetValue(o);
}
#endregion
#region InterfaceHelper
public static Boolean HasInterface(this Type o, Type interf) {
foreach (Type item in o.GetInterfaces()) {
@@ -57,36 +71,17 @@ namespace BlubbFish.Utils {
return false;
}
public static Boolean HasAbstract(this Type o, Type type) {
if (o.BaseType == type) {
return true;
}
return false;
}
public static Boolean HasAbstract(this Type o, Type type) => o.BaseType == type;
#endregion
#region StringHelper
public static String GetEnumDescription(Enum value) {
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes != null && attributes.Length > 0) {
return attributes[0].Description;
} else {
return value.ToString();
}
return attributes != null && attributes.Length > 0 ? attributes[0].Description : value.ToString();
}
public static String ToUpperLower(this String s) {
if (s.Length == 0) {
return "";
}
if (s.Length == 1) {
return s.ToUpper();
}
return s[0].ToString().ToUpper() + s.Substring(1).ToLower();
}
public static String ToUpperLower(this String s) => s.Length == 0 ? "" : s.Length == 1 ? s.ToUpper() : s[0].ToString().ToUpper() + s[1..].ToLower();
public static void WriteError(String text) {
Console.ForegroundColor = ConsoleColor.Red;
+59
View File
@@ -0,0 +1,59 @@
using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
namespace BlubbFish.Utils {
public class HttpEndpoint {
private readonly HttpClient client = new HttpClient();
private readonly String server = "";
public enum RequestMethod {
GET,
POST,
PUT
}
public HttpEndpoint(String server, String auth = null) {
this.server = server;
if(auth != null) {
this.client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(auth);
}
}
public HttpEndpoint(String server, (String scheme, String parameter) auth) {
this.server = server;
this.client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(auth.scheme, auth.parameter);
}
public async Task<String> RequestString(String address, String json = "", Boolean withoutput = true, RequestMethod method = RequestMethod.GET) {
String ret = null;
try {
HttpResponseMessage response = null;
if(method == RequestMethod.POST || method == RequestMethod.PUT) {
HttpContent content = new StringContent(json);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
//content.Headers.Add("Content-Type", "application/json");
if(method == RequestMethod.POST) {
response = await this.client.PostAsync(this.server + address, content);
} else if(method == RequestMethod.PUT) {
response = await this.client.PutAsync(this.server + address, content);
}
content.Dispose();
} else if(method == RequestMethod.GET) {
response = await this.client.GetAsync(this.server + address);
}
if(!response.IsSuccessStatusCode) {
throw new Exception(response.StatusCode + ": " + response.ReasonPhrase);
}
if(withoutput && response != null) {
ret = await response.Content.ReadAsStringAsync();
}
} catch(Exception e) {
throw new WebException(String.Format("Error while opening resource: \"{0}\" Method {1} Data {2} Fehler {3}", this.server + address, method, json, e.Message));
}
return ret;
}
}
}
+17 -32
View File
@@ -10,15 +10,13 @@ namespace BlubbFish.Utils {
private Dictionary<String, Dictionary<String, String>> inifile;
private readonly FileSystemWatcher k;
private readonly String filename;
private static List<String> search_path = new List<String>() {
private static readonly List<String> search_path = new List<String>() {
Directory.GetCurrentDirectory()
};
private static Dictionary<String, InIReader> instances = new Dictionary<String, InIReader>();
private static readonly Dictionary<String, InIReader> instances = new Dictionary<String, InIReader>();
public static void SetSearchPath(List<String> directorys) {
search_path.AddRange(directorys);
}
public static void SetSearchPath(List<String> directorys) => search_path.AddRange(directorys);
public static Boolean ConfigExist(String filename) {
foreach (String path in search_path) {
@@ -54,7 +52,7 @@ namespace BlubbFish.Utils {
throw new ArgumentException(filename + " not found!");
}
this.k.Changed += new FileSystemEventHandler(this.ReadAgain);
LoadFile();
this.LoadFile();
}
/// <summary>
@@ -70,10 +68,7 @@ namespace BlubbFish.Utils {
return instances[filename];
}
private void ReadAgain(Object sender, EventArgs e)
{
this.LoadFile();
}
private void ReadAgain(Object sender, EventArgs e) => this.LoadFile();
private void LoadFile()
{
@@ -101,7 +96,7 @@ namespace BlubbFish.Utils {
} else {
if (line != "" && cap != "") {
String key = line.Substring(0, line.IndexOf('='));
String value = line.Substring(line.IndexOf('=') + 1);
String value = line[(line.IndexOf('=') + 1)..];
sub.Add(key, value);
}
}
@@ -123,7 +118,7 @@ namespace BlubbFish.Utils {
} else {
List<String> ret = new List<String>();
foreach (String item in this.inifile.Keys) {
ret.Add(item.Substring(1, item.Length - 2));
ret.Add(item[1..^1]);
}
return ret;
}
@@ -147,15 +142,9 @@ namespace BlubbFish.Utils {
this.Changed();
}
public Dictionary<String, String> GetSection(String section) {
if(this.inifile.Keys.Contains(section)) {
return this.inifile[section];
}
if(this.inifile.Keys.Contains("["+section+"]")) {
return this.inifile["[" + section + "]"];
}
return new Dictionary<String, String>();
}
public Dictionary<String, String> GetSection(String section) => this.inifile.Keys.Contains(section) ?
this.inifile[section] : this.inifile.Keys.Contains("[" + section + "]") ?
this.inifile["[" + section + "]"] : new Dictionary<String, String>();
/// <summary>
/// Gibt einen einzelnen Wert zurück
@@ -168,12 +157,7 @@ namespace BlubbFish.Utils {
if (!section.StartsWith("[")) {
section = "[" + section + "]";
}
if (this.inifile.Keys.Contains(section)) {
if (this.inifile[section].Keys.Contains(key)) {
return this.inifile[section][key];
}
}
return null;
return this.inifile.Keys.Contains(section) && this.inifile[section].Keys.Contains(key) ? this.inifile[section][key] : null;
}
/// <summary>
@@ -205,8 +189,8 @@ namespace BlubbFish.Utils {
private void Changed()
{
this.k.Changed -= null;
SaveSettings();
LoadFile();
this.SaveSettings();
this.LoadFile();
this.k.Changed += new FileSystemEventHandler(this.ReadAgain);
}
@@ -215,7 +199,7 @@ namespace BlubbFish.Utils {
StreamWriter file = new StreamWriter(this.filename);
file.BaseStream.SetLength(0);
file.BaseStream.Flush();
file.BaseStream.Seek(0, SeekOrigin.Begin);
_ = file.BaseStream.Seek(0, SeekOrigin.Begin);
foreach (KeyValuePair<String, Dictionary<String, String>> cap in this.inifile) {
file.WriteLine(cap.Key);
foreach (KeyValuePair<String, String> sub in cap.Value) {
@@ -258,10 +242,11 @@ namespace BlubbFish.Utils {
if (!this.inifile.Keys.Contains(name)) {
return false;
}
this.inifile.Remove(name);
_ = this.inifile.Remove(name);
this.Changed();
return false;
}
protected virtual void Dispose(Boolean disposing) {
if (disposing) {
this.k.Dispose();
@@ -269,7 +254,7 @@ namespace BlubbFish.Utils {
}
public void Dispose() {
Dispose(true);
this.Dispose(true);
GC.SuppressFinalize(this);
}
}
+2 -13
View File
@@ -1,21 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BlubbFish.Utils
{
namespace BlubbFish.Utils {
public abstract class OwnController
{
/// <summary>
/// Führt den Controller aus.
/// </summary>
public void Execute()
{
this.Init();
}
public void Execute() => this.Init();
abstract protected void Init();
abstract public void Dispose();
}
+7 -22
View File
@@ -1,25 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlubbFish.Utils
{
namespace BlubbFish.Utils {
public abstract class OwnModel<T> where T : class
{
private static readonly Lazy<T> _instance = new Lazy<T>(() => CreateInstanceOfT());
private readonly List<OwnView> observer = new List<OwnView>();
public static T Instance
{
get {
return _instance.Value;
}
}
private static T CreateInstanceOfT()
{
return Activator.CreateInstance(typeof(T), true) as T;
}
public static T Instance => _instance.Value;
private static T CreateInstanceOfT() => Activator.CreateInstance(typeof(T), true) as T;
public void SetObserver(OwnView view)
{
@@ -27,13 +15,10 @@ namespace BlubbFish.Utils
view.Update();
}
public void RemoveObserver(OwnView view) {
this.observer.Remove(view);
}
protected void Update()
{
this.observer.ForEach(delegate (OwnView view) { view.Update(); });
}
public void RemoveObserver(OwnView view) => _ = this.observer.Remove(view);
protected void Update() => this.observer.ForEach(delegate (OwnView view) {
view.Update();
});
abstract protected void Init();
abstract public void Dispose();
}
+14 -21
View File
@@ -21,21 +21,17 @@ namespace BlubbFish.Utils
/// Formates a LogMessage to a String
/// </summary>
/// <returns>Formated String</returns>
public override String ToString() {
return "[" + this.Date.ToString("R") + "]: " + this.Level.ToString() + " "+ this.Location + ", " + this.Message;
}
public override String ToString() => "[" + this.Date.ToString("R") + "]: " + this.Level.ToString() + " " + this.Location + ", " + this.Message;
/// <summary>
/// Formates a LogMessage to a String
/// </summary>
/// <param name="classNames">Enables the output of the location</param>
/// <param name="timeStamps">Enables the output of the date</param>
/// <returns>Formated String</returns>
public String ToString(Boolean classNames, Boolean timeStamps) {
return (timeStamps ? "[" + this.Date.ToString("R") + "]: " + this.Level.ToString() + " " : "") + (classNames ? this.Location + ", " : "") + this.Message;
}
public String ToString(Boolean classNames, Boolean timeStamps) => (timeStamps ? "[" + this.Date.ToString("R") + "]: " + this.Level.ToString() + " " : "") + (classNames ? this.Location + ", " : "") + this.Message;
}
private List<LogObject> loglist = new List<LogObject>();
private readonly List<LogObject> loglist = new List<LogObject>();
public delegate void LogEvent(Object sender, LogEventArgs e);
public enum LogLevel : Int32 {
@@ -72,10 +68,7 @@ namespace BlubbFish.Utils
/// <param name="location">Where the event arrives</param>
/// <param name="message">The logmessage itselfs</param>
/// <param name="level">Level of the message</param>
protected void AddLog(String location, String message, LogLevel level)
{
this.AddLog(location, message, level, DateTime.Now);
}
protected void AddLog(String location, String message, LogLevel level) => this.AddLog(location, message, level, DateTime.Now);
/// <summary>
/// Put a message in the log
@@ -87,20 +80,20 @@ namespace BlubbFish.Utils
protected void AddLog(String location, String message, LogLevel level, DateTime date)
{
LogEventArgs e = new LogEventArgs(location, message, level, date);
if (EventDebug != null && level >= LogLevel.Debug) {
EventDebug(this, e);
if (level >= LogLevel.Debug) {
EventDebug?.Invoke(this, e);
}
if (EventNotice != null && level >= LogLevel.Notice) {
EventNotice(this, e);
if (level >= LogLevel.Notice) {
EventNotice?.Invoke(this, e);
}
if (EventInfo != null && level >= LogLevel.Info) {
EventInfo(this, e);
if (level >= LogLevel.Info) {
EventInfo?.Invoke(this, e);
}
if (EventWarn != null && level >= LogLevel.Warn) {
EventWarn(this, e);
if (level >= LogLevel.Warn) {
EventWarn?.Invoke(this, e);
}
if (EventError != null && level >= LogLevel.Error) {
EventError(this, e);
if (level >= LogLevel.Error) {
EventError?.Invoke(this, e);
}
EventLog?.Invoke(this, e);
+11
View File
@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BlubbFish.Utils {
public abstract class OwnSingeton<T> where T : class {
private static readonly Lazy<T> _instance = new Lazy<T>(() => CreateInstanceOfT());
public static T Instance => _instance.Value;
private static T CreateInstanceOfT() => Activator.CreateInstance(typeof(T), true) as T;
}
}
+1 -7
View File
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlubbFish.Utils {
namespace BlubbFish.Utils {
public abstract class OwnView {
protected OwnView() { }
+19 -39
View File
@@ -1,8 +1,5 @@
using System;
using System.IO;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Text;
namespace BlubbFish.Utils {
@@ -35,17 +32,10 @@ namespace BlubbFish.Utils {
}
private Boolean IsWritable(String filename) {
FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename);
PermissionSet p = new PermissionSet(PermissionState.None);
p.AddPermission(writePermission);
if (!p.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet)) {
return false;
}
try {
using (FileStream fstream = new FileStream(filename, FileMode.Append))
using (TextWriter writer = new StreamWriter(fstream)) {
writer.Write("");
}
using FileStream fstream = new FileStream(filename, FileMode.Append);
using TextWriter writer = new StreamWriter(fstream);
writer.Write("");
} catch (UnauthorizedAccessException) {
return false;
}
@@ -75,13 +65,13 @@ namespace BlubbFish.Utils {
private void DisattachToFw() {
this.stdout.WriteEvent -= this.fw.Write;
this.stdout.WriteLineEvent -= this.fw.WriteLine;
this.errout.WriteEvent -= this.fw.WriteLine;
this.errout.WriteEvent -= this.fw.Write;
this.errout.WriteLineEvent -= this.fw.WriteLine;
}
private void AttachToFw() {
this.stdout.WriteEvent += this.fw.Write;
this.stdout.WriteLineEvent += this.fw.WriteLine;
this.errout.WriteEvent += this.fw.WriteLine;
this.errout.WriteEvent += this.fw.Write;
this.errout.WriteLineEvent += this.fw.WriteLine;
}
}
@@ -91,11 +81,11 @@ namespace BlubbFish.Utils {
public FileWriter(String path) : base(path) {
}
public override Encoding Encoding { get { return Encoding.UTF8; } }
public override Boolean AutoFlush { get { return true; } set { base.AutoFlush = value; } }
public override Encoding Encoding => Encoding.UTF8;
public override Boolean AutoFlush { get => true; set => base.AutoFlush = value; }
private void Write(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) {
String text = "";
String text;
if (this.newline) {
text = "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value;
this.newline = false;
@@ -108,25 +98,16 @@ namespace BlubbFish.Utils {
}
private void WriteLine(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) {
String text = "";
if (this.newline) {
text = "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value;
} else {
text = value;
}
String text = this.newline ? "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value : value;
this.newline = true;
origstream.WriteLine(text);
base.WriteLine(text);
base.Flush();
}
internal void Write(Object sender, ConsoleWriterEventArgs e) {
this.Write(e.Value, e.Writer, e.StreamType);
}
internal void Write(Object sender, ConsoleWriterEventArgs e) => this.Write(e.Value, e.Writer, e.StreamType);
internal void WriteLine(Object sender, ConsoleWriterEventArgs e) {
this.WriteLine(e.Value, e.Writer, e.StreamType);
}
internal void WriteLine(Object sender, ConsoleWriterEventArgs e) => this.WriteLine(e.Value, e.Writer, e.StreamType);
}
internal class ConsoleWriterEventArgs : EventArgs {
@@ -155,15 +136,14 @@ namespace BlubbFish.Utils {
this.streamtype = type;
}
public override Encoding Encoding { get { return Encoding.UTF8; } }
public override void Write(String value) {
this.WriteEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype));
base.Write(value);
}
public override void WriteLine(String value) {
this.WriteLineEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype));
base.WriteLine(value);
}
public override Encoding Encoding => Encoding.UTF8;
public override void Write(String value) => this.WriteEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype));
//base.Write(value);
public override void WriteLine(String value) => this.WriteLineEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype));
//base.WriteLine(value);
public event EventHandler<ConsoleWriterEventArgs> WriteEvent;
public event EventHandler<ConsoleWriterEventArgs> WriteLineEvent;
}
+13 -8
View File
@@ -1,18 +1,21 @@
using System.Reflection;
using System.Runtime.CompilerServices;
#if !NETCOREAPP
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die mit einer Assembly verknüpft sind.
[assembly: AssemblyTitle("Utils")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyDescription("Provides useful classes for other projects")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyCompany("BlubbFish")]
[assembly: AssemblyProduct("Utils")]
[assembly: AssemblyCopyright("Copyright © 2014 - 02.10.2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCopyright("Copyright © BlubbFish 2014 - 10.04.2021")]
[assembly: AssemblyTrademark("BlubbFish")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("de-DE")]
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
@@ -32,9 +35,11 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.4.0")]
[assembly: AssemblyFileVersion("1.4.0")]
[assembly: AssemblyVersion("1.5.0")]
[assembly: AssemblyFileVersion("1.5.0")]
#endif
/**
* 1.5.0 Add GetEvent so you can call events by string; Add OwnSingeton class
* 1.4.0 Add Helper to Utils
*/
+5 -2
View File
@@ -58,7 +58,7 @@ namespace BlubbFish.Utils {
while (this.t.ThreadState == ThreadState.Running) { }
if(exceuteUpdate) {
if(File.Exists("update.bat")) {
System.Diagnostics.Process.Start("update.bat");
_ = System.Diagnostics.Process.Start("update.bat");
}
}
}
@@ -90,6 +90,7 @@ namespace BlubbFish.Utils {
xml.Flush();
file.Flush();
file.Close();
xml.Close();
}
/// <summary>
@@ -114,7 +115,9 @@ namespace BlubbFish.Utils {
Thread.Sleep(1000);
try {
Stream stream = WebRequest.Create(this.url + "version.xml").GetResponse().GetResponseStream();
String content = new StreamReader(stream).ReadToEnd();
StreamReader sr = new StreamReader(stream);
String content = sr.ReadToEnd();
sr.Close();
Boolean update = false;
XmlDocument doc = new XmlDocument();
doc.LoadXml(content);
+72
View File
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BlubbFish.Utils</RootNamespace>
<AssemblyName>Utils</AssemblyName>
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CmdArgs.cs" />
<Compile Include="EventArgsHelper.cs" />
<Compile Include="FileLogger.cs" />
<Compile Include="FileMutex.cs" />
<Compile Include="Helper.cs" />
<Compile Include="InIReader.cs" />
<Compile Include="OwnController.cs" />
<Compile Include="OwnModel.cs" />
<Compile Include="OwnObject.cs" />
<Compile Include="OwnView.cs" />
<Compile Include="ProgramLogger.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Updater.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="..\CHANGELOG.md" />
<Content Include="..\CONTRIBUTING.md" />
<Content Include="..\LICENSE" />
<Content Include="..\README.md" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+50 -58
View File
@@ -1,66 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BlubbFish.Utils</RootNamespace>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AssemblyName>Utils</AssemblyName>
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RootNamespace>BlubbFish.Utils</RootNamespace>
<Description>Provides useful classes for other projects</Description>
<Company>BlubbFish</Company>
<Authors>BlubbFish</Authors>
<PackageId>Utils.BlubbFish</PackageId>
<Copyright>Copyright © BlubbFish 2014 - 09.01.2022</Copyright>
<Version>1.6.0</Version>
<NeutralLanguage>de-DE</NeutralLanguage>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageProjectUrl>http://git.blubbfish.net/vs_utils/Utils</PackageProjectUrl>
<RepositoryUrl>http://git.blubbfish.net/vs_utils/Utils.git</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageReleaseNotes>
1.6.0 HttpEndpoint added
1.5.0 Add GetEvent so you can call events by string; Add OwnSingeton class
1.4.0 Add Helper to Utils
1.1.3 Improve CmdArgs
1.1.2 Tiny Codingstyles
1.1.1 ProgrammLogger neets to cleanup
1.1.0 ProgrammLogger
1.0.7.0 Yet another IniReader improvemnt round again
1.0.6.0 Yet another IniReader improvemnt round
1.0.5.2 And Improve IniReader again
1.0.5.1 Improve IniReader again
1.0.5.0 Improve IniReader
1.0.4.1 Cleanup OwnView
1.0.4.0 More Updater
1.0.3.2 Next Updater
1.0.3.1 EventArgsHelper
1.0.2.6 Better Updater
1.0.2.5 Logging in OwnObject
1.0.2.3 OwnModel better
1.0.2.2 Make it nice
1.0.2.1 Filemutex
1.0.0.1 Filelogger improvements
1.0.0.0 Init
</PackageReleaseNotes>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Content Include="../CHANGELOG.md" />
<Content Include="../CONTRIBUTING.md" />
<Content Include="../LICENSE" />
<Content Include="../README.md" />
</ItemGroup>
<ItemGroup>
<Compile Include="CmdArgs.cs" />
<Compile Include="EventArgsHelper.cs" />
<Compile Include="FileLogger.cs" />
<Compile Include="FileMutex.cs" />
<Compile Include="Helper.cs" />
<Compile Include="InIReader.cs" />
<Compile Include="OwnController.cs" />
<Compile Include="OwnModel.cs" />
<Compile Include="OwnObject.cs" />
<Compile Include="OwnView.cs" />
<Compile Include="ProgramLogger.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Updater.cs" />
<None Include="..\LICENSE">
<Pack>True</Pack>
<PackagePath></PackagePath>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>