From 6bcdbb7df17f87d43d3eae3b50ea0e1be3adf8b8 Mon Sep 17 00:00:00 2001 From: Jagandeep Brar Date: Mon, 12 Apr 2021 05:50:30 -0500 Subject: [PATCH] (fix/feat): [Clients] Update interaction to reorder and view submenu, added category to queue tile (#420) * Add LunaReorderableListDragger widget for handler * (feat): [NZBGet] Change interaction style (tap to view menu, draggable handle), add category to tile * (feat): [SABnzbd] Change interaction style (tap to view menu, draggable handle), add category to tile --- lib/core/widgets.dart | 1 + .../widgets/reorderable_list_dragger.dart | 23 +++++++++++++++++++ lib/modules/nzbget/core/api/data/queue.dart | 7 +++++- lib/modules/nzbget/core/dialogs.dart | 2 +- lib/modules/nzbget/routes/queue.dart | 1 + lib/modules/nzbget/widgets/queue_tile.dart | 9 ++++---- lib/modules/sabnzbd/core/api/data/queue.dart | 7 +++++- lib/modules/sabnzbd/routes/queue.dart | 1 + lib/modules/sabnzbd/widgets/queue_tile.dart | 9 ++++---- 9 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 lib/core/widgets/reorderable_list_dragger.dart diff --git a/lib/core/widgets.dart b/lib/core/widgets.dart index b642bd60..ec70d127 100644 --- a/lib/core/widgets.dart +++ b/lib/core/widgets.dart @@ -2,4 +2,5 @@ export 'widgets/action_bar_card.dart'; export 'widgets/expandable_list_tile.dart'; export 'widgets/five_line_card_with_poster.dart'; export 'widgets/four_line_card_with_poster.dart'; +export 'widgets/reorderable_list_dragger.dart'; export 'widgets/two_line_card_with_poster.dart'; diff --git a/lib/core/widgets/reorderable_list_dragger.dart b/lib/core/widgets/reorderable_list_dragger.dart new file mode 100644 index 00000000..5b20d0ff --- /dev/null +++ b/lib/core/widgets/reorderable_list_dragger.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; + +class LunaReorderableListDragger extends StatelessWidget { + final int index; + + LunaReorderableListDragger({ + Key key, + @required this.index, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ReorderableDragStartListener( + index: index, + child: Icon(Icons.menu_rounded), + ), + ], + ); + } +} diff --git a/lib/modules/nzbget/core/api/data/queue.dart b/lib/modules/nzbget/core/api/data/queue.dart index 90fe8829..55db7b45 100644 --- a/lib/modules/nzbget/core/api/data/queue.dart +++ b/lib/modules/nzbget/core/api/data/queue.dart @@ -59,8 +59,13 @@ class NZBGetQueueData { } } + String get formattedCategory { + if(category == null || category.isEmpty) return 'No Category'; + return category; + } + String get subtitle { String size = '$downloaded/$sizeTotal MB'; - return '$statusString\t•\t$size\t•\t$percentageDone%'; + return '$statusString\t•\t$size\t•\t$percentageDone%\t•\t$formattedCategory'; } } diff --git a/lib/modules/nzbget/core/dialogs.dart b/lib/modules/nzbget/core/dialogs.dart index 909872a5..794fd631 100644 --- a/lib/modules/nzbget/core/dialogs.dart +++ b/lib/modules/nzbget/core/dialogs.dart @@ -183,7 +183,7 @@ class NZBGetDialogs { content: List.generate( categories.length, (index) => LunaDialog.tile( - text: categories[index].name, + text: categories[index].name.isEmpty ? 'No Category' : categories[index].name, icon: Icons.category, iconColor: LunaColours.list(index), onTap: () => _setValues(true, categories[index]), diff --git a/lib/modules/nzbget/routes/queue.dart b/lib/modules/nzbget/routes/queue.dart index 4dc87407..ce1d8434 100644 --- a/lib/modules/nzbget/routes/queue.dart +++ b/lib/modules/nzbget/routes/queue.dart @@ -152,6 +152,7 @@ class _State extends State with TickerProviderStateMixin, Automatic itemCount: _queue.length, itemBuilder: (context, index) => NZBGetQueueTile( key: Key(_queue[index].id.toString()), + index: index, data: _queue[index], queueContext: context, refresh: () => _fetchWithoutMessage(), diff --git a/lib/modules/nzbget/widgets/queue_tile.dart b/lib/modules/nzbget/widgets/queue_tile.dart index 780ae8ac..648e0a1a 100644 --- a/lib/modules/nzbget/widgets/queue_tile.dart +++ b/lib/modules/nzbget/widgets/queue_tile.dart @@ -5,12 +5,14 @@ import 'package:lunasea/core.dart'; import 'package:lunasea/modules/nzbget.dart'; class NZBGetQueueTile extends StatefulWidget { + final int index; final NZBGetQueueData data; final Function refresh; final BuildContext queueContext; NZBGetQueueTile({ @required this.data, + @required this.index, @required this.queueContext, @required this.refresh, Key key, @@ -49,11 +51,8 @@ class _State extends State { ), ], ), - trailing: LunaIconButton( - icon: Icons.more_vert, - onPressed: () async => _handlePopup(), - color: widget.data.paused ? Colors.white30 : Colors.white, - ), + trailing: LunaReorderableListDragger(index: widget.index), + onTap: _handlePopup, ); } diff --git a/lib/modules/sabnzbd/core/api/data/queue.dart b/lib/modules/sabnzbd/core/api/data/queue.dart index c871506e..ce72bb86 100644 --- a/lib/modules/sabnzbd/core/api/data/queue.dart +++ b/lib/modules/sabnzbd/core/api/data/queue.dart @@ -23,6 +23,11 @@ class SABnzbdQueueData { return sizeTotal == 0 ? 0 : (((sizeTotal-sizeLeft)/sizeTotal)*100).round() ?? 0.0; } + String get formattedCategory { + if(this.category == null || this.category == '*') return 'Default'; + return category; + } + String get subtitle { String time = isPaused ? 'Paused' : @@ -30,7 +35,7 @@ class SABnzbdQueueData { '―' : timeLeft; String size = '${sizeTotal-sizeLeft}/$sizeTotal MB'; - return '$time\t•\t$size\t•\t$percentageDone%'; + return '$time\t•\t$size\t•\t$percentageDone%\t•\t$formattedCategory'; } bool get isPaused { diff --git a/lib/modules/sabnzbd/routes/queue.dart b/lib/modules/sabnzbd/routes/queue.dart index ebbb817c..9b4162df 100644 --- a/lib/modules/sabnzbd/routes/queue.dart +++ b/lib/modules/sabnzbd/routes/queue.dart @@ -143,6 +143,7 @@ class _State extends State with TickerProviderStateMixin, Automati itemBuilder: (context, index) => SABnzbdQueueTile( key: Key(_queue[index].nzoId), data: _queue[index], + index: index, queueContext: context, refresh: () => _fetchWithoutMessage(), ), diff --git a/lib/modules/sabnzbd/widgets/queue_tile.dart b/lib/modules/sabnzbd/widgets/queue_tile.dart index 05cc3396..417a35da 100644 --- a/lib/modules/sabnzbd/widgets/queue_tile.dart +++ b/lib/modules/sabnzbd/widgets/queue_tile.dart @@ -5,12 +5,14 @@ import 'package:lunasea/core.dart'; import 'package:lunasea/modules/sabnzbd.dart'; class SABnzbdQueueTile extends StatefulWidget { + final int index; final SABnzbdQueueData data; final Function refresh; final BuildContext queueContext; SABnzbdQueueTile({ @required this.data, + @required this.index, @required this.queueContext, @required this.refresh, Key key, @@ -48,11 +50,8 @@ class _State extends State { ), ], ), - trailing: LunaIconButton( - icon: Icons.more_vert, - onPressed: () async => _handlePopup(), - color: widget.data.isPaused ? Colors.white30 : Colors.white, - ), + trailing: LunaReorderableListDragger(index: widget.index), + onTap: _handlePopup, ); Future _handlePopup() async {