From 3e0c4845e934271f6cbe2006093e9c1e0acc774d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Schw=C3=B6rer?= Date: Sun, 11 May 2025 16:32:55 +0200 Subject: [PATCH] Implement time-range filter --- flutter/lib/api/api_client.dart | 4 +- .../layout/app_bar_filter_dialog.dart | 20 ++++++++- .../components/modals/filter_modal_time.dart | 44 ------------------- .../lib/pages/debug/debug_request_view.dart | 4 +- .../lib/pages/message_list/message_list.dart | 11 +++-- flutter/pubspec.yaml | 2 +- 6 files changed, 31 insertions(+), 54 deletions(-) delete mode 100644 flutter/lib/components/modals/filter_modal_time.dart diff --git a/flutter/lib/api/api_client.dart b/flutter/lib/api/api_client.dart index 4ed7d9f..ec40684 100644 --- a/flutter/lib/api/api_client.dart +++ b/flutter/lib/api/api_client.dart @@ -299,8 +299,8 @@ class APIClient { if (filter?.channelIDs != null) 'channel_id': filter!.channelIDs!, if (filter?.senderNames != null) 'sender': filter!.senderNames!, if (filter?.hasSenderName != null) 'has_sender': [filter!.hasSenderName!.toString()], - if (filter?.timeBefore != null) 'before': [filter!.timeBefore!.toIso8601String()], - if (filter?.timeAfter != null) 'after': [filter!.timeAfter!.toIso8601String()], + if (filter?.timeBefore != null) 'before': [filter!.timeBefore!.toUtc().toIso8601String()], + if (filter?.timeAfter != null) 'after': [filter!.timeAfter!.toUtc().toIso8601String()], if (filter?.priority != null) 'priority': filter!.priority!.map((p) => p.toString()).toList(), if (filter?.usedKeys != null) 'used_key': filter!.usedKeys!, if (filter?.senderUserID != null) 'sender_user_id': filter!.senderUserID!, diff --git a/flutter/lib/components/layout/app_bar_filter_dialog.dart b/flutter/lib/components/layout/app_bar_filter_dialog.dart index 547825f..e604361 100644 --- a/flutter/lib/components/layout/app_bar_filter_dialog.dart +++ b/flutter/lib/components/layout/app_bar_filter_dialog.dart @@ -5,8 +5,10 @@ import 'package:simplecloudnotifier/components/modals/filter_modal_keytoken.dart import 'package:simplecloudnotifier/components/modals/filter_modal_priority.dart'; import 'package:simplecloudnotifier/components/modals/filter_modal_searchplain.dart'; import 'package:simplecloudnotifier/components/modals/filter_modal_sendername.dart'; -import 'package:simplecloudnotifier/components/modals/filter_modal_time.dart'; +import 'package:simplecloudnotifier/pages/message_list/message_filter_chiplet.dart'; import 'package:simplecloudnotifier/state/app_bar_state.dart'; +import 'package:simplecloudnotifier/state/app_events.dart'; +import 'package:simplecloudnotifier/state/app_settings.dart'; import 'package:simplecloudnotifier/utils/navi.dart'; class AppBarFilterDialog extends StatefulWidget { @@ -116,7 +118,21 @@ class _AppBarFilterDialogState extends State { } void _showTimeModal(BuildContext context) { - showDialog(context: context, builder: (BuildContext context) => FilterModalTime()); + final dateFormat = AppSettings().dateFormat.dateOnlyFormat(); + + final now = DateTime.now(); + showDateRangePicker(context: context, firstDate: DateTime(2000), lastDate: DateTime(now.year, now.month, now.day + 7)).then((value) { + if (value != null) { + List chiplets = []; + chiplets.add(MessageFilterChiplet( + label: dateFormat.format(value.start) + ' - ' + dateFormat.format(value.end), + value: value, + type: MessageFilterChipletType.timeRange, + )); + + AppEvents().notifyFilterListeners([MessageFilterChipletType.plainSearch], chiplets); + } + }); } void _showPlainSearchModal(BuildContext context) { diff --git a/flutter/lib/components/modals/filter_modal_time.dart b/flutter/lib/components/modals/filter_modal_time.dart deleted file mode 100644 index dab70b1..0000000 --- a/flutter/lib/components/modals/filter_modal_time.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:simplecloudnotifier/utils/navi.dart'; - -class FilterModalTime extends StatefulWidget { - @override - _FilterModalTimeState createState() => _FilterModalTimeState(); -} - -class _FilterModalTimeState extends State { - DateTime? _tsBefore = null; - DateTime? _tsAfter = null; - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - return AlertDialog( - title: const Text('Timerange'), - content: Container( - width: 9000, - height: 9000, - child: Placeholder(), - ), - actions: [ - TextButton( - style: TextButton.styleFrom(textStyle: Theme.of(context).textTheme.labelLarge), - child: const Text('Apply'), - onPressed: () { - onOkay(); - }, - ), - ], - ); - } - - void onOkay() { - Navi.popDialog(context); - - //TODO - } -} diff --git a/flutter/lib/pages/debug/debug_request_view.dart b/flutter/lib/pages/debug/debug_request_view.dart index 65b6d55..3e7909c 100644 --- a/flutter/lib/pages/debug/debug_request_view.dart +++ b/flutter/lib/pages/debug/debug_request_view.dart @@ -81,9 +81,9 @@ class _DebugRequestViewPageState extends State { UI.buttonIconOnly( iconSize: 14, onPressed: () { - Clipboard.setData(new ClipboardData(text: title)); + Clipboard.setData(new ClipboardData(text: value)); Toaster.info("Clipboard", 'Copied text to Clipboard'); - print('================= [CLIPBOARD] =================\n${title}\n================= [/CLIPBOARD] ================='); + print('================= [CLIPBOARD] =================\n${value}\n================= [/CLIPBOARD] ================='); }, icon: FontAwesomeIcons.copy, ), diff --git a/flutter/lib/pages/message_list/message_list.dart b/flutter/lib/pages/message_list/message_list.dart index c3bc7cf..67a2fbf 100644 --- a/flutter/lib/pages/message_list/message_list.dart +++ b/flutter/lib/pages/message_list/message_list.dart @@ -340,9 +340,14 @@ class _MessageListPageState extends State with RouteAware { var chipletsTimeRange = _filterChiplets.where((p) => p.type == MessageFilterChipletType.timeRange).toList(); if (chipletsTimeRange.isNotEmpty) { - //TODO - //filter.timeAfter = chipletsTimeRange[0].value1 as DateTime; - //filter.timeBefore = chipletsTimeRange[0].value2 as DateTime; + var t0 = (chipletsTimeRange[0].value as DateTimeRange).start.toLocal(); + var t1 = (chipletsTimeRange[0].value as DateTimeRange).end.toLocal(); + + t0 = DateTime(t0.year, t0.month, t0.day, 0, 0, 0, 0); + t1 = DateTime(t1.year, t1.month, t1.day, 23, 59, 59, 999); + + filter.timeAfter = t0; + filter.timeBefore = t1; } return filter; diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index 960bfe0..0aae14b 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: simplecloudnotifier description: "Receive push messages" publish_to: 'none' -version: 2.0.0+479 +version: 2.0.0+481 environment: sdk: '>=3.2.6 <4.0.0'