Add TimelineGroupingListdata parsing of type

This commit is contained in:
Hank Grabowski 2024-08-28 11:56:19 -04:00
parent 052fa15eb8
commit 9c9428a85b
2 changed files with 36 additions and 9 deletions

View file

@ -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

View file

@ -2,9 +2,26 @@ import '../../models/timeline_grouping_list_data.dart';
extension TimelineGroupingListDataMastodonExtensions
on TimelineGroupingListData {
static TimelineGroupingListData fromJson(Map<String, dynamic> json) =>
TimelineGroupingListData(
json['id'],
json['title'],
);
static TimelineGroupingListData fromJson(Map<String, dynamic> 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,
);
}
}