diff --git a/lib/models/timeline_grouping_list_data.dart b/lib/models/timeline_grouping_list_data.dart index 7eba97e..3bce48b 100644 --- a/lib/models/timeline_grouping_list_data.dart +++ b/lib/models/timeline_grouping_list_data.dart @@ -1,16 +1,26 @@ +enum GroupingType { + channel, + circle, + group, +} + class TimelineGroupingListData { - static final followersPseudoCircle = - TimelineGroupingListData('~', 'Followers'); + static const followersPseudoCircle = + TimelineGroupingListData('~', 'Followers', GroupingType.circle); + + static const empty = TimelineGroupingListData('', '', GroupingType.circle); final String id; final String name; - TimelineGroupingListData(this.id, this.name); + final GroupingType groupingType; + + const TimelineGroupingListData(this.id, this.name, this.groupingType); @override String toString() { - return 'CircleData{id: $id, name: $name}'; + return 'CircleData{id: $id, name: $name, type: ${groupingType.name}}'; } @override diff --git a/lib/serializers/mastodon/timeline_grouping_list_data.dart b/lib/serializers/mastodon/timeline_grouping_list_data.dart index ae0acdb..11c0784 100644 --- a/lib/serializers/mastodon/timeline_grouping_list_data.dart +++ b/lib/serializers/mastodon/timeline_grouping_list_data.dart @@ -2,9 +2,26 @@ import '../../models/timeline_grouping_list_data.dart'; extension TimelineGroupingListDataMastodonExtensions on TimelineGroupingListData { - static TimelineGroupingListData fromJson(Map json) => - TimelineGroupingListData( - json['id'], - json['title'], - ); + static TimelineGroupingListData fromJson(Map json) { + final id = json['id']?.toString() ?? ''; + final typeString = json['replies_policy']?.toString() ?? ''; + + late final GroupingType type; + if (typeString == 'followed') { + if (id.startsWith('channel')) { + type = GroupingType.channel; + } else if (id.startsWith('group')) { + type = GroupingType.group; + } else { + type = GroupingType.circle; + } + } else { + type = GroupingType.circle; + } + return TimelineGroupingListData( + id, + json['title'], + type, + ); + } }