using AutoMapper; using gehGassi.Core.Interfaces; using gehGassi.Web.Helper; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using System.IO; using System.Threading.Tasks; using System; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Processing; namespace gehGassi.Web.Controllers.WebsiteApi { /// /// Basis-Controller für die Website-API /// public class WebSiteApiBaseController : Controller { public IMapper Mapper { get; } public IOptions LocalizationOptions { get; } public IUserService UserService { get; } private IFileService _fileService; protected IFileService FileService => _fileService ??= HttpContext?.RequestServices.GetService(); /// /// Erstellt eine Instanz /// /// Instanz eines IMapper /// Instanz von LocalizationOptions /// Instanz eines IUserService public WebSiteApiBaseController(IMapper mapper, IOptions localizationOptions, IUserService userService) { Mapper = mapper; LocalizationOptions = localizationOptions; UserService = userService; } /// /// Gibt die Basis-Adresse für URLS zurück /// /// internal string GetBaseAddress() { var baseAddress = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}"; #if DEBUG baseAddress = "http://10.0.0.31:54763"; #endif return baseAddress; } /// /// Erstellt ein Thumbnail basierend auf der Breite /// /// Container /// Dateiname /// Größe für Breite und Höhe /// Task internal async Task GenerateThumbnailByWidth(string container, string filename, int size) { try { using (var imgStream = await FileService.GetAsStreamAsync(container, filename)) { using (var img = await Image.LoadAsync(imgStream)) { img.Mutate(x => x.Resize(new ResizeOptions() { Mode = ResizeMode.Max, Size = new Size(size) })); var format = img.DetectEncoder(filename); await using (var memStream = new MemoryStream()) { await img.SaveAsync(memStream, format); memStream.Position = 0; await FileService.StoreAsync(container, $"thumbnails/{size}/{filename}", memStream); } } } } catch { } } /// /// Löschen eines Thumbnails für ein Bild /// /// Container /// Dateiname /// Größe für Breite und Höhe /// Task internal async Task RemoveThumbnail(string container, string fileName, int size) { try { var file = await FileService.GetAsync(container, $"thumbnails/{size}/{fileName}"); if (file != null) { await FileService.DeleteAsync(container, $"thumbnails/{size}/{fileName}"); } } catch { } } /// /// Gibt den Offset zwischen der Server- und der Client-Zeit zurück /// /// protected int GetClientDateOffset() { var compareDate = DateTimeOffset.UtcNow; var dateOffset = 0; try { if (Request.Headers.ContainsKey("clientTime")) { var requestHeader = Request.Headers["clientTime"]; DateTimeOffset clientDate; if (DateTimeOffset.TryParse(requestHeader, null, System.Globalization.DateTimeStyles.RoundtripKind, out clientDate)) { //var clientDate = DateTimeOffset.Parse(Request.Headers["clientTime"], null, System.Globalization.DateTimeStyles.RoundtripKind); dateOffset = (int)(compareDate - clientDate).TotalSeconds; } else { System.Diagnostics.Debug.WriteLine($"ClientOffset header Problem: {Request.Headers["clientTime"]}"); } } //System.Diagnostics.Debug.WriteLine($"ClientOffset in seconds: {dateOffset}"); } catch { } return dateOffset; } } }