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;
}
}
}