Skip to content

Commit

Permalink
Fix parsing invalid sticker, improve error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
Airyzz committed Aug 31, 2024
1 parent 90206e0 commit 2f495dd
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 29 deletions.
4 changes: 2 additions & 2 deletions commet/lib/client/matrix/matrix_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ class MatrixClient extends Client {
try {
await client.init(true, isBackgroundService: isBackgroundService);
} catch (error, trace) {
Log.e("Unable to load client $clientName from database");
Log.onError(error, trace);
Log.onError(error, trace,
content: "Unable to load client $clientName from database");

client.self = ErrorProfile();
manager.alertManager.addAlert(Alert(AlertType.warning,
Expand Down
62 changes: 38 additions & 24 deletions commet/lib/client/matrix/matrix_room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -409,35 +409,49 @@ class MatrixRoom extends Room {

TimelineEvent convertEvent(matrix.Event event, {matrix.Timeline? timeline}) {
var c = client as MatrixClient;
try {
if (event.redacted) {
return MatrixTimelineEventUnknown(event, client: c);
}

if (event.redacted) {
return MatrixTimelineEventUnknown(event, client: c);
}
if (event.type == matrix.EventTypes.Message) {
if (event.relationshipType == "m.replace")
return MatrixTimelineEventEdit(event, client: c);
if (event.content["chat.commet.type"] == "chat.commet.sticker" &&
event.content['url'] is String)
return MatrixTimelineEventSticker(event, client: c);

if (event.messageType == "m.emote")
return MatrixTimelineEventEmote(event, client: c);

if (event.type == matrix.EventTypes.Message) {
if (event.relationshipType == "m.replace")
return MatrixTimelineEventEdit(event, client: c);
if (event.content["chat.commet.type"] == "chat.commet.sticker")
return MatrixTimelineEventSticker(event, client: c);
return MatrixTimelineEventMessage(event, client: c);
}

if (event.messageType == "m.emote")
return MatrixTimelineEventEmote(event, client: c);
final result = switch (event.type) {
matrix.EventTypes.Sticker => event.content['url'] is String
? MatrixTimelineEventSticker(event, client: c)
: null,
matrix.EventTypes.Encrypted =>
MatrixTimelineEventEncrypted(event, client: c),
matrix.EventTypes.Reaction =>
MatrixTimelineEventAddReaction(event, client: c),
matrix.EventTypes.RoomMember =>
MatrixTimelineEventMembership(event, client: c),
matrix.EventTypes.Redaction =>
MatrixTimelineEventRedaction(event, client: c),
_ => null
};

return MatrixTimelineEventMessage(event, client: c);
if (result != null) {
return result;
} else {
return MatrixTimelineEventUnknown(event, client: c);
}
} catch (err, trace) {
Log.e("Failed to parse event ${event.eventId} in room ${event.roomId}");
Log.onError(err, trace, content: "Failed to parse event: ${event.type}");
return MatrixTimelineEventUnknown(event, client: c);
}

return switch (event.type) {
matrix.EventTypes.Sticker => MatrixTimelineEventSticker(event, client: c),
matrix.EventTypes.Encrypted =>
MatrixTimelineEventEncrypted(event, client: c),
matrix.EventTypes.Reaction =>
MatrixTimelineEventAddReaction(event, client: c),
matrix.EventTypes.RoomMember =>
MatrixTimelineEventMembership(event, client: c),
matrix.EventTypes.Redaction =>
MatrixTimelineEventRedaction(event, client: c),
_ => MatrixTimelineEventUnknown(event, client: c)
};
}

@override
Expand Down
6 changes: 3 additions & 3 deletions commet/lib/debug/log.dart
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,10 @@ class Log {
_print(LogEntry(LogType.warning, str));
}

static void onError(Object object, StackTrace trace) {
static void onError(Object object, StackTrace trace, {String? content}) {
String? info = getDetailFromStackTrace(trace);
var entry = LogEntryException(
LogType.error, "${object.toString()} ($info)", object, trace);
var entry = LogEntryException(LogType.error,
content ?? "${object.toString()} ($info)", object, trace);
_print(entry);
}

Expand Down

0 comments on commit 2f495dd

Please sign in to comment.