Skip to content
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
4 changes: 4 additions & 0 deletions assets/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@
"@subscribeFailedTitle": {
"description": "Error title when subscribing to a channel failed."
},
"actionSheetOptionViewChannelMembers": "View channel members",
"@actionSheetOptionViewChannelMembers": {
"description": "Label for navigating to a channel's members page."
},
"actionSheetOptionMarkChannelAsRead": "Mark channel as read",
"@actionSheetOptionMarkChannelAsRead": {
"description": "Label for marking a channel as read."
Expand Down
22 changes: 22 additions & 0 deletions lib/api/route/channels.dart
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,25 @@ Future<void> updateUserTopic(ApiConnection connection, {
'visibility_policy': visibilityPolicy,
});
}

/// https://zulip.com/api/get-subscribers
Future<GetSubscribersResult> getSubscribers(ApiConnection connection, {
required int streamId,
}) {
return connection.get('getSubscribers', GetSubscribersResult.fromJson,
'streams/$streamId/members', null);
}

@JsonSerializable(fieldRename: FieldRename.snake)
class GetSubscribersResult {
final List<int> subscribers;

GetSubscribersResult({
required this.subscribers,
});

factory GetSubscribersResult.fromJson(Map<String, dynamic> json) =>
_$GetSubscribersResultFromJson(json);

Map<String, dynamic> toJson() => _$GetSubscribersResultToJson(this);
}
12 changes: 12 additions & 0 deletions lib/api/route/channels.g.dart

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

6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,12 @@ abstract class ZulipLocalizations {
/// **'Failed to subscribe'**
String get subscribeFailedTitle;

/// Label for navigating to a channel's members page.
///
/// In en, this message translates to:
/// **'View channel members'**
String get actionSheetOptionViewChannelMembers;

/// Label for marking a channel as read.
///
/// In en, this message translates to:
Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_ar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Failed to subscribe';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_de.dart
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ class ZulipLocalizationsDe extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Konnte nicht abonnieren';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead =>
'Kanal als gelesen markieren';
Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Failed to subscribe';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_fr.dart
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ class ZulipLocalizationsFr extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Failed to subscribe';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'Marquer le canal comme lu';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_it.dart
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ class ZulipLocalizationsIt extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Iscrizione non riuscita';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'Segna il canale come letto';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_ja.dart
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'チャンネルへの参加に失敗しました';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'チャンネルを既読にする';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_nb.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Failed to subscribe';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_pl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Subskrypcja bez powodzenia';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead =>
'Oznacz kanał jako przeczytany';
Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_ru.dart
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Подписаться не удалось';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead =>
'Отметить канал как прочитанный';
Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_sk.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Failed to subscribe';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_sl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class ZulipLocalizationsSl extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Naročnina ni uspela';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'Označi kanal kot prebran';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_uk.dart
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ class ZulipLocalizationsUk extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Не вдалося підписатися';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead =>
'Позначити канал як прочитаний';
Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_zh.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class ZulipLocalizationsZh extends ZulipLocalizations {
@override
String get subscribeFailedTitle => 'Failed to subscribe';

@override
String get actionSheetOptionViewChannelMembers => 'View channel members';

@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

Expand Down
22 changes: 22 additions & 0 deletions lib/widgets/action_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import '../model/internal_link.dart';
import '../model/narrow.dart';
import 'actions.dart';
import 'button.dart';
import 'channel_subscribers.dart';
import 'color.dart';
import 'compose_box.dart';
import 'content.dart';
Expand Down Expand Up @@ -504,6 +505,7 @@ void showChannelActionSheet(BuildContext context, {
&& channel != null && store.selfHasContentAccess(channel))
[SubscribeButton(pageContext: pageContext, channelId: channelId)],
[
ChannelMembersButton(pageContext: pageContext, channelId: channelId),
if (unreadCount > 0)
MarkChannelAsReadButton(pageContext: pageContext, channelId: channelId),
if (showTopicListButton)
Expand Down Expand Up @@ -580,6 +582,26 @@ class MarkChannelAsReadButton extends ActionSheetMenuItemButton {
}
}

class ChannelMembersButton extends ActionSheetMenuItemButton {
const ChannelMembersButton({super.key, required this.channelId, required super.pageContext});

final int channelId;

@override
IconData get icon => ZulipIcons.two_person;

@override
String label(ZulipLocalizations zulipLocalizations) {
return zulipLocalizations.actionSheetOptionViewChannelMembers;
}

@override
void onPressed() {
Navigator.push(pageContext,
ChannelMembersPage.buildRoute(context: pageContext, streamId: channelId));
}
}

class TopicListButton extends ActionSheetMenuItemButton {
const TopicListButton({
super.key,
Expand Down
Loading