relatica/lib/serializers/mastodon/timeline_entry_mastodon_ext...

71 wiersze
2.6 KiB
Dart

import 'package:logging/logging.dart';
import '../../models/engagement_summary.dart';
import '../../models/link_data.dart';
import '../../models/location_data.dart';
import '../../models/media_attachment.dart';
import '../../models/timeline_entry.dart';
import '../../utils/dateutils.dart';
final _logger = Logger('TimelineEntryMastodonExtensions');
extension TimelineEntryMastodonExtensions on TimelineEntry {
static TimelineEntry fromJson(Map<String, dynamic> json) {
final int timestamp = json.containsKey('created_at')
? OffsetDateTimeUtils.epochSecTimeFromTimeZoneString(json['created_at'])
.fold(
onSuccess: (value) => value,
onError: (error) {
_logger.severe("Couldn't read date time string: $error");
return 0;
})
: 0;
final id = json['id'] ?? '';
final isReshare = json.containsKey('reblogged');
final parentId = json['in_reply_to_id'] ?? '';
final parentAuthor = json['in_reply_to_account_id'] ?? '';
final parentAuthorId = json['in_reply_to_account_id'] ?? '';
final body = json['content'] ?? '';
final author = json['account']['acct'];
final authorId = json['account']['id'];
const title = '';
final externalLink = json['uri'] ?? '';
final actualLocationData = LocationData();
final modificationTimestamp = timestamp;
final backdatedTimestamp = timestamp;
final linkData = json['card'] == null
? <LinkData>[]
: [LinkData.fromMastodonJson(json['card'])];
final mediaAttachments = (json['media_attachments'] as List<dynamic>? ?? [])
.map((json) => MediaAttachment.fromMastodonJson(json))
.toList();
final favoritesCount = json['favorites_count'] ?? 0;
final repliesCount = json['replies_count'] ?? 0;
final rebloggedCount = json['reblogs_count'] ?? 0;
final engagementSummary = EngagementSummary(
favoritesCount: favoritesCount,
rebloggedCount: rebloggedCount,
repliesCount: repliesCount,
);
return TimelineEntry(
creationTimestamp: timestamp,
modificationTimestamp: modificationTimestamp,
backdatedTimestamp: backdatedTimestamp,
locationData: actualLocationData,
body: body,
isReshare: isReshare,
id: id,
parentId: parentId,
parentAuthorId: parentAuthorId,
externalLink: externalLink,
author: author,
authorId: authorId,
parentAuthor: parentAuthor,
title: title,
links: linkData,
mediaAttachments: mediaAttachments,
engagementSummary: engagementSummary,
);
}
}