diff --git a/lib/modules/tautulli/core/api_helper.dart b/lib/modules/tautulli/core/api_helper.dart index 13ac261f..39c4376b 100644 --- a/lib/modules/tautulli/core/api_helper.dart +++ b/lib/modules/tautulli/core/api_helper.dart @@ -172,7 +172,7 @@ class TautulliAPIHelper { .api! .activity .terminateSession( - sessionId: session.sessionId, + sessionKey: session.sessionKey, message: terminationMessage, ) .then((_) { diff --git a/lib/modules/tautulli/core/webhooks.dart b/lib/modules/tautulli/core/webhooks.dart index 9ab43e15..23e5db02 100644 --- a/lib/modules/tautulli/core/webhooks.dart +++ b/lib/modules/tautulli/core/webhooks.dart @@ -120,26 +120,26 @@ extension _EventTypeExtension on _EventType { } Future _bufferWarning(Map data) async => - _goToActivityDetails(data['session_id']); + _goToActivityDetails(data['session_key']); Future _playbackErrorEvent(Map data) async => - _goToUserDetails(int.tryParse(data['user_id'])); + _goToUserDetails(data['user_id']); Future _playbackPauseEvent(Map data) async => - _goToActivityDetails(data['session_id']); + _goToActivityDetails(data['session_key']); Future _playbackResumeEvent(Map data) async => - _goToActivityDetails(data['session_id']); + _goToActivityDetails(data['session_key']); Future _playbackStartEvent(Map data) async => - _goToActivityDetails(data['session_id']); + _goToActivityDetails(data['session_key']); Future _playbackStopEvent(Map data) async => - _goToUserDetails(int.tryParse(data['user_id'])); + _goToUserDetails(data['user_id']); Future _transcodeDecisionChangeEvent(Map data) async => - _goToActivityDetails(data['session_id']); + _goToActivityDetails(data['session_key']); Future _userConcurrentStreams(Map data) async => - _goToUserDetails(int.tryParse(data['user_id'])); + _goToUserDetails(data['user_id']); Future _userNewDevice(Map data) async => - _goToUserDetails(int.tryParse(data['user_id'])); + _goToUserDetails(data['user_id']); Future _watchedEvent(Map data) async => - _goToUserDetails(int.tryParse(data['user_id'])); + _goToUserDetails(data['user_id']); Future _plexRemoteAccessBackUp(Map data) async { TautulliRoutes.LOGS.go(buildTree: true); @@ -177,24 +177,24 @@ extension _EventTypeExtension on _EventType { return LunaModule.TAUTULLI.launch(); } - Future _goToUserDetails(int? userId) async { - if (userId != null) { + Future _goToUserDetails(String? userId) async { + if (userId != null && userId.isNotEmpty) { return TautulliRoutes.USER_DETAILS.go( buildTree: true, params: { - 'user': userId.toString(), + 'user': userId, }, ); } return _goToHome(); } - Future _goToActivityDetails(String? sessionId) async { - if (sessionId != null && sessionId.isNotEmpty) { + Future _goToActivityDetails(String? sessionKey) async { + if (sessionKey != null && sessionKey.isNotEmpty) { return TautulliRoutes.ACTIVITY_DETAILS.go( buildTree: true, params: { - 'session': sessionId.toString(), + 'session': sessionKey, }, ); } diff --git a/lib/modules/tautulli/routes/activity/widgets/activity_tile.dart b/lib/modules/tautulli/routes/activity/widgets/activity_tile.dart index 716b3ca0..f3e6be3d 100644 --- a/lib/modules/tautulli/routes/activity/widgets/activity_tile.dart +++ b/lib/modules/tautulli/routes/activity/widgets/activity_tile.dart @@ -121,7 +121,7 @@ class TautulliActivityTile extends StatelessWidget { Future _enterDetails(BuildContext context) async { TautulliRoutes.ACTIVITY_DETAILS.go(params: { - 'session': session.sessionId!.toString(), + 'session': session.sessionKey.toString(), }); } } diff --git a/lib/modules/tautulli/routes/activity_details/route.dart b/lib/modules/tautulli/routes/activity_details/route.dart index 8ca97ed3..54d7da97 100644 --- a/lib/modules/tautulli/routes/activity_details/route.dart +++ b/lib/modules/tautulli/routes/activity_details/route.dart @@ -4,11 +4,11 @@ import 'package:lunasea/core.dart'; import 'package:lunasea/modules/tautulli.dart'; class ActivityDetailsRoute extends StatefulWidget { - final String? sessionId; + final int sessionKey; const ActivityDetailsRoute({ Key? key, - required this.sessionId, + required this.sessionKey, }) : super(key: key); @override @@ -28,12 +28,19 @@ class _State extends State @override Widget build(BuildContext context) { + if (widget.sessionKey == -1) { + return LunaMessage.goBack( + context: context, + text: 'tautulli.SessionEnded'.tr(), + ); + } + return LunaScaffold( scaffoldKey: _scaffoldKey, appBar: _appBar() as PreferredSizeWidget?, body: _body(), bottomNavigationBar: - TautulliActivityDetailsBottomActionBar(sessionId: widget.sessionId), + TautulliActivityDetailsBottomActionBar(sessionKey: widget.sessionKey), ); } @@ -44,8 +51,8 @@ class _State extends State scrollController ], actions: [ - TautulliActivityDetailsUserAction(sessionId: widget.sessionId), - TautulliActivityDetailsMetadataAction(sessionId: widget.sessionId), + TautulliActivityDetailsUserAction(sessionKey: widget.sessionKey), + TautulliActivityDetailsMetadataAction(sessionKey: widget.sessionKey), ]); } @@ -70,7 +77,7 @@ class _State extends State if (snapshot.hasData) { TautulliSession? session = snapshot.data!.sessions! .firstWhereOrNull( - (element) => element.sessionId == widget.sessionId); + (element) => element.sessionKey == widget.sessionKey); return _session(session); } return const LunaLoader(); diff --git a/lib/modules/tautulli/routes/activity_details/widgets/appbar_metadata_action.dart b/lib/modules/tautulli/routes/activity_details/widgets/appbar_metadata_action.dart index 601aca3a..fc128f97 100644 --- a/lib/modules/tautulli/routes/activity_details/widgets/appbar_metadata_action.dart +++ b/lib/modules/tautulli/routes/activity_details/widgets/appbar_metadata_action.dart @@ -5,11 +5,11 @@ import 'package:lunasea/modules/tautulli.dart'; import 'package:lunasea/router/routes/tautulli.dart'; class TautulliActivityDetailsMetadataAction extends StatelessWidget { - final String? sessionId; + final int sessionKey; const TautulliActivityDetailsMetadataAction({ Key? key, - required this.sessionId, + required this.sessionKey, }) : super(key: key); @override @@ -21,7 +21,7 @@ class TautulliActivityDetailsMetadataAction extends StatelessWidget { if (snapshot.hasError) return Container(); if (snapshot.hasData) { TautulliSession? session = snapshot.data!.sessions! - .firstWhereOrNull((element) => element.sessionId == sessionId); + .firstWhereOrNull((element) => element.sessionKey == sessionKey); if (session != null) return LunaIconButton( icon: Icons.info_outline_rounded, diff --git a/lib/modules/tautulli/routes/activity_details/widgets/appbar_user_action.dart b/lib/modules/tautulli/routes/activity_details/widgets/appbar_user_action.dart index c6007ec2..310ed16d 100644 --- a/lib/modules/tautulli/routes/activity_details/widgets/appbar_user_action.dart +++ b/lib/modules/tautulli/routes/activity_details/widgets/appbar_user_action.dart @@ -5,11 +5,11 @@ import 'package:lunasea/modules/tautulli.dart'; import 'package:lunasea/router/routes/tautulli.dart'; class TautulliActivityDetailsUserAction extends StatelessWidget { - final String? sessionId; + final int sessionKey; const TautulliActivityDetailsUserAction({ Key? key, - required this.sessionId, + required this.sessionKey, }) : super(key: key); @override @@ -21,7 +21,7 @@ class TautulliActivityDetailsUserAction extends StatelessWidget { if (snapshot.hasError) return Container(); if (snapshot.hasData) { TautulliSession? session = snapshot.data!.sessions! - .firstWhereOrNull((element) => element.sessionId == sessionId); + .firstWhereOrNull((element) => element.sessionKey == sessionKey); if (session != null) return LunaIconButton( icon: Icons.person_rounded, diff --git a/lib/modules/tautulli/routes/activity_details/widgets/bottom_action_bar.dart b/lib/modules/tautulli/routes/activity_details/widgets/bottom_action_bar.dart index 8fcc4854..e78e93ea 100644 --- a/lib/modules/tautulli/routes/activity_details/widgets/bottom_action_bar.dart +++ b/lib/modules/tautulli/routes/activity_details/widgets/bottom_action_bar.dart @@ -4,11 +4,11 @@ import 'package:lunasea/core.dart'; import 'package:lunasea/modules/tautulli.dart'; class TautulliActivityDetailsBottomActionBar extends StatelessWidget { - final String? sessionId; + final int sessionKey; const TautulliActivityDetailsBottomActionBar({ Key? key, - required this.sessionId, + required this.sessionKey, }) : super(key: key); @override @@ -19,7 +19,7 @@ class TautulliActivityDetailsBottomActionBar extends StatelessWidget { if (snapshot.hasError) return Container(height: 0.0); if (snapshot.hasData) { TautulliSession? session = snapshot.data!.sessions! - .firstWhereOrNull((element) => element.sessionId == sessionId); + .firstWhereOrNull((element) => element.sessionKey == sessionKey); if (session != null) return LunaBottomActionBar( actions: [ diff --git a/lib/router/routes/tautulli.dart b/lib/router/routes/tautulli.dart index 0f4bdc30..8bacd884 100644 --- a/lib/router/routes/tautulli.dart +++ b/lib/router/routes/tautulli.dart @@ -70,7 +70,7 @@ enum TautulliRoutes with LunaRoutesMixin { case TautulliRoutes.ACTIVITY_DETAILS: return route(builder: (_, state) { return ActivityDetailsRoute( - sessionId: state.params['session'], + sessionKey: int.tryParse(state.params['session'] ?? '') ?? -1, ); }); case TautulliRoutes.CHECK_FOR_UPDATES: