diff --git a/assets/i18n/en-US.json b/assets/i18n/en-US.json index c64ee3bf..d5c0ecc1 100644 --- a/assets/i18n/en-US.json +++ b/assets/i18n/en-US.json @@ -890,5 +890,6 @@ "socialCreditsLevelExcellent": "Excellent", "orderByPopularity": "Sort by popularity", "orderByReleaseDate": "Sort by release date", - "editBot": "Edit Bot" + "editBot": "Edit Bot", + "botAutomatedBy": "Automated by {}" } diff --git a/lib/models/account.dart b/lib/models/account.dart index d44cc6db..4a34b483 100644 --- a/lib/models/account.dart +++ b/lib/models/account.dart @@ -14,6 +14,7 @@ sealed class SnAccount with _$SnAccount { required String nick, required String language, required bool isSuperuser, + required String? automatedId, required SnAccountProfile profile, required SnWalletSubscriptionRef? perkSubscription, @Default([]) List badges, diff --git a/lib/models/account.freezed.dart b/lib/models/account.freezed.dart index 9a24d1df..72c49a5e 100644 --- a/lib/models/account.freezed.dart +++ b/lib/models/account.freezed.dart @@ -15,7 +15,7 @@ T _$identity(T value) => value; /// @nodoc mixin _$SnAccount { - String get id; String get name; String get nick; String get language; bool get isSuperuser; SnAccountProfile get profile; SnWalletSubscriptionRef? get perkSubscription; List get badges; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; + String get id; String get name; String get nick; String get language; bool get isSuperuser; String? get automatedId; SnAccountProfile get profile; SnWalletSubscriptionRef? get perkSubscription; List get badges; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; /// Create a copy of SnAccount /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -28,16 +28,16 @@ $SnAccountCopyWith get copyWith => _$SnAccountCopyWithImpl @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAccount&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.nick, nick) || other.nick == nick)&&(identical(other.language, language) || other.language == language)&&(identical(other.isSuperuser, isSuperuser) || other.isSuperuser == isSuperuser)&&(identical(other.profile, profile) || other.profile == profile)&&(identical(other.perkSubscription, perkSubscription) || other.perkSubscription == perkSubscription)&&const DeepCollectionEquality().equals(other.badges, badges)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAccount&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.nick, nick) || other.nick == nick)&&(identical(other.language, language) || other.language == language)&&(identical(other.isSuperuser, isSuperuser) || other.isSuperuser == isSuperuser)&&(identical(other.automatedId, automatedId) || other.automatedId == automatedId)&&(identical(other.profile, profile) || other.profile == profile)&&(identical(other.perkSubscription, perkSubscription) || other.perkSubscription == perkSubscription)&&const DeepCollectionEquality().equals(other.badges, badges)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,id,name,nick,language,isSuperuser,profile,perkSubscription,const DeepCollectionEquality().hash(badges),createdAt,updatedAt,deletedAt); +int get hashCode => Object.hash(runtimeType,id,name,nick,language,isSuperuser,automatedId,profile,perkSubscription,const DeepCollectionEquality().hash(badges),createdAt,updatedAt,deletedAt); @override String toString() { - return 'SnAccount(id: $id, name: $name, nick: $nick, language: $language, isSuperuser: $isSuperuser, profile: $profile, perkSubscription: $perkSubscription, badges: $badges, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)'; + return 'SnAccount(id: $id, name: $name, nick: $nick, language: $language, isSuperuser: $isSuperuser, automatedId: $automatedId, profile: $profile, perkSubscription: $perkSubscription, badges: $badges, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)'; } @@ -48,7 +48,7 @@ abstract mixin class $SnAccountCopyWith<$Res> { factory $SnAccountCopyWith(SnAccount value, $Res Function(SnAccount) _then) = _$SnAccountCopyWithImpl; @useResult $Res call({ - String id, String name, String nick, String language, bool isSuperuser, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt + String id, String name, String nick, String language, bool isSuperuser, String? automatedId, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt }); @@ -65,14 +65,15 @@ class _$SnAccountCopyWithImpl<$Res> /// Create a copy of SnAccount /// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? name = null,Object? nick = null,Object? language = null,Object? isSuperuser = null,Object? profile = null,Object? perkSubscription = freezed,Object? badges = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) { +@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? name = null,Object? nick = null,Object? language = null,Object? isSuperuser = null,Object? automatedId = freezed,Object? profile = null,Object? perkSubscription = freezed,Object? badges = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) { return _then(_self.copyWith( id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable as String,nick: null == nick ? _self.nick : nick // ignore: cast_nullable_to_non_nullable as String,language: null == language ? _self.language : language // ignore: cast_nullable_to_non_nullable as String,isSuperuser: null == isSuperuser ? _self.isSuperuser : isSuperuser // ignore: cast_nullable_to_non_nullable -as bool,profile: null == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable +as bool,automatedId: freezed == automatedId ? _self.automatedId : automatedId // ignore: cast_nullable_to_non_nullable +as String?,profile: null == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable as SnAccountProfile,perkSubscription: freezed == perkSubscription ? _self.perkSubscription : perkSubscription // ignore: cast_nullable_to_non_nullable as SnWalletSubscriptionRef?,badges: null == badges ? _self.badges : badges // ignore: cast_nullable_to_non_nullable as List,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable @@ -181,10 +182,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function( String id, String name, String nick, String language, bool isSuperuser, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function( String id, String name, String nick, String language, bool isSuperuser, String? automatedId, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { case _SnAccount() when $default != null: -return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser,_that.profile,_that.perkSubscription,_that.badges,_that.createdAt,_that.updatedAt,_that.deletedAt);case _: +return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser,_that.automatedId,_that.profile,_that.perkSubscription,_that.badges,_that.createdAt,_that.updatedAt,_that.deletedAt);case _: return orElse(); } @@ -202,10 +203,10 @@ return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser, /// } /// ``` -@optionalTypeArgs TResult when(TResult Function( String id, String name, String nick, String language, bool isSuperuser, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function( String id, String name, String nick, String language, bool isSuperuser, String? automatedId, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt) $default,) {final _that = this; switch (_that) { case _SnAccount(): -return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser,_that.profile,_that.perkSubscription,_that.badges,_that.createdAt,_that.updatedAt,_that.deletedAt);} +return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser,_that.automatedId,_that.profile,_that.perkSubscription,_that.badges,_that.createdAt,_that.updatedAt,_that.deletedAt);} } /// A variant of `when` that fallback to returning `null` /// @@ -219,10 +220,10 @@ return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser, /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, String name, String nick, String language, bool isSuperuser, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, String name, String nick, String language, bool isSuperuser, String? automatedId, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,) {final _that = this; switch (_that) { case _SnAccount() when $default != null: -return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser,_that.profile,_that.perkSubscription,_that.badges,_that.createdAt,_that.updatedAt,_that.deletedAt);case _: +return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser,_that.automatedId,_that.profile,_that.perkSubscription,_that.badges,_that.createdAt,_that.updatedAt,_that.deletedAt);case _: return null; } @@ -234,7 +235,7 @@ return $default(_that.id,_that.name,_that.nick,_that.language,_that.isSuperuser, @JsonSerializable() class _SnAccount implements SnAccount { - const _SnAccount({required this.id, required this.name, required this.nick, required this.language, required this.isSuperuser, required this.profile, required this.perkSubscription, final List badges = const [], required this.createdAt, required this.updatedAt, required this.deletedAt}): _badges = badges; + const _SnAccount({required this.id, required this.name, required this.nick, required this.language, required this.isSuperuser, required this.automatedId, required this.profile, required this.perkSubscription, final List badges = const [], required this.createdAt, required this.updatedAt, required this.deletedAt}): _badges = badges; factory _SnAccount.fromJson(Map json) => _$SnAccountFromJson(json); @override final String id; @@ -242,6 +243,7 @@ class _SnAccount implements SnAccount { @override final String nick; @override final String language; @override final bool isSuperuser; +@override final String? automatedId; @override final SnAccountProfile profile; @override final SnWalletSubscriptionRef? perkSubscription; final List _badges; @@ -268,16 +270,16 @@ Map toJson() { @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAccount&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.nick, nick) || other.nick == nick)&&(identical(other.language, language) || other.language == language)&&(identical(other.isSuperuser, isSuperuser) || other.isSuperuser == isSuperuser)&&(identical(other.profile, profile) || other.profile == profile)&&(identical(other.perkSubscription, perkSubscription) || other.perkSubscription == perkSubscription)&&const DeepCollectionEquality().equals(other._badges, _badges)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAccount&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.nick, nick) || other.nick == nick)&&(identical(other.language, language) || other.language == language)&&(identical(other.isSuperuser, isSuperuser) || other.isSuperuser == isSuperuser)&&(identical(other.automatedId, automatedId) || other.automatedId == automatedId)&&(identical(other.profile, profile) || other.profile == profile)&&(identical(other.perkSubscription, perkSubscription) || other.perkSubscription == perkSubscription)&&const DeepCollectionEquality().equals(other._badges, _badges)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,id,name,nick,language,isSuperuser,profile,perkSubscription,const DeepCollectionEquality().hash(_badges),createdAt,updatedAt,deletedAt); +int get hashCode => Object.hash(runtimeType,id,name,nick,language,isSuperuser,automatedId,profile,perkSubscription,const DeepCollectionEquality().hash(_badges),createdAt,updatedAt,deletedAt); @override String toString() { - return 'SnAccount(id: $id, name: $name, nick: $nick, language: $language, isSuperuser: $isSuperuser, profile: $profile, perkSubscription: $perkSubscription, badges: $badges, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)'; + return 'SnAccount(id: $id, name: $name, nick: $nick, language: $language, isSuperuser: $isSuperuser, automatedId: $automatedId, profile: $profile, perkSubscription: $perkSubscription, badges: $badges, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)'; } @@ -288,7 +290,7 @@ abstract mixin class _$SnAccountCopyWith<$Res> implements $SnAccountCopyWith<$Re factory _$SnAccountCopyWith(_SnAccount value, $Res Function(_SnAccount) _then) = __$SnAccountCopyWithImpl; @override @useResult $Res call({ - String id, String name, String nick, String language, bool isSuperuser, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt + String id, String name, String nick, String language, bool isSuperuser, String? automatedId, SnAccountProfile profile, SnWalletSubscriptionRef? perkSubscription, List badges, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt }); @@ -305,14 +307,15 @@ class __$SnAccountCopyWithImpl<$Res> /// Create a copy of SnAccount /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? name = null,Object? nick = null,Object? language = null,Object? isSuperuser = null,Object? profile = null,Object? perkSubscription = freezed,Object? badges = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) { +@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? name = null,Object? nick = null,Object? language = null,Object? isSuperuser = null,Object? automatedId = freezed,Object? profile = null,Object? perkSubscription = freezed,Object? badges = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) { return _then(_SnAccount( id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable as String,nick: null == nick ? _self.nick : nick // ignore: cast_nullable_to_non_nullable as String,language: null == language ? _self.language : language // ignore: cast_nullable_to_non_nullable as String,isSuperuser: null == isSuperuser ? _self.isSuperuser : isSuperuser // ignore: cast_nullable_to_non_nullable -as bool,profile: null == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable +as bool,automatedId: freezed == automatedId ? _self.automatedId : automatedId // ignore: cast_nullable_to_non_nullable +as String?,profile: null == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable as SnAccountProfile,perkSubscription: freezed == perkSubscription ? _self.perkSubscription : perkSubscription // ignore: cast_nullable_to_non_nullable as SnWalletSubscriptionRef?,badges: null == badges ? _self._badges : badges // ignore: cast_nullable_to_non_nullable as List,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable diff --git a/lib/models/account.g.dart b/lib/models/account.g.dart index 40648834..c2a7a4db 100644 --- a/lib/models/account.g.dart +++ b/lib/models/account.g.dart @@ -12,6 +12,7 @@ _SnAccount _$SnAccountFromJson(Map json) => _SnAccount( nick: json['nick'] as String, language: json['language'] as String, isSuperuser: json['is_superuser'] as bool, + automatedId: json['automated_id'] as String?, profile: SnAccountProfile.fromJson(json['profile'] as Map), perkSubscription: json['perk_subscription'] == null @@ -39,6 +40,7 @@ Map _$SnAccountToJson(_SnAccount instance) => 'nick': instance.nick, 'language': instance.language, 'is_superuser': instance.isSuperuser, + 'automated_id': instance.automatedId, 'profile': instance.profile.toJson(), 'perk_subscription': instance.perkSubscription?.toJson(), 'badges': instance.badges.map((e) => e.toJson()).toList(), diff --git a/lib/models/bot.dart b/lib/models/bot.dart index 9c41a5ea..858634f9 100644 --- a/lib/models/bot.dart +++ b/lib/models/bot.dart @@ -1,5 +1,6 @@ import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:island/models/account.dart'; +import 'package:island/models/developer.dart'; part 'bot.freezed.dart'; part 'bot.g.dart'; @@ -14,6 +15,7 @@ sealed class Bot with _$Bot { required DateTime createdAt, required DateTime updatedAt, required SnAccount account, + SnDeveloper? developer, }) = _Bot; factory Bot.fromJson(Map json) => _$BotFromJson(json); diff --git a/lib/models/bot.freezed.dart b/lib/models/bot.freezed.dart index 80ee402b..20268e9c 100644 --- a/lib/models/bot.freezed.dart +++ b/lib/models/bot.freezed.dart @@ -15,7 +15,7 @@ T _$identity(T value) => value; /// @nodoc mixin _$Bot { - String get id; String get slug; bool get isActive; String get projectId; DateTime get createdAt; DateTime get updatedAt; SnAccount get account; + String get id; String get slug; bool get isActive; String get projectId; DateTime get createdAt; DateTime get updatedAt; SnAccount get account; SnDeveloper? get developer; /// Create a copy of Bot /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -28,16 +28,16 @@ $BotCopyWith get copyWith => _$BotCopyWithImpl(this as Bot, _$identity @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is Bot&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.isActive, isActive) || other.isActive == isActive)&&(identical(other.projectId, projectId) || other.projectId == projectId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.account, account) || other.account == account)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is Bot&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.isActive, isActive) || other.isActive == isActive)&&(identical(other.projectId, projectId) || other.projectId == projectId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.account, account) || other.account == account)&&(identical(other.developer, developer) || other.developer == developer)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,id,slug,isActive,projectId,createdAt,updatedAt,account); +int get hashCode => Object.hash(runtimeType,id,slug,isActive,projectId,createdAt,updatedAt,account,developer); @override String toString() { - return 'Bot(id: $id, slug: $slug, isActive: $isActive, projectId: $projectId, createdAt: $createdAt, updatedAt: $updatedAt, account: $account)'; + return 'Bot(id: $id, slug: $slug, isActive: $isActive, projectId: $projectId, createdAt: $createdAt, updatedAt: $updatedAt, account: $account, developer: $developer)'; } @@ -48,11 +48,11 @@ abstract mixin class $BotCopyWith<$Res> { factory $BotCopyWith(Bot value, $Res Function(Bot) _then) = _$BotCopyWithImpl; @useResult $Res call({ - String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account + String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account, SnDeveloper? developer }); -$SnAccountCopyWith<$Res> get account; +$SnAccountCopyWith<$Res> get account;$SnDeveloperCopyWith<$Res>? get developer; } /// @nodoc @@ -65,7 +65,7 @@ class _$BotCopyWithImpl<$Res> /// Create a copy of Bot /// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? slug = null,Object? isActive = null,Object? projectId = null,Object? createdAt = null,Object? updatedAt = null,Object? account = null,}) { +@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? slug = null,Object? isActive = null,Object? projectId = null,Object? createdAt = null,Object? updatedAt = null,Object? account = null,Object? developer = freezed,}) { return _then(_self.copyWith( id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable as String,slug: null == slug ? _self.slug : slug // ignore: cast_nullable_to_non_nullable @@ -74,7 +74,8 @@ as bool,projectId: null == projectId ? _self.projectId : projectId // ignore: ca as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable as DateTime,account: null == account ? _self.account : account // ignore: cast_nullable_to_non_nullable -as SnAccount, +as SnAccount,developer: freezed == developer ? _self.developer : developer // ignore: cast_nullable_to_non_nullable +as SnDeveloper?, )); } /// Create a copy of Bot @@ -86,6 +87,18 @@ $SnAccountCopyWith<$Res> get account { return $SnAccountCopyWith<$Res>(_self.account, (value) { return _then(_self.copyWith(account: value)); }); +}/// Create a copy of Bot +/// with the given fields replaced by the non-null parameter values. +@override +@pragma('vm:prefer-inline') +$SnDeveloperCopyWith<$Res>? get developer { + if (_self.developer == null) { + return null; + } + + return $SnDeveloperCopyWith<$Res>(_self.developer!, (value) { + return _then(_self.copyWith(developer: value)); + }); } } @@ -165,10 +178,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function( String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function( String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account, SnDeveloper? developer)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { case _Bot() when $default != null: -return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.createdAt,_that.updatedAt,_that.account);case _: +return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.createdAt,_that.updatedAt,_that.account,_that.developer);case _: return orElse(); } @@ -186,10 +199,10 @@ return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.created /// } /// ``` -@optionalTypeArgs TResult when(TResult Function( String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function( String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account, SnDeveloper? developer) $default,) {final _that = this; switch (_that) { case _Bot(): -return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.createdAt,_that.updatedAt,_that.account);} +return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.createdAt,_that.updatedAt,_that.account,_that.developer);} } /// A variant of `when` that fallback to returning `null` /// @@ -203,10 +216,10 @@ return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.created /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account, SnDeveloper? developer)? $default,) {final _that = this; switch (_that) { case _Bot() when $default != null: -return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.createdAt,_that.updatedAt,_that.account);case _: +return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.createdAt,_that.updatedAt,_that.account,_that.developer);case _: return null; } @@ -218,7 +231,7 @@ return $default(_that.id,_that.slug,_that.isActive,_that.projectId,_that.created @JsonSerializable() class _Bot implements Bot { - const _Bot({required this.id, required this.slug, required this.isActive, required this.projectId, required this.createdAt, required this.updatedAt, required this.account}); + const _Bot({required this.id, required this.slug, required this.isActive, required this.projectId, required this.createdAt, required this.updatedAt, required this.account, this.developer}); factory _Bot.fromJson(Map json) => _$BotFromJson(json); @override final String id; @@ -228,6 +241,7 @@ class _Bot implements Bot { @override final DateTime createdAt; @override final DateTime updatedAt; @override final SnAccount account; +@override final SnDeveloper? developer; /// Create a copy of Bot /// with the given fields replaced by the non-null parameter values. @@ -242,16 +256,16 @@ Map toJson() { @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _Bot&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.isActive, isActive) || other.isActive == isActive)&&(identical(other.projectId, projectId) || other.projectId == projectId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.account, account) || other.account == account)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _Bot&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.isActive, isActive) || other.isActive == isActive)&&(identical(other.projectId, projectId) || other.projectId == projectId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.account, account) || other.account == account)&&(identical(other.developer, developer) || other.developer == developer)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,id,slug,isActive,projectId,createdAt,updatedAt,account); +int get hashCode => Object.hash(runtimeType,id,slug,isActive,projectId,createdAt,updatedAt,account,developer); @override String toString() { - return 'Bot(id: $id, slug: $slug, isActive: $isActive, projectId: $projectId, createdAt: $createdAt, updatedAt: $updatedAt, account: $account)'; + return 'Bot(id: $id, slug: $slug, isActive: $isActive, projectId: $projectId, createdAt: $createdAt, updatedAt: $updatedAt, account: $account, developer: $developer)'; } @@ -262,11 +276,11 @@ abstract mixin class _$BotCopyWith<$Res> implements $BotCopyWith<$Res> { factory _$BotCopyWith(_Bot value, $Res Function(_Bot) _then) = __$BotCopyWithImpl; @override @useResult $Res call({ - String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account + String id, String slug, bool isActive, String projectId, DateTime createdAt, DateTime updatedAt, SnAccount account, SnDeveloper? developer }); -@override $SnAccountCopyWith<$Res> get account; +@override $SnAccountCopyWith<$Res> get account;@override $SnDeveloperCopyWith<$Res>? get developer; } /// @nodoc @@ -279,7 +293,7 @@ class __$BotCopyWithImpl<$Res> /// Create a copy of Bot /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? slug = null,Object? isActive = null,Object? projectId = null,Object? createdAt = null,Object? updatedAt = null,Object? account = null,}) { +@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? slug = null,Object? isActive = null,Object? projectId = null,Object? createdAt = null,Object? updatedAt = null,Object? account = null,Object? developer = freezed,}) { return _then(_Bot( id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable as String,slug: null == slug ? _self.slug : slug // ignore: cast_nullable_to_non_nullable @@ -288,7 +302,8 @@ as bool,projectId: null == projectId ? _self.projectId : projectId // ignore: ca as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable as DateTime,account: null == account ? _self.account : account // ignore: cast_nullable_to_non_nullable -as SnAccount, +as SnAccount,developer: freezed == developer ? _self.developer : developer // ignore: cast_nullable_to_non_nullable +as SnDeveloper?, )); } @@ -301,6 +316,18 @@ $SnAccountCopyWith<$Res> get account { return $SnAccountCopyWith<$Res>(_self.account, (value) { return _then(_self.copyWith(account: value)); }); +}/// Create a copy of Bot +/// with the given fields replaced by the non-null parameter values. +@override +@pragma('vm:prefer-inline') +$SnDeveloperCopyWith<$Res>? get developer { + if (_self.developer == null) { + return null; + } + + return $SnDeveloperCopyWith<$Res>(_self.developer!, (value) { + return _then(_self.copyWith(developer: value)); + }); } } diff --git a/lib/models/bot.g.dart b/lib/models/bot.g.dart index 1fb2290f..49e25c28 100644 --- a/lib/models/bot.g.dart +++ b/lib/models/bot.g.dart @@ -14,6 +14,10 @@ _Bot _$BotFromJson(Map json) => _Bot( createdAt: DateTime.parse(json['created_at'] as String), updatedAt: DateTime.parse(json['updated_at'] as String), account: SnAccount.fromJson(json['account'] as Map), + developer: + json['developer'] == null + ? null + : SnDeveloper.fromJson(json['developer'] as Map), ); Map _$BotToJson(_Bot instance) => { @@ -24,6 +28,7 @@ Map _$BotToJson(_Bot instance) => { 'created_at': instance.createdAt.toIso8601String(), 'updated_at': instance.updatedAt.toIso8601String(), 'account': instance.account.toJson(), + 'developer': instance.developer?.toJson(), }; _BotConfig _$BotConfigFromJson(Map json) => _BotConfig( diff --git a/lib/screens/account/profile.dart b/lib/screens/account/profile.dart index 87e1a87c..370af9a5 100644 --- a/lib/screens/account/profile.dart +++ b/lib/screens/account/profile.dart @@ -7,6 +7,7 @@ import 'package:go_router/go_router.dart'; import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/models/chat.dart'; +import 'package:island/models/developer.dart'; import 'package:island/models/relationship.dart'; import 'package:island/models/account.dart'; import 'package:island/pods/config.dart'; @@ -112,6 +113,24 @@ Future accountRelationship(Ref ref, String uname) async { } } +@riverpod +Future accountBotDeveloper(Ref ref, String uname) async { + final account = await ref.watch(accountProvider(uname).future); + if (account.automatedId == null) return null; + final apiClient = ref.watch(apiClientProvider); + try { + final resp = await apiClient.get( + "/develop/bots/${account.automatedId}/developer", + ); + return SnDeveloper.fromJson(resp.data); + } catch (err) { + if (err is DioException && err.response?.statusCode == 404) { + return null; + } + rethrow; + } +} + class AccountProfileScreen extends HookConsumerWidget { final String name; const AccountProfileScreen({super.key, required this.name}); @@ -128,6 +147,7 @@ class AccountProfileScreen extends HookConsumerWidget { ); final accountChat = ref.watch(accountDirectChatProvider(name)); final accountRelationship = ref.watch(accountRelationshipProvider(name)); + final accountDeveloper = ref.watch(accountBotDeveloperProvider(name)); final appbarColor = ref.watch(accountAppbarForcegroundColorProvider(name)); @@ -292,6 +312,19 @@ class AccountProfileScreen extends HookConsumerWidget { ), ], ), + if (accountDeveloper.value != null) + Row( + spacing: 7, + children: [ + const Icon(Symbols.smart_toy, size: 18), + Text( + 'botAutomatedBy'.tr( + args: [accountDeveloper.value!.publisher!.nick], + ), + ).fontSize(13), + ], + ).opacity(0.75), + const Gap(4), AccountStatusWidget(uname: name, padding: EdgeInsets.zero), ], ), diff --git a/lib/screens/account/profile.g.dart b/lib/screens/account/profile.g.dart index 98e08386..cc36a1c5 100644 --- a/lib/screens/account/profile.g.dart +++ b/lib/screens/account/profile.g.dart @@ -639,5 +639,128 @@ class _AccountRelationshipProviderElement String get uname => (origin as AccountRelationshipProvider).uname; } +String _$accountBotDeveloperHash() => + r'673534770640a8cf1484ea0af0f4d0ef283ef157'; + +/// See also [accountBotDeveloper]. +@ProviderFor(accountBotDeveloper) +const accountBotDeveloperProvider = AccountBotDeveloperFamily(); + +/// See also [accountBotDeveloper]. +class AccountBotDeveloperFamily extends Family> { + /// See also [accountBotDeveloper]. + const AccountBotDeveloperFamily(); + + /// See also [accountBotDeveloper]. + AccountBotDeveloperProvider call(String uname) { + return AccountBotDeveloperProvider(uname); + } + + @override + AccountBotDeveloperProvider getProviderOverride( + covariant AccountBotDeveloperProvider provider, + ) { + return call(provider.uname); + } + + static const Iterable? _dependencies = null; + + @override + Iterable? get dependencies => _dependencies; + + static const Iterable? _allTransitiveDependencies = null; + + @override + Iterable? get allTransitiveDependencies => + _allTransitiveDependencies; + + @override + String? get name => r'accountBotDeveloperProvider'; +} + +/// See also [accountBotDeveloper]. +class AccountBotDeveloperProvider + extends AutoDisposeFutureProvider { + /// See also [accountBotDeveloper]. + AccountBotDeveloperProvider(String uname) + : this._internal( + (ref) => accountBotDeveloper(ref as AccountBotDeveloperRef, uname), + from: accountBotDeveloperProvider, + name: r'accountBotDeveloperProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$accountBotDeveloperHash, + dependencies: AccountBotDeveloperFamily._dependencies, + allTransitiveDependencies: + AccountBotDeveloperFamily._allTransitiveDependencies, + uname: uname, + ); + + AccountBotDeveloperProvider._internal( + super._createNotifier, { + required super.name, + required super.dependencies, + required super.allTransitiveDependencies, + required super.debugGetCreateSourceHash, + required super.from, + required this.uname, + }) : super.internal(); + + final String uname; + + @override + Override overrideWith( + FutureOr Function(AccountBotDeveloperRef provider) create, + ) { + return ProviderOverride( + origin: this, + override: AccountBotDeveloperProvider._internal( + (ref) => create(ref as AccountBotDeveloperRef), + from: from, + name: null, + dependencies: null, + allTransitiveDependencies: null, + debugGetCreateSourceHash: null, + uname: uname, + ), + ); + } + + @override + AutoDisposeFutureProviderElement createElement() { + return _AccountBotDeveloperProviderElement(this); + } + + @override + bool operator ==(Object other) { + return other is AccountBotDeveloperProvider && other.uname == uname; + } + + @override + int get hashCode { + var hash = _SystemHash.combine(0, runtimeType.hashCode); + hash = _SystemHash.combine(hash, uname.hashCode); + + return _SystemHash.finish(hash); + } +} + +@Deprecated('Will be removed in 3.0. Use Ref instead') +// ignore: unused_element +mixin AccountBotDeveloperRef on AutoDisposeFutureProviderRef { + /// The parameter `uname` of this provider. + String get uname; +} + +class _AccountBotDeveloperProviderElement + extends AutoDisposeFutureProviderElement + with AccountBotDeveloperRef { + _AccountBotDeveloperProviderElement(super.provider); + + @override + String get uname => (origin as AccountBotDeveloperProvider).uname; +} + // ignore_for_file: type=lint // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package