using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace gehGassiApp.Core.Helper { /// /// Erweiterungsmethoden /// public static class Extensions { /// /// Gibt einen Text gekürzt auf eine max. Zeichenzahl zurück. /// Wenn der Text länger als maxLength war, wird "..." angehängt. /// /// Text /// max. Länge /// Text gekürzt public static string Ellipsis(this string text, int maxLength) { if (string.IsNullOrWhiteSpace(text)) return ""; if (maxLength > 0 && text.Length > maxLength) { return text.Substring(0, maxLength) + "..."; } return text; } /// /// Gibt zurück ob ein String mit "http" startet. /// Wird bei Fotos verwendet um zwischen lokalen und online Fotos zu unterscheiden /// /// Text der geprüft werden soll /// true wenn mit http startet, false sonst public static bool StartsWithHttp(this string text) { if (!string.IsNullOrWhiteSpace(text)) { return text.ToLower().StartsWith("http"); } return false; } /// /// Vergleichen von 2 Objekten mit Hilfe von Json Serialization /// /// Typ der Objekte /// Erstes Objekt /// Zweites Objekt /// true wenn gleich, false sonst public static bool JsonEquals(this T first, T second) where T : class { if (ReferenceEquals(first, second)) return true; if ((first == null) || (second == null)) return false; try { var firstJson = JsonSerializer.Serialize(first, new JsonSerializerOptions(JsonSerializerDefaults.Web)); var secondJson = JsonSerializer.Serialize(second, new JsonSerializerOptions(JsonSerializerDefaults.Web)); var result = firstJson.Equals(secondJson, StringComparison.InvariantCultureIgnoreCase); return result; } catch{} return false; } /// /// Konvertieren eines DateTimeOffeset in ein DateTime /// /// /// public static DateTime ToDateTime(this DateTimeOffset dateTime) { if (dateTime.Offset.Equals(TimeSpan.Zero)) return dateTime.UtcDateTime; else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime))) return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local); else return dateTime.DateTime; } } }