fix(anilist): decode array-shaped airingSchedule/relations and isolate per-service sync errors
The 1.6.1 fix exposed a latent decoding bug: AniList returns airingSchedule.nodes and relations.nodes as arrays, but the Go Media struct declared Nodes as single structs. Every full-media response failed json.Unmarshal partway through - the update path turned that into a rejected promise which skipped the MAL and Simkl syncs and all table updates, while page loads silently continued with partially decoded data (the reason the old tags/genres copy workaround existed). - Media.AiringSchedule.Nodes is now []AiringScheduleNode and Media.Relations is an exported []MediaRelation (previously an unexported field silently dropped by encoding/json); title and fuzzy-date sub-structs promoted to named types. - Regenerate wailsjs models for the new shapes. - Anime.svelte: handleSubmit and deleteEntries now wrap each service in its own try/catch surfaced via setApiError/ErrorModal, so one service failing can no longer skip the others; removed the obsolete tags/genres copy workaround. - AniListUpdateEntry/AniListDeleteEntry log HTTP status and response body on failure for terminal diagnostics. Bump productVersion to 1.6.2.
This commit is contained in:
+4
-1
@@ -726,17 +726,19 @@ func (a *App) AniListUpdateEntry(updateBody AniListUpdateVariables) (AniListGetS
|
||||
return AniListGetSingleAnime{}, fmt.Errorf("AniList API error: %s", badPost.Errors[0].Message)
|
||||
}
|
||||
if status != "200 OK" {
|
||||
log.Printf("AniListUpdateEntry failed with status: %s, body: %s\n", status, string(returnedBody))
|
||||
return AniListGetSingleAnime{}, fmt.Errorf("API request failed with status: %s", status)
|
||||
}
|
||||
|
||||
var returnedJson AniListUpdateReturn
|
||||
err := json.Unmarshal(returnedBody, &returnedJson)
|
||||
if err != nil {
|
||||
log.Printf("Failed at unmarshal, %s\n", err)
|
||||
log.Printf("AniListUpdateEntry failed to unmarshal response: %s, body: %s\n", err, string(returnedBody))
|
||||
return AniListGetSingleAnime{}, fmt.Errorf("failed to parse AniList update response")
|
||||
}
|
||||
|
||||
if returnedJson.Data.SaveMediaListEntry.MediaID == 0 {
|
||||
log.Printf("AniListUpdateEntry returned no saved entry, body: %s\n", string(returnedBody))
|
||||
return AniListGetSingleAnime{}, fmt.Errorf("AniList returned no saved entry")
|
||||
}
|
||||
|
||||
@@ -795,6 +797,7 @@ func (a *App) AniListDeleteEntry(mediaListId int) (DeleteAniListReturn, error) {
|
||||
return DeleteAniListReturn{}, fmt.Errorf("AniList API error: %s", badPost.Errors[0].Message)
|
||||
}
|
||||
if status != "200 OK" {
|
||||
log.Printf("AniListDeleteEntry failed with status: %s, body: %s\n", status, string(returnedBody))
|
||||
return DeleteAniListReturn{}, fmt.Errorf("API request failed with status: %s", status)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user