Reenabled deletion of Time-Entrys
This commit is contained in:
@@ -73,10 +73,17 @@ internal sealed class ApiClient : IApiClient {
|
||||
using var res = await _http.SendAsync(req, HttpCompletionOption.ResponseHeadersRead, ct).ConfigureAwait(false);
|
||||
var text = await res.Content.ReadAsStringAsync(ct).ConfigureAwait(false);
|
||||
|
||||
if (res.StatusCode == System.Net.HttpStatusCode.NotFound) {
|
||||
var message = req.Method + ": " + req.RequestUri + " nicht gefunden";
|
||||
throw ApiException.From(res.StatusCode, message);
|
||||
}
|
||||
|
||||
if (!res.IsSuccessStatusCode)
|
||||
throw ApiException.From(res.StatusCode, TryGetMessage(text), text);
|
||||
|
||||
|
||||
if (res.StatusCode != System.Net.HttpStatusCode.OK) {
|
||||
|
||||
// Verhalten wie in BaseFunc: bei Fehlerstatus -> "message" aus Body lesen und mit dessen Inhalt eine Exception werfen.
|
||||
try {
|
||||
var options = new JsonDocumentOptions { AllowTrailingCommas = true };
|
||||
@@ -142,8 +149,27 @@ internal sealed class ApiClient : IApiClient {
|
||||
}
|
||||
|
||||
// Wenn path bereits absolut ist, direkt verwenden
|
||||
if (Uri.TryCreate(relativePath, UriKind.Absolute, out var absoluteFromPath))
|
||||
return absoluteFromPath;
|
||||
//if (Uri.TryCreate(relativePath, UriKind.Absolute, out var absoluteFromPath))
|
||||
// return absoluteFromPath;
|
||||
|
||||
// Sonderfall: Wenn path ein absoluter file:// URI ist, diesen relativ zur Basis behandeln
|
||||
// Weiß nicht wie file:// zustande kommt, vermutlich wäre das zu verhindern
|
||||
if (Uri.TryCreate(relativePath, UriKind.Absolute, out var uri)) {
|
||||
if (uri.Scheme == Uri.UriSchemeFile) {
|
||||
|
||||
var normalizedBase = baseUrl.Trim();
|
||||
if (!normalizedBase.EndsWith('/'))
|
||||
normalizedBase += "/";
|
||||
|
||||
if (relativePath.StartsWith('/'))
|
||||
relativePath = relativePath.TrimStart('/');
|
||||
|
||||
var baseUriNormalized = new Uri(normalizedBase, UriKind.Absolute);
|
||||
return new Uri(baseUriNormalized, relativePath);
|
||||
}
|
||||
return uri;
|
||||
}
|
||||
|
||||
|
||||
return new Uri(baseUri, relativePath);
|
||||
}
|
||||
|
||||
@@ -44,8 +44,8 @@ public static class MauiProgram {
|
||||
//#endif
|
||||
|
||||
// ApiClient registrieren: SocketsHttpHandler als Primary Handler (vermeidet AndroidMessageHandler-Castfehler)
|
||||
var apiOptions = new Infrastructure.ApiOptions { BaseUrl = GlobalVar.ApiUrl, Timeout = TimeSpan.FromSeconds(15) };
|
||||
builder.Services.AddApiHttpClient(apiOptions);
|
||||
//var apiOptions = new Infrastructure.ApiOptions { BaseUrl = GlobalVar.ApiUrl, Timeout = TimeSpan.FromSeconds(15) };
|
||||
//builder.Services.AddApiHttpClient(apiOptions);
|
||||
|
||||
// DI: AlertService für globale Alerts (z. B. leere ApiUrl)
|
||||
builder.Services.AddSingleton<IAlertService, AlertService>();
|
||||
|
||||
@@ -178,8 +178,12 @@ public partial class StundeViewModel : ObservableObject, IQueryAttributable {
|
||||
await ConfirmEvent.Invoke("Achtung", "Löschen kann nicht ungeschehen gemacht werden. Fortfahren?");
|
||||
if (answer) {
|
||||
//Löschen
|
||||
try {
|
||||
await _hoursService.DeleteEntryAsync(DayTime);
|
||||
await Shell.Current.GoToAsync($"..?date={DayTime.Day.ToString("yyyy-MM-dd")}");
|
||||
} catch (Exception e) {
|
||||
AlertEvent?.Invoke(this, e.Message);
|
||||
}
|
||||
} else {
|
||||
//nicht Löschen
|
||||
}
|
||||
@@ -244,7 +248,7 @@ public partial class StundeViewModel : ObservableObject, IQueryAttributable {
|
||||
var (list, settings) = await _hoursService.GetDayWithSettingsAsync(_date);
|
||||
UpdateSettingsAsync(settings);
|
||||
DayTimes = list;
|
||||
|
||||
OnPropertyChanged(nameof(DayTimes));
|
||||
} catch (Exception) {
|
||||
//Ein Tag ohne Einträge gibt eine Fehlermeldung,
|
||||
//die soll aber ignoriert werden, weil beim Neueintrag ist das ja Wurscht
|
||||
|
||||
Reference in New Issue
Block a user