Add support for 7TV and FFZ emote authors (#306)

This commit is contained in:
Tommy Chow 2023-11-28 03:58:07 -05:00 • committed by GitHub
parent 8fab6bdbc9
commit 9e91208555
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 54 additions and 11 deletions

View file

@ -87,17 +87,33 @@ class ImagesFFZ {
_$ImagesFFZFromJson(json);
}
@JsonSerializable(createToJson: false, fieldRename: FieldRename.snake)
class OwnerFFZ {
final String displayName;
final String name;
const OwnerFFZ({
required this.displayName,
required this.name,
});
factory OwnerFFZ.fromJson(Map<String, dynamic> json) =>
_$OwnerFFZFromJson(json);
}
@JsonSerializable(createToJson: false)
class EmoteFFZ {
final String name;
final int height;
final int width;
final OwnerFFZ owner;
final ImagesFFZ urls;
const EmoteFFZ(
this.name,
this.height,
this.width,
this.owner,
this.urls,
);
@ -122,21 +138,19 @@ class Emote7TV {
}
@JsonSerializable(createToJson: false, fieldRename: FieldRename.snake)
class Emote7TVUser {
final String id;
class Owner7TV {
final String username;
final String displayName;
final String avatarUrl;
const Emote7TVUser({
required this.id,
const Owner7TV({
required this.username,
required this.displayName,
required this.avatarUrl,
});
factory Emote7TVUser.fromJson(Map<String, dynamic> json) =>
_$Emote7TVUserFromJson(json);
factory Owner7TV.fromJson(Map<String, dynamic> json) =>
_$Owner7TVFromJson(json);
}
@JsonSerializable(createToJson: false, fieldRename: FieldRename.snake)
@ -144,12 +158,14 @@ class Emote7TVData {
final String id;
final String name;
final int flags;
final Owner7TV owner;
final Emote7TVHost host;
const Emote7TVData(
this.id,
this.name,
this.flags,
this.owner,
this.host,
);
@ -199,6 +215,8 @@ class Emote {
final bool zeroWidth;
final String url;
final EmoteType type;
final String? ownerDisplayName;
final String? ownerUsername;
final String? ownerId;
const Emote({
@ -209,6 +227,8 @@ class Emote {
required this.zeroWidth,
required this.url,
required this.type,
this.ownerDisplayName,
this.ownerUsername,
this.ownerId,
});
@ -235,6 +255,8 @@ class Emote {
height: emote.height,
url: emote.urls.url4x ?? emote.urls.url2x ?? emote.urls.url1x,
type: type,
ownerDisplayName: emote.owner.displayName,
ownerUsername: emote.owner.name,
);
factory Emote.from7TV(Emote7TV emote, EmoteType type) {
@ -257,6 +279,8 @@ class Emote {
zeroWidth: isZeroWidth,
url: 'https:$url/${file.name}',
type: type,
ownerDisplayName: emoteData.owner.displayName,
ownerUsername: emoteData.owner.username,
);
}

View file

@ -44,10 +44,16 @@ ImagesFFZ _$ImagesFFZFromJson(Map<String, dynamic> json) => ImagesFFZ(
json['4'] as String?,
);
OwnerFFZ _$OwnerFFZFromJson(Map<String, dynamic> json) => OwnerFFZ(
displayName: json['display_name'] as String,
name: json['name'] as String,
);
EmoteFFZ _$EmoteFFZFromJson(Map<String, dynamic> json) => EmoteFFZ(
json['name'] as String,
json['height'] as int,
json['width'] as int,
OwnerFFZ.fromJson(json['owner'] as Map<String, dynamic>),
ImagesFFZ.fromJson(json['urls'] as Map<String, dynamic>),
);
@ -59,8 +65,7 @@ Emote7TV _$Emote7TVFromJson(Map<String, dynamic> json) => Emote7TV(
: Emote7TVData.fromJson(json['data'] as Map<String, dynamic>),
);
Emote7TVUser _$Emote7TVUserFromJson(Map<String, dynamic> json) => Emote7TVUser(
id: json['id'] as String,
Owner7TV _$Owner7TVFromJson(Map<String, dynamic> json) => Owner7TV(
username: json['username'] as String,
displayName: json['display_name'] as String,
avatarUrl: json['avatar_url'] as String,
@ -70,6 +75,7 @@ Emote7TVData _$Emote7TVDataFromJson(Map<String, dynamic> json) => Emote7TVData(
json['id'] as String,
json['name'] as String,
json['flags'] as int,
Owner7TV.fromJson(json['owner'] as Map<String, dynamic>),
Emote7TVHost.fromJson(json['host'] as Map<String, dynamic>),
);
@ -95,6 +101,8 @@ Emote _$EmoteFromJson(Map<String, dynamic> json) => Emote(
zeroWidth: json['zeroWidth'] as bool,
url: json['url'] as String,
type: $enumDecode(_$EmoteTypeEnumMap, json['type']),
ownerDisplayName: json['ownerDisplayName'] as String?,
ownerUsername: json['ownerUsername'] as String?,
ownerId: json['ownerId'] as String?,
);
@ -106,6 +114,8 @@ Map<String, dynamic> _$EmoteToJson(Emote instance) => <String, dynamic>{
'zeroWidth': instance.zeroWidth,
'url': instance.url,
'type': _$EmoteTypeEnumMap[instance.type]!,
'ownerDisplayName': instance.ownerDisplayName,
'ownerUsername': instance.ownerUsername,
'ownerId': instance.ownerId,
};

View file

@ -57,7 +57,7 @@ class SevenTVEventUpdatedEmote {
@JsonSerializable(createToJson: false)
class SevenTVEventEmoteSetBody {
final Emote7TVUser actor;
final Owner7TV actor;
final List<SevenTVEventUpdatedEmote>? pushed;
final List<SevenTVEventUpdatedEmote>? pulled;

View file

@ -60,7 +60,7 @@ SevenTVEventUpdatedEmote _$SevenTVEventUpdatedEmoteFromJson(
SevenTVEventEmoteSetBody _$SevenTVEventEmoteSetBodyFromJson(
Map<String, dynamic> json) =>
SevenTVEventEmoteSetBody(
actor: Emote7TVUser.fromJson(json['actor'] as Map<String, dynamic>),
actor: Owner7TV.fromJson(json['actor'] as Map<String, dynamic>),
pushed: (json['pushed'] as List<dynamic>?)
?.map((e) =>
SevenTVEventUpdatedEmote.fromJson(e as Map<String, dynamic>))

View file

@ -651,7 +651,16 @@ class IRCMessage {
title: emote.realName != null
? '${emote.name} (${emote.realName})'
: emote.name,
subtitle: Text(emote.type.toString()),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(emote.type.toString()),
if (emote.ownerDisplayName != null && emote.ownerUsername != null)
Text(
'by ${getReadableName(emote.ownerDisplayName!, emote.ownerUsername!)}',
),
],
),
launchExternal: launchExternal,
);
}