WebUntis: Browser-Header gegen HTTP 403, Klassenlehrer-Reports on-demand
CI / build-and-test (push) Canceled after 0s
CI / build-and-test (push) Canceled after 0s
Fehlzeiten-/Klassenbuch-Reports (reports.do, api/polling/REPORT) sowie der JSON-RPC-Login schickten bisher keinen User-Agent, Referer oder die übrigen Header, die WebUntis' eigene WebApp immer mitsendet - führte zu HTTP 403. Header 1:1 aus einem echten Browser-Request übernommen und zusätzliche Set-Cookie-Werte (z.B. Tenant-Id) aus der Login-Antwort eingesammelt statt nur JSESSIONID/schoolname. Zusätzlich eine feste kurze Pause zwischen Login und erstem Report-Request. Die Klassenlehrer-Übersicht holt WebUntis-Daten jetzt nicht mehr eager beim Navigieren oder bei jedem Sync-Ereignis, sondern nur noch über den bestehenden "Aktualisieren"-Button - vermeidet spürbare Startlatenz und unnötige WebUntis-Last. Eingehende Sync-Ereignisse (z.B. ein auf einem anderen Gerät geschlossener Vorgang) bauen die Ansicht per RefreshFromLocalDataOnly() weiterhin sofort neu auf, aber ausschließlich aus den zuletzt geholten WebUntis-Daten plus aktuellen lokalen Daten - ohne selbst je einen WebUntis-Request auszulösen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -90,7 +90,10 @@ public partial class MainWindowViewModel : ObservableObject
|
||||
case TimetableViewModel vm: vm.Load(); break;
|
||||
case WorkloadViewModel vm:
|
||||
vm.Tasks.Load(); vm.TimeTracking.Load(); vm.Evaluation.Load(); break;
|
||||
case ClassTeacherOverviewViewModel vm: vm.LoadCommand.Execute(null); break;
|
||||
// RefreshFromLocalDataOnly() statt LoadCommand: baut die Ansicht aus den zuletzt
|
||||
// geholten WebUntis-Daten + aktuellen lokalen Daten neu auf, löst aber selbst nie einen
|
||||
// WebUntis-Request aus - den holt bewusst ausschließlich der "Aktualisieren"-Button.
|
||||
case ClassTeacherOverviewViewModel vm: vm.RefreshFromLocalDataOnly(); break;
|
||||
case ExamsOverviewViewModel vm: vm.LoadCommand.Execute(null); break;
|
||||
case GroupDetailViewModel { Group: { } group } vm: vm.LoadGroup(group.Id); break;
|
||||
// Inline-Bearbeitung (IsEditing) nicht überschreiben - anders als die Gruppenansicht
|
||||
@@ -176,7 +179,11 @@ public partial class MainWindowViewModel : ObservableObject
|
||||
var vm = _services.GetRequiredService<ClassTeacherOverviewViewModel>();
|
||||
vm.OnNavigateToSettings = () => { NavigateToSettings(SettingsTab.WebUntis); return Task.CompletedTask; };
|
||||
vm.OnNavigateToWorkload = () => { NavigateToWorkload(); return Task.CompletedTask; };
|
||||
vm.LoadCommand.Execute(null);
|
||||
// Kein automatischer WebUntis-Abruf beim Navigieren: PrepareForDisplay() baut nur den
|
||||
// lokalen Grundzustand auf, die eigentlichen Report-Daten holt die Nutzerin bewusst über
|
||||
// den "Aktualisieren"-Button (LoadCommand) - vermeidet WebUntis-Login+Report-Latenz beim
|
||||
// bloßen Öffnen der Seite.
|
||||
vm.PrepareForDisplay();
|
||||
return vm;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user