diff --git a/lib/models/emotes.dart b/lib/models/emotes.dart index adcb32dc..b140394b 100644 --- a/lib/models/emotes.dart +++ b/lib/models/emotes.dart @@ -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 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 json) => - _$Emote7TVUserFromJson(json); + factory Owner7TV.fromJson(Map 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, ); } diff --git a/lib/models/emotes.g.dart b/lib/models/emotes.g.dart index 7185c980..c4ac03ff 100644 --- a/lib/models/emotes.g.dart +++ b/lib/models/emotes.g.dart @@ -44,10 +44,16 @@ ImagesFFZ _$ImagesFFZFromJson(Map json) => ImagesFFZ( json['4'] as String?, ); +OwnerFFZ _$OwnerFFZFromJson(Map json) => OwnerFFZ( + displayName: json['display_name'] as String, + name: json['name'] as String, + ); + EmoteFFZ _$EmoteFFZFromJson(Map json) => EmoteFFZ( json['name'] as String, json['height'] as int, json['width'] as int, + OwnerFFZ.fromJson(json['owner'] as Map), ImagesFFZ.fromJson(json['urls'] as Map), ); @@ -59,8 +65,7 @@ Emote7TV _$Emote7TVFromJson(Map json) => Emote7TV( : Emote7TVData.fromJson(json['data'] as Map), ); -Emote7TVUser _$Emote7TVUserFromJson(Map json) => Emote7TVUser( - id: json['id'] as String, +Owner7TV _$Owner7TVFromJson(Map 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 json) => Emote7TVData( json['id'] as String, json['name'] as String, json['flags'] as int, + Owner7TV.fromJson(json['owner'] as Map), Emote7TVHost.fromJson(json['host'] as Map), ); @@ -95,6 +101,8 @@ Emote _$EmoteFromJson(Map 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 _$EmoteToJson(Emote instance) => { 'zeroWidth': instance.zeroWidth, 'url': instance.url, 'type': _$EmoteTypeEnumMap[instance.type]!, + 'ownerDisplayName': instance.ownerDisplayName, + 'ownerUsername': instance.ownerUsername, 'ownerId': instance.ownerId, }; diff --git a/lib/models/events.dart b/lib/models/events.dart index 8414c277..be3728ef 100644 --- a/lib/models/events.dart +++ b/lib/models/events.dart @@ -57,7 +57,7 @@ class SevenTVEventUpdatedEmote { @JsonSerializable(createToJson: false) class SevenTVEventEmoteSetBody { - final Emote7TVUser actor; + final Owner7TV actor; final List? pushed; final List? pulled; diff --git a/lib/models/events.g.dart b/lib/models/events.g.dart index fd3b8be8..381d89a6 100644 --- a/lib/models/events.g.dart +++ b/lib/models/events.g.dart @@ -60,7 +60,7 @@ SevenTVEventUpdatedEmote _$SevenTVEventUpdatedEmoteFromJson( SevenTVEventEmoteSetBody _$SevenTVEventEmoteSetBodyFromJson( Map json) => SevenTVEventEmoteSetBody( - actor: Emote7TVUser.fromJson(json['actor'] as Map), + actor: Owner7TV.fromJson(json['actor'] as Map), pushed: (json['pushed'] as List?) ?.map((e) => SevenTVEventUpdatedEmote.fromJson(e as Map)) diff --git a/lib/models/irc.dart b/lib/models/irc.dart index 9758bfff..cbc8207d 100644 --- a/lib/models/irc.dart +++ b/lib/models/irc.dart @@ -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, ); }