Compare commits
	
		
			3 Commits
		
	
	
		
			46a09d5b62
			...
			6f1493808f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6f1493808f | |||
| c9d32694db | |||
| 8632a2fc81 | 
| @ -27,6 +27,31 @@ | ||||
| 	    "warningChannelDescription": "Warnings related to Moxxy" | ||||
| 	} | ||||
|     }, | ||||
|     "dateTime": { | ||||
| 	"justNow": "Just now", | ||||
| 	"nMinutesAgo": "${min}min ago", | ||||
| 	"mondayAbbrev": "Mon", | ||||
| 	"tuesdayAbbrev": "Tue", | ||||
| 	"wednessdayAbbrev": "Wed", | ||||
| 	"thursdayAbbrev": "Thu", | ||||
| 	"fridayAbbrev": "Fri", | ||||
| 	"saturdayAbbrev": "Sat", | ||||
| 	"sundayAbbrev": "Sun", | ||||
| 	"january": "January", | ||||
| 	"february": "February", | ||||
| 	"march": "March", | ||||
| 	"april": "April", | ||||
| 	"may": "May", | ||||
| 	"june": "June", | ||||
| 	"july": "July", | ||||
| 	"august": "August", | ||||
| 	"september": "September", | ||||
| 	"october": "October", | ||||
| 	"november": "November", | ||||
| 	"december": "December", | ||||
| 	"today": "Today", | ||||
| 	"yesterday": "Yesterday" | ||||
|     }, | ||||
|     "messages": { | ||||
| 	"image": "Image", | ||||
| 	"video": "Video", | ||||
|  | ||||
| @ -27,6 +27,31 @@ | ||||
| 	    "warningChannelDescription": "Warnungen im Bezug auf Moxxy" | ||||
| 	} | ||||
|     }, | ||||
|     "dateTime": { | ||||
| 	"justNow": "Gerade", | ||||
| 	"nMinutesAgo": "vor ${min}min", | ||||
| 	"mondayAbbrev": "Mon", | ||||
| 	"tuesdayAbbrev": "Die", | ||||
| 	"wednessdayAbbrev": "Mit", | ||||
| 	"thursdayAbbrev": "Don", | ||||
| 	"fridayAbbrev": "Fre", | ||||
| 	"saturdayAbbrev": "Sam", | ||||
| 	"sundayAbbrev": "Son", | ||||
| 	"january": "Januar", | ||||
| 	"february": "Februar", | ||||
| 	"march": "März", | ||||
| 	"april": "April", | ||||
| 	"may": "Mai", | ||||
| 	"june": "Juni", | ||||
| 	"july": "Juli", | ||||
| 	"august": "August", | ||||
| 	"september": "September", | ||||
| 	"october": "Oktober", | ||||
| 	"november": "November", | ||||
| 	"december": "Dezember", | ||||
| 	"today": "Heute", | ||||
| 	"yesterday": "Gestern" | ||||
|     }, | ||||
|     "messages": { | ||||
| 	"image": "Bild", | ||||
| 	"video": "Video", | ||||
|  | ||||
| @ -40,7 +40,7 @@ String formatConversationTimestamp(int timestamp, int now) { | ||||
|       return '${hourDifference}h'; | ||||
|     } | ||||
|   } else if (difference <= Duration.millisecondsPerMinute) { | ||||
|     return 'Just now'; | ||||
|     return t.dateTime.justNow; | ||||
|   } | ||||
| 
 | ||||
