From 185980083a2e488c329e4c02240982fce920d38c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 5 Oct 2025 17:35:07 +0000 Subject: [PATCH] feat: add comprehensive logging for downloads debugging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added extensive logging throughout DownloadsProvider and DownloadsScreen to diagnose why downloads screen appears empty. DownloadsProvider.refreshDownloads(): - 📥 Log function call - 📥 Log state changes (loading, error) - 📥 Log TorrentPlatformService.getAllDownloads() call - 📥 Log number of torrents received - 📥 Log each torrent processing with index - 📥 Log success/failure for each torrent info fetch - 📥 Log final torrents count - 📥 Log completion or error state DownloadsScreen.initState() and Consumer: - 📥 Log initState call - 📥 Log postFrameCallback execution - 📥 Log Consumer builder invocations - 📥 Log provider state (isLoading, error, torrents.length) - 📥 Log which UI is displayed: * CircularProgressIndicator * ErrorDisplay * Empty state message * Torrent list with count All logs prefixed with 📥 for easy filtering in logcat. Example output: --- 📥 DownloadsScreen: initState() called 📥 DownloadsScreen: postFrameCallback, calling refreshDownloads() 📥 DownloadsProvider: refreshDownloads() called 📥 Setting loading=true, error=null 📥 Calling TorrentPlatformService.getAllDownloads()... 📥 Got 0 torrents from platform service 📥 Cleared _torrents list 📥 Final torrents count: 0 📥 Setting loading=false 📥 ✅ refreshDownloads() completed successfully 📥 DownloadsScreen: Consumer builder called 📥 isLoading: false 📥 error: null 📥 torrents.length: 0 📥 → Showing empty state This will help identify: - Is refreshDownloads being called? - Does TorrentPlatformService return any data? - Are torrents parsed correctly? - Is the correct UI state shown? - Where does the process fail? Usage: Run app → Open Downloads screen → Check logcat for 📥 logs --- .../providers/downloads_provider.dart | 24 +++++++++++++++---- .../screens/downloads/downloads_screen.dart | 9 +++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/lib/presentation/providers/downloads_provider.dart b/lib/presentation/providers/downloads_provider.dart index 0bc06d0..b531b48 100644 --- a/lib/presentation/providers/downloads_provider.dart +++ b/lib/presentation/providers/downloads_provider.dart @@ -36,15 +36,23 @@ class DownloadsProvider with ChangeNotifier { /// Загрузить список активных загрузок Future refreshDownloads() async { + print('📥 DownloadsProvider: refreshDownloads() called'); try { + print('📥 Setting loading=true, error=null'); _setLoading(true); _setError(null); + print('📥 Calling TorrentPlatformService.getAllDownloads()...'); final progress = await TorrentPlatformService.getAllDownloads(); + print('📥 Got ${progress.length} torrents from platform service'); // Получаем полную информацию о каждом торренте _torrents.clear(); - for (final progressItem in progress) { + print('📥 Cleared _torrents list'); + + for (int i = 0; i < progress.length; i++) { + final progressItem = progress[i]; + print('📥 Processing torrent $i: ${progressItem.infoHash.substring(0, 8)}...'); try { final torrentInfo = await TorrentPlatformService.getTorrent(progressItem.infoHash); if (torrentInfo != null) { @@ -64,14 +72,22 @@ class DownloadsProvider with ChangeNotifier { state: progressItem.state, savePath: '/storage/emulated/0/Download/NeoMovies', files: [], - )); + ); + print('📥 ✅ Created basic info: ${basicInfo.name}'); + _torrents.add(basicInfo); } } + print('📥 Final torrents count: ${_torrents.length}'); + print('📥 Setting loading=false'); _setLoading(false); - } catch (e) { - _setError(e.toString()); + print('📥 ✅ refreshDownloads() completed successfully'); + } catch (e, stackTrace) { + print('📥 ❌ Error refreshing downloads: $e'); + print('📥 Stack trace: $stackTrace'); + _setError(e.toString(), stackTrace.toString()); _setLoading(false); + print('📥 Error state set, loading=false'); } } diff --git a/lib/presentation/screens/downloads/downloads_screen.dart b/lib/presentation/screens/downloads/downloads_screen.dart index 56bb597..b869f58 100644 --- a/lib/presentation/screens/downloads/downloads_screen.dart +++ b/lib/presentation/screens/downloads/downloads_screen.dart @@ -40,13 +40,20 @@ class _DownloadsScreenState extends State { ), body: Consumer( builder: (context, provider, child) { + print('📥 DownloadsScreen: Consumer builder called'); + print('📥 isLoading: ${provider.isLoading}'); + print('📥 error: ${provider.error}'); + print('📥 torrents.length: ${provider.torrents.length}'); + if (provider.isLoading) { + print('📥 → Showing CircularProgressIndicator'); return const Center( child: CircularProgressIndicator(), ); } if (provider.error != null) { + print('📥 → Showing ErrorDisplay'); return ErrorDisplay( title: 'Ошибка загрузки торрентов', error: provider.error!, @@ -58,6 +65,7 @@ class _DownloadsScreenState extends State { } if (provider.torrents.isEmpty) { + print('📥 → Showing empty state'); return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -87,6 +95,7 @@ class _DownloadsScreenState extends State { ); } + print('📥 → Showing ${provider.torrents.length} torrents in list'); return RefreshIndicator( onRefresh: () async { await provider.refreshDownloads();