Add confirm dialog when adding comment to posts/comments over 30 days old

Implements Feature #58
merge-requests/67/merge
Hank Grabowski 2024-06-27 20:24:16 -04:00
rodzic f8ac2a05c0
commit c8159eb830
6 zmienionych plików z 41 dodań i 5 usunięć

Wyświetl plik

@ -34,6 +34,8 @@
settings.([Feature #65](https://gitlab.com/mysocialportal/relatica/-/issues/65)) settings.([Feature #65](https://gitlab.com/mysocialportal/relatica/-/issues/65))
* Ability to turn off Spoiler Alert/CWs at the application * Ability to turn off Spoiler Alert/CWs at the application
level. Defaults to on. ([Feature #42](https://gitlab.com/mysocialportal/relatica/-/issues/42)) level. Defaults to on. ([Feature #42](https://gitlab.com/mysocialportal/relatica/-/issues/42))
* Throws a confirm dialog box up if adding a comment to a post/comment over 30 days
old. ([Feature #58](https://gitlab.com/mysocialportal/relatica/-/issues/58))
## Version 0.10.1 (beta) ## Version 0.10.1 (beta)

Wyświetl plik

@ -147,7 +147,8 @@ class NotificationControl extends StatelessWidget {
: GestureDetector( : GestureDetector(
onTap: onTap, onTap: onTap,
child: Text( child: Text(
ElapsedDateUtils.epochSecondsToString(notification.timestamp), ElapsedDateUtils.elapsedTimeStringFromEpochSeconds(
notification.timestamp),
), ),
), ),
trailing: notification.dismissed || trailing: notification.dismissed ||

Wyświetl plik

@ -10,6 +10,7 @@ import '../../services/feature_version_checker.dart';
import '../../services/fediverse_server_validator.dart'; import '../../services/fediverse_server_validator.dart';
import '../../services/timeline_manager.dart'; import '../../services/timeline_manager.dart';
import '../../utils/active_profile_selector.dart'; import '../../utils/active_profile_selector.dart';
import '../../utils/dateutils.dart';
import '../../utils/interaction_availability_util.dart'; import '../../utils/interaction_availability_util.dart';
import '../../utils/snackbar_builder.dart'; import '../../utils/snackbar_builder.dart';
@ -113,6 +114,23 @@ class _InteractionsBarControlState extends State<InteractionsBarControl> {
} }
Future<void> addComment() async { Future<void> addComment() async {
if (mounted) {
final elapsed = ElapsedDateUtils.elapsedTimeFromEpochSeconds(
widget.entry.creationTimestamp);
if (elapsed > const Duration(days: 30)) {
final label = ElapsedDateUtils.elapsedTimeStringFromEpochSeconds(
widget.entry.creationTimestamp);
final confirm = await showYesNoDialog(
context,
'Entry is from $label. Are you sure you want to add a comment on it?',
);
if (confirm != true) {
return;
}
}
}
if (mounted) { if (mounted) {
context.push('/comment/new?parent_id=${widget.entry.id}'); context.push('/comment/new?parent_id=${widget.entry.id}');
} }

Wyświetl plik

@ -121,7 +121,8 @@ class StatusHeaderControl extends StatelessWidget {
Row( Row(
children: [ children: [
Text( Text(
ElapsedDateUtils.epochSecondsToString(entry.backdatedTimestamp), ElapsedDateUtils.elapsedTimeStringFromEpochSeconds(
entry.backdatedTimestamp),
style: Theme.of(context).textTheme.bodySmall, style: Theme.of(context).textTheme.bodySmall,
), ),
IconButton( IconButton(

Wyświetl plik

@ -85,7 +85,7 @@ class MessagesScreen extends StatelessWidget {
style: style, style: style,
), ),
trailing: Text( trailing: Text(
ElapsedDateUtils.epochSecondsToString( ElapsedDateUtils.elapsedTimeStringFromEpochSeconds(
thread.messages.last.createdAt), thread.messages.last.createdAt),
style: style, style: style,
), ),

Wyświetl plik

@ -40,8 +40,12 @@ class OffsetDateTimeUtils {
} }
class ElapsedDateUtils { class ElapsedDateUtils {
static String epochSecondsToString(int epochSeconds) { static String elapsedTimeStringFromEpochSeconds(int epochSeconds) {
final epoch = DateTime.fromMillisecondsSinceEpoch(epochSeconds * 1000); return epochMilliSecondsToString(epochSeconds * 1000);
}
static String epochMilliSecondsToString(int epochMilliSeconds) {
final epoch = DateTime.fromMillisecondsSinceEpoch(epochMilliSeconds);
final elapsed = DateTime.now().difference(epoch); final elapsed = DateTime.now().difference(epoch);
if (elapsed.inDays > 0) { if (elapsed.inDays > 0) {
return '${elapsed.inDays} days ago'; return '${elapsed.inDays} days ago';
@ -57,6 +61,16 @@ class ElapsedDateUtils {
return 'seconds ago'; return 'seconds ago';
} }
static Duration elapsedTimeFromEpochSeconds(int epochSeconds) {
return elapsedTimeFromEpochMilliseconds(epochSeconds * 1000);
}
static Duration elapsedTimeFromEpochMilliseconds(int epochMilliseconds) {
final epoch = DateTime.fromMillisecondsSinceEpoch(epochMilliseconds);
final elapsed = DateTime.now().difference(epoch);
return elapsed;
}
} }
const _separator = '_'; const _separator = '_';