|   return '${(difference / Duration.millisecondsPerMinute).floor()}min'; | ||||
| @ -58,9 +58,10 @@ String formatMessageTimestamp(int timestamp, int now) { | ||||
|     return '${dt.hour}:${padInt(dt.minute)}'; | ||||
|   } else { | ||||
|     if (difference < Duration.millisecondsPerMinute) { | ||||
|       return 'Just now'; | ||||
|       return t.dateTime.justNow; | ||||
|     } else { | ||||
|       return '${(difference / Duration.millisecondsPerMinute).floor()}min ago'; | ||||
|       final diff = (difference / Duration.millisecondsPerMinute).floor(); | ||||
|       return t.dateTime.nMinutesAgo(min: diff); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -69,19 +70,19 @@ String formatMessageTimestamp(int timestamp, int now) { | ||||
| String weekdayToStringAbbrev(int day) { | ||||
|   switch (day) { | ||||
|     case DateTime.monday: | ||||
|       return 'Mon'; | ||||
|       return t.dateTime.mondayAbbrev; | ||||
|     case DateTime.tuesday: | ||||
|       return 'Tue'; | ||||
|       return t.dateTime.tuesdayAbbrev; | ||||
|     case DateTime.wednesday: | ||||
|       return 'Wed'; | ||||
|       return t.dateTime.wednessdayAbbrev; | ||||
|     case DateTime.thursday: | ||||
|       return 'Thu'; | ||||
|       return t.dateTime.thursdayAbbrev; | ||||
|     case DateTime.friday: | ||||
|       return 'Fri'; | ||||
|       return t.dateTime.fridayAbbrev; | ||||
|     case DateTime.saturday: | ||||
|       return 'Sat'; | ||||
|       return t.dateTime.saturdayAbbrev; | ||||
|     case DateTime.sunday: | ||||
|       return 'Sun'; | ||||
|       return t.dateTime.sundayAbbrev; | ||||
|   } | ||||
| 
 | ||||
|   // Should not happen | ||||
| @ -92,29 +93,29 @@ String weekdayToStringAbbrev(int day) { | ||||
| String monthToString(int month) { | ||||
|   switch (month) { | ||||
|     case DateTime.january: | ||||
|       return 'January'; | ||||
|       return t.dateTime.january; | ||||
|     case DateTime.february: | ||||
|       return 'February'; | ||||
|       return t.dateTime.february; | ||||
|     case DateTime.march: | ||||
|       return 'March'; | ||||
|       return t.dateTime.march; | ||||
|     case DateTime.april: | ||||
|       return 'April'; | ||||
|       return t.dateTime.april; | ||||
|     case DateTime.may: | ||||
|       return 'May'; | ||||
|       return t.dateTime.may; | ||||
|     case DateTime.june: | ||||
|       return 'June'; | ||||
|       return t.dateTime.june; | ||||
|     case DateTime.july: | ||||
|       return 'July'; | ||||
|       return t.dateTime.july; | ||||
|     case DateTime.august: | ||||
|       return 'August'; | ||||
|       return t.dateTime.august; | ||||
|     case DateTime.september: | ||||
|       return 'September'; | ||||
|       return t.dateTime.september; | ||||
|     case DateTime.october: | ||||
|       return 'October'; | ||||
|       return t.dateTime.october; | ||||
|     case DateTime.november: | ||||
|       return 'November'; | ||||
|       return t.dateTime.november; | ||||
|     case DateTime.december: | ||||
|       return 'December'; | ||||
|       return t.dateTime.december; | ||||
|   } | ||||
| 
 | ||||
|   // Should not happen | ||||
| @ -125,9 +126,9 @@ String monthToString(int month) { | ||||
| /// like 'Today', 'Yesterday', 'Fri, 7. August' or '6. August 2022'. | ||||
| String formatDateBubble(DateTime dt, DateTime now) { | ||||
|   if (dt.day == now.day && dt.month == now.month && dt.year == now.year) { | ||||
|     return 'Today'; | ||||
|     return t.dateTime.today; | ||||
|   } else if (now.subtract(const Duration(days: 1)).day == dt.day) { | ||||
|     return 'Yesterday'; | ||||
|     return t.dateTime.yesterday; | ||||
|   } else if (dt.year == now.year) { | ||||
|     return '${weekdayToStringAbbrev(dt.weekday)}, ${dt.day}. ${monthToString(dt.month)}'; | ||||
|   } else { | ||||
|  | ||||
| @ -17,9 +17,9 @@ import 'package:moxxyv2/ui/pages/conversation/blink.dart'; | ||||
| import 'package:moxxyv2/ui/pages/conversation/bottom.dart'; | ||||
| import 'package:moxxyv2/ui/pages/conversation/helpers.dart'; | ||||
| import 'package:moxxyv2/ui/pages/conversation/topbar.dart'; | ||||
| import 'package:moxxyv2/ui/widgets/chat/bubbles/date.dart'; | ||||
| import 'package:moxxyv2/ui/widgets/chat/bubbles/new_device.dart'; | ||||
| import 'package:moxxyv2/ui/widgets/chat/chatbubble.dart'; | ||||
| import 'package:moxxyv2/ui/widgets/chat/datebubble.dart'; | ||||
| import 'package:moxxyv2/ui/widgets/chat/media/new_device.dart'; | ||||
| import 'package:moxxyv2/ui/widgets/overview_menu.dart'; | ||||
| 
 | ||||
| class ConversationPage extends StatefulWidget { | ||||
| @ -109,22 +109,31 @@ class ConversationPageState extends State<ConversationPage> with TickerProviderS | ||||
| 
 | ||||
|   Widget _renderBubble(ConversationState state, BuildContext context, int _index, double maxWidth, String jid) { | ||||
|     if (_index.isEven) { | ||||
|       // Check if we have to render a date bubble | ||||
|       final nextMessageDateTime = DateTime.fromMillisecondsSinceEpoch( | ||||
|         state.messages[state.messages.length - 1 - _index ~/ 2].timestamp, | ||||
|       ); | ||||
|       final nextIndex = state.messages.length - 2 - _index ~/ 2; | ||||
|       final lastMessageDateTime = nextIndex > 0 ? | ||||
|         DateTime.fromMillisecondsSinceEpoch(state.messages[nextIndex].timestamp) : | ||||
|         null; | ||||
|          | ||||
|       if (lastMessageDateTime == null) { | ||||
|         return const SizedBox(); | ||||
|       } | ||||
|       if (_index == 0) return const SizedBox(); | ||||
| 
 | ||||
|       if (lastMessageDateTime.day != nextMessageDateTime.day || | ||||
|           lastMessageDateTime.month != nextMessageDateTime.month || | ||||
|           lastMessageDateTime.year != nextMessageDateTime.year) { | ||||
|       final prevIndexRaw = (_index + 2) ~/ 2; | ||||
|       final prevIndex = state.messages.length - prevIndexRaw; | ||||
|       final prevMessageDateTime = prevIndex < 0 || prevIndexRaw == 0 ? | ||||
|         null : | ||||
|         DateTime.fromMillisecondsSinceEpoch( | ||||
|           state.messages[prevIndex].timestamp, | ||||
|         ); | ||||
| 
 | ||||
|       if (prevMessageDateTime == null) return const SizedBox(); | ||||
| 
 | ||||
|       final nextIndexRaw = _index ~/ 2; | ||||
|       final nextIndex = state.messages.length - nextIndexRaw; | ||||
|       final nextMessageDateTime = nextIndex < 0 || nextIndexRaw == 0 ? | ||||
|         null : | ||||
|         DateTime.fromMillisecondsSinceEpoch( | ||||
|           state.messages[nextIndex].timestamp, | ||||
|         ); | ||||
|       if (nextMessageDateTime == null) return const SizedBox(); | ||||
|        | ||||
|       // Check if we have to render a date bubble | ||||
|       if (prevMessageDateTime.day != nextMessageDateTime.day || | ||||
|           prevMessageDateTime.month != nextMessageDateTime.month || | ||||
|           prevMessageDateTime.year != nextMessageDateTime.year) { | ||||
|         return Row( | ||||
|           mainAxisAlignment: MainAxisAlignment.center, | ||||
|           children: [ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user