From b816d78d98bb462ee984bf09ce5db15a201a3cfa Mon Sep 17 00:00:00 2001 From: Madari Developers Date: Thu, 9 Jan 2025 05:22:02 +0000 Subject: [PATCH] Project import generated by Copybara. GitOrigin-RevId: bb822a1f9b49fb2aa3fdb9e0c91b6d9d9f1c11a5 --- .../doc_viewer/container/video_viewer.dart | 18 +++++++++++++ .../screen/trakt_integration_screen.dart | 25 +++++++++++++++++++ lib/features/trakt/service/trakt.service.dart | 14 +++++++++++ lib/pages/more_tab.page.dart | 16 ++++++++++++ 4 files changed, 73 insertions(+) diff --git a/lib/features/doc_viewer/container/video_viewer.dart b/lib/features/doc_viewer/container/video_viewer.dart index 151853a..f6cfd3e 100644 --- a/lib/features/doc_viewer/container/video_viewer.dart +++ b/lib/features/doc_viewer/container/video_viewer.dart @@ -69,6 +69,24 @@ class _VideoViewerState extends State { return; } + if (widget.meta is types.Meta) { + try { + if (player.state.playing) { + TraktService.instance!.startScrobbling( + meta: widget.meta as types.Meta, + progress: progress.toDouble(), + ); + } else { + TraktService.instance!.stopScrobbling( + meta: widget.meta as types.Meta, + progress: progress.toDouble(), + ); + } + } catch (e) { + print(e); + } + } + zeeeWatchHistory!.saveWatchHistory( history: WatchHistory( id: _source.id, diff --git a/lib/features/settings/screen/trakt_integration_screen.dart b/lib/features/settings/screen/trakt_integration_screen.dart index 7d4dc0b..a9a6e63 100644 --- a/lib/features/settings/screen/trakt_integration_screen.dart +++ b/lib/features/settings/screen/trakt_integration_screen.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:madari_client/engine/engine.dart'; +import 'package:madari_client/features/trakt/service/trakt.service.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../../utils/auth_refresh.dart'; @@ -189,6 +190,30 @@ class _TraktIntegrationState extends State { ), centerTitle: true, elevation: 0, + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).push( + MaterialPageRoute(builder: (context) { + return Scaffold( + appBar: AppBar( + title: const Text("Logs"), + ), + body: ListView.builder( + itemCount: TraktService.instance!.debugLogs.length, + itemBuilder: (context, item) { + return Text( + TraktService.instance!.debugLogs[item], + ); + }, + ), + ); + }), + ); + }, + child: Text("Debug logs"), + ), + ], ), body: Padding( padding: const EdgeInsets.all(16.0), diff --git a/lib/features/trakt/service/trakt.service.dart b/lib/features/trakt/service/trakt.service.dart index fa1d7f3..d482a3e 100644 --- a/lib/features/trakt/service/trakt.service.dart +++ b/lib/features/trakt/service/trakt.service.dart @@ -34,6 +34,10 @@ class TraktService { final Map _cache = {}; Timer? _cacheRevalidationTimer; + clearCache() { + _cache.clear(); + } + static ensureInitialized() async { if (_instance != null) { return _instance; @@ -90,6 +94,8 @@ class TraktService { return AppEngine.engine.pb.authStore.record!.getStringValue("trakt_token"); } + List debugLogs = []; + Map get headers => { 'Content-Type': 'application/json', 'Accept-Content': 'application/json', @@ -108,11 +114,13 @@ class TraktService { if (method == 'GET') { if (_getRequestCount >= _authedGetLimit) { + debugLogs.add("GET rate limit exceeded"); throw Exception('GET rate limit exceeded'); } _getRequestCount++; } else if (method == 'POST' || method == 'PUT' || method == 'DELETE') { if (_postRequestCount >= _authedPostLimit) { + debugLogs.add("GET rate limit exceeded"); throw Exception('POST/PUT/DELETE rate limit exceeded'); } _postRequestCount++; @@ -148,9 +156,15 @@ class TraktService { final response = await http.get(Uri.parse(url), headers: headers); if (response.statusCode != 200) { + debugLogs.add( + "Failed to fetch data from ${url.replaceFirst("https://api.trakt.tv/", "")} ${response.statusCode}"); throw Exception('Failed to fetch data from $url'); } + debugLogs.add( + "Success calling api ${url.replaceFirst("https://api.trakt.tv/", "")}", + ); + final data = json.decode(response.body); _cache[url] = data; diff --git a/lib/pages/more_tab.page.dart b/lib/pages/more_tab.page.dart index 8eb15e6..522f3da 100644 --- a/lib/pages/more_tab.page.dart +++ b/lib/pages/more_tab.page.dart @@ -1,7 +1,9 @@ +import 'package:cached_query/cached_query.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:madari_client/engine/engine.dart'; import 'package:madari_client/features/settings/screen/trakt_integration_screen.dart'; +import 'package:madari_client/features/trakt/service/trakt.service.dart'; import 'package:madari_client/features/watch_history/service/zeee_watch_history.dart'; import 'package:madari_client/pages/sign_in.page.dart'; @@ -74,6 +76,20 @@ class MoreContainer extends StatelessWidget { ), ), ), + ListTile( + leading: const Icon(Icons.clear_all), + title: const Text("Clear Cache"), + onTap: () { + TraktService.instance?.clearCache(); + CachedQuery.instance.deleteCache(); + + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text("Cache cleared"), + ), + ); + }, + ), _buildListItem( context, icon: Icons.logout,