Skip to content

api: Rename StreamMessage to ChannelMessage #848

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion integration_test/unreadmarker_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ void main() {

// prepare message list data
final messages = List.generate(messageCount,
(i) => eg.streamMessage(flags: [MessageFlag.read]));
(i) => eg.channelMessage(flags: [MessageFlag.read]));
connection.prepare(json:
newestResult(foundOldest: true, messages: messages).toJson());

Expand Down
12 changes: 6 additions & 6 deletions lib/api/model/model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ sealed class Message {

factory Message.fromJson(Map<String, dynamic> json) {
final type = json['type'] as String;
if (type == 'stream') return StreamMessage.fromJson(json);
if (type == 'stream') return ChannelMessage.fromJson(json);
if (type == 'private') return DmMessage.fromJson(json);
throw Exception("Message.fromJson: unexpected message type $type");
}
Expand Down Expand Up @@ -571,15 +571,15 @@ enum MessageFlag {
}

@JsonSerializable(fieldRename: FieldRename.snake)
class StreamMessage extends Message {
class ChannelMessage extends Message {
@override
@JsonKey(includeToJson: true)
String get type => 'stream';

final String displayRecipient;
final int streamId;

StreamMessage({
ChannelMessage({
required super.client,
required super.content,
required super.contentType,
Expand All @@ -602,11 +602,11 @@ class StreamMessage extends Message {
required this.streamId,
});

factory StreamMessage.fromJson(Map<String, dynamic> json) =>
_$StreamMessageFromJson(json);
factory ChannelMessage.fromJson(Map<String, dynamic> json) =>
_$ChannelMessageFromJson(json);

@override
Map<String, dynamic> toJson() => _$StreamMessageToJson(this);
Map<String, dynamic> toJson() => _$ChannelMessageToJson(this);
}

@JsonSerializable(fieldRename: FieldRename.snake)
Expand Down
6 changes: 3 additions & 3 deletions lib/api/model/model.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions lib/model/message_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ mixin _MessageSequence {

@visibleForTesting
bool haveSameRecipient(Message prevMessage, Message message) {
if (prevMessage is StreamMessage && message is StreamMessage) {
if (prevMessage is ChannelMessage && message is ChannelMessage) {
if (prevMessage.streamId != message.streamId) return false;
if (prevMessage.topic != message.topic) return false;
} else if (prevMessage is DmMessage && message is DmMessage) {
Expand All @@ -279,7 +279,7 @@ bool haveSameRecipient(Message prevMessage, Message message) {
return true;

// switch ((prevMessage, message)) {
// case (StreamMessage(), StreamMessage()):
// case (ChannelMessage(), ChannelMessage()):
// // TODO(dart-3): this doesn't type-narrow prevMessage and message
// case (DmMessage(), DmMessage()):
// // …
Expand Down Expand Up @@ -358,14 +358,14 @@ class MessageListView with ChangeNotifier, _MessageSequence {
switch (narrow) {
case CombinedFeedNarrow():
return switch (message) {
StreamMessage() =>
ChannelMessage() =>
store.isTopicVisible(message.streamId, message.topic),
DmMessage() => true,
};

case ChannelNarrow(:final streamId):
assert(message is StreamMessage && message.streamId == streamId);
if (message is! StreamMessage) return false;
assert(message is ChannelMessage && message.streamId == streamId);
if (message is! ChannelMessage) return false;
return store.isTopicVisibleInStream(streamId, message.topic);

case TopicNarrow():
Expand Down
8 changes: 4 additions & 4 deletions lib/model/narrow.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ sealed class Narrow {
sealed class SendableNarrow extends Narrow {
factory SendableNarrow.ofMessage(Message message, {required int selfUserId}) {
switch (message) {
case StreamMessage():
case ChannelMessage():
return TopicNarrow.ofMessage(message);
case DmMessage():
return DmNarrow.ofMessage(message, selfUserId: selfUserId);
Expand Down Expand Up @@ -72,7 +72,7 @@ class ChannelNarrow extends Narrow {

@override
bool containsMessage(Message message) {
return message is StreamMessage && message.streamId == streamId;
return message is ChannelMessage && message.streamId == streamId;
}

@override
Expand All @@ -94,7 +94,7 @@ class ChannelNarrow extends Narrow {
class TopicNarrow extends Narrow implements SendableNarrow {
const TopicNarrow(this.streamId, this.topic);

factory TopicNarrow.ofMessage(StreamMessage message) {
factory TopicNarrow.ofMessage(ChannelMessage message) {
return TopicNarrow(message.streamId, message.topic);
}

Expand All @@ -103,7 +103,7 @@ class TopicNarrow extends Narrow implements SendableNarrow {

@override
bool containsMessage(Message message) {
return (message is StreamMessage
return (message is ChannelMessage
&& message.streamId == streamId && message.topic == topic);
}

Expand Down
10 changes: 5 additions & 5 deletions lib/model/recent_senders.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ class RecentSenders {
final messagesByUserInStream = <(int, int), QueueList<int>>{};
final messagesByUserInTopic = <(int, String, int), QueueList<int>>{};
for (final message in messages) {
if (message is! StreamMessage) continue;
final StreamMessage(:streamId, :topic, :senderId, id: int messageId) = message;
if (message is! ChannelMessage) continue;
final ChannelMessage(:streamId, :topic, :senderId, id: int messageId) = message;
(messagesByUserInStream[(streamId, senderId)] ??= QueueList()).add(messageId);
(messagesByUserInTopic[(streamId, topic, senderId)] ??= QueueList()).add(messageId);
}
Expand All @@ -60,8 +60,8 @@ class RecentSenders {

/// Records the necessary data from a new message.
void handleMessage(Message message) {
if (message is! StreamMessage) return;
final StreamMessage(:streamId, :topic, :senderId, id: int messageId) = message;
if (message is! ChannelMessage) return;
final ChannelMessage(:streamId, :topic, :senderId, id: int messageId) = message;
((streamSenders[streamId] ??= {})
[senderId] ??= MessageIdTracker()).add(messageId);
(((topicSenders[streamId] ??= {})[topic] ??= {})
Expand All @@ -73,7 +73,7 @@ class RecentSenders {

final messagesByUser = <int, List<int>>{};
for (final id in event.messageIds) {
final message = cachedMessages[id] as StreamMessage?;
final message = cachedMessages[id] as ChannelMessage?;
if (message == null) continue;
(messagesByUser[message.senderId] ??= []).add(id);
}
Expand Down
6 changes: 3 additions & 3 deletions lib/model/unreads.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import 'channel.dart';
// TODO handle moved messages
// TODO When [oldUnreadsMissing], if you load a message list with very old unreads,
// sync to those unreads, because the user has shown an interest in them.
// TODO When loading a message list with stream messages, check all the stream
// TODO When loading a message list with channel messages, check all the stream
// messages and refresh [mentions] (see [mentions] dartdoc).
class Unreads extends ChangeNotifier {
factory Unreads({
Expand Down Expand Up @@ -86,7 +86,7 @@ class Unreads extends ChangeNotifier {
// TODO excluded for now; would need to handle nuances around muting etc.
// int count;

/// Unread stream messages, as: stream ID → topic → message IDs (sorted).
/// Unread channel messages, as: stream ID → topic → message IDs (sorted).
final Map<int, Map<String, QueueList<int>>> streams;

/// Unread DM messages, as: DM narrow → message IDs (sorted).
Expand Down Expand Up @@ -213,7 +213,7 @@ class Unreads extends ChangeNotifier {
}

switch (message) {
case StreamMessage():
case ChannelMessage():
_addLastInStreamTopic(message.id, message.streamId, message.topic);
case DmMessage():
final narrow = DmNarrow.ofMessage(message, selfUserId: selfUserId);
Expand Down
2 changes: 1 addition & 1 deletion lib/widgets/action_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ class QuoteAndReplyButton extends MessageActionSheetMenuItemButton {
if (
topicController != null
&& topicController.textNormalized == kNoTopicTopic
&& message is StreamMessage
&& message is ChannelMessage
) {
topicController.value = TextEditingValue(text: message.topic);
}
Expand Down
8 changes: 4 additions & 4 deletions lib/widgets/message_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -811,7 +811,7 @@ class RecipientHeader extends StatelessWidget {
Widget build(BuildContext context) {
final message = this.message;
return switch (message) {
StreamMessage() => StreamMessageRecipientHeader(message: message,
ChannelMessage() => ChannelMessageRecipientHeader(message: message,
showStream: narrow is CombinedFeedNarrow),
DmMessage() => DmRecipientHeader(message: message),
};
Expand Down Expand Up @@ -923,14 +923,14 @@ class _UnreadMarker extends StatelessWidget {
}
}

class StreamMessageRecipientHeader extends StatelessWidget {
const StreamMessageRecipientHeader({
class ChannelMessageRecipientHeader extends StatelessWidget {
const ChannelMessageRecipientHeader({
super.key,
required this.message,
required this.showStream,
});

final StreamMessage message;
final ChannelMessage message;
final bool showStream;

@override
Expand Down
6 changes: 3 additions & 3 deletions test/api/model/events_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ void main() {
});

test('message: move flags into message object', () {
final message = eg.streamMessage();
final message = eg.channelMessage();
MessageEvent mkEvent(List<MessageFlag> flags) => Event.fromJson({
'type': 'message',
'id': 1,
Expand All @@ -89,7 +89,7 @@ void main() {
});

group('update_message', () {
final message = eg.streamMessage();
final message = eg.channelMessage();
final baseJson = {
'id': 1,
'type': 'update_message',
Expand Down Expand Up @@ -121,7 +121,7 @@ void main() {
});
});

test('delete_message: require streamId and topic for stream messages', () {
test('delete_message: require streamId and topic for channel messages', () {
check(() => DeleteMessageEvent.fromJson({
'id': 1,
'type': 'delete_message',
Expand Down
6 changes: 3 additions & 3 deletions test/api/model/model_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ void main() {

group('Message', () {
Map<String, dynamic> baseStreamJson() =>
deepToJson(eg.streamMessage()) as Map<String, dynamic>;
deepToJson(eg.channelMessage()) as Map<String, dynamic>;

test('subject -> topic', () {
check(baseStreamJson()).not((it) => it.containsKey('topic'));
Expand All @@ -137,7 +137,7 @@ void main() {

test('no crash on unrecognized flag', () {
final m1 = Message.fromJson(
(deepToJson(eg.streamMessage()) as Map<String, dynamic>)
(deepToJson(eg.channelMessage()) as Map<String, dynamic>)
..['flags'] = ['read', 'something_unknown'],
);
check(m1).flags.deepEquals([MessageFlag.read, MessageFlag.unknown]);
Expand Down Expand Up @@ -217,7 +217,7 @@ void main() {
});

group('MessageEditState', () {
Map<String, dynamic> baseJson() => deepToJson(eg.streamMessage()) as Map<String, dynamic>;
Map<String, dynamic> baseJson() => deepToJson(eg.channelMessage()) as Map<String, dynamic>;

group('Edit history is absent', () {
test('Message with no evidence of an edit history -> none', () {
Expand Down
22 changes: 11 additions & 11 deletions test/api/route/messages_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ void main() {

test('modern; message found', () {
return FakeApiConnection.with_((connection) async {
final message = eg.streamMessage();
final message = eg.channelMessage();
final fakeResult = GetMessageResult(message: message);
connection.prepare(json: fakeResult.toJson());
final result = await checkGetMessageCompat(connection,
Expand All @@ -64,7 +64,7 @@ void main() {

test('modern; message not found', () {
return FakeApiConnection.with_((connection) async {
final message = eg.streamMessage();
final message = eg.channelMessage();
final fakeResponseJson = {
'code': 'BAD_REQUEST',
'msg': 'Invalid message(s)',
Expand All @@ -82,7 +82,7 @@ void main() {

test('legacy; message found', () {
return FakeApiConnection.with_(zulipFeatureLevel: 119, (connection) async {
final message = eg.streamMessage();
final message = eg.channelMessage();
final fakeResult = GetMessagesResult(
anchor: message.id,
foundNewest: false,
Expand All @@ -103,7 +103,7 @@ void main() {

test('legacy; message not found', () {
return FakeApiConnection.with_(zulipFeatureLevel: 119, (connection) async {
final message = eg.streamMessage();
final message = eg.channelMessage();
final fakeResult = GetMessagesResult(
anchor: message.id,
foundNewest: false,
Expand Down Expand Up @@ -141,7 +141,7 @@ void main() {
return result;
}

final fakeResult = GetMessageResult(message: eg.streamMessage());
final fakeResult = GetMessageResult(message: eg.channelMessage());

test('applyMarkdown true', () {
return FakeApiConnection.with_((connection) async {
Expand Down Expand Up @@ -489,7 +489,7 @@ void main() {
test('unicode emoji', () {
return FakeApiConnection.with_((connection) async {
await checkAddReaction(connection,
messageId: eg.streamMessage().id,
messageId: eg.channelMessage().id,
reaction: eg.unicodeEmojiReaction,
expectedReactionType: 'unicode_emoji');
});
Expand All @@ -498,7 +498,7 @@ void main() {
test('realm emoji', () {
return FakeApiConnection.with_((connection) async {
await checkAddReaction(connection,
messageId: eg.streamMessage().id,
messageId: eg.channelMessage().id,
reaction: eg.realmEmojiReaction,
expectedReactionType: 'realm_emoji');
});
Expand All @@ -507,7 +507,7 @@ void main() {
test('Zulip extra emoji', () {
return FakeApiConnection.with_((connection) async {
await checkAddReaction(connection,
messageId: eg.streamMessage().id,
messageId: eg.channelMessage().id,
reaction: eg.zulipExtraEmojiReaction,
expectedReactionType: 'zulip_extra_emoji');
});
Expand Down Expand Up @@ -540,7 +540,7 @@ void main() {
test('unicode emoji', () {
return FakeApiConnection.with_((connection) async {
await checkRemoveReaction(connection,
messageId: eg.streamMessage().id,
messageId: eg.channelMessage().id,
reaction: eg.unicodeEmojiReaction,
expectedReactionType: 'unicode_emoji');
});
Expand All @@ -549,7 +549,7 @@ void main() {
test('realm emoji', () {
return FakeApiConnection.with_((connection) async {
await checkRemoveReaction(connection,
messageId: eg.streamMessage().id,
messageId: eg.channelMessage().id,
reaction: eg.realmEmojiReaction,
expectedReactionType: 'realm_emoji');
});
Expand All @@ -558,7 +558,7 @@ void main() {
test('Zulip extra emoji', () {
return FakeApiConnection.with_((connection) async {
await checkRemoveReaction(connection,
messageId: eg.streamMessage().id,
messageId: eg.channelMessage().id,
reaction: eg.zulipExtraEmojiReaction,
expectedReactionType: 'zulip_extra_emoji');
});
Expand Down
Loading