v3.1.1: Admin-Prüfung meldet jeden Schritt (Fehlersuche)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Nico Meister
2026-10-26 21:03:44 +01:00
co-authored by Claude Opus 5.5
parent 59e082e7d5
commit 44c9b7e60c
4 changed files with 18 additions and 1 deletions
+9
View File
@@ -49,9 +49,13 @@ static void check_once(void)
if (!slot) ACT_GetCommonInfo(&slot, sizeof(slot), INFO_TYPE_COMMON_DEFAULT_ACCOUNT_SLOT);
static AccountAccessToken at;
// 1. direkt lesen; 2. sonst Konto laden (falls nach dem Umschalten nicht geladen); 3. sonst einloggen
// Fortschritt in "why": SELECT zeigt, bei welchem Schritt es gerade ist (oder hängt)
snprintf(why, sizeof(why), "Werkzeuge: Schritt 1/4 - Anmeldung lesen (Platz %u) ...", slot);
Result r1 = read_token(slot, &at), r2 = 0, r3 = 0, r4 = 0;
if (R_FAILED(r1) || !at.refreshToken[0]) {
snprintf(why, sizeof(why), "Werkzeuge: Schritt 2/4 - Konto laden ...\n(Lesen: %08lX)", (unsigned long)r1);
r2 = ACTA_LoadConsoleAccount(slot, false, NULL, false, false);
snprintf(why, sizeof(why), "Werkzeuge: Schritt 3/4 - Konto einloggen ...\n(Lesen %08lX, Laden %08lX)", (unsigned long)r1, (unsigned long)r2);
r3 = login(slot);
r4 = read_token(slot, &at);
}
@@ -65,6 +69,7 @@ static void check_once(void)
snprintf(tokens, sizeof(tokens), "%s %s", at.accessToken[0] ? at.accessToken : "-", at.refreshToken);
memset(&at, 0, sizeof(at));
snprintf(why, sizeof(why), "Werkzeuge: Schritt 4/4 - Server fragen (HTTPS) ...");
// Vom Server prüfen lassen (nur HTTPS, MBMNET-CA)
char body[32];
u32 len = 0;
@@ -80,6 +85,10 @@ static void check_once(void)
const char *admin_why(void) { return why; }
void admin_progress(const char *step) { if (wanted && !isAdmin) snprintf(why, sizeof(why), "Werkzeuge: warte auf %s ...", step); }
void admin_skipped(void) { if (wanted && !isAdmin) snprintf(why, sizeof(why), "Werkzeuge: Prüfung ausgefallen (umgeschaltet). App neu öffnen."); }
void admin_prepare(const char *srv, bool mbmnetLoggedIn)
{
isAdmin = false;
+4
View File
@@ -7,6 +7,10 @@
void admin_prepare(const char *server, bool mbmnetLoggedIn);
// Die eigentliche Prüfung (blockiert, im Hintergrund-Thread aufrufen, nicht gleichzeitig mit anderen act-Anfragen)
void admin_check(void);
// Prüfung fiel aus (es wurde umgeschaltet)
void admin_skipped(void);
// Was das Auffrischen gerade macht (vor der Prüfung), für die Anzeige bei SELECT
void admin_progress(const char *step);
// Admin? Nur nach Bestätigung durch den Server in dieser Sitzung.
bool admin_is(void);
// Warum es (noch) keine Werkzeuge gibt (leer = Admin)
+4
View File
@@ -347,12 +347,15 @@ static void maintenance_worker(void *arg)
char ignore[96];
// 1. Patches auffrischen (Miiverse-CA aus dem Zwischenspeicher; nur beim allerersten Mal vom Server)
bool hadCa = olvpatch_ca_cached();
admin_progress("Patches");
refresh_patches();
admin_progress("SpotPass");
// 2. SpotPass-Aufgabe anmelden
if (begin_busy()) {
spotpass_register(MBMNET_SERVER, ignore, sizeof(ignore));
maintenanceBusy = false;
}
admin_progress("Konto-Abgleich");
// 3. Konto mit dem MBMNET-Server abgleichen (holt u. a. den Mii von der Webseite). Höchstens 5 s,
// bei einem Umschalt-Wunsch sofort abbrechen.
u8 slot = frdswitch_slot_of(FRIEND_ACCOUNT_MBMNET);
@@ -372,6 +375,7 @@ static void maintenance_worker(void *arg)
// 3b. Admin? (braucht act - deshalb erst nach dem Konto-Abgleich, nie gleichzeitig). Hält das Umschalten
// nicht auf: Tippt man vorher, fällt die Prüfung aus (nach dem Neustart gibt es eine neue).
if (!switchRequested) admin_check();
else admin_skipped();
// 4. Miiverse-CA frisch vom Server (nur Netz; Patches nur neu bauen, wenn sie sich geändert hat)
bool caChanged = false;
if (!switchRequested && olvpatch_refresh_ca(MBMNET_SERVER, &caChanged) && caChanged && hadCa)