Project import generated by Copybara.
Some checks are pending
Build and Deploy / build_windows (push) Waiting to run
Build and Deploy / build_android (push) Waiting to run
Build and Deploy / build_ipa (push) Waiting to run
Build and Deploy / build_linux (push) Waiting to run
Build and Deploy / build_macos (push) Waiting to run

GitOrigin-RevId: bb822a1f9b49fb2aa3fdb9e0c91b6d9d9f1c11a5
This commit is contained in:
Madari Developers 2025-01-09 05:22:02 +00:00
parent c8e23fa02f
commit b816d78d98
4 changed files with 73 additions and 0 deletions

View file

@ -69,6 +69,24 @@ class _VideoViewerState extends State<VideoViewer> {
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,

View file

@ -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<TraktIntegration> {
),
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),

View file

@ -34,6 +34,10 @@ class TraktService {
final Map<String, dynamic> _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<String> debugLogs = [];
Map<String, String> 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;

View file

@ -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,