gonna continue later (a long time)
This commit is contained in:
parent
08cf4913eb
commit
74c05be615
|
|
@ -317,6 +317,8 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
if (kIsWeb) {
|
||||
onFocusSub = html.window.onFocus.listen((_) => setReadMarker());
|
||||
}
|
||||
|
||||
_getThreads();
|
||||
}
|
||||
|
||||
void _tryLoadTimeline() async {
|
||||
|
|
@ -376,6 +378,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
}
|
||||
|
||||
Future<void>? loadTimelineFuture;
|
||||
Map<String, Thread>? threads;
|
||||
|
||||
int? animateInEventIndex;
|
||||
|
||||
|
|
@ -418,6 +421,15 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
return;
|
||||
}
|
||||
|
||||
Future<void> _getThreads() async {
|
||||
try {
|
||||
threads = await room.getThreads();
|
||||
Logs().w('Thread amount: ${threads?.length}');
|
||||
} catch (e, s) {
|
||||
Logs().w('Unable to load threads in $roomId', e, s);
|
||||
}
|
||||
}
|
||||
|
||||
String? scrollToEventIdMarker;
|
||||
|
||||
@override
|
||||
|
|
@ -754,7 +766,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
return;
|
||||
}
|
||||
|
||||
Navigator.of(context).push(new MaterialPageRoute(
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (BuildContext ctx) {
|
||||
return RecoveredEventDialog(
|
||||
event: recoveredEvent,
|
||||
|
|
@ -774,7 +786,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
}
|
||||
final event = selectedEvents.single;
|
||||
var text = event.isRichMessage ? event.formattedText : event.text;
|
||||
var content = {...event.content};
|
||||
final content = {...event.content};
|
||||
try {
|
||||
text = await Translator.translate(
|
||||
text, PlatformDispatcher.instance.locale.languageCode);
|
||||
|
|
@ -873,18 +885,23 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
|
||||
void endPollAction() async {
|
||||
final event = selectedEvents.first;
|
||||
if (event == null) return;
|
||||
final client = currentRoomBundle.firstWhere(
|
||||
(cl) => selectedEvents.first.senderId == cl!.userID,
|
||||
orElse: () => null,
|
||||
);
|
||||
if (client == null) return;
|
||||
if (event.senderId != client!.userID) return;
|
||||
await room.sendEvent({
|
||||
'org.matrix.msc1767.text': 'Ended poll',
|
||||
'm.relates_to': {'rel_type': 'm.reference', 'event_id': event.eventId},
|
||||
'body': 'Ended poll'
|
||||
}, type: 'org.matrix.msc3381.poll.end');
|
||||
if (event.senderId != client.userID) return;
|
||||
await room.sendEvent(
|
||||
{
|
||||
'org.matrix.msc1767.text': 'Ended poll',
|
||||
'm.relates_to': {
|
||||
'rel_type': 'm.reference',
|
||||
'event_id': event.eventId,
|
||||
},
|
||||
'body': 'Ended poll',
|
||||
},
|
||||
type: 'org.matrix.msc3381.poll.end',
|
||||
);
|
||||
}
|
||||
|
||||
void redactEventsAction() async {
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class ChatEventList extends StatelessWidget {
|
|||
|
||||
final horizontalPadding = FluffyThemes.isColumnMode(context) ? 8.0 : 0.0;
|
||||
|
||||
final events = timeline.events.filterByVisibleInGui();
|
||||
final events = timeline.events.filterByVisibleInGui().filterByThreaded(false);
|
||||
final animateInEventIndex = controller.animateInEventIndex;
|
||||
|
||||
// create a map of eventId --> index to greatly improve performance of
|
||||
|
|
@ -120,6 +120,10 @@ class ChatEventList extends StatelessWidget {
|
|||
final animateIn = animateInEventIndex != null &&
|
||||
timeline.events.length > animateInEventIndex &&
|
||||
event == timeline.events[animateInEventIndex];
|
||||
|
||||
final thread = (controller.threads?.containsKey(event.eventId) ?? false)
|
||||
? controller.threads![event.eventId]
|
||||
: null;
|
||||
|
||||
return AutoScrollTag(
|
||||
key: ValueKey(event.eventId),
|
||||
|
|
@ -128,6 +132,7 @@ class ChatEventList extends StatelessWidget {
|
|||
child: Message(
|
||||
event,
|
||||
animateIn: animateIn,
|
||||
thread: thread,
|
||||
resetAnimateIn: () {
|
||||
controller.animateInEventIndex = null;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ class Message extends StatelessWidget {
|
|||
final List<Color> colors;
|
||||
final bool gradient;
|
||||
final bool singleSelected;
|
||||
final Thread? thread;
|
||||
|
||||
const Message(
|
||||
this.event, {
|
||||
|
|
@ -54,6 +55,7 @@ class Message extends StatelessWidget {
|
|||
this.longPressSelect = false,
|
||||
this.gradient = false,
|
||||
this.singleSelected = false,
|
||||
this.thread,
|
||||
required this.onSelect,
|
||||
required this.onInfoTab,
|
||||
required this.scrollToEventId,
|
||||
|
|
@ -688,6 +690,11 @@ class Message extends StatelessWidget {
|
|||
: const SizedBox.shrink(),
|
||||
),
|
||||
),
|
||||
Text(
|
||||
thread == null
|
||||
? 'No thread'
|
||||
: 'Has thread, last event: ${thread!.lastEvent != null ? thread!.lastEvent!.eventId : 'None'}',
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -253,7 +253,7 @@ class ChatListItem extends StatelessWidget {
|
|||
children: <Widget>[
|
||||
if (typingText.isEmpty &&
|
||||
ownMessage &&
|
||||
room.lastEvent!.status.isSending) ...[
|
||||
(room.lastEvent?.status.isSending ?? false)) ...[
|
||||
const SizedBox(
|
||||
width: 16,
|
||||
height: 16,
|
||||
|
|
|
|||
|
|
@ -4,6 +4,10 @@ import 'package:matrix/matrix.dart';
|
|||
import '../../config/app_config.dart';
|
||||
|
||||
extension VisibleInGuiExtension on List<Event> {
|
||||
List<Event> filterByThreaded(bool threaded) {
|
||||
return where((e) => e.isThreaded == threaded).toList();
|
||||
}
|
||||
|
||||
List<Event> filterByVisibleInGui({String? exceptionEventId}) {
|
||||
final visibleEvents =
|
||||
where((e) => e.isVisibleInGui || e.eventId == exceptionEventId)
|
||||
|
|
@ -46,7 +50,9 @@ extension IsStateExtension on Event {
|
|||
// if we enabled to hide all redacted events, don't show those
|
||||
(!AppConfig.hideRedactedEvents || !redacted) &&
|
||||
// if we enabled to hide all unknown events, don't show those
|
||||
(!AppConfig.hideUnknownEvents || isEventTypeKnown || type == PollEvents.PollStart) &&
|
||||
(!AppConfig.hideUnknownEvents ||
|
||||
isEventTypeKnown ||
|
||||
type == PollEvents.PollStart) &&
|
||||
// remove state events that we don't want to render
|
||||
(isState || !AppConfig.hideAllStateEvents) &&
|
||||
// hide simple join/leave member events in public rooms
|
||||
|
|
@ -56,5 +62,9 @@ extension IsStateExtension on Event {
|
|||
content.tryGet<String>('membership') == 'ban' ||
|
||||
stateKey != senderId);
|
||||
|
||||
bool get isThreaded =>
|
||||
relationshipEventId != null &&
|
||||
relationshipType == RelationshipTypes.thread;
|
||||
|
||||
bool get isState => this.stateKey != null;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue