From f4d1914b21d850997423fff68947aecd0686d059 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 20 Nov 2025 19:29:23 +0000 Subject: [PATCH] debug: add extensive logging and error handling for series --- lib/api/library_browser_provider.dart | 54 ++++++++++++------- .../view/library_series_page.dart | 42 +++++++++++---- 2 files changed, 67 insertions(+), 29 deletions(-) diff --git a/lib/api/library_browser_provider.dart b/lib/api/library_browser_provider.dart index 607cb56..8f76711 100644 --- a/lib/api/library_browser_provider.dart +++ b/lib/api/library_browser_provider.dart @@ -96,26 +96,40 @@ Future> librarySeries(Ref ref) async { return []; } - // Use raw API call to avoid Series deserialization issues - final seriesList = await api.getJson>( - path: '/api/libraries/${currentLibrary.id}/series', - requiresAuth: true, - fromJson: (json) { - if (json is Map && json.containsKey('results')) { - final results = json['results'] as List; - return results - .map((e) => SimpleSeries.fromJson(e as Map)) - .toList(); - } - return []; - }, - ); + try { + // Use raw API call to avoid Series deserialization issues + final seriesList = await api.getJson>( + path: '/api/libraries/${currentLibrary.id}/series', + requiresAuth: true, + fromJson: (json) { + _logger.info('Series API response: $json'); - if (seriesList == null) { - _logger.warning('Failed to fetch series for library ${currentLibrary.id}'); - return []; + if (json is Map) { + if (json.containsKey('results')) { + final results = json['results'] as List; + _logger.info('Found ${results.length} series in results'); + return results + .map((e) => SimpleSeries.fromJson(e as Map)) + .toList(); + } else { + _logger.warning('No results key in response. Keys: ${json.keys}'); + } + } else { + _logger.warning('Response is not a Map. Type: ${json.runtimeType}'); + } + return []; + }, + ); + + if (seriesList == null) { + _logger.warning('Failed to fetch series for library ${currentLibrary.id}'); + return []; + } + + _logger.fine('Fetched ${seriesList.length} series'); + return seriesList; + } catch (e, stackTrace) { + _logger.severe('Error fetching series: $e', e, stackTrace); + rethrow; } - - _logger.fine('Fetched ${seriesList.length} series'); - return seriesList; } diff --git a/lib/features/library_browser/view/library_series_page.dart b/lib/features/library_browser/view/library_series_page.dart index 5f5bf8e..afaddfc 100644 --- a/lib/features/library_browser/view/library_series_page.dart +++ b/lib/features/library_browser/view/library_series_page.dart @@ -19,8 +19,20 @@ class LibrarySeriesPage extends HookConsumerWidget { body: seriesAsync.when( data: (seriesList) { if (seriesList.isEmpty) { - return const Center( - child: Text('No series found'), + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.library_books_outlined, size: 48), + const SizedBox(height: 16), + const Text('No series found'), + const SizedBox(height: 8), + Text( + 'Check logs for API response details', + style: Theme.of(context).textTheme.bodySmall, + ), + ], + ), ); } @@ -37,13 +49,25 @@ class LibrarySeriesPage extends HookConsumerWidget { child: CircularProgressIndicator(), ), error: (error, stack) => Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Icon(Icons.error_outline, size: 48, color: Colors.red), - const SizedBox(height: 16), - Text('Error loading series: $error'), - ], + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.error_outline, size: 48, color: Colors.red), + const SizedBox(height: 16), + Text( + 'Error loading series:', + style: Theme.of(context).textTheme.titleMedium, + ), + const SizedBox(height: 8), + Text( + '$error', + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyMedium, + ), + ], + ), ), ), ),