Migrate from `package:equatable` to `freezed`
This commit is contained in:
parent
0949bb13c1
commit
3b530c7ee4
|
@ -11,3 +11,4 @@ linter:
|
||||||
parameter_assignments: false
|
parameter_assignments: false
|
||||||
no_runtimetype_tostring: false
|
no_runtimetype_tostring: false
|
||||||
avoid_escaping_inner_quotes: false
|
avoid_escaping_inner_quotes: false
|
||||||
|
prefer_const_constructors: true
|
||||||
|
|
|
@ -1,30 +1,28 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import 'channel_id.dart';
|
import 'channel_id.dart';
|
||||||
|
|
||||||
|
part 'channel.freezed.dart';
|
||||||
|
|
||||||
/// YouTube channel metadata.
|
/// YouTube channel metadata.
|
||||||
class Channel with EquatableMixin {
|
@Freezed()
|
||||||
/// Channel ID.
|
class Channel with _$Channel {
|
||||||
final ChannelId id;
|
const Channel._();
|
||||||
|
|
||||||
|
const factory Channel(
|
||||||
|
/// Channel ID.
|
||||||
|
ChannelId id,
|
||||||
|
|
||||||
|
/// Channel title.
|
||||||
|
String title,
|
||||||
|
|
||||||
|
/// URL of the channel's logo image.
|
||||||
|
String logoUrl,
|
||||||
|
|
||||||
|
/// The (approximate) channel subscriber's count.
|
||||||
|
int? subscribersCount,
|
||||||
|
) = _Channel;
|
||||||
|
|
||||||
/// Channel URL.
|
/// Channel URL.
|
||||||
String get url => 'https://www.youtube.com/channel/$id';
|
String get url => 'https://www.youtube.com/channel/$id';
|
||||||
|
|
||||||
/// Channel title.
|
|
||||||
final String title;
|
|
||||||
|
|
||||||
/// URL of the channel's logo image.
|
|
||||||
final String logoUrl;
|
|
||||||
|
|
||||||
/// The (approximate) channel subscriber's count.
|
|
||||||
final int? subscribersCount;
|
|
||||||
|
|
||||||
/// Initializes an instance of [Channel]
|
|
||||||
Channel(this.id, this.title, this.logoUrl, this.subscribersCount);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() => 'Channel ($title)';
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [id];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,237 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'channel.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelTearOff {
|
||||||
|
const _$ChannelTearOff();
|
||||||
|
|
||||||
|
_Channel call(
|
||||||
|
ChannelId id, String title, String logoUrl, int? subscribersCount) {
|
||||||
|
return _Channel(
|
||||||
|
id,
|
||||||
|
title,
|
||||||
|
logoUrl,
|
||||||
|
subscribersCount,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Channel = _$ChannelTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Channel {
|
||||||
|
/// Channel ID.
|
||||||
|
ChannelId get id => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// URL of the channel's logo image.
|
||||||
|
String get logoUrl => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// The (approximate) channel subscriber's count.
|
||||||
|
int? get subscribersCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$ChannelCopyWith<Channel> get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ChannelCopyWith<$Res> {
|
||||||
|
factory $ChannelCopyWith(Channel value, $Res Function(Channel) then) =
|
||||||
|
_$ChannelCopyWithImpl<$Res>;
|
||||||
|
$Res call(
|
||||||
|
{ChannelId id, String title, String logoUrl, int? subscribersCount});
|
||||||
|
|
||||||
|
$ChannelIdCopyWith<$Res> get id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelCopyWithImpl<$Res> implements $ChannelCopyWith<$Res> {
|
||||||
|
_$ChannelCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Channel _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Channel) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? logoUrl = freezed,
|
||||||
|
Object? subscribersCount = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
id: id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ChannelId,
|
||||||
|
title: title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
logoUrl: logoUrl == freezed
|
||||||
|
? _value.logoUrl
|
||||||
|
: logoUrl // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
subscribersCount: subscribersCount == freezed
|
||||||
|
? _value.subscribersCount
|
||||||
|
: subscribersCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ChannelIdCopyWith<$Res> get id {
|
||||||
|
return $ChannelIdCopyWith<$Res>(_value.id, (value) {
|
||||||
|
return _then(_value.copyWith(id: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$ChannelCopyWith<$Res> implements $ChannelCopyWith<$Res> {
|
||||||
|
factory _$ChannelCopyWith(_Channel value, $Res Function(_Channel) then) =
|
||||||
|
__$ChannelCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call(
|
||||||
|
{ChannelId id, String title, String logoUrl, int? subscribersCount});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ChannelIdCopyWith<$Res> get id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$ChannelCopyWithImpl<$Res> extends _$ChannelCopyWithImpl<$Res>
|
||||||
|
implements _$ChannelCopyWith<$Res> {
|
||||||
|
__$ChannelCopyWithImpl(_Channel _value, $Res Function(_Channel) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Channel));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Channel get _value => super._value as _Channel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? logoUrl = freezed,
|
||||||
|
Object? subscribersCount = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Channel(
|
||||||
|
id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ChannelId,
|
||||||
|
title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
logoUrl == freezed
|
||||||
|
? _value.logoUrl
|
||||||
|
: logoUrl // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
subscribersCount == freezed
|
||||||
|
? _value.subscribersCount
|
||||||
|
: subscribersCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_Channel extends _Channel {
|
||||||
|
const _$_Channel(this.id, this.title, this.logoUrl, this.subscribersCount)
|
||||||
|
: super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel ID.
|
||||||
|
final ChannelId id;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel title.
|
||||||
|
final String title;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// URL of the channel's logo image.
|
||||||
|
final String logoUrl;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// The (approximate) channel subscriber's count.
|
||||||
|
final int? subscribersCount;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'Channel(id: $id, title: $title, logoUrl: $logoUrl, subscribersCount: $subscribersCount)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Channel &&
|
||||||
|
(identical(other.id, id) ||
|
||||||
|
const DeepCollectionEquality().equals(other.id, id)) &&
|
||||||
|
(identical(other.title, title) ||
|
||||||
|
const DeepCollectionEquality().equals(other.title, title)) &&
|
||||||
|
(identical(other.logoUrl, logoUrl) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.logoUrl, logoUrl)) &&
|
||||||
|
(identical(other.subscribersCount, subscribersCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.subscribersCount, subscribersCount)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(id) ^
|
||||||
|
const DeepCollectionEquality().hash(title) ^
|
||||||
|
const DeepCollectionEquality().hash(logoUrl) ^
|
||||||
|
const DeepCollectionEquality().hash(subscribersCount);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$ChannelCopyWith<_Channel> get copyWith =>
|
||||||
|
__$ChannelCopyWithImpl<_Channel>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Channel extends Channel {
|
||||||
|
const factory _Channel(
|
||||||
|
ChannelId id, String title, String logoUrl, int? subscribersCount) =
|
||||||
|
_$_Channel;
|
||||||
|
const _Channel._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel ID.
|
||||||
|
ChannelId get id => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// URL of the channel's logo image.
|
||||||
|
String get logoUrl => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// The (approximate) channel subscriber's count.
|
||||||
|
int? get subscribersCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$ChannelCopyWith<_Channel> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,37 +1,34 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../common/thumbnail.dart';
|
import '../common/thumbnail.dart';
|
||||||
import 'channel_link.dart';
|
import 'channel_link.dart';
|
||||||
|
|
||||||
|
part 'channel_about.freezed.dart';
|
||||||
|
|
||||||
/// YouTube channel's about page metadata.
|
/// YouTube channel's about page metadata.
|
||||||
class ChannelAbout with EquatableMixin {
|
@freezed
|
||||||
/// Full channel description.
|
class ChannelAbout with _$ChannelAbout {
|
||||||
final String description;
|
const factory ChannelAbout(
|
||||||
|
/// Full channel description.
|
||||||
|
String description,
|
||||||
|
|
||||||
/// Channel view count.
|
/// Channel view count.
|
||||||
final int viewCount;
|
int viewCount,
|
||||||
|
|
||||||
/// Channel join date.
|
/// Channel join date.
|
||||||
/// Formatted as: Gen 01, 2000
|
/// Formatted as: Gen 01, 2000
|
||||||
final String joinDate;
|
String joinDate,
|
||||||
|
|
||||||
/// Channel title.
|
/// Channel title.
|
||||||
final String title;
|
String title,
|
||||||
|
|
||||||
/// Channel thumbnails.
|
/// Channel thumbnails.
|
||||||
final List<Thumbnail> thumbnails;
|
List<Thumbnail> thumbnails,
|
||||||
|
|
||||||
/// Channel country.
|
/// Channel country.
|
||||||
final String country;
|
String country,
|
||||||
|
|
||||||
/// Channel links.
|
/// Channel links.
|
||||||
final List<ChannelLink> channelLinks;
|
List<ChannelLink> channelLinks,
|
||||||
|
) = _ChannelAbout;
|
||||||
/// Initialize an instance of [ChannelAbout]
|
|
||||||
ChannelAbout(this.description, this.viewCount, this.joinDate, this.title,
|
|
||||||
this.thumbnails, this.country, this.channelLinks);
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props =>
|
|
||||||
[description, viewCount, joinDate, title, thumbnails];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,334 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'channel_about.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelAboutTearOff {
|
||||||
|
const _$ChannelAboutTearOff();
|
||||||
|
|
||||||
|
_ChannelAbout call(
|
||||||
|
String description,
|
||||||
|
int viewCount,
|
||||||
|
String joinDate,
|
||||||
|
String title,
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
String country,
|
||||||
|
List<ChannelLink> channelLinks) {
|
||||||
|
return _ChannelAbout(
|
||||||
|
description,
|
||||||
|
viewCount,
|
||||||
|
joinDate,
|
||||||
|
title,
|
||||||
|
thumbnails,
|
||||||
|
country,
|
||||||
|
channelLinks,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $ChannelAbout = _$ChannelAboutTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ChannelAbout {
|
||||||
|
/// Full channel description.
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel view count.
|
||||||
|
int get viewCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel join date.
|
||||||
|
/// Formatted as: Gen 01, 2000
|
||||||
|
String get joinDate => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel thumbnails.
|
||||||
|
List<Thumbnail> get thumbnails => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel country.
|
||||||
|
String get country => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel links.
|
||||||
|
List<ChannelLink> get channelLinks => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$ChannelAboutCopyWith<ChannelAbout> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ChannelAboutCopyWith<$Res> {
|
||||||
|
factory $ChannelAboutCopyWith(
|
||||||
|
ChannelAbout value, $Res Function(ChannelAbout) then) =
|
||||||
|
_$ChannelAboutCopyWithImpl<$Res>;
|
||||||
|
$Res call(
|
||||||
|
{String description,
|
||||||
|
int viewCount,
|
||||||
|
String joinDate,
|
||||||
|
String title,
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
String country,
|
||||||
|
List<ChannelLink> channelLinks});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelAboutCopyWithImpl<$Res> implements $ChannelAboutCopyWith<$Res> {
|
||||||
|
_$ChannelAboutCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final ChannelAbout _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(ChannelAbout) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? viewCount = freezed,
|
||||||
|
Object? joinDate = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? thumbnails = freezed,
|
||||||
|
Object? country = freezed,
|
||||||
|
Object? channelLinks = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
description: description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
viewCount: viewCount == freezed
|
||||||
|
? _value.viewCount
|
||||||
|
: viewCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
joinDate: joinDate == freezed
|
||||||
|
? _value.joinDate
|
||||||
|
: joinDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
title: title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
thumbnails: thumbnails == freezed
|
||||||
|
? _value.thumbnails
|
||||||
|
: thumbnails // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<Thumbnail>,
|
||||||
|
country: country == freezed
|
||||||
|
? _value.country
|
||||||
|
: country // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
channelLinks: channelLinks == freezed
|
||||||
|
? _value.channelLinks
|
||||||
|
: channelLinks // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<ChannelLink>,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$ChannelAboutCopyWith<$Res>
|
||||||
|
implements $ChannelAboutCopyWith<$Res> {
|
||||||
|
factory _$ChannelAboutCopyWith(
|
||||||
|
_ChannelAbout value, $Res Function(_ChannelAbout) then) =
|
||||||
|
__$ChannelAboutCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call(
|
||||||
|
{String description,
|
||||||
|
int viewCount,
|
||||||
|
String joinDate,
|
||||||
|
String title,
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
String country,
|
||||||
|
List<ChannelLink> channelLinks});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$ChannelAboutCopyWithImpl<$Res> extends _$ChannelAboutCopyWithImpl<$Res>
|
||||||
|
implements _$ChannelAboutCopyWith<$Res> {
|
||||||
|
__$ChannelAboutCopyWithImpl(
|
||||||
|
_ChannelAbout _value, $Res Function(_ChannelAbout) _then)
|
||||||
|
: super(_value, (v) => _then(v as _ChannelAbout));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ChannelAbout get _value => super._value as _ChannelAbout;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? viewCount = freezed,
|
||||||
|
Object? joinDate = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? thumbnails = freezed,
|
||||||
|
Object? country = freezed,
|
||||||
|
Object? channelLinks = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_ChannelAbout(
|
||||||
|
description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
viewCount == freezed
|
||||||
|
? _value.viewCount
|
||||||
|
: viewCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
joinDate == freezed
|
||||||
|
? _value.joinDate
|
||||||
|
: joinDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
thumbnails == freezed
|
||||||
|
? _value.thumbnails
|
||||||
|
: thumbnails // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<Thumbnail>,
|
||||||
|
country == freezed
|
||||||
|
? _value.country
|
||||||
|
: country // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
channelLinks == freezed
|
||||||
|
? _value.channelLinks
|
||||||
|
: channelLinks // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<ChannelLink>,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_ChannelAbout implements _ChannelAbout {
|
||||||
|
const _$_ChannelAbout(this.description, this.viewCount, this.joinDate,
|
||||||
|
this.title, this.thumbnails, this.country, this.channelLinks);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Full channel description.
|
||||||
|
final String description;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel view count.
|
||||||
|
final int viewCount;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel join date.
|
||||||
|
/// Formatted as: Gen 01, 2000
|
||||||
|
final String joinDate;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel title.
|
||||||
|
final String title;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel thumbnails.
|
||||||
|
final List<Thumbnail> thumbnails;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel country.
|
||||||
|
final String country;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel links.
|
||||||
|
final List<ChannelLink> channelLinks;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ChannelAbout(description: $description, viewCount: $viewCount, joinDate: $joinDate, title: $title, thumbnails: $thumbnails, country: $country, channelLinks: $channelLinks)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _ChannelAbout &&
|
||||||
|
(identical(other.description, description) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.description, description)) &&
|
||||||
|
(identical(other.viewCount, viewCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.viewCount, viewCount)) &&
|
||||||
|
(identical(other.joinDate, joinDate) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.joinDate, joinDate)) &&
|
||||||
|
(identical(other.title, title) ||
|
||||||
|
const DeepCollectionEquality().equals(other.title, title)) &&
|
||||||
|
(identical(other.thumbnails, thumbnails) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.thumbnails, thumbnails)) &&
|
||||||
|
(identical(other.country, country) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.country, country)) &&
|
||||||
|
(identical(other.channelLinks, channelLinks) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.channelLinks, channelLinks)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(description) ^
|
||||||
|
const DeepCollectionEquality().hash(viewCount) ^
|
||||||
|
const DeepCollectionEquality().hash(joinDate) ^
|
||||||
|
const DeepCollectionEquality().hash(title) ^
|
||||||
|
const DeepCollectionEquality().hash(thumbnails) ^
|
||||||
|
const DeepCollectionEquality().hash(country) ^
|
||||||
|
const DeepCollectionEquality().hash(channelLinks);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$ChannelAboutCopyWith<_ChannelAbout> get copyWith =>
|
||||||
|
__$ChannelAboutCopyWithImpl<_ChannelAbout>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _ChannelAbout implements ChannelAbout {
|
||||||
|
const factory _ChannelAbout(
|
||||||
|
String description,
|
||||||
|
int viewCount,
|
||||||
|
String joinDate,
|
||||||
|
String title,
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
String country,
|
||||||
|
List<ChannelLink> channelLinks) = _$_ChannelAbout;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Full channel description.
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel view count.
|
||||||
|
int get viewCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel join date.
|
||||||
|
/// Formatted as: Gen 01, 2000
|
||||||
|
String get joinDate => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel thumbnails.
|
||||||
|
List<Thumbnail> get thumbnails => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel country.
|
||||||
|
String get country => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel links.
|
||||||
|
List<ChannelLink> get channelLinks => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$ChannelAboutCopyWith<_ChannelAbout> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -21,7 +21,7 @@ class ChannelClient {
|
||||||
final YoutubeHttpClient _httpClient;
|
final YoutubeHttpClient _httpClient;
|
||||||
|
|
||||||
/// Initializes an instance of [ChannelClient]
|
/// Initializes an instance of [ChannelClient]
|
||||||
ChannelClient(this._httpClient);
|
const ChannelClient(this._httpClient);
|
||||||
|
|
||||||
/// Gets the metadata associated with the specified channel.
|
/// Gets the metadata associated with the specified channel.
|
||||||
/// [id] must be either a [ChannelId] or a string
|
/// [id] must be either a [ChannelId] or a string
|
||||||
|
|
|
@ -1,18 +1,41 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../extensions/helpers_extension.dart';
|
import '../extensions/helpers_extension.dart';
|
||||||
|
|
||||||
/// Encapsulates a valid YouTube channel ID.
|
part 'channel_id.freezed.dart';
|
||||||
class ChannelId with EquatableMixin {
|
|
||||||
/// ID as a string.
|
|
||||||
final String value;
|
|
||||||
|
|
||||||
|
/// Encapsulates a valid YouTube channel ID.
|
||||||
|
@freezed
|
||||||
|
class ChannelId with _$ChannelId {
|
||||||
/// Initializes an instance of [ChannelId]
|
/// Initializes an instance of [ChannelId]
|
||||||
ChannelId(String value) : value = parseChannelId(value) ?? '' {
|
factory ChannelId(String value) {
|
||||||
|
final id = parseChannelId(value);
|
||||||
|
if (id == null) {
|
||||||
|
throw ArgumentError.value(value, 'value', 'Invalid channel id');
|
||||||
|
}
|
||||||
|
return ChannelId._internal(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
const factory ChannelId._internal(
|
||||||
|
|
||||||
|
/// ID as a string.
|
||||||
|
String value) = _ChannelId;
|
||||||
|
|
||||||
|
const ChannelId._();
|
||||||
|
|
||||||
|
/// Converts [obj] to a [ChannelId] by calling .toString on that object.
|
||||||
|
/// If it is already a [ChannelId], [obj] is returned
|
||||||
|
factory ChannelId.fromString(dynamic obj) {
|
||||||
|
if (obj is ChannelId) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
return ChannelId(obj.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ChannelId(String value) : value = parseChannelId(value) ?? '' {
|
||||||
if (this.value.isEmpty) {
|
if (this.value.isEmpty) {
|
||||||
throw ArgumentError.value(value);
|
throw ArgumentError.value(value);
|
||||||
}
|
}*/
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns true if the given id is a valid channel id.
|
/// Returns true if the given id is a valid channel id.
|
||||||
static bool validateChannelId(String id) {
|
static bool validateChannelId(String id) {
|
||||||
|
@ -51,18 +74,6 @@ class ChannelId with EquatableMixin {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts [obj] to a [ChannelId] by calling .toString on that object.
|
|
||||||
/// If it is already a [ChannelId], [obj] is returned
|
|
||||||
factory ChannelId.fromString(dynamic obj) {
|
|
||||||
if (obj is ChannelId) {
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
return ChannelId(obj.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => value;
|
String toString() => value;
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [value];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,138 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'channel_id.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelIdTearOff {
|
||||||
|
const _$ChannelIdTearOff();
|
||||||
|
|
||||||
|
_ChannelId _internal(String value) {
|
||||||
|
return _ChannelId(
|
||||||
|
value,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $ChannelId = _$ChannelIdTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ChannelId {
|
||||||
|
/// ID as a string.
|
||||||
|
String get value => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$ChannelIdCopyWith<ChannelId> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ChannelIdCopyWith<$Res> {
|
||||||
|
factory $ChannelIdCopyWith(ChannelId value, $Res Function(ChannelId) then) =
|
||||||
|
_$ChannelIdCopyWithImpl<$Res>;
|
||||||
|
$Res call({String value});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelIdCopyWithImpl<$Res> implements $ChannelIdCopyWith<$Res> {
|
||||||
|
_$ChannelIdCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final ChannelId _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(ChannelId) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? value = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
value: value == freezed
|
||||||
|
? _value.value
|
||||||
|
: value // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$ChannelIdCopyWith<$Res> implements $ChannelIdCopyWith<$Res> {
|
||||||
|
factory _$ChannelIdCopyWith(
|
||||||
|
_ChannelId value, $Res Function(_ChannelId) then) =
|
||||||
|
__$ChannelIdCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({String value});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$ChannelIdCopyWithImpl<$Res> extends _$ChannelIdCopyWithImpl<$Res>
|
||||||
|
implements _$ChannelIdCopyWith<$Res> {
|
||||||
|
__$ChannelIdCopyWithImpl(_ChannelId _value, $Res Function(_ChannelId) _then)
|
||||||
|
: super(_value, (v) => _then(v as _ChannelId));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ChannelId get _value => super._value as _ChannelId;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? value = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_ChannelId(
|
||||||
|
value == freezed
|
||||||
|
? _value.value
|
||||||
|
: value // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_ChannelId extends _ChannelId {
|
||||||
|
const _$_ChannelId(this.value) : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// ID as a string.
|
||||||
|
final String value;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _ChannelId &&
|
||||||
|
(identical(other.value, value) ||
|
||||||
|
const DeepCollectionEquality().equals(other.value, value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^ const DeepCollectionEquality().hash(value);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$ChannelIdCopyWith<_ChannelId> get copyWith =>
|
||||||
|
__$ChannelIdCopyWithImpl<_ChannelId>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _ChannelId extends ChannelId {
|
||||||
|
const factory _ChannelId(String value) = _$_ChannelId;
|
||||||
|
const _ChannelId._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// ID as a string.
|
||||||
|
String get value => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$ChannelIdCopyWith<_ChannelId> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,23 +1,20 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
part 'channel_link.freezed.dart';
|
||||||
|
|
||||||
/// Represents a channel link.
|
/// Represents a channel link.
|
||||||
class ChannelLink with EquatableMixin {
|
@freezed
|
||||||
/// Link title.
|
class ChannelLink with _$ChannelLink {
|
||||||
final String title;
|
|
||||||
|
|
||||||
/// Link URL.
|
|
||||||
/// Already decoded with the YouTube shortener already taken out.
|
|
||||||
final Uri url;
|
|
||||||
|
|
||||||
/// Link Icon URL.
|
|
||||||
final Uri icon;
|
|
||||||
|
|
||||||
/// Initialize an instance of [ChannelLink]
|
/// Initialize an instance of [ChannelLink]
|
||||||
ChannelLink(this.title, this.url, this.icon);
|
const factory ChannelLink(
|
||||||
|
/// Link title.
|
||||||
|
String title,
|
||||||
|
|
||||||
@override
|
/// Link URL.
|
||||||
List<Object> get props => [title, url, icon];
|
/// Already decoded with the YouTube shortener already taken out.
|
||||||
|
Uri url,
|
||||||
|
|
||||||
@override
|
/// Link Icon URL.
|
||||||
String toString() => 'Link: $title ($url): $icon';
|
Uri icon,
|
||||||
|
) = _ChannelLink;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,199 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'channel_link.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelLinkTearOff {
|
||||||
|
const _$ChannelLinkTearOff();
|
||||||
|
|
||||||
|
_ChannelLink call(String title, Uri url, Uri icon) {
|
||||||
|
return _ChannelLink(
|
||||||
|
title,
|
||||||
|
url,
|
||||||
|
icon,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $ChannelLink = _$ChannelLinkTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ChannelLink {
|
||||||
|
/// Link title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Link URL.
|
||||||
|
/// Already decoded with the YouTube shortener already taken out.
|
||||||
|
Uri get url => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Link Icon URL.
|
||||||
|
Uri get icon => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$ChannelLinkCopyWith<ChannelLink> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ChannelLinkCopyWith<$Res> {
|
||||||
|
factory $ChannelLinkCopyWith(
|
||||||
|
ChannelLink value, $Res Function(ChannelLink) then) =
|
||||||
|
_$ChannelLinkCopyWithImpl<$Res>;
|
||||||
|
$Res call({String title, Uri url, Uri icon});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelLinkCopyWithImpl<$Res> implements $ChannelLinkCopyWith<$Res> {
|
||||||
|
_$ChannelLinkCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final ChannelLink _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(ChannelLink) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? url = freezed,
|
||||||
|
Object? icon = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
title: title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
url: url == freezed
|
||||||
|
? _value.url
|
||||||
|
: url // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Uri,
|
||||||
|
icon: icon == freezed
|
||||||
|
? _value.icon
|
||||||
|
: icon // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Uri,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$ChannelLinkCopyWith<$Res>
|
||||||
|
implements $ChannelLinkCopyWith<$Res> {
|
||||||
|
factory _$ChannelLinkCopyWith(
|
||||||
|
_ChannelLink value, $Res Function(_ChannelLink) then) =
|
||||||
|
__$ChannelLinkCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({String title, Uri url, Uri icon});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$ChannelLinkCopyWithImpl<$Res> extends _$ChannelLinkCopyWithImpl<$Res>
|
||||||
|
implements _$ChannelLinkCopyWith<$Res> {
|
||||||
|
__$ChannelLinkCopyWithImpl(
|
||||||
|
_ChannelLink _value, $Res Function(_ChannelLink) _then)
|
||||||
|
: super(_value, (v) => _then(v as _ChannelLink));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ChannelLink get _value => super._value as _ChannelLink;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? url = freezed,
|
||||||
|
Object? icon = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_ChannelLink(
|
||||||
|
title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
url == freezed
|
||||||
|
? _value.url
|
||||||
|
: url // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Uri,
|
||||||
|
icon == freezed
|
||||||
|
? _value.icon
|
||||||
|
: icon // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Uri,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_ChannelLink implements _ChannelLink {
|
||||||
|
const _$_ChannelLink(this.title, this.url, this.icon);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Link title.
|
||||||
|
final String title;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Link URL.
|
||||||
|
/// Already decoded with the YouTube shortener already taken out.
|
||||||
|
final Uri url;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Link Icon URL.
|
||||||
|
final Uri icon;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ChannelLink(title: $title, url: $url, icon: $icon)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _ChannelLink &&
|
||||||
|
(identical(other.title, title) ||
|
||||||
|
const DeepCollectionEquality().equals(other.title, title)) &&
|
||||||
|
(identical(other.url, url) ||
|
||||||
|
const DeepCollectionEquality().equals(other.url, url)) &&
|
||||||
|
(identical(other.icon, icon) ||
|
||||||
|
const DeepCollectionEquality().equals(other.icon, icon)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(title) ^
|
||||||
|
const DeepCollectionEquality().hash(url) ^
|
||||||
|
const DeepCollectionEquality().hash(icon);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$ChannelLinkCopyWith<_ChannelLink> get copyWith =>
|
||||||
|
__$ChannelLinkCopyWithImpl<_ChannelLink>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _ChannelLink implements ChannelLink {
|
||||||
|
const factory _ChannelLink(String title, Uri url, Uri icon) = _$_ChannelLink;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Link title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Link URL.
|
||||||
|
/// Already decoded with the YouTube shortener already taken out.
|
||||||
|
Uri get url => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Link Icon URL.
|
||||||
|
Uri get icon => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$ChannelLinkCopyWith<_ChannelLink> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,35 +1,30 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../videos/video_id.dart';
|
import '../videos/video_id.dart';
|
||||||
|
|
||||||
|
part 'channel_video.freezed.dart';
|
||||||
|
|
||||||
/// Metadata related to a search query result (playlist)
|
/// Metadata related to a search query result (playlist)
|
||||||
class ChannelVideo with EquatableMixin {
|
@freezed
|
||||||
/// Video ID.
|
class ChannelVideo with _$ChannelVideo {
|
||||||
final VideoId videoId;
|
const factory ChannelVideo(
|
||||||
|
/// Video ID.
|
||||||
|
VideoId videoId,
|
||||||
|
|
||||||
/// Video title.
|
/// Video title.
|
||||||
final String videoTitle;
|
String videoTitle,
|
||||||
|
|
||||||
/// Video duration
|
/// Video duration
|
||||||
final Duration videoDuration;
|
Duration videoDuration,
|
||||||
|
|
||||||
/// Video thumbnail
|
/// Video thumbnail
|
||||||
final String videoThumbnail;
|
String videoThumbnail,
|
||||||
|
|
||||||
/// Video upload date.
|
/// Video upload date.
|
||||||
/// Formatted like 10 hours ago
|
/// Formatted like 10 hours ago
|
||||||
final String videoUploadDate;
|
String videoUploadDate,
|
||||||
|
|
||||||
/// Video view count.
|
/// Video view count.
|
||||||
final int videoViews;
|
int videoViews,
|
||||||
|
) = _ChannelVideo;
|
||||||
/// Initialize an instance of [ChannelVideo]
|
|
||||||
ChannelVideo(this.videoId, this.videoTitle, this.videoDuration,
|
|
||||||
this.videoThumbnail, this.videoUploadDate, this.videoViews);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() => '[ChannelVideo] $videoTitle ($videoId)';
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [videoId];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,312 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'channel_video.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelVideoTearOff {
|
||||||
|
const _$ChannelVideoTearOff();
|
||||||
|
|
||||||
|
_ChannelVideo call(VideoId videoId, String videoTitle, Duration videoDuration,
|
||||||
|
String videoThumbnail, String videoUploadDate, int videoViews) {
|
||||||
|
return _ChannelVideo(
|
||||||
|
videoId,
|
||||||
|
videoTitle,
|
||||||
|
videoDuration,
|
||||||
|
videoThumbnail,
|
||||||
|
videoUploadDate,
|
||||||
|
videoViews,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $ChannelVideo = _$ChannelVideoTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ChannelVideo {
|
||||||
|
/// Video ID.
|
||||||
|
VideoId get videoId => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
String get videoTitle => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video duration
|
||||||
|
Duration get videoDuration => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video thumbnail
|
||||||
|
String get videoThumbnail => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Formatted like 10 hours ago
|
||||||
|
String get videoUploadDate => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video view count.
|
||||||
|
int get videoViews => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$ChannelVideoCopyWith<ChannelVideo> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ChannelVideoCopyWith<$Res> {
|
||||||
|
factory $ChannelVideoCopyWith(
|
||||||
|
ChannelVideo value, $Res Function(ChannelVideo) then) =
|
||||||
|
_$ChannelVideoCopyWithImpl<$Res>;
|
||||||
|
$Res call(
|
||||||
|
{VideoId videoId,
|
||||||
|
String videoTitle,
|
||||||
|
Duration videoDuration,
|
||||||
|
String videoThumbnail,
|
||||||
|
String videoUploadDate,
|
||||||
|
int videoViews});
|
||||||
|
|
||||||
|
$VideoIdCopyWith<$Res> get videoId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChannelVideoCopyWithImpl<$Res> implements $ChannelVideoCopyWith<$Res> {
|
||||||
|
_$ChannelVideoCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final ChannelVideo _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(ChannelVideo) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? videoId = freezed,
|
||||||
|
Object? videoTitle = freezed,
|
||||||
|
Object? videoDuration = freezed,
|
||||||
|
Object? videoThumbnail = freezed,
|
||||||
|
Object? videoUploadDate = freezed,
|
||||||
|
Object? videoViews = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
videoId: videoId == freezed
|
||||||
|
? _value.videoId
|
||||||
|
: videoId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as VideoId,
|
||||||
|
videoTitle: videoTitle == freezed
|
||||||
|
? _value.videoTitle
|
||||||
|
: videoTitle // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoDuration: videoDuration == freezed
|
||||||
|
? _value.videoDuration
|
||||||
|
: videoDuration // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Duration,
|
||||||
|
videoThumbnail: videoThumbnail == freezed
|
||||||
|
? _value.videoThumbnail
|
||||||
|
: videoThumbnail // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoUploadDate: videoUploadDate == freezed
|
||||||
|
? _value.videoUploadDate
|
||||||
|
: videoUploadDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoViews: videoViews == freezed
|
||||||
|
? _value.videoViews
|
||||||
|
: videoViews // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$VideoIdCopyWith<$Res> get videoId {
|
||||||
|
return $VideoIdCopyWith<$Res>(_value.videoId, (value) {
|
||||||
|
return _then(_value.copyWith(videoId: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$ChannelVideoCopyWith<$Res>
|
||||||
|
implements $ChannelVideoCopyWith<$Res> {
|
||||||
|
factory _$ChannelVideoCopyWith(
|
||||||
|
_ChannelVideo value, $Res Function(_ChannelVideo) then) =
|
||||||
|
__$ChannelVideoCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call(
|
||||||
|
{VideoId videoId,
|
||||||
|
String videoTitle,
|
||||||
|
Duration videoDuration,
|
||||||
|
String videoThumbnail,
|
||||||
|
String videoUploadDate,
|
||||||
|
int videoViews});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$VideoIdCopyWith<$Res> get videoId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$ChannelVideoCopyWithImpl<$Res> extends _$ChannelVideoCopyWithImpl<$Res>
|
||||||
|
implements _$ChannelVideoCopyWith<$Res> {
|
||||||
|
__$ChannelVideoCopyWithImpl(
|
||||||
|
_ChannelVideo _value, $Res Function(_ChannelVideo) _then)
|
||||||
|
: super(_value, (v) => _then(v as _ChannelVideo));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ChannelVideo get _value => super._value as _ChannelVideo;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? videoId = freezed,
|
||||||
|
Object? videoTitle = freezed,
|
||||||
|
Object? videoDuration = freezed,
|
||||||
|
Object? videoThumbnail = freezed,
|
||||||
|
Object? videoUploadDate = freezed,
|
||||||
|
Object? videoViews = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_ChannelVideo(
|
||||||
|
videoId == freezed
|
||||||
|
? _value.videoId
|
||||||
|
: videoId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as VideoId,
|
||||||
|
videoTitle == freezed
|
||||||
|
? _value.videoTitle
|
||||||
|
: videoTitle // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoDuration == freezed
|
||||||
|
? _value.videoDuration
|
||||||
|
: videoDuration // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Duration,
|
||||||
|
videoThumbnail == freezed
|
||||||
|
? _value.videoThumbnail
|
||||||
|
: videoThumbnail // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoUploadDate == freezed
|
||||||
|
? _value.videoUploadDate
|
||||||
|
: videoUploadDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoViews == freezed
|
||||||
|
? _value.videoViews
|
||||||
|
: videoViews // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_ChannelVideo implements _ChannelVideo {
|
||||||
|
const _$_ChannelVideo(this.videoId, this.videoTitle, this.videoDuration,
|
||||||
|
this.videoThumbnail, this.videoUploadDate, this.videoViews);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video ID.
|
||||||
|
final VideoId videoId;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
final String videoTitle;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video duration
|
||||||
|
final Duration videoDuration;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video thumbnail
|
||||||
|
final String videoThumbnail;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Formatted like 10 hours ago
|
||||||
|
final String videoUploadDate;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video view count.
|
||||||
|
final int videoViews;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ChannelVideo(videoId: $videoId, videoTitle: $videoTitle, videoDuration: $videoDuration, videoThumbnail: $videoThumbnail, videoUploadDate: $videoUploadDate, videoViews: $videoViews)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _ChannelVideo &&
|
||||||
|
(identical(other.videoId, videoId) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.videoId, videoId)) &&
|
||||||
|
(identical(other.videoTitle, videoTitle) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.videoTitle, videoTitle)) &&
|
||||||
|
(identical(other.videoDuration, videoDuration) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.videoDuration, videoDuration)) &&
|
||||||
|
(identical(other.videoThumbnail, videoThumbnail) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.videoThumbnail, videoThumbnail)) &&
|
||||||
|
(identical(other.videoUploadDate, videoUploadDate) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.videoUploadDate, videoUploadDate)) &&
|
||||||
|
(identical(other.videoViews, videoViews) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.videoViews, videoViews)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(videoId) ^
|
||||||
|
const DeepCollectionEquality().hash(videoTitle) ^
|
||||||
|
const DeepCollectionEquality().hash(videoDuration) ^
|
||||||
|
const DeepCollectionEquality().hash(videoThumbnail) ^
|
||||||
|
const DeepCollectionEquality().hash(videoUploadDate) ^
|
||||||
|
const DeepCollectionEquality().hash(videoViews);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$ChannelVideoCopyWith<_ChannelVideo> get copyWith =>
|
||||||
|
__$ChannelVideoCopyWithImpl<_ChannelVideo>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _ChannelVideo implements ChannelVideo {
|
||||||
|
const factory _ChannelVideo(
|
||||||
|
VideoId videoId,
|
||||||
|
String videoTitle,
|
||||||
|
Duration videoDuration,
|
||||||
|
String videoThumbnail,
|
||||||
|
String videoUploadDate,
|
||||||
|
int videoViews) = _$_ChannelVideo;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video ID.
|
||||||
|
VideoId get videoId => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
String get videoTitle => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video duration
|
||||||
|
Duration get videoDuration => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video thumbnail
|
||||||
|
String get videoThumbnail => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Formatted like 10 hours ago
|
||||||
|
String get videoUploadDate => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video view count.
|
||||||
|
int get videoViews => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$ChannelVideoCopyWith<_ChannelVideo> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,18 +1,36 @@
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../extensions/helpers_extension.dart';
|
import '../extensions/helpers_extension.dart';
|
||||||
|
|
||||||
/// Encapsulates a valid YouTube user name.
|
part 'username.freezed.dart';
|
||||||
class Username {
|
|
||||||
/// User name as string.
|
|
||||||
final String value;
|
|
||||||
|
|
||||||
|
/// Encapsulates a valid YouTube user name.
|
||||||
|
@freezed
|
||||||
|
class Username with _$Username {
|
||||||
/// Initializes an instance of [Username].
|
/// Initializes an instance of [Username].
|
||||||
Username(String urlOrUsername) : value = parseUsername(urlOrUsername) ?? '' {
|
factory Username(String urlOrUsername) {
|
||||||
if (value.isEmpty) {
|
final username = parseUsername(urlOrUsername);
|
||||||
|
if (username == null) {
|
||||||
throw ArgumentError.value(
|
throw ArgumentError.value(
|
||||||
urlOrUsername, 'urlOrUsername', 'Invalid username');
|
urlOrUsername, 'urlOrUsername', 'Invalid username');
|
||||||
}
|
}
|
||||||
|
return Username._(username);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Converts [obj] to a [Username] by calling .toString on that object.
|
||||||
|
/// If it is already a [Username], [obj] is returned
|
||||||
|
factory Username.fromString(dynamic obj) {
|
||||||
|
if (obj is Username) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
return Username(obj.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
const factory Username._(
|
||||||
|
/// User name as string.
|
||||||
|
final String value,
|
||||||
|
) = _Username;
|
||||||
|
|
||||||
/// Returns true if the given username is a valid username.
|
/// Returns true if the given username is a valid username.
|
||||||
static bool validateUsername(String name) {
|
static bool validateUsername(String name) {
|
||||||
if (name.isNullOrWhiteSpace) {
|
if (name.isNullOrWhiteSpace) {
|
||||||
|
@ -44,13 +62,4 @@ class Username {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts [obj] to a [Username] by calling .toString on that object.
|
|
||||||
/// If it is already a [Username], [obj] is returned
|
|
||||||
factory Username.fromString(dynamic obj) {
|
|
||||||
if (obj is Username) {
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
return Username(obj.toString());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'username.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$UsernameTearOff {
|
||||||
|
const _$UsernameTearOff();
|
||||||
|
|
||||||
|
_Username _(String value) {
|
||||||
|
return _Username(
|
||||||
|
value,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Username = _$UsernameTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Username {
|
||||||
|
/// User name as string.
|
||||||
|
String get value => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$UsernameCopyWith<Username> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $UsernameCopyWith<$Res> {
|
||||||
|
factory $UsernameCopyWith(Username value, $Res Function(Username) then) =
|
||||||
|
_$UsernameCopyWithImpl<$Res>;
|
||||||
|
$Res call({String value});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$UsernameCopyWithImpl<$Res> implements $UsernameCopyWith<$Res> {
|
||||||
|
_$UsernameCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Username _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Username) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? value = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
value: value == freezed
|
||||||
|
? _value.value
|
||||||
|
: value // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$UsernameCopyWith<$Res> implements $UsernameCopyWith<$Res> {
|
||||||
|
factory _$UsernameCopyWith(_Username value, $Res Function(_Username) then) =
|
||||||
|
__$UsernameCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({String value});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$UsernameCopyWithImpl<$Res> extends _$UsernameCopyWithImpl<$Res>
|
||||||
|
implements _$UsernameCopyWith<$Res> {
|
||||||
|
__$UsernameCopyWithImpl(_Username _value, $Res Function(_Username) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Username));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Username get _value => super._value as _Username;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? value = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Username(
|
||||||
|
value == freezed
|
||||||
|
? _value.value
|
||||||
|
: value // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_Username implements _Username {
|
||||||
|
const _$_Username(this.value);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// User name as string.
|
||||||
|
final String value;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'Username._(value: $value)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Username &&
|
||||||
|
(identical(other.value, value) ||
|
||||||
|
const DeepCollectionEquality().equals(other.value, value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^ const DeepCollectionEquality().hash(value);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$UsernameCopyWith<_Username> get copyWith =>
|
||||||
|
__$UsernameCopyWithImpl<_Username>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Username implements Username {
|
||||||
|
const factory _Username(String value) = _$_Username;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// User name as string.
|
||||||
|
String get value => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$UsernameCopyWith<_Username> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,18 +1,22 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
part 'engagement.freezed.dart';
|
||||||
|
|
||||||
/// User activity statistics.
|
/// User activity statistics.
|
||||||
class Engagement extends Equatable {
|
@freezed
|
||||||
/// View count.
|
class Engagement with _$Engagement {
|
||||||
final int viewCount;
|
const Engagement._();
|
||||||
|
|
||||||
/// Like count.
|
const factory Engagement(
|
||||||
final int? likeCount;
|
/// View count.
|
||||||
|
int viewCount,
|
||||||
|
|
||||||
/// Dislike count.
|
/// Like count.
|
||||||
final int? dislikeCount;
|
int? likeCount,
|
||||||
|
|
||||||
/// Initializes an instance of [Engagement]
|
/// Dislike count.
|
||||||
const Engagement(this.viewCount, this.likeCount, this.dislikeCount);
|
int? dislikeCount,
|
||||||
|
) = _Engagement;
|
||||||
|
|
||||||
/// Average user rating in stars (1 star to 5 stars).
|
/// Average user rating in stars (1 star to 5 stars).
|
||||||
/// Returns -1 if likeCount or dislikeCount is null.
|
/// Returns -1 if likeCount or dislikeCount is null.
|
||||||
|
@ -25,11 +29,4 @@ class Engagement extends Equatable {
|
||||||
}
|
}
|
||||||
return 1 + 4.0 * likeCount! / (likeCount! + dislikeCount!);
|
return 1 + 4.0 * likeCount! / (likeCount! + dislikeCount!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() =>
|
|
||||||
'$viewCount views, $likeCount likes, $dislikeCount dislikes';
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [viewCount, likeCount, dislikeCount];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,201 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'engagement.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$EngagementTearOff {
|
||||||
|
const _$EngagementTearOff();
|
||||||
|
|
||||||
|
_Engagement call(int viewCount, int? likeCount, int? dislikeCount) {
|
||||||
|
return _Engagement(
|
||||||
|
viewCount,
|
||||||
|
likeCount,
|
||||||
|
dislikeCount,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Engagement = _$EngagementTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Engagement {
|
||||||
|
/// View count.
|
||||||
|
int get viewCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Like count.
|
||||||
|
int? get likeCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Dislike count.
|
||||||
|
int? get dislikeCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$EngagementCopyWith<Engagement> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $EngagementCopyWith<$Res> {
|
||||||
|
factory $EngagementCopyWith(
|
||||||
|
Engagement value, $Res Function(Engagement) then) =
|
||||||
|
_$EngagementCopyWithImpl<$Res>;
|
||||||
|
$Res call({int viewCount, int? likeCount, int? dislikeCount});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$EngagementCopyWithImpl<$Res> implements $EngagementCopyWith<$Res> {
|
||||||
|
_$EngagementCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Engagement _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Engagement) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? viewCount = freezed,
|
||||||
|
Object? likeCount = freezed,
|
||||||
|
Object? dislikeCount = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
viewCount: viewCount == freezed
|
||||||
|
? _value.viewCount
|
||||||
|
: viewCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
likeCount: likeCount == freezed
|
||||||
|
? _value.likeCount
|
||||||
|
: likeCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,
|
||||||
|
dislikeCount: dislikeCount == freezed
|
||||||
|
? _value.dislikeCount
|
||||||
|
: dislikeCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$EngagementCopyWith<$Res> implements $EngagementCopyWith<$Res> {
|
||||||
|
factory _$EngagementCopyWith(
|
||||||
|
_Engagement value, $Res Function(_Engagement) then) =
|
||||||
|
__$EngagementCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({int viewCount, int? likeCount, int? dislikeCount});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$EngagementCopyWithImpl<$Res> extends _$EngagementCopyWithImpl<$Res>
|
||||||
|
implements _$EngagementCopyWith<$Res> {
|
||||||
|
__$EngagementCopyWithImpl(
|
||||||
|
_Engagement _value, $Res Function(_Engagement) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Engagement));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Engagement get _value => super._value as _Engagement;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? viewCount = freezed,
|
||||||
|
Object? likeCount = freezed,
|
||||||
|
Object? dislikeCount = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Engagement(
|
||||||
|
viewCount == freezed
|
||||||
|
? _value.viewCount
|
||||||
|
: viewCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
likeCount == freezed
|
||||||
|
? _value.likeCount
|
||||||
|
: likeCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,
|
||||||
|
dislikeCount == freezed
|
||||||
|
? _value.dislikeCount
|
||||||
|
: dislikeCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_Engagement extends _Engagement {
|
||||||
|
const _$_Engagement(this.viewCount, this.likeCount, this.dislikeCount)
|
||||||
|
: super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// View count.
|
||||||
|
final int viewCount;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Like count.
|
||||||
|
final int? likeCount;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Dislike count.
|
||||||
|
final int? dislikeCount;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'Engagement(viewCount: $viewCount, likeCount: $likeCount, dislikeCount: $dislikeCount)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Engagement &&
|
||||||
|
(identical(other.viewCount, viewCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.viewCount, viewCount)) &&
|
||||||
|
(identical(other.likeCount, likeCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.likeCount, likeCount)) &&
|
||||||
|
(identical(other.dislikeCount, dislikeCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.dislikeCount, dislikeCount)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(viewCount) ^
|
||||||
|
const DeepCollectionEquality().hash(likeCount) ^
|
||||||
|
const DeepCollectionEquality().hash(dislikeCount);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$EngagementCopyWith<_Engagement> get copyWith =>
|
||||||
|
__$EngagementCopyWithImpl<_Engagement>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Engagement extends Engagement {
|
||||||
|
const factory _Engagement(int viewCount, int? likeCount, int? dislikeCount) =
|
||||||
|
_$_Engagement;
|
||||||
|
const _Engagement._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// View count.
|
||||||
|
int get viewCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Like count.
|
||||||
|
int? get likeCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Dislike count.
|
||||||
|
int? get dislikeCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$EngagementCopyWith<_Engagement> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,19 +1,18 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
part 'thumbnail.freezed.dart';
|
||||||
|
|
||||||
/// Represent a channel thumbnail
|
/// Represent a channel thumbnail
|
||||||
class Thumbnail with EquatableMixin {
|
@freezed
|
||||||
/// Image url.
|
class Thumbnail with _$Thumbnail {
|
||||||
final Uri url;
|
const factory Thumbnail(
|
||||||
|
/// Image url.
|
||||||
|
Uri url,
|
||||||
|
|
||||||
/// Image height.
|
/// Image height.
|
||||||
final int height;
|
int height,
|
||||||
|
|
||||||
/// Image width.
|
/// Image width.
|
||||||
final int width;
|
int width,
|
||||||
|
) = _Thumbnail;
|
||||||
/// Initialize an instance of [Thumbnail].
|
|
||||||
Thumbnail(this.url, this.height, this.width);
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [url, height, width];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,193 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'thumbnail.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ThumbnailTearOff {
|
||||||
|
const _$ThumbnailTearOff();
|
||||||
|
|
||||||
|
_Thumbnail call(Uri url, int height, int width) {
|
||||||
|
return _Thumbnail(
|
||||||
|
url,
|
||||||
|
height,
|
||||||
|
width,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Thumbnail = _$ThumbnailTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Thumbnail {
|
||||||
|
/// Image url.
|
||||||
|
Uri get url => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Image height.
|
||||||
|
int get height => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Image width.
|
||||||
|
int get width => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$ThumbnailCopyWith<Thumbnail> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ThumbnailCopyWith<$Res> {
|
||||||
|
factory $ThumbnailCopyWith(Thumbnail value, $Res Function(Thumbnail) then) =
|
||||||
|
_$ThumbnailCopyWithImpl<$Res>;
|
||||||
|
$Res call({Uri url, int height, int width});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ThumbnailCopyWithImpl<$Res> implements $ThumbnailCopyWith<$Res> {
|
||||||
|
_$ThumbnailCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Thumbnail _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Thumbnail) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? url = freezed,
|
||||||
|
Object? height = freezed,
|
||||||
|
Object? width = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
url: url == freezed
|
||||||
|
? _value.url
|
||||||
|
: url // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Uri,
|
||||||
|
height: height == freezed
|
||||||
|
? _value.height
|
||||||
|
: height // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
width: width == freezed
|
||||||
|
? _value.width
|
||||||
|
: width // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$ThumbnailCopyWith<$Res> implements $ThumbnailCopyWith<$Res> {
|
||||||
|
factory _$ThumbnailCopyWith(
|
||||||
|
_Thumbnail value, $Res Function(_Thumbnail) then) =
|
||||||
|
__$ThumbnailCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({Uri url, int height, int width});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$ThumbnailCopyWithImpl<$Res> extends _$ThumbnailCopyWithImpl<$Res>
|
||||||
|
implements _$ThumbnailCopyWith<$Res> {
|
||||||
|
__$ThumbnailCopyWithImpl(_Thumbnail _value, $Res Function(_Thumbnail) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Thumbnail));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Thumbnail get _value => super._value as _Thumbnail;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? url = freezed,
|
||||||
|
Object? height = freezed,
|
||||||
|
Object? width = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Thumbnail(
|
||||||
|
url == freezed
|
||||||
|
? _value.url
|
||||||
|
: url // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Uri,
|
||||||
|
height == freezed
|
||||||
|
? _value.height
|
||||||
|
: height // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
width == freezed
|
||||||
|
? _value.width
|
||||||
|
: width // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_Thumbnail implements _Thumbnail {
|
||||||
|
const _$_Thumbnail(this.url, this.height, this.width);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Image url.
|
||||||
|
final Uri url;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Image height.
|
||||||
|
final int height;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Image width.
|
||||||
|
final int width;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'Thumbnail(url: $url, height: $height, width: $width)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Thumbnail &&
|
||||||
|
(identical(other.url, url) ||
|
||||||
|
const DeepCollectionEquality().equals(other.url, url)) &&
|
||||||
|
(identical(other.height, height) ||
|
||||||
|
const DeepCollectionEquality().equals(other.height, height)) &&
|
||||||
|
(identical(other.width, width) ||
|
||||||
|
const DeepCollectionEquality().equals(other.width, width)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(url) ^
|
||||||
|
const DeepCollectionEquality().hash(height) ^
|
||||||
|
const DeepCollectionEquality().hash(width);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$ThumbnailCopyWith<_Thumbnail> get copyWith =>
|
||||||
|
__$ThumbnailCopyWithImpl<_Thumbnail>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Thumbnail implements Thumbnail {
|
||||||
|
const factory _Thumbnail(Uri url, int height, int width) = _$_Thumbnail;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Image url.
|
||||||
|
Uri get url => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Image height.
|
||||||
|
int get height => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Image width.
|
||||||
|
int get width => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$ThumbnailCopyWith<_Thumbnail> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,12 +1,17 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
part 'thumbnail_set.freezed.dart';
|
||||||
|
|
||||||
/// Set of thumbnails for a video.
|
/// Set of thumbnails for a video.
|
||||||
class ThumbnailSet extends Equatable {
|
@freezed
|
||||||
/// Video id.
|
class ThumbnailSet with _$ThumbnailSet {
|
||||||
final String videoId;
|
|
||||||
|
|
||||||
/// Initializes an instance of [ThumbnailSet]
|
/// Initializes an instance of [ThumbnailSet]
|
||||||
const ThumbnailSet(this.videoId);
|
const factory ThumbnailSet(
|
||||||
|
|
||||||
|
/// Video id.
|
||||||
|
String videoId) = _ThumbnailSet;
|
||||||
|
|
||||||
|
const ThumbnailSet._();
|
||||||
|
|
||||||
/// Low resolution thumbnail URL.
|
/// Low resolution thumbnail URL.
|
||||||
String get lowResUrl => 'https://img.youtube.com/vi/$videoId/default.jpg';
|
String get lowResUrl => 'https://img.youtube.com/vi/$videoId/default.jpg';
|
||||||
|
|
|
@ -0,0 +1,146 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'thumbnail_set.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ThumbnailSetTearOff {
|
||||||
|
const _$ThumbnailSetTearOff();
|
||||||
|
|
||||||
|
_ThumbnailSet call(String videoId) {
|
||||||
|
return _ThumbnailSet(
|
||||||
|
videoId,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $ThumbnailSet = _$ThumbnailSetTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ThumbnailSet {
|
||||||
|
/// Video id.
|
||||||
|
String get videoId => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$ThumbnailSetCopyWith<ThumbnailSet> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ThumbnailSetCopyWith<$Res> {
|
||||||
|
factory $ThumbnailSetCopyWith(
|
||||||
|
ThumbnailSet value, $Res Function(ThumbnailSet) then) =
|
||||||
|
_$ThumbnailSetCopyWithImpl<$Res>;
|
||||||
|
$Res call({String videoId});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ThumbnailSetCopyWithImpl<$Res> implements $ThumbnailSetCopyWith<$Res> {
|
||||||
|
_$ThumbnailSetCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final ThumbnailSet _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(ThumbnailSet) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? videoId = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
videoId: videoId == freezed
|
||||||
|
? _value.videoId
|
||||||
|
: videoId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$ThumbnailSetCopyWith<$Res>
|
||||||
|
implements $ThumbnailSetCopyWith<$Res> {
|
||||||
|
factory _$ThumbnailSetCopyWith(
|
||||||
|
_ThumbnailSet value, $Res Function(_ThumbnailSet) then) =
|
||||||
|
__$ThumbnailSetCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({String videoId});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$ThumbnailSetCopyWithImpl<$Res> extends _$ThumbnailSetCopyWithImpl<$Res>
|
||||||
|
implements _$ThumbnailSetCopyWith<$Res> {
|
||||||
|
__$ThumbnailSetCopyWithImpl(
|
||||||
|
_ThumbnailSet _value, $Res Function(_ThumbnailSet) _then)
|
||||||
|
: super(_value, (v) => _then(v as _ThumbnailSet));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ThumbnailSet get _value => super._value as _ThumbnailSet;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? videoId = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_ThumbnailSet(
|
||||||
|
videoId == freezed
|
||||||
|
? _value.videoId
|
||||||
|
: videoId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_ThumbnailSet extends _ThumbnailSet {
|
||||||
|
const _$_ThumbnailSet(this.videoId) : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video id.
|
||||||
|
final String videoId;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ThumbnailSet(videoId: $videoId)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _ThumbnailSet &&
|
||||||
|
(identical(other.videoId, videoId) ||
|
||||||
|
const DeepCollectionEquality().equals(other.videoId, videoId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^ const DeepCollectionEquality().hash(videoId);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$ThumbnailSetCopyWith<_ThumbnailSet> get copyWith =>
|
||||||
|
__$ThumbnailSetCopyWithImpl<_ThumbnailSet>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _ThumbnailSet extends ThumbnailSet {
|
||||||
|
const factory _ThumbnailSet(String videoId) = _$_ThumbnailSet;
|
||||||
|
const _ThumbnailSet._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video id.
|
||||||
|
String get videoId => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$ThumbnailSetCopyWith<_ThumbnailSet> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,40 +1,39 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../common/common.dart';
|
import '../common/common.dart';
|
||||||
import 'playlist_id.dart';
|
import 'playlist_id.dart';
|
||||||
|
|
||||||
|
part 'playlist.freezed.dart';
|
||||||
|
|
||||||
/// YouTube playlist metadata.
|
/// YouTube playlist metadata.
|
||||||
class Playlist with EquatableMixin {
|
@freezed
|
||||||
/// Playlist ID.
|
class Playlist with _$Playlist {
|
||||||
final PlaylistId id;
|
/// Initializes an instance of [Playlist].
|
||||||
|
const factory Playlist(
|
||||||
|
/// Playlist ID.
|
||||||
|
PlaylistId id,
|
||||||
|
|
||||||
|
/// Playlist title.
|
||||||
|
String title,
|
||||||
|
|
||||||
|
/// Playlist author.
|
||||||
|
/// Can be null if it's a system playlist (e.g. Video Mix, Topics, etc.).
|
||||||
|
String author,
|
||||||
|
|
||||||
|
/// Playlist description.
|
||||||
|
String description,
|
||||||
|
|
||||||
|
/// Available thumbnails for this playlist.
|
||||||
|
/// Can be null if the playlist is empty.
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
|
||||||
|
/// Engagement statistics.
|
||||||
|
Engagement engagement,
|
||||||
|
) = _Playlist;
|
||||||
|
|
||||||
|
const Playlist._();
|
||||||
|
|
||||||
/// Playlist URL.
|
/// Playlist URL.
|
||||||
String get url => 'https://www.youtube.com/playlist?list=$id';
|
String get url => 'https://www.youtube.com/playlist?list=$id';
|
||||||
|
|
||||||
/// Playlist title.
|
|
||||||
final String title;
|
|
||||||
|
|
||||||
/// Playlist author.
|
|
||||||
/// Can be null if it's a system playlist (e.g. Video Mix, Topics, etc.).
|
|
||||||
final String author;
|
|
||||||
|
|
||||||
/// Playlist description.
|
|
||||||
final String description;
|
|
||||||
|
|
||||||
/// Available thumbnails for this playlist.
|
|
||||||
/// Can be null if the playlist is empty.
|
|
||||||
final ThumbnailSet thumbnails;
|
|
||||||
|
|
||||||
/// Engagement statistics.
|
|
||||||
final Engagement engagement;
|
|
||||||
|
|
||||||
/// Initializes an instance of [Playlist].
|
|
||||||
Playlist(this.id, this.title, this.author, this.description, this.thumbnails,
|
|
||||||
this.engagement);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() => 'Playlist ($title)';
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [id];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,330 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'playlist.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PlaylistTearOff {
|
||||||
|
const _$PlaylistTearOff();
|
||||||
|
|
||||||
|
_Playlist call(PlaylistId id, String title, String author, String description,
|
||||||
|
ThumbnailSet thumbnails, Engagement engagement) {
|
||||||
|
return _Playlist(
|
||||||
|
id,
|
||||||
|
title,
|
||||||
|
author,
|
||||||
|
description,
|
||||||
|
thumbnails,
|
||||||
|
engagement,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Playlist = _$PlaylistTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Playlist {
|
||||||
|
/// Playlist ID.
|
||||||
|
PlaylistId get id => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Playlist title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Playlist author.
|
||||||
|
/// Can be null if it's a system playlist (e.g. Video Mix, Topics, etc.).
|
||||||
|
String get author => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Playlist description.
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Available thumbnails for this playlist.
|
||||||
|
/// Can be null if the playlist is empty.
|
||||||
|
ThumbnailSet get thumbnails => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Engagement statistics.
|
||||||
|
Engagement get engagement => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$PlaylistCopyWith<Playlist> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PlaylistCopyWith<$Res> {
|
||||||
|
factory $PlaylistCopyWith(Playlist value, $Res Function(Playlist) then) =
|
||||||
|
_$PlaylistCopyWithImpl<$Res>;
|
||||||
|
$Res call(
|
||||||
|
{PlaylistId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
String description,
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
Engagement engagement});
|
||||||
|
|
||||||
|
$PlaylistIdCopyWith<$Res> get id;
|
||||||
|
$ThumbnailSetCopyWith<$Res> get thumbnails;
|
||||||
|
$EngagementCopyWith<$Res> get engagement;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PlaylistCopyWithImpl<$Res> implements $PlaylistCopyWith<$Res> {
|
||||||
|
_$PlaylistCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Playlist _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Playlist) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? author = freezed,
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? thumbnails = freezed,
|
||||||
|
Object? engagement = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
id: id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PlaylistId,
|
||||||
|
title: title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
author: author == freezed
|
||||||
|
? _value.author
|
||||||
|
: author // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
description: description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
thumbnails: thumbnails == freezed
|
||||||
|
? _value.thumbnails
|
||||||
|
: thumbnails // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ThumbnailSet,
|
||||||
|
engagement: engagement == freezed
|
||||||
|
? _value.engagement
|
||||||
|
: engagement // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Engagement,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$PlaylistIdCopyWith<$Res> get id {
|
||||||
|
return $PlaylistIdCopyWith<$Res>(_value.id, (value) {
|
||||||
|
return _then(_value.copyWith(id: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ThumbnailSetCopyWith<$Res> get thumbnails {
|
||||||
|
return $ThumbnailSetCopyWith<$Res>(_value.thumbnails, (value) {
|
||||||
|
return _then(_value.copyWith(thumbnails: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$EngagementCopyWith<$Res> get engagement {
|
||||||
|
return $EngagementCopyWith<$Res>(_value.engagement, (value) {
|
||||||
|
return _then(_value.copyWith(engagement: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$PlaylistCopyWith<$Res> implements $PlaylistCopyWith<$Res> {
|
||||||
|
factory _$PlaylistCopyWith(_Playlist value, $Res Function(_Playlist) then) =
|
||||||
|
__$PlaylistCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call(
|
||||||
|
{PlaylistId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
String description,
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
Engagement engagement});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$PlaylistIdCopyWith<$Res> get id;
|
||||||
|
@override
|
||||||
|
$ThumbnailSetCopyWith<$Res> get thumbnails;
|
||||||
|
@override
|
||||||
|
$EngagementCopyWith<$Res> get engagement;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$PlaylistCopyWithImpl<$Res> extends _$PlaylistCopyWithImpl<$Res>
|
||||||
|
implements _$PlaylistCopyWith<$Res> {
|
||||||
|
__$PlaylistCopyWithImpl(_Playlist _value, $Res Function(_Playlist) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Playlist));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Playlist get _value => super._value as _Playlist;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? author = freezed,
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? thumbnails = freezed,
|
||||||
|
Object? engagement = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Playlist(
|
||||||
|
id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PlaylistId,
|
||||||
|
title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
author == freezed
|
||||||
|
? _value.author
|
||||||
|
: author // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
thumbnails == freezed
|
||||||
|
? _value.thumbnails
|
||||||
|
: thumbnails // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ThumbnailSet,
|
||||||
|
engagement == freezed
|
||||||
|
? _value.engagement
|
||||||
|
: engagement // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Engagement,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_Playlist extends _Playlist {
|
||||||
|
const _$_Playlist(this.id, this.title, this.author, this.description,
|
||||||
|
this.thumbnails, this.engagement)
|
||||||
|
: super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist ID.
|
||||||
|
final PlaylistId id;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist title.
|
||||||
|
final String title;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist author.
|
||||||
|
/// Can be null if it's a system playlist (e.g. Video Mix, Topics, etc.).
|
||||||
|
final String author;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist description.
|
||||||
|
final String description;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Available thumbnails for this playlist.
|
||||||
|
/// Can be null if the playlist is empty.
|
||||||
|
final ThumbnailSet thumbnails;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Engagement statistics.
|
||||||
|
final Engagement engagement;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'Playlist(id: $id, title: $title, author: $author, description: $description, thumbnails: $thumbnails, engagement: $engagement)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Playlist &&
|
||||||
|
(identical(other.id, id) ||
|
||||||
|
const DeepCollectionEquality().equals(other.id, id)) &&
|
||||||
|
(identical(other.title, title) ||
|
||||||
|
const DeepCollectionEquality().equals(other.title, title)) &&
|
||||||
|
(identical(other.author, author) ||
|
||||||
|
const DeepCollectionEquality().equals(other.author, author)) &&
|
||||||
|
(identical(other.description, description) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.description, description)) &&
|
||||||
|
(identical(other.thumbnails, thumbnails) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.thumbnails, thumbnails)) &&
|
||||||
|
(identical(other.engagement, engagement) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.engagement, engagement)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(id) ^
|
||||||
|
const DeepCollectionEquality().hash(title) ^
|
||||||
|
const DeepCollectionEquality().hash(author) ^
|
||||||
|
const DeepCollectionEquality().hash(description) ^
|
||||||
|
const DeepCollectionEquality().hash(thumbnails) ^
|
||||||
|
const DeepCollectionEquality().hash(engagement);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$PlaylistCopyWith<_Playlist> get copyWith =>
|
||||||
|
__$PlaylistCopyWithImpl<_Playlist>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Playlist extends Playlist {
|
||||||
|
const factory _Playlist(
|
||||||
|
PlaylistId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
String description,
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
Engagement engagement) = _$_Playlist;
|
||||||
|
const _Playlist._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist ID.
|
||||||
|
PlaylistId get id => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist author.
|
||||||
|
/// Can be null if it's a system playlist (e.g. Video Mix, Topics, etc.).
|
||||||
|
String get author => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist description.
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Available thumbnails for this playlist.
|
||||||
|
/// Can be null if the playlist is empty.
|
||||||
|
ThumbnailSet get thumbnails => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Engagement statistics.
|
||||||
|
Engagement get engagement => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$PlaylistCopyWith<_Playlist> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,9 +1,12 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../extensions/helpers_extension.dart';
|
import '../extensions/helpers_extension.dart';
|
||||||
|
|
||||||
|
part 'playlist_id.freezed.dart';
|
||||||
|
|
||||||
/// Encapsulates a valid YouTube playlist ID.
|
/// Encapsulates a valid YouTube playlist ID.
|
||||||
class PlaylistId with EquatableMixin {
|
@freezed
|
||||||
|
class PlaylistId with _$PlaylistId {
|
||||||
static final _regMatchExp =
|
static final _regMatchExp =
|
||||||
RegExp(r'youtube\..+?/playlist.*?list=(.*?)(?:&|/|$)');
|
RegExp(r'youtube\..+?/playlist.*?list=(.*?)(?:&|/|$)');
|
||||||
static final _compositeMatchExp =
|
static final _compositeMatchExp =
|
||||||
|
@ -13,14 +16,29 @@ class PlaylistId with EquatableMixin {
|
||||||
static final _embedCompositeMatchExp =
|
static final _embedCompositeMatchExp =
|
||||||
RegExp(r'youtube\..+?/embed/.*?/.*?list=(.*?)(?:&|/|$)');
|
RegExp(r'youtube\..+?/embed/.*?/.*?list=(.*?)(?:&|/|$)');
|
||||||
|
|
||||||
/// The playlist id as string.
|
const PlaylistId._();
|
||||||
final String value;
|
|
||||||
|
const factory PlaylistId._internal(
|
||||||
|
|
||||||
|
/// The playlist id as string.
|
||||||
|
String value) = _PlaylistId;
|
||||||
|
|
||||||
/// Initializes an instance of [PlaylistId]
|
/// Initializes an instance of [PlaylistId]
|
||||||
PlaylistId(String idOrUrl) : value = parsePlaylistId(idOrUrl) ?? '' {
|
factory PlaylistId(String idOrUrl) {
|
||||||
if (value.isEmpty) {
|
final id = parsePlaylistId(idOrUrl);
|
||||||
|
if (id == null) {
|
||||||
throw ArgumentError.value(idOrUrl, 'idOrUrl', 'Invalid url');
|
throw ArgumentError.value(idOrUrl, 'idOrUrl', 'Invalid url');
|
||||||
}
|
}
|
||||||
|
return PlaylistId._internal(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Converts [obj] to a [PlaylistId] by calling .toString on that object.
|
||||||
|
/// If it is already a [PlaylistId], [obj] is returned
|
||||||
|
factory PlaylistId.fromString(dynamic obj) {
|
||||||
|
if (obj is PlaylistId) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
return PlaylistId(obj.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns true if the given [playlistId] is valid.
|
/// Returns true if the given [playlistId] is valid.
|
||||||
|
@ -97,16 +115,4 @@ class PlaylistId with EquatableMixin {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => value;
|
String toString() => value;
|
||||||
|
|
||||||
/// Converts [obj] to a [PlaylistId] by calling .toString on that object.
|
|
||||||
/// If it is already a [PlaylistId], [obj] is returned
|
|
||||||
factory PlaylistId.fromString(dynamic obj) {
|
|
||||||
if (obj is PlaylistId) {
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
return PlaylistId(obj.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [value];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,140 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'playlist_id.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PlaylistIdTearOff {
|
||||||
|
const _$PlaylistIdTearOff();
|
||||||
|
|
||||||
|
_PlaylistId _internal(String value) {
|
||||||
|
return _PlaylistId(
|
||||||
|
value,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $PlaylistId = _$PlaylistIdTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PlaylistId {
|
||||||
|
/// The playlist id as string.
|
||||||
|
String get value => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$PlaylistIdCopyWith<PlaylistId> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PlaylistIdCopyWith<$Res> {
|
||||||
|
factory $PlaylistIdCopyWith(
|
||||||
|
PlaylistId value, $Res Function(PlaylistId) then) =
|
||||||
|
_$PlaylistIdCopyWithImpl<$Res>;
|
||||||
|
$Res call({String value});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PlaylistIdCopyWithImpl<$Res> implements $PlaylistIdCopyWith<$Res> {
|
||||||
|
_$PlaylistIdCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final PlaylistId _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(PlaylistId) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? value = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
value: value == freezed
|
||||||
|
? _value.value
|
||||||
|
: value // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$PlaylistIdCopyWith<$Res> implements $PlaylistIdCopyWith<$Res> {
|
||||||
|
factory _$PlaylistIdCopyWith(
|
||||||
|
_PlaylistId value, $Res Function(_PlaylistId) then) =
|
||||||
|
__$PlaylistIdCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({String value});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$PlaylistIdCopyWithImpl<$Res> extends _$PlaylistIdCopyWithImpl<$Res>
|
||||||
|
implements _$PlaylistIdCopyWith<$Res> {
|
||||||
|
__$PlaylistIdCopyWithImpl(
|
||||||
|
_PlaylistId _value, $Res Function(_PlaylistId) _then)
|
||||||
|
: super(_value, (v) => _then(v as _PlaylistId));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_PlaylistId get _value => super._value as _PlaylistId;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? value = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_PlaylistId(
|
||||||
|
value == freezed
|
||||||
|
? _value.value
|
||||||
|
: value // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_PlaylistId extends _PlaylistId {
|
||||||
|
const _$_PlaylistId(this.value) : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// The playlist id as string.
|
||||||
|
final String value;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _PlaylistId &&
|
||||||
|
(identical(other.value, value) ||
|
||||||
|
const DeepCollectionEquality().equals(other.value, value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^ const DeepCollectionEquality().hash(value);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$PlaylistIdCopyWith<_PlaylistId> get copyWith =>
|
||||||
|
__$PlaylistIdCopyWithImpl<_PlaylistId>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _PlaylistId extends PlaylistId {
|
||||||
|
const factory _PlaylistId(String value) = _$_PlaylistId;
|
||||||
|
const _PlaylistId._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// The playlist id as string.
|
||||||
|
String get value => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$PlaylistIdCopyWith<_PlaylistId> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,5 +1,2 @@
|
||||||
/// This i can either be a [SearchVideo] or [SearchPlaylist]
|
/// This i can either be a [SearchVideo] or [SearchPlaylist]
|
||||||
abstract class BaseSearchContent {
|
mixin BaseSearchContent {}
|
||||||
///
|
|
||||||
const BaseSearchContent();
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,21 +1,18 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../videos/video_id.dart';
|
import '../videos/video_id.dart';
|
||||||
|
|
||||||
|
part 'related_query.freezed.dart';
|
||||||
|
|
||||||
///
|
///
|
||||||
class RelatedQuery with EquatableMixin {
|
@freezed
|
||||||
/// Query related to a search query.
|
class RelatedQuery with _$RelatedQuery {
|
||||||
final String query;
|
|
||||||
|
|
||||||
/// Video related to a search query.
|
|
||||||
final VideoId videoId;
|
|
||||||
|
|
||||||
/// Initialize a [RelatedQuery] instance.
|
/// Initialize a [RelatedQuery] instance.
|
||||||
RelatedQuery(this.query, this.videoId);
|
const factory RelatedQuery(
|
||||||
|
|
||||||
@override
|
/// Query related to a search query.
|
||||||
String toString() => 'RelatedQuery($videoId): $query';
|
String query,
|
||||||
|
|
||||||
@override
|
/// Video related to a search query.
|
||||||
List<Object> get props => [query, videoId];
|
VideoId videoId) = _RelatedQuery;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,183 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'related_query.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$RelatedQueryTearOff {
|
||||||
|
const _$RelatedQueryTearOff();
|
||||||
|
|
||||||
|
_RelatedQuery call(String query, VideoId videoId) {
|
||||||
|
return _RelatedQuery(
|
||||||
|
query,
|
||||||
|
videoId,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $RelatedQuery = _$RelatedQueryTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$RelatedQuery {
|
||||||
|
/// Query related to a search query.
|
||||||
|
String get query => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video related to a search query.
|
||||||
|
VideoId get videoId => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$RelatedQueryCopyWith<RelatedQuery> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $RelatedQueryCopyWith<$Res> {
|
||||||
|
factory $RelatedQueryCopyWith(
|
||||||
|
RelatedQuery value, $Res Function(RelatedQuery) then) =
|
||||||
|
_$RelatedQueryCopyWithImpl<$Res>;
|
||||||
|
$Res call({String query, VideoId videoId});
|
||||||
|
|
||||||
|
$VideoIdCopyWith<$Res> get videoId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$RelatedQueryCopyWithImpl<$Res> implements $RelatedQueryCopyWith<$Res> {
|
||||||
|
_$RelatedQueryCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final RelatedQuery _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(RelatedQuery) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? query = freezed,
|
||||||
|
Object? videoId = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
query: query == freezed
|
||||||
|
? _value.query
|
||||||
|
: query // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoId: videoId == freezed
|
||||||
|
? _value.videoId
|
||||||
|
: videoId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as VideoId,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$VideoIdCopyWith<$Res> get videoId {
|
||||||
|
return $VideoIdCopyWith<$Res>(_value.videoId, (value) {
|
||||||
|
return _then(_value.copyWith(videoId: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$RelatedQueryCopyWith<$Res>
|
||||||
|
implements $RelatedQueryCopyWith<$Res> {
|
||||||
|
factory _$RelatedQueryCopyWith(
|
||||||
|
_RelatedQuery value, $Res Function(_RelatedQuery) then) =
|
||||||
|
__$RelatedQueryCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({String query, VideoId videoId});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$VideoIdCopyWith<$Res> get videoId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$RelatedQueryCopyWithImpl<$Res> extends _$RelatedQueryCopyWithImpl<$Res>
|
||||||
|
implements _$RelatedQueryCopyWith<$Res> {
|
||||||
|
__$RelatedQueryCopyWithImpl(
|
||||||
|
_RelatedQuery _value, $Res Function(_RelatedQuery) _then)
|
||||||
|
: super(_value, (v) => _then(v as _RelatedQuery));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_RelatedQuery get _value => super._value as _RelatedQuery;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? query = freezed,
|
||||||
|
Object? videoId = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_RelatedQuery(
|
||||||
|
query == freezed
|
||||||
|
? _value.query
|
||||||
|
: query // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoId == freezed
|
||||||
|
? _value.videoId
|
||||||
|
: videoId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as VideoId,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_RelatedQuery implements _RelatedQuery {
|
||||||
|
const _$_RelatedQuery(this.query, this.videoId);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Query related to a search query.
|
||||||
|
final String query;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video related to a search query.
|
||||||
|
final VideoId videoId;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'RelatedQuery(query: $query, videoId: $videoId)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _RelatedQuery &&
|
||||||
|
(identical(other.query, query) ||
|
||||||
|
const DeepCollectionEquality().equals(other.query, query)) &&
|
||||||
|
(identical(other.videoId, videoId) ||
|
||||||
|
const DeepCollectionEquality().equals(other.videoId, videoId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(query) ^
|
||||||
|
const DeepCollectionEquality().hash(videoId);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$RelatedQueryCopyWith<_RelatedQuery> get copyWith =>
|
||||||
|
__$RelatedQueryCopyWithImpl<_RelatedQuery>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _RelatedQuery implements RelatedQuery {
|
||||||
|
const factory _RelatedQuery(String query, VideoId videoId) = _$_RelatedQuery;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Query related to a search query.
|
||||||
|
String get query => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video related to a search query.
|
||||||
|
VideoId get videoId => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$RelatedQueryCopyWith<_RelatedQuery> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,29 +1,28 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../channels/channel_id.dart';
|
import '../channels/channel_id.dart';
|
||||||
import 'base_search_content.dart';
|
import 'base_search_content.dart';
|
||||||
|
|
||||||
|
part 'search_channel.freezed.dart';
|
||||||
|
|
||||||
/// Metadata related to a search query result (channel)
|
/// Metadata related to a search query result (channel)
|
||||||
class SearchChannel extends BaseSearchContent with EquatableMixin {
|
@freezed
|
||||||
/// Channel id.
|
class SearchChannel with _$SearchChannel, BaseSearchContent {
|
||||||
final ChannelId id;
|
|
||||||
|
|
||||||
/// Channel name.
|
|
||||||
final String name;
|
|
||||||
|
|
||||||
/// Description snippet.
|
|
||||||
/// Can be empty.
|
|
||||||
final String description;
|
|
||||||
|
|
||||||
/// Channel uploaded videos.
|
|
||||||
final int videoCount;
|
|
||||||
|
|
||||||
/// Initialize a [SearchChannel] instance.
|
/// Initialize a [SearchChannel] instance.
|
||||||
SearchChannel(this.id, this.name, this.description, this.videoCount);
|
@With(BaseSearchContent)
|
||||||
|
const factory SearchChannel(
|
||||||
|
|
||||||
@override
|
/// Channel id.
|
||||||
String toString() => '(Channel) $name ($id)';
|
ChannelId id,
|
||||||
|
|
||||||
@override
|
/// Channel name.
|
||||||
List<Object?> get props => [id, name, description, videoCount];
|
String name,
|
||||||
|
|
||||||
|
/// Description snippet.
|
||||||
|
/// Can be empty.
|
||||||
|
String description,
|
||||||
|
|
||||||
|
/// Channel uploaded videos.
|
||||||
|
int videoCount) = _SearchChannel;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,244 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'search_channel.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$SearchChannelTearOff {
|
||||||
|
const _$SearchChannelTearOff();
|
||||||
|
|
||||||
|
_SearchChannel call(
|
||||||
|
ChannelId id, String name, String description, int videoCount) {
|
||||||
|
return _SearchChannel(
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
description,
|
||||||
|
videoCount,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $SearchChannel = _$SearchChannelTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$SearchChannel {
|
||||||
|
/// Channel id.
|
||||||
|
ChannelId get id => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel name.
|
||||||
|
String get name => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Description snippet.
|
||||||
|
/// Can be empty.
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel uploaded videos.
|
||||||
|
int get videoCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$SearchChannelCopyWith<SearchChannel> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $SearchChannelCopyWith<$Res> {
|
||||||
|
factory $SearchChannelCopyWith(
|
||||||
|
SearchChannel value, $Res Function(SearchChannel) then) =
|
||||||
|
_$SearchChannelCopyWithImpl<$Res>;
|
||||||
|
$Res call({ChannelId id, String name, String description, int videoCount});
|
||||||
|
|
||||||
|
$ChannelIdCopyWith<$Res> get id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$SearchChannelCopyWithImpl<$Res>
|
||||||
|
implements $SearchChannelCopyWith<$Res> {
|
||||||
|
_$SearchChannelCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final SearchChannel _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(SearchChannel) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? name = freezed,
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? videoCount = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
id: id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ChannelId,
|
||||||
|
name: name == freezed
|
||||||
|
? _value.name
|
||||||
|
: name // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
description: description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoCount: videoCount == freezed
|
||||||
|
? _value.videoCount
|
||||||
|
: videoCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ChannelIdCopyWith<$Res> get id {
|
||||||
|
return $ChannelIdCopyWith<$Res>(_value.id, (value) {
|
||||||
|
return _then(_value.copyWith(id: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$SearchChannelCopyWith<$Res>
|
||||||
|
implements $SearchChannelCopyWith<$Res> {
|
||||||
|
factory _$SearchChannelCopyWith(
|
||||||
|
_SearchChannel value, $Res Function(_SearchChannel) then) =
|
||||||
|
__$SearchChannelCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({ChannelId id, String name, String description, int videoCount});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ChannelIdCopyWith<$Res> get id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$SearchChannelCopyWithImpl<$Res>
|
||||||
|
extends _$SearchChannelCopyWithImpl<$Res>
|
||||||
|
implements _$SearchChannelCopyWith<$Res> {
|
||||||
|
__$SearchChannelCopyWithImpl(
|
||||||
|
_SearchChannel _value, $Res Function(_SearchChannel) _then)
|
||||||
|
: super(_value, (v) => _then(v as _SearchChannel));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_SearchChannel get _value => super._value as _SearchChannel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? name = freezed,
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? videoCount = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_SearchChannel(
|
||||||
|
id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ChannelId,
|
||||||
|
name == freezed
|
||||||
|
? _value.name
|
||||||
|
: name // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
videoCount == freezed
|
||||||
|
? _value.videoCount
|
||||||
|
: videoCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
@With(BaseSearchContent)
|
||||||
|
class _$_SearchChannel with BaseSearchContent implements _SearchChannel {
|
||||||
|
const _$_SearchChannel(this.id, this.name, this.description, this.videoCount);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel id.
|
||||||
|
final ChannelId id;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel name.
|
||||||
|
final String name;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Description snippet.
|
||||||
|
/// Can be empty.
|
||||||
|
final String description;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel uploaded videos.
|
||||||
|
final int videoCount;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'SearchChannel(id: $id, name: $name, description: $description, videoCount: $videoCount)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _SearchChannel &&
|
||||||
|
(identical(other.id, id) ||
|
||||||
|
const DeepCollectionEquality().equals(other.id, id)) &&
|
||||||
|
(identical(other.name, name) ||
|
||||||
|
const DeepCollectionEquality().equals(other.name, name)) &&
|
||||||
|
(identical(other.description, description) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.description, description)) &&
|
||||||
|
(identical(other.videoCount, videoCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.videoCount, videoCount)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(id) ^
|
||||||
|
const DeepCollectionEquality().hash(name) ^
|
||||||
|
const DeepCollectionEquality().hash(description) ^
|
||||||
|
const DeepCollectionEquality().hash(videoCount);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$SearchChannelCopyWith<_SearchChannel> get copyWith =>
|
||||||
|
__$SearchChannelCopyWithImpl<_SearchChannel>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _SearchChannel implements SearchChannel, BaseSearchContent {
|
||||||
|
const factory _SearchChannel(
|
||||||
|
ChannelId id, String name, String description, int videoCount) =
|
||||||
|
_$_SearchChannel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel id.
|
||||||
|
ChannelId get id => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel name.
|
||||||
|
String get name => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Description snippet.
|
||||||
|
/// Can be empty.
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel uploaded videos.
|
||||||
|
int get videoCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$SearchChannelCopyWith<_SearchChannel> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,25 +1,23 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../playlists/playlist_id.dart';
|
import '../playlists/playlist_id.dart';
|
||||||
import 'base_search_content.dart';
|
import 'base_search_content.dart';
|
||||||
|
|
||||||
|
part 'search_playlist.freezed.dart';
|
||||||
|
|
||||||
/// Metadata related to a search query result (playlist)
|
/// Metadata related to a search query result (playlist)
|
||||||
class SearchPlaylist extends BaseSearchContent with EquatableMixin {
|
@freezed
|
||||||
/// PlaylistId.
|
class SearchPlaylist with _$SearchPlaylist, BaseSearchContent {
|
||||||
final PlaylistId playlistId;
|
/// Initialize a [SearchPlaylist] instance.
|
||||||
|
@With(BaseSearchContent)
|
||||||
|
const factory SearchPlaylist(
|
||||||
|
|
||||||
/// Playlist title.
|
/// PlaylistId.
|
||||||
final String playlistTitle;
|
PlaylistId playlistId,
|
||||||
|
|
||||||
/// Playlist video count, cannot be greater than 50.
|
/// Playlist title.
|
||||||
final int playlistVideoCount;
|
String playlistTitle,
|
||||||
|
|
||||||
/// Initialize an instance of [SearchPlaylist]
|
/// Playlist video count, cannot be greater than 50.
|
||||||
SearchPlaylist(this.playlistId, this.playlistTitle, this.playlistVideoCount);
|
int playlistVideoCount) = _SearchChannel;
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() => '[Playlist] $playlistTitle ($playlistId)';
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [playlistId];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,220 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'search_playlist.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$SearchPlaylistTearOff {
|
||||||
|
const _$SearchPlaylistTearOff();
|
||||||
|
|
||||||
|
_SearchChannel call(
|
||||||
|
PlaylistId playlistId, String playlistTitle, int playlistVideoCount) {
|
||||||
|
return _SearchChannel(
|
||||||
|
playlistId,
|
||||||
|
playlistTitle,
|
||||||
|
playlistVideoCount,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $SearchPlaylist = _$SearchPlaylistTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$SearchPlaylist {
|
||||||
|
/// PlaylistId.
|
||||||
|
PlaylistId get playlistId => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Playlist title.
|
||||||
|
String get playlistTitle => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Playlist video count, cannot be greater than 50.
|
||||||
|
int get playlistVideoCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$SearchPlaylistCopyWith<SearchPlaylist> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $SearchPlaylistCopyWith<$Res> {
|
||||||
|
factory $SearchPlaylistCopyWith(
|
||||||
|
SearchPlaylist value, $Res Function(SearchPlaylist) then) =
|
||||||
|
_$SearchPlaylistCopyWithImpl<$Res>;
|
||||||
|
$Res call(
|
||||||
|
{PlaylistId playlistId, String playlistTitle, int playlistVideoCount});
|
||||||
|
|
||||||
|
$PlaylistIdCopyWith<$Res> get playlistId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$SearchPlaylistCopyWithImpl<$Res>
|
||||||
|
implements $SearchPlaylistCopyWith<$Res> {
|
||||||
|
_$SearchPlaylistCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final SearchPlaylist _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(SearchPlaylist) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? playlistId = freezed,
|
||||||
|
Object? playlistTitle = freezed,
|
||||||
|
Object? playlistVideoCount = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
playlistId: playlistId == freezed
|
||||||
|
? _value.playlistId
|
||||||
|
: playlistId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PlaylistId,
|
||||||
|
playlistTitle: playlistTitle == freezed
|
||||||
|
? _value.playlistTitle
|
||||||
|
: playlistTitle // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
playlistVideoCount: playlistVideoCount == freezed
|
||||||
|
? _value.playlistVideoCount
|
||||||
|
: playlistVideoCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$PlaylistIdCopyWith<$Res> get playlistId {
|
||||||
|
return $PlaylistIdCopyWith<$Res>(_value.playlistId, (value) {
|
||||||
|
return _then(_value.copyWith(playlistId: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$SearchChannelCopyWith<$Res>
|
||||||
|
implements $SearchPlaylistCopyWith<$Res> {
|
||||||
|
factory _$SearchChannelCopyWith(
|
||||||
|
_SearchChannel value, $Res Function(_SearchChannel) then) =
|
||||||
|
__$SearchChannelCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call(
|
||||||
|
{PlaylistId playlistId, String playlistTitle, int playlistVideoCount});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$PlaylistIdCopyWith<$Res> get playlistId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$SearchChannelCopyWithImpl<$Res>
|
||||||
|
extends _$SearchPlaylistCopyWithImpl<$Res>
|
||||||
|
implements _$SearchChannelCopyWith<$Res> {
|
||||||
|
__$SearchChannelCopyWithImpl(
|
||||||
|
_SearchChannel _value, $Res Function(_SearchChannel) _then)
|
||||||
|
: super(_value, (v) => _then(v as _SearchChannel));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_SearchChannel get _value => super._value as _SearchChannel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? playlistId = freezed,
|
||||||
|
Object? playlistTitle = freezed,
|
||||||
|
Object? playlistVideoCount = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_SearchChannel(
|
||||||
|
playlistId == freezed
|
||||||
|
? _value.playlistId
|
||||||
|
: playlistId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PlaylistId,
|
||||||
|
playlistTitle == freezed
|
||||||
|
? _value.playlistTitle
|
||||||
|
: playlistTitle // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
playlistVideoCount == freezed
|
||||||
|
? _value.playlistVideoCount
|
||||||
|
: playlistVideoCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
@With(BaseSearchContent)
|
||||||
|
class _$_SearchChannel with BaseSearchContent implements _SearchChannel {
|
||||||
|
const _$_SearchChannel(
|
||||||
|
this.playlistId, this.playlistTitle, this.playlistVideoCount);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// PlaylistId.
|
||||||
|
final PlaylistId playlistId;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist title.
|
||||||
|
final String playlistTitle;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist video count, cannot be greater than 50.
|
||||||
|
final int playlistVideoCount;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'SearchPlaylist(playlistId: $playlistId, playlistTitle: $playlistTitle, playlistVideoCount: $playlistVideoCount)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _SearchChannel &&
|
||||||
|
(identical(other.playlistId, playlistId) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.playlistId, playlistId)) &&
|
||||||
|
(identical(other.playlistTitle, playlistTitle) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.playlistTitle, playlistTitle)) &&
|
||||||
|
(identical(other.playlistVideoCount, playlistVideoCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.playlistVideoCount, playlistVideoCount)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(playlistId) ^
|
||||||
|
const DeepCollectionEquality().hash(playlistTitle) ^
|
||||||
|
const DeepCollectionEquality().hash(playlistVideoCount);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$SearchChannelCopyWith<_SearchChannel> get copyWith =>
|
||||||
|
__$SearchChannelCopyWithImpl<_SearchChannel>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _SearchChannel implements SearchPlaylist, BaseSearchContent {
|
||||||
|
const factory _SearchChannel(
|
||||||
|
PlaylistId playlistId, String playlistTitle, int playlistVideoCount) =
|
||||||
|
_$_SearchChannel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// PlaylistId.
|
||||||
|
PlaylistId get playlistId => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist title.
|
||||||
|
String get playlistTitle => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Playlist video count, cannot be greater than 50.
|
||||||
|
int get playlistVideoCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$SearchChannelCopyWith<_SearchChannel> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,52 +1,45 @@
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../common/common.dart';
|
import '../common/common.dart';
|
||||||
import '../videos/video_id.dart';
|
import '../videos/video_id.dart';
|
||||||
import 'base_search_content.dart';
|
import 'base_search_content.dart';
|
||||||
|
|
||||||
|
part 'search_video.freezed.dart';
|
||||||
|
|
||||||
/// Metadata related to a search query result (video).
|
/// Metadata related to a search query result (video).
|
||||||
class SearchVideo extends BaseSearchContent {
|
@freezed
|
||||||
/// Video ID.
|
class SearchVideo with _$SearchVideo, BaseSearchContent {
|
||||||
final VideoId id;
|
|
||||||
|
|
||||||
/// Video title.
|
|
||||||
final String title;
|
|
||||||
|
|
||||||
/// Video author.
|
|
||||||
final String author;
|
|
||||||
|
|
||||||
/// Video description snippet. (Part of the full description if too long)
|
|
||||||
final String description;
|
|
||||||
|
|
||||||
/// Video duration as String, HH:MM:SS
|
|
||||||
final String duration;
|
|
||||||
|
|
||||||
/// Video View Count
|
|
||||||
final int viewCount;
|
|
||||||
|
|
||||||
/// Video thumbnail
|
|
||||||
final List<Thumbnail> thumbnails;
|
|
||||||
|
|
||||||
/// Video upload date - As string: 5 years ago.
|
|
||||||
final String? uploadDate;
|
|
||||||
|
|
||||||
/// True if this video is a live stream.
|
|
||||||
final bool isLive;
|
|
||||||
|
|
||||||
/// Channel id
|
|
||||||
final String channelId;
|
|
||||||
|
|
||||||
/// Initialize a [SearchVideo] instance.
|
/// Initialize a [SearchVideo] instance.
|
||||||
const SearchVideo(
|
@With(BaseSearchContent)
|
||||||
this.id,
|
const factory SearchVideo(
|
||||||
this.title,
|
/// Video ID.
|
||||||
this.author,
|
VideoId id,
|
||||||
this.description,
|
|
||||||
this.duration,
|
|
||||||
this.viewCount,
|
|
||||||
this.thumbnails,
|
|
||||||
this.uploadDate,
|
|
||||||
this.isLive, // ignore: avoid_positional_boolean_parameters
|
|
||||||
this.channelId);
|
|
||||||
|
|
||||||
@override
|
/// Video title.
|
||||||
String toString() => '(Video) $title ($id)';
|
String title,
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
String author,
|
||||||
|
|
||||||
|
/// Video description snippet. (Part of the full description if too long)
|
||||||
|
String description,
|
||||||
|
|
||||||
|
/// Video duration as String, HH:MM:SS
|
||||||
|
String duration,
|
||||||
|
|
||||||
|
/// Video View Count
|
||||||
|
int viewCount,
|
||||||
|
|
||||||
|
/// Video thumbnail
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
|
||||||
|
/// Video upload date - As string: 5 years ago.
|
||||||
|
String? uploadDate,
|
||||||
|
|
||||||
|
/// True if this video is a live stream.
|
||||||
|
bool isLive,
|
||||||
|
|
||||||
|
/// Channel id
|
||||||
|
String channelId,
|
||||||
|
) = _SearchVideo;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,440 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'search_video.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$SearchVideoTearOff {
|
||||||
|
const _$SearchVideoTearOff();
|
||||||
|
|
||||||
|
_SearchVideo call(
|
||||||
|
VideoId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
String description,
|
||||||
|
String duration,
|
||||||
|
int viewCount,
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
String? uploadDate,
|
||||||
|
bool isLive,
|
||||||
|
String channelId) {
|
||||||
|
return _SearchVideo(
|
||||||
|
id,
|
||||||
|
title,
|
||||||
|
author,
|
||||||
|
description,
|
||||||
|
duration,
|
||||||
|
viewCount,
|
||||||
|
thumbnails,
|
||||||
|
uploadDate,
|
||||||
|
isLive,
|
||||||
|
channelId,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $SearchVideo = _$SearchVideoTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$SearchVideo {
|
||||||
|
/// Video ID.
|
||||||
|
VideoId get id => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
String get author => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video description snippet. (Part of the full description if too long)
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video duration as String, HH:MM:SS
|
||||||
|
String get duration => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video View Count
|
||||||
|
int get viewCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video thumbnail
|
||||||
|
List<Thumbnail> get thumbnails => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video upload date - As string: 5 years ago.
|
||||||
|
String? get uploadDate => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// True if this video is a live stream.
|
||||||
|
bool get isLive => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Channel id
|
||||||
|
String get channelId => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$SearchVideoCopyWith<SearchVideo> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $SearchVideoCopyWith<$Res> {
|
||||||
|
factory $SearchVideoCopyWith(
|
||||||
|
SearchVideo value, $Res Function(SearchVideo) then) =
|
||||||
|
_$SearchVideoCopyWithImpl<$Res>;
|
||||||
|
$Res call(
|
||||||
|
{VideoId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
String description,
|
||||||
|
String duration,
|
||||||
|
int viewCount,
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
String? uploadDate,
|
||||||
|
bool isLive,
|
||||||
|
String channelId});
|
||||||
|
|
||||||
|
$VideoIdCopyWith<$Res> get id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$SearchVideoCopyWithImpl<$Res> implements $SearchVideoCopyWith<$Res> {
|
||||||
|
_$SearchVideoCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final SearchVideo _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(SearchVideo) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? author = freezed,
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? duration = freezed,
|
||||||
|
Object? viewCount = freezed,
|
||||||
|
Object? thumbnails = freezed,
|
||||||
|
Object? uploadDate = freezed,
|
||||||
|
Object? isLive = freezed,
|
||||||
|
Object? channelId = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
id: id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as VideoId,
|
||||||
|
title: title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
author: author == freezed
|
||||||
|
? _value.author
|
||||||
|
: author // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
description: description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
duration: duration == freezed
|
||||||
|
? _value.duration
|
||||||
|
: duration // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
viewCount: viewCount == freezed
|
||||||
|
? _value.viewCount
|
||||||
|
: viewCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
thumbnails: thumbnails == freezed
|
||||||
|
? _value.thumbnails
|
||||||
|
: thumbnails // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<Thumbnail>,
|
||||||
|
uploadDate: uploadDate == freezed
|
||||||
|
? _value.uploadDate
|
||||||
|
: uploadDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,
|
||||||
|
isLive: isLive == freezed
|
||||||
|
? _value.isLive
|
||||||
|
: isLive // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
channelId: channelId == freezed
|
||||||
|
? _value.channelId
|
||||||
|
: channelId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$VideoIdCopyWith<$Res> get id {
|
||||||
|
return $VideoIdCopyWith<$Res>(_value.id, (value) {
|
||||||
|
return _then(_value.copyWith(id: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$SearchVideoCopyWith<$Res>
|
||||||
|
implements $SearchVideoCopyWith<$Res> {
|
||||||
|
factory _$SearchVideoCopyWith(
|
||||||
|
_SearchVideo value, $Res Function(_SearchVideo) then) =
|
||||||
|
__$SearchVideoCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call(
|
||||||
|
{VideoId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
String description,
|
||||||
|
String duration,
|
||||||
|
int viewCount,
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
String? uploadDate,
|
||||||
|
bool isLive,
|
||||||
|
String channelId});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$VideoIdCopyWith<$Res> get id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$SearchVideoCopyWithImpl<$Res> extends _$SearchVideoCopyWithImpl<$Res>
|
||||||
|
implements _$SearchVideoCopyWith<$Res> {
|
||||||
|
__$SearchVideoCopyWithImpl(
|
||||||
|
_SearchVideo _value, $Res Function(_SearchVideo) _then)
|
||||||
|
: super(_value, (v) => _then(v as _SearchVideo));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_SearchVideo get _value => super._value as _SearchVideo;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? author = freezed,
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? duration = freezed,
|
||||||
|
Object? viewCount = freezed,
|
||||||
|
Object? thumbnails = freezed,
|
||||||
|
Object? uploadDate = freezed,
|
||||||
|
Object? isLive = freezed,
|
||||||
|
Object? channelId = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_SearchVideo(
|
||||||
|
id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as VideoId,
|
||||||
|
title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
author == freezed
|
||||||
|
? _value.author
|
||||||
|
: author // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
duration == freezed
|
||||||
|
? _value.duration
|
||||||
|
: duration // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
viewCount == freezed
|
||||||
|
? _value.viewCount
|
||||||
|
: viewCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
thumbnails == freezed
|
||||||
|
? _value.thumbnails
|
||||||
|
: thumbnails // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<Thumbnail>,
|
||||||
|
uploadDate == freezed
|
||||||
|
? _value.uploadDate
|
||||||
|
: uploadDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,
|
||||||
|
isLive == freezed
|
||||||
|
? _value.isLive
|
||||||
|
: isLive // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
channelId == freezed
|
||||||
|
? _value.channelId
|
||||||
|
: channelId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
@With(BaseSearchContent)
|
||||||
|
class _$_SearchVideo with BaseSearchContent implements _SearchVideo {
|
||||||
|
const _$_SearchVideo(
|
||||||
|
this.id,
|
||||||
|
this.title,
|
||||||
|
this.author,
|
||||||
|
this.description,
|
||||||
|
this.duration,
|
||||||
|
this.viewCount,
|
||||||
|
this.thumbnails,
|
||||||
|
this.uploadDate,
|
||||||
|
this.isLive,
|
||||||
|
this.channelId);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video ID.
|
||||||
|
final VideoId id;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
final String title;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
final String author;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video description snippet. (Part of the full description if too long)
|
||||||
|
final String description;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video duration as String, HH:MM:SS
|
||||||
|
final String duration;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video View Count
|
||||||
|
final int viewCount;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video thumbnail
|
||||||
|
final List<Thumbnail> thumbnails;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video upload date - As string: 5 years ago.
|
||||||
|
final String? uploadDate;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// True if this video is a live stream.
|
||||||
|
final bool isLive;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel id
|
||||||
|
final String channelId;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'SearchVideo(id: $id, title: $title, author: $author, description: $description, duration: $duration, viewCount: $viewCount, thumbnails: $thumbnails, uploadDate: $uploadDate, isLive: $isLive, channelId: $channelId)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _SearchVideo &&
|
||||||
|
(identical(other.id, id) ||
|
||||||
|
const DeepCollectionEquality().equals(other.id, id)) &&
|
||||||
|
(identical(other.title, title) ||
|
||||||
|
const DeepCollectionEquality().equals(other.title, title)) &&
|
||||||
|
(identical(other.author, author) ||
|
||||||
|
const DeepCollectionEquality().equals(other.author, author)) &&
|
||||||
|
(identical(other.description, description) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.description, description)) &&
|
||||||
|
(identical(other.duration, duration) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.duration, duration)) &&
|
||||||
|
(identical(other.viewCount, viewCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.viewCount, viewCount)) &&
|
||||||
|
(identical(other.thumbnails, thumbnails) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.thumbnails, thumbnails)) &&
|
||||||
|
(identical(other.uploadDate, uploadDate) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.uploadDate, uploadDate)) &&
|
||||||
|
(identical(other.isLive, isLive) ||
|
||||||
|
const DeepCollectionEquality().equals(other.isLive, isLive)) &&
|
||||||
|
(identical(other.channelId, channelId) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.channelId, channelId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(id) ^
|
||||||
|
const DeepCollectionEquality().hash(title) ^
|
||||||
|
const DeepCollectionEquality().hash(author) ^
|
||||||
|
const DeepCollectionEquality().hash(description) ^
|
||||||
|
const DeepCollectionEquality().hash(duration) ^
|
||||||
|
const DeepCollectionEquality().hash(viewCount) ^
|
||||||
|
const DeepCollectionEquality().hash(thumbnails) ^
|
||||||
|
const DeepCollectionEquality().hash(uploadDate) ^
|
||||||
|
const DeepCollectionEquality().hash(isLive) ^
|
||||||
|
const DeepCollectionEquality().hash(channelId);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$SearchVideoCopyWith<_SearchVideo> get copyWith =>
|
||||||
|
__$SearchVideoCopyWithImpl<_SearchVideo>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _SearchVideo implements SearchVideo, BaseSearchContent {
|
||||||
|
const factory _SearchVideo(
|
||||||
|
VideoId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
String description,
|
||||||
|
String duration,
|
||||||
|
int viewCount,
|
||||||
|
List<Thumbnail> thumbnails,
|
||||||
|
String? uploadDate,
|
||||||
|
bool isLive,
|
||||||
|
String channelId) = _$_SearchVideo;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video ID.
|
||||||
|
VideoId get id => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
String get author => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video description snippet. (Part of the full description if too long)
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video duration as String, HH:MM:SS
|
||||||
|
String get duration => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video View Count
|
||||||
|
int get viewCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video thumbnail
|
||||||
|
List<Thumbnail> get thumbnails => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video upload date - As string: 5 years ago.
|
||||||
|
String? get uploadDate => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// True if this video is a live stream.
|
||||||
|
bool get isLive => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Channel id
|
||||||
|
String get channelId => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$SearchVideoCopyWith<_SearchVideo> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -6,15 +6,14 @@ part of 'closed_caption.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
ClosedCaption _$ClosedCaptionFromJson(Map<String, dynamic> json) {
|
ClosedCaption _$ClosedCaptionFromJson(Map<String, dynamic> json) =>
|
||||||
return ClosedCaption(
|
ClosedCaption(
|
||||||
json['text'] as String,
|
json['text'] as String,
|
||||||
Duration(microseconds: json['offset'] as int),
|
Duration(microseconds: json['offset'] as int),
|
||||||
Duration(microseconds: json['duration'] as int),
|
Duration(microseconds: json['duration'] as int),
|
||||||
(json['parts'] as List<dynamic>)
|
(json['parts'] as List<dynamic>)
|
||||||
.map((e) => ClosedCaptionPart.fromJson(e as Map<String, dynamic>)),
|
.map((e) => ClosedCaptionPart.fromJson(e as Map<String, dynamic>)),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, dynamic> _$ClosedCaptionToJson(ClosedCaption instance) =>
|
Map<String, dynamic> _$ClosedCaptionToJson(ClosedCaption instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
|
|
|
@ -6,11 +6,10 @@ part of 'closed_caption_format.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
ClosedCaptionFormat _$ClosedCaptionFormatFromJson(Map<String, dynamic> json) {
|
ClosedCaptionFormat _$ClosedCaptionFormatFromJson(Map<String, dynamic> json) =>
|
||||||
return ClosedCaptionFormat(
|
ClosedCaptionFormat(
|
||||||
json['formatCode'] as String,
|
json['formatCode'] as String,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, dynamic> _$ClosedCaptionFormatToJson(
|
Map<String, dynamic> _$ClosedCaptionFormatToJson(
|
||||||
ClosedCaptionFormat instance) =>
|
ClosedCaptionFormat instance) =>
|
||||||
|
|
|
@ -6,12 +6,11 @@ part of 'closed_caption_part.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
ClosedCaptionPart _$ClosedCaptionPartFromJson(Map<String, dynamic> json) {
|
ClosedCaptionPart _$ClosedCaptionPartFromJson(Map<String, dynamic> json) =>
|
||||||
return ClosedCaptionPart(
|
ClosedCaptionPart(
|
||||||
json['text'] as String,
|
json['text'] as String,
|
||||||
Duration(microseconds: json['offset'] as int),
|
Duration(microseconds: json['offset'] as int),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, dynamic> _$ClosedCaptionPartToJson(ClosedCaptionPart instance) =>
|
Map<String, dynamic> _$ClosedCaptionPartToJson(ClosedCaptionPart instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
|
|
|
@ -6,12 +6,11 @@ part of 'closed_caption_track.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
ClosedCaptionTrack _$ClosedCaptionTrackFromJson(Map<String, dynamic> json) {
|
ClosedCaptionTrack _$ClosedCaptionTrackFromJson(Map<String, dynamic> json) =>
|
||||||
return ClosedCaptionTrack(
|
ClosedCaptionTrack(
|
||||||
(json['captions'] as List<dynamic>)
|
(json['captions'] as List<dynamic>)
|
||||||
.map((e) => ClosedCaption.fromJson(e as Map<String, dynamic>)),
|
.map((e) => ClosedCaption.fromJson(e as Map<String, dynamic>)),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, dynamic> _$ClosedCaptionTrackToJson(ClosedCaptionTrack instance) =>
|
Map<String, dynamic> _$ClosedCaptionTrackToJson(ClosedCaptionTrack instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
|
|
|
@ -7,15 +7,14 @@ part of 'closed_caption_track_info.dart';
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
ClosedCaptionTrackInfo _$ClosedCaptionTrackInfoFromJson(
|
ClosedCaptionTrackInfo _$ClosedCaptionTrackInfoFromJson(
|
||||||
Map<String, dynamic> json) {
|
Map<String, dynamic> json) =>
|
||||||
return ClosedCaptionTrackInfo(
|
ClosedCaptionTrackInfo(
|
||||||
Uri.parse(json['url'] as String),
|
Uri.parse(json['url'] as String),
|
||||||
Language.fromJson(json['language'] as Map<String, dynamic>),
|
Language.fromJson(json['language'] as Map<String, dynamic>),
|
||||||
isAutoGenerated: json['isAutoGenerated'] as bool,
|
isAutoGenerated: json['isAutoGenerated'] as bool? ?? false,
|
||||||
format:
|
format:
|
||||||
ClosedCaptionFormat.fromJson(json['format'] as Map<String, dynamic>),
|
ClosedCaptionFormat.fromJson(json['format'] as Map<String, dynamic>),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, dynamic> _$ClosedCaptionTrackInfoToJson(
|
Map<String, dynamic> _$ClosedCaptionTrackInfoToJson(
|
||||||
ClosedCaptionTrackInfo instance) =>
|
ClosedCaptionTrackInfo instance) =>
|
||||||
|
|
|
@ -6,12 +6,10 @@ part of 'language.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
Language _$LanguageFromJson(Map<String, dynamic> json) {
|
Language _$LanguageFromJson(Map<String, dynamic> json) => Language(
|
||||||
return Language(
|
json['code'] as String,
|
||||||
json['code'] as String,
|
json['name'] as String,
|
||||||
json['name'] as String,
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, dynamic> _$LanguageToJson(Language instance) => <String, dynamic>{
|
Map<String, dynamic> _$LanguageToJson(Language instance) => <String, dynamic>{
|
||||||
'code': instance.code,
|
'code': instance.code,
|
||||||
|
|
|
@ -1,53 +1,41 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../../channels/channel_id.dart';
|
import '../../channels/channel_id.dart';
|
||||||
|
|
||||||
|
part 'comment.freezed.dart';
|
||||||
|
|
||||||
/// YouTube comment metadata.
|
/// YouTube comment metadata.
|
||||||
class Comment with EquatableMixin {
|
@freezed
|
||||||
/// Comment id.
|
class Comment with _$Comment {
|
||||||
final String commentId;
|
|
||||||
|
|
||||||
/// Comment author name.
|
|
||||||
final String author;
|
|
||||||
|
|
||||||
/// Comment author channel id.
|
|
||||||
final ChannelId channelId;
|
|
||||||
|
|
||||||
/// Comment text.
|
|
||||||
final String text;
|
|
||||||
|
|
||||||
/// Comment likes count.
|
|
||||||
final int likeCount;
|
|
||||||
|
|
||||||
/// Published time as string. (For example: "2 years ago")
|
|
||||||
final String publishedTime;
|
|
||||||
|
|
||||||
/// Comment reply count.
|
|
||||||
final int replyCount;
|
|
||||||
|
|
||||||
/// Used internally.
|
|
||||||
/// Shouldn't be used in the code.
|
|
||||||
final String? continuation;
|
|
||||||
|
|
||||||
/// Used internally.
|
|
||||||
/// Shouldn't be used in the code.
|
|
||||||
final String? clicktrackingParams;
|
|
||||||
|
|
||||||
/// Initializes an instance of [Comment]
|
/// Initializes an instance of [Comment]
|
||||||
Comment(
|
const factory Comment(
|
||||||
this.commentId,
|
/// Comment id.
|
||||||
this.author,
|
String commentId,
|
||||||
this.channelId,
|
|
||||||
this.text,
|
|
||||||
this.likeCount,
|
|
||||||
this.publishedTime,
|
|
||||||
this.replyCount,
|
|
||||||
this.continuation,
|
|
||||||
this.clicktrackingParams);
|
|
||||||
|
|
||||||
@override
|
/// Comment author name.
|
||||||
String toString() => 'Comment($author): $text';
|
String author,
|
||||||
|
|
||||||
@override
|
/// Comment author channel id.
|
||||||
List<Object> get props => [commentId];
|
ChannelId channelId,
|
||||||
|
|
||||||
|
/// Comment text.
|
||||||
|
String text,
|
||||||
|
|
||||||
|
/// Comment likes count.
|
||||||
|
int likeCount,
|
||||||
|
|
||||||
|
/// Published time as string. (For example: "2 years ago")
|
||||||
|
String publishedTime,
|
||||||
|
|
||||||
|
/// Comment reply count.
|
||||||
|
int replyCount,
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal String? continuation,
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal String? clicktrackingParams,
|
||||||
|
) = _Comment;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,417 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'comment.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$CommentTearOff {
|
||||||
|
const _$CommentTearOff();
|
||||||
|
|
||||||
|
_Comment call(
|
||||||
|
String commentId,
|
||||||
|
String author,
|
||||||
|
ChannelId channelId,
|
||||||
|
String text,
|
||||||
|
int likeCount,
|
||||||
|
String publishedTime,
|
||||||
|
int replyCount,
|
||||||
|
@internal String? continuation,
|
||||||
|
@internal String? clicktrackingParams) {
|
||||||
|
return _Comment(
|
||||||
|
commentId,
|
||||||
|
author,
|
||||||
|
channelId,
|
||||||
|
text,
|
||||||
|
likeCount,
|
||||||
|
publishedTime,
|
||||||
|
replyCount,
|
||||||
|
continuation,
|
||||||
|
clicktrackingParams,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Comment = _$CommentTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Comment {
|
||||||
|
/// Comment id.
|
||||||
|
String get commentId => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Comment author name.
|
||||||
|
String get author => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Comment author channel id.
|
||||||
|
ChannelId get channelId => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Comment text.
|
||||||
|
String get text => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Comment likes count.
|
||||||
|
int get likeCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Published time as string. (For example: "2 years ago")
|
||||||
|
String get publishedTime => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Comment reply count.
|
||||||
|
int get replyCount => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
String? get continuation => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
String? get clicktrackingParams => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$CommentCopyWith<Comment> get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $CommentCopyWith<$Res> {
|
||||||
|
factory $CommentCopyWith(Comment value, $Res Function(Comment) then) =
|
||||||
|
_$CommentCopyWithImpl<$Res>;
|
||||||
|
$Res call(
|
||||||
|
{String commentId,
|
||||||
|
String author,
|
||||||
|
ChannelId channelId,
|
||||||
|
String text,
|
||||||
|
int likeCount,
|
||||||
|
String publishedTime,
|
||||||
|
int replyCount,
|
||||||
|
@internal String? continuation,
|
||||||
|
@internal String? clicktrackingParams});
|
||||||
|
|
||||||
|
$ChannelIdCopyWith<$Res> get channelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$CommentCopyWithImpl<$Res> implements $CommentCopyWith<$Res> {
|
||||||
|
_$CommentCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Comment _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Comment) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? commentId = freezed,
|
||||||
|
Object? author = freezed,
|
||||||
|
Object? channelId = freezed,
|
||||||
|
Object? text = freezed,
|
||||||
|
Object? likeCount = freezed,
|
||||||
|
Object? publishedTime = freezed,
|
||||||
|
Object? replyCount = freezed,
|
||||||
|
Object? continuation = freezed,
|
||||||
|
Object? clicktrackingParams = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
commentId: commentId == freezed
|
||||||
|
? _value.commentId
|
||||||
|
: commentId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
author: author == freezed
|
||||||
|
? _value.author
|
||||||
|
: author // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
channelId: channelId == freezed
|
||||||
|
? _value.channelId
|
||||||
|
: channelId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ChannelId,
|
||||||
|
text: text == freezed
|
||||||
|
? _value.text
|
||||||
|
: text // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
likeCount: likeCount == freezed
|
||||||
|
? _value.likeCount
|
||||||
|
: likeCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
publishedTime: publishedTime == freezed
|
||||||
|
? _value.publishedTime
|
||||||
|
: publishedTime // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
replyCount: replyCount == freezed
|
||||||
|
? _value.replyCount
|
||||||
|
: replyCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
continuation: continuation == freezed
|
||||||
|
? _value.continuation
|
||||||
|
: continuation // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,
|
||||||
|
clicktrackingParams: clicktrackingParams == freezed
|
||||||
|
? _value.clicktrackingParams
|
||||||
|
: clicktrackingParams // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ChannelIdCopyWith<$Res> get channelId {
|
||||||
|
return $ChannelIdCopyWith<$Res>(_value.channelId, (value) {
|
||||||
|
return _then(_value.copyWith(channelId: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$CommentCopyWith<$Res> implements $CommentCopyWith<$Res> {
|
||||||
|
factory _$CommentCopyWith(_Comment value, $Res Function(_Comment) then) =
|
||||||
|
__$CommentCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call(
|
||||||
|
{String commentId,
|
||||||
|
String author,
|
||||||
|
ChannelId channelId,
|
||||||
|
String text,
|
||||||
|
int likeCount,
|
||||||
|
String publishedTime,
|
||||||
|
int replyCount,
|
||||||
|
@internal String? continuation,
|
||||||
|
@internal String? clicktrackingParams});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ChannelIdCopyWith<$Res> get channelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$CommentCopyWithImpl<$Res> extends _$CommentCopyWithImpl<$Res>
|
||||||
|
implements _$CommentCopyWith<$Res> {
|
||||||
|
__$CommentCopyWithImpl(_Comment _value, $Res Function(_Comment) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Comment));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Comment get _value => super._value as _Comment;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? commentId = freezed,
|
||||||
|
Object? author = freezed,
|
||||||
|
Object? channelId = freezed,
|
||||||
|
Object? text = freezed,
|
||||||
|
Object? likeCount = freezed,
|
||||||
|
Object? publishedTime = freezed,
|
||||||
|
Object? replyCount = freezed,
|
||||||
|
Object? continuation = freezed,
|
||||||
|
Object? clicktrackingParams = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Comment(
|
||||||
|
commentId == freezed
|
||||||
|
? _value.commentId
|
||||||
|
: commentId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
author == freezed
|
||||||
|
? _value.author
|
||||||
|
: author // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
channelId == freezed
|
||||||
|
? _value.channelId
|
||||||
|
: channelId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ChannelId,
|
||||||
|
text == freezed
|
||||||
|
? _value.text
|
||||||
|
: text // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
likeCount == freezed
|
||||||
|
? _value.likeCount
|
||||||
|
: likeCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
publishedTime == freezed
|
||||||
|
? _value.publishedTime
|
||||||
|
: publishedTime // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
replyCount == freezed
|
||||||
|
? _value.replyCount
|
||||||
|
: replyCount // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
continuation == freezed
|
||||||
|
? _value.continuation
|
||||||
|
: continuation // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,
|
||||||
|
clicktrackingParams == freezed
|
||||||
|
? _value.clicktrackingParams
|
||||||
|
: clicktrackingParams // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_Comment implements _Comment {
|
||||||
|
const _$_Comment(
|
||||||
|
this.commentId,
|
||||||
|
this.author,
|
||||||
|
this.channelId,
|
||||||
|
this.text,
|
||||||
|
this.likeCount,
|
||||||
|
this.publishedTime,
|
||||||
|
this.replyCount,
|
||||||
|
@internal this.continuation,
|
||||||
|
@internal this.clicktrackingParams);
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment id.
|
||||||
|
final String commentId;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment author name.
|
||||||
|
final String author;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment author channel id.
|
||||||
|
final ChannelId channelId;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment text.
|
||||||
|
final String text;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment likes count.
|
||||||
|
final int likeCount;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Published time as string. (For example: "2 years ago")
|
||||||
|
final String publishedTime;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment reply count.
|
||||||
|
final int replyCount;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
final String? continuation;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
final String? clicktrackingParams;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'Comment(commentId: $commentId, author: $author, channelId: $channelId, text: $text, likeCount: $likeCount, publishedTime: $publishedTime, replyCount: $replyCount, continuation: $continuation, clicktrackingParams: $clicktrackingParams)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Comment &&
|
||||||
|
(identical(other.commentId, commentId) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.commentId, commentId)) &&
|
||||||
|
(identical(other.author, author) ||
|
||||||
|
const DeepCollectionEquality().equals(other.author, author)) &&
|
||||||
|
(identical(other.channelId, channelId) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.channelId, channelId)) &&
|
||||||
|
(identical(other.text, text) ||
|
||||||
|
const DeepCollectionEquality().equals(other.text, text)) &&
|
||||||
|
(identical(other.likeCount, likeCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.likeCount, likeCount)) &&
|
||||||
|
(identical(other.publishedTime, publishedTime) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.publishedTime, publishedTime)) &&
|
||||||
|
(identical(other.replyCount, replyCount) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.replyCount, replyCount)) &&
|
||||||
|
(identical(other.continuation, continuation) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.continuation, continuation)) &&
|
||||||
|
(identical(other.clicktrackingParams, clicktrackingParams) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.clicktrackingParams, clicktrackingParams)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(commentId) ^
|
||||||
|
const DeepCollectionEquality().hash(author) ^
|
||||||
|
const DeepCollectionEquality().hash(channelId) ^
|
||||||
|
const DeepCollectionEquality().hash(text) ^
|
||||||
|
const DeepCollectionEquality().hash(likeCount) ^
|
||||||
|
const DeepCollectionEquality().hash(publishedTime) ^
|
||||||
|
const DeepCollectionEquality().hash(replyCount) ^
|
||||||
|
const DeepCollectionEquality().hash(continuation) ^
|
||||||
|
const DeepCollectionEquality().hash(clicktrackingParams);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$CommentCopyWith<_Comment> get copyWith =>
|
||||||
|
__$CommentCopyWithImpl<_Comment>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Comment implements Comment {
|
||||||
|
const factory _Comment(
|
||||||
|
String commentId,
|
||||||
|
String author,
|
||||||
|
ChannelId channelId,
|
||||||
|
String text,
|
||||||
|
int likeCount,
|
||||||
|
String publishedTime,
|
||||||
|
int replyCount,
|
||||||
|
@internal String? continuation,
|
||||||
|
@internal String? clicktrackingParams) = _$_Comment;
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment id.
|
||||||
|
String get commentId => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment author name.
|
||||||
|
String get author => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment author channel id.
|
||||||
|
ChannelId get channelId => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment text.
|
||||||
|
String get text => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment likes count.
|
||||||
|
int get likeCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Published time as string. (For example: "2 years ago")
|
||||||
|
String get publishedTime => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Comment reply count.
|
||||||
|
int get replyCount => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
String? get continuation => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
String? get clicktrackingParams => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$CommentCopyWith<_Comment> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
part 'bitrate.freezed.dart';
|
||||||
|
|
||||||
/// Encapsulates bitrate.
|
/// Encapsulates bitrate.
|
||||||
class Bitrate extends Comparable<Bitrate> with EquatableMixin {
|
@freezed
|
||||||
/// Bits per second.
|
class Bitrate with Comparable<Bitrate>, _$Bitrate {
|
||||||
final int bitsPerSecond;
|
|
||||||
|
|
||||||
/// Kilobits per second.
|
/// Kilobits per second.
|
||||||
double get kiloBitsPerSecond => bitsPerSecond / 1024;
|
double get kiloBitsPerSecond => bitsPerSecond / 1024;
|
||||||
|
|
||||||
|
@ -15,7 +15,13 @@ class Bitrate extends Comparable<Bitrate> with EquatableMixin {
|
||||||
double get gigaBitsPerSecond => megaBitsPerSecond / 1024;
|
double get gigaBitsPerSecond => megaBitsPerSecond / 1024;
|
||||||
|
|
||||||
/// Initializes an instance of [Bitrate]
|
/// Initializes an instance of [Bitrate]
|
||||||
Bitrate(this.bitsPerSecond);
|
@With.fromString('Comparable<Bitrate>')
|
||||||
|
const factory Bitrate(
|
||||||
|
|
||||||
|
/// Bits per second.
|
||||||
|
int bitsPerSecond) = _Bitrate;
|
||||||
|
|
||||||
|
const Bitrate._();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int compareTo(Bitrate other) => bitsPerSecond.compareTo(other.bitsPerSecond);
|
int compareTo(Bitrate other) => bitsPerSecond.compareTo(other.bitsPerSecond);
|
||||||
|
|
|
@ -0,0 +1,138 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'bitrate.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$BitrateTearOff {
|
||||||
|
const _$BitrateTearOff();
|
||||||
|
|
||||||
|
_Bitrate call(int bitsPerSecond) {
|
||||||
|
return _Bitrate(
|
||||||
|
bitsPerSecond,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Bitrate = _$BitrateTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Bitrate {
|
||||||
|
/// Bits per second.
|
||||||
|
int get bitsPerSecond => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$BitrateCopyWith<Bitrate> get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $BitrateCopyWith<$Res> {
|
||||||
|
factory $BitrateCopyWith(Bitrate value, $Res Function(Bitrate) then) =
|
||||||
|
_$BitrateCopyWithImpl<$Res>;
|
||||||
|
$Res call({int bitsPerSecond});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$BitrateCopyWithImpl<$Res> implements $BitrateCopyWith<$Res> {
|
||||||
|
_$BitrateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Bitrate _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Bitrate) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? bitsPerSecond = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
bitsPerSecond: bitsPerSecond == freezed
|
||||||
|
? _value.bitsPerSecond
|
||||||
|
: bitsPerSecond // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$BitrateCopyWith<$Res> implements $BitrateCopyWith<$Res> {
|
||||||
|
factory _$BitrateCopyWith(_Bitrate value, $Res Function(_Bitrate) then) =
|
||||||
|
__$BitrateCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({int bitsPerSecond});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$BitrateCopyWithImpl<$Res> extends _$BitrateCopyWithImpl<$Res>
|
||||||
|
implements _$BitrateCopyWith<$Res> {
|
||||||
|
__$BitrateCopyWithImpl(_Bitrate _value, $Res Function(_Bitrate) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Bitrate));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Bitrate get _value => super._value as _Bitrate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? bitsPerSecond = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Bitrate(
|
||||||
|
bitsPerSecond == freezed
|
||||||
|
? _value.bitsPerSecond
|
||||||
|
: bitsPerSecond // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
@With.fromString('Comparable<Bitrate>')
|
||||||
|
class _$_Bitrate extends _Bitrate with Comparable<Bitrate> {
|
||||||
|
const _$_Bitrate(this.bitsPerSecond) : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Bits per second.
|
||||||
|
final int bitsPerSecond;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Bitrate &&
|
||||||
|
(identical(other.bitsPerSecond, bitsPerSecond) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.bitsPerSecond, bitsPerSecond)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^ const DeepCollectionEquality().hash(bitsPerSecond);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$BitrateCopyWith<_Bitrate> get copyWith =>
|
||||||
|
__$BitrateCopyWithImpl<_Bitrate>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Bitrate extends Bitrate implements Comparable<Bitrate> {
|
||||||
|
const factory _Bitrate(int bitsPerSecond) = _$_Bitrate;
|
||||||
|
const _Bitrate._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Bits per second.
|
||||||
|
int get bitsPerSecond => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$BitrateCopyWith<_Bitrate> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
part 'filesize.freezed.dart';
|
||||||
|
|
||||||
/// Encapsulates file size.
|
/// Encapsulates file size.
|
||||||
class FileSize extends Comparable<FileSize> with EquatableMixin {
|
@freezed
|
||||||
/// Total bytes.
|
class FileSize with Comparable<FileSize>, _$FileSize {
|
||||||
final int totalBytes;
|
|
||||||
|
|
||||||
/// Total kilobytes.
|
/// Total kilobytes.
|
||||||
double get totalKiloBytes => totalBytes / 1024;
|
double get totalKiloBytes => totalBytes / 1024;
|
||||||
|
|
||||||
|
@ -15,7 +15,13 @@ class FileSize extends Comparable<FileSize> with EquatableMixin {
|
||||||
double get totalGigaBytes => totalMegaBytes / 1024;
|
double get totalGigaBytes => totalMegaBytes / 1024;
|
||||||
|
|
||||||
/// Initializes an instance of [FileSize]
|
/// Initializes an instance of [FileSize]
|
||||||
FileSize(this.totalBytes);
|
@With.fromString('Comparable<FileSize>')
|
||||||
|
const factory FileSize(
|
||||||
|
|
||||||
|
/// Total bytes.
|
||||||
|
int totalBytes) = _FileSize;
|
||||||
|
|
||||||
|
const FileSize._();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int compareTo(FileSize other) => totalBytes.compareTo(other.totalBytes);
|
int compareTo(FileSize other) => totalBytes.compareTo(other.totalBytes);
|
||||||
|
@ -48,7 +54,4 @@ class FileSize extends Comparable<FileSize> with EquatableMixin {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => '${_getLargestValue()} ${_getLargestSymbol()}';
|
String toString() => '${_getLargestValue()} ${_getLargestSymbol()}';
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [totalBytes];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,139 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'filesize.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$FileSizeTearOff {
|
||||||
|
const _$FileSizeTearOff();
|
||||||
|
|
||||||
|
_FileSize call(int totalBytes) {
|
||||||
|
return _FileSize(
|
||||||
|
totalBytes,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $FileSize = _$FileSizeTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$FileSize {
|
||||||
|
/// Total bytes.
|
||||||
|
int get totalBytes => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$FileSizeCopyWith<FileSize> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $FileSizeCopyWith<$Res> {
|
||||||
|
factory $FileSizeCopyWith(FileSize value, $Res Function(FileSize) then) =
|
||||||
|
_$FileSizeCopyWithImpl<$Res>;
|
||||||
|
$Res call({int totalBytes});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$FileSizeCopyWithImpl<$Res> implements $FileSizeCopyWith<$Res> {
|
||||||
|
_$FileSizeCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final FileSize _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(FileSize) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? totalBytes = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
totalBytes: totalBytes == freezed
|
||||||
|
? _value.totalBytes
|
||||||
|
: totalBytes // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$FileSizeCopyWith<$Res> implements $FileSizeCopyWith<$Res> {
|
||||||
|
factory _$FileSizeCopyWith(_FileSize value, $Res Function(_FileSize) then) =
|
||||||
|
__$FileSizeCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({int totalBytes});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$FileSizeCopyWithImpl<$Res> extends _$FileSizeCopyWithImpl<$Res>
|
||||||
|
implements _$FileSizeCopyWith<$Res> {
|
||||||
|
__$FileSizeCopyWithImpl(_FileSize _value, $Res Function(_FileSize) _then)
|
||||||
|
: super(_value, (v) => _then(v as _FileSize));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_FileSize get _value => super._value as _FileSize;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? totalBytes = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_FileSize(
|
||||||
|
totalBytes == freezed
|
||||||
|
? _value.totalBytes
|
||||||
|
: totalBytes // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
@With.fromString('Comparable<FileSize>')
|
||||||
|
class _$_FileSize extends _FileSize with Comparable<FileSize> {
|
||||||
|
const _$_FileSize(this.totalBytes) : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Total bytes.
|
||||||
|
final int totalBytes;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _FileSize &&
|
||||||
|
(identical(other.totalBytes, totalBytes) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.totalBytes, totalBytes)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^ const DeepCollectionEquality().hash(totalBytes);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$FileSizeCopyWith<_FileSize> get copyWith =>
|
||||||
|
__$FileSizeCopyWithImpl<_FileSize>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _FileSize extends FileSize implements Comparable<FileSize> {
|
||||||
|
const factory _FileSize(int totalBytes) = _$_FileSize;
|
||||||
|
const _FileSize._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Total bytes.
|
||||||
|
int get totalBytes => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$FileSizeCopyWith<_FileSize> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,12 +1,17 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
part 'framerate.freezed.dart';
|
||||||
|
|
||||||
/// Encapsulates framerate.
|
/// Encapsulates framerate.
|
||||||
class Framerate extends Comparable<Framerate> with EquatableMixin {
|
@freezed
|
||||||
/// Framerate as frames per second
|
class Framerate with Comparable<Framerate>, _$Framerate {
|
||||||
final num framesPerSecond;
|
|
||||||
|
|
||||||
/// Initialize an instance of [Framerate]
|
/// Initialize an instance of [Framerate]
|
||||||
Framerate(this.framesPerSecond);
|
const factory Framerate(
|
||||||
|
|
||||||
|
/// Framerate as frames per second
|
||||||
|
num framesPerSecond) = _Framerate;
|
||||||
|
|
||||||
|
const Framerate._();
|
||||||
|
|
||||||
///
|
///
|
||||||
bool operator >(Framerate other) => framesPerSecond > other.framesPerSecond;
|
bool operator >(Framerate other) => framesPerSecond > other.framesPerSecond;
|
||||||
|
@ -17,9 +22,6 @@ class Framerate extends Comparable<Framerate> with EquatableMixin {
|
||||||
@override
|
@override
|
||||||
String toString() => '$framesPerSecond FPS';
|
String toString() => '$framesPerSecond FPS';
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [framesPerSecond];
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int compareTo(Framerate other) =>
|
int compareTo(Framerate other) =>
|
||||||
framesPerSecond.compareTo(other.framesPerSecond);
|
framesPerSecond.compareTo(other.framesPerSecond);
|
||||||
|
|
|
@ -0,0 +1,140 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'framerate.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$FramerateTearOff {
|
||||||
|
const _$FramerateTearOff();
|
||||||
|
|
||||||
|
_Framerate call(num framesPerSecond) {
|
||||||
|
return _Framerate(
|
||||||
|
framesPerSecond,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Framerate = _$FramerateTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Framerate {
|
||||||
|
/// Framerate as frames per second
|
||||||
|
num get framesPerSecond => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$FramerateCopyWith<Framerate> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $FramerateCopyWith<$Res> {
|
||||||
|
factory $FramerateCopyWith(Framerate value, $Res Function(Framerate) then) =
|
||||||
|
_$FramerateCopyWithImpl<$Res>;
|
||||||
|
$Res call({num framesPerSecond});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$FramerateCopyWithImpl<$Res> implements $FramerateCopyWith<$Res> {
|
||||||
|
_$FramerateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Framerate _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Framerate) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? framesPerSecond = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
framesPerSecond: framesPerSecond == freezed
|
||||||
|
? _value.framesPerSecond
|
||||||
|
: framesPerSecond // ignore: cast_nullable_to_non_nullable
|
||||||
|
as num,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$FramerateCopyWith<$Res> implements $FramerateCopyWith<$Res> {
|
||||||
|
factory _$FramerateCopyWith(
|
||||||
|
_Framerate value, $Res Function(_Framerate) then) =
|
||||||
|
__$FramerateCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({num framesPerSecond});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$FramerateCopyWithImpl<$Res> extends _$FramerateCopyWithImpl<$Res>
|
||||||
|
implements _$FramerateCopyWith<$Res> {
|
||||||
|
__$FramerateCopyWithImpl(_Framerate _value, $Res Function(_Framerate) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Framerate));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Framerate get _value => super._value as _Framerate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? framesPerSecond = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Framerate(
|
||||||
|
framesPerSecond == freezed
|
||||||
|
? _value.framesPerSecond
|
||||||
|
: framesPerSecond // ignore: cast_nullable_to_non_nullable
|
||||||
|
as num,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_Framerate extends _Framerate {
|
||||||
|
const _$_Framerate(this.framesPerSecond) : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Framerate as frames per second
|
||||||
|
final num framesPerSecond;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Framerate &&
|
||||||
|
(identical(other.framesPerSecond, framesPerSecond) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.framesPerSecond, framesPerSecond)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(framesPerSecond);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$FramerateCopyWith<_Framerate> get copyWith =>
|
||||||
|
__$FramerateCopyWithImpl<_Framerate>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Framerate extends Framerate {
|
||||||
|
const factory _Framerate(num framesPerSecond) = _$_Framerate;
|
||||||
|
const _Framerate._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Framerate as frames per second
|
||||||
|
num get framesPerSecond => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$FramerateCopyWith<_Framerate> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,25 +1,30 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
part 'stream_container.freezed.dart';
|
||||||
|
|
||||||
/// Stream container.
|
/// Stream container.
|
||||||
class StreamContainer with EquatableMixin {
|
@freezed
|
||||||
/// Container name.
|
class StreamContainer with _$StreamContainer {
|
||||||
/// Can be used as file extension
|
|
||||||
final String name;
|
|
||||||
|
|
||||||
/// Initializes an instance of [StreamContainer]
|
/// Initializes an instance of [StreamContainer]
|
||||||
StreamContainer._(this.name);
|
const factory StreamContainer._internal(
|
||||||
|
|
||||||
|
/// Container name.
|
||||||
|
/// Can be used as file extension
|
||||||
|
String name) = _StreamContainer;
|
||||||
|
|
||||||
|
const StreamContainer._();
|
||||||
|
|
||||||
/// MPEG-4 Part 14 (.mp4).
|
/// MPEG-4 Part 14 (.mp4).
|
||||||
static final StreamContainer mp4 = StreamContainer._('mp4');
|
static const StreamContainer mp4 = StreamContainer._internal('mp4');
|
||||||
|
|
||||||
/// Web Media (.webm).
|
/// Web Media (.webm).
|
||||||
static final StreamContainer webM = StreamContainer._('webm');
|
static const StreamContainer webM = StreamContainer._internal('webm');
|
||||||
|
|
||||||
/// 3rd Generation Partnership Project (.3gpp).
|
/// 3rd Generation Partnership Project (.3gpp).
|
||||||
static final StreamContainer tgpp = StreamContainer._('3gpp');
|
static const StreamContainer tgpp = StreamContainer._internal('3gpp');
|
||||||
|
|
||||||
/// Parse a container from name.
|
/// Parse a container from name.
|
||||||
static StreamContainer parse(String name) {
|
factory StreamContainer.parse(String name) {
|
||||||
if (name.toLowerCase() == 'mp4') {
|
if (name.toLowerCase() == 'mp4') {
|
||||||
return StreamContainer.mp4;
|
return StreamContainer.mp4;
|
||||||
}
|
}
|
||||||
|
@ -33,9 +38,6 @@ class StreamContainer with EquatableMixin {
|
||||||
throw ArgumentError.value(name, 'name', 'Valid values: mp4, webm, 3gpp');
|
throw ArgumentError.value(name, 'name', 'Valid values: mp4, webm, 3gpp');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [name];
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => name;
|
String toString() => name;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,146 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'stream_container.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$StreamContainerTearOff {
|
||||||
|
const _$StreamContainerTearOff();
|
||||||
|
|
||||||
|
_StreamContainer _internal(String name) {
|
||||||
|
return _StreamContainer(
|
||||||
|
name,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $StreamContainer = _$StreamContainerTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$StreamContainer {
|
||||||
|
/// Container name.
|
||||||
|
/// Can be used as file extension
|
||||||
|
String get name => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$StreamContainerCopyWith<StreamContainer> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $StreamContainerCopyWith<$Res> {
|
||||||
|
factory $StreamContainerCopyWith(
|
||||||
|
StreamContainer value, $Res Function(StreamContainer) then) =
|
||||||
|
_$StreamContainerCopyWithImpl<$Res>;
|
||||||
|
$Res call({String name});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$StreamContainerCopyWithImpl<$Res>
|
||||||
|
implements $StreamContainerCopyWith<$Res> {
|
||||||
|
_$StreamContainerCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final StreamContainer _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(StreamContainer) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? name = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
name: name == freezed
|
||||||
|
? _value.name
|
||||||
|
: name // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$StreamContainerCopyWith<$Res>
|
||||||
|
implements $StreamContainerCopyWith<$Res> {
|
||||||
|
factory _$StreamContainerCopyWith(
|
||||||
|
_StreamContainer value, $Res Function(_StreamContainer) then) =
|
||||||
|
__$StreamContainerCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({String name});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$StreamContainerCopyWithImpl<$Res>
|
||||||
|
extends _$StreamContainerCopyWithImpl<$Res>
|
||||||
|
implements _$StreamContainerCopyWith<$Res> {
|
||||||
|
__$StreamContainerCopyWithImpl(
|
||||||
|
_StreamContainer _value, $Res Function(_StreamContainer) _then)
|
||||||
|
: super(_value, (v) => _then(v as _StreamContainer));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_StreamContainer get _value => super._value as _StreamContainer;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? name = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_StreamContainer(
|
||||||
|
name == freezed
|
||||||
|
? _value.name
|
||||||
|
: name // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_StreamContainer extends _StreamContainer {
|
||||||
|
const _$_StreamContainer(this.name) : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Container name.
|
||||||
|
/// Can be used as file extension
|
||||||
|
final String name;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _StreamContainer &&
|
||||||
|
(identical(other.name, name) ||
|
||||||
|
const DeepCollectionEquality().equals(other.name, name)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^ const DeepCollectionEquality().hash(name);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$StreamContainerCopyWith<_StreamContainer> get copyWith =>
|
||||||
|
__$StreamContainerCopyWithImpl<_StreamContainer>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _StreamContainer extends StreamContainer {
|
||||||
|
const factory _StreamContainer(String name) = _$_StreamContainer;
|
||||||
|
const _StreamContainer._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Container name.
|
||||||
|
/// Can be used as file extension
|
||||||
|
String get name => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$StreamContainerCopyWith<_StreamContainer> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
|
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
import '../channels/channel_id.dart';
|
import '../channels/channel_id.dart';
|
||||||
|
@ -8,77 +8,138 @@ import '../common/common.dart';
|
||||||
import '../reverse_engineering/responses/responses.dart';
|
import '../reverse_engineering/responses/responses.dart';
|
||||||
import 'video_id.dart';
|
import 'video_id.dart';
|
||||||
|
|
||||||
/// YouTube video metadata.
|
part 'video.freezed.dart';
|
||||||
class Video with EquatableMixin {
|
|
||||||
/// Video ID.
|
|
||||||
final VideoId id;
|
|
||||||
|
|
||||||
|
/// YouTube video metadata.
|
||||||
|
@freezed
|
||||||
|
class Video with _$Video {
|
||||||
/// Video URL.
|
/// Video URL.
|
||||||
String get url => 'https://www.youtube.com/watch?v=$id';
|
String get url => 'https://www.youtube.com/watch?v=$id';
|
||||||
|
|
||||||
/// Video title.
|
|
||||||
final String title;
|
|
||||||
|
|
||||||
/// Video author.
|
|
||||||
final String author;
|
|
||||||
|
|
||||||
/// Video author Id.
|
|
||||||
final ChannelId channelId;
|
|
||||||
|
|
||||||
/// Video upload date.
|
|
||||||
/// Note: For search queries it is calculated with:
|
|
||||||
/// DateTime.now() - how much time is was published.
|
|
||||||
final DateTime? uploadDate;
|
|
||||||
|
|
||||||
/// Video publish date.
|
|
||||||
final DateTime? publishDate;
|
|
||||||
|
|
||||||
/// Video description.
|
|
||||||
final String description;
|
|
||||||
|
|
||||||
/// Duration of the video.
|
|
||||||
final Duration? duration;
|
|
||||||
|
|
||||||
/// Available thumbnails for this video.
|
|
||||||
final ThumbnailSet thumbnails;
|
|
||||||
|
|
||||||
/// Search keywords used for this video.
|
|
||||||
final UnmodifiableListView<String> keywords;
|
|
||||||
|
|
||||||
/// Engagement statistics for this video.
|
|
||||||
final Engagement engagement;
|
|
||||||
|
|
||||||
/// Returns true if this is a live stream.
|
|
||||||
final bool isLive;
|
|
||||||
|
|
||||||
/// Used internally.
|
|
||||||
/// Shouldn't be used in the code.
|
|
||||||
@internal
|
|
||||||
final WatchPage? watchPage;
|
|
||||||
|
|
||||||
/// Returns true if the watch page is available for this video.
|
/// Returns true if the watch page is available for this video.
|
||||||
bool get hasWatchPage => watchPage != null;
|
bool get hasWatchPage => watchPage != null;
|
||||||
|
|
||||||
/// Initializes an instance of [Video]
|
factory Video(
|
||||||
Video(
|
|
||||||
this.id,
|
/// Video ID.
|
||||||
this.title,
|
VideoId id,
|
||||||
this.author,
|
|
||||||
this.channelId,
|
/// Video title.
|
||||||
this.uploadDate,
|
String title,
|
||||||
this.publishDate,
|
|
||||||
this.description,
|
/// Video author.
|
||||||
this.duration,
|
String author,
|
||||||
this.thumbnails,
|
|
||||||
|
/// Video author Id.
|
||||||
|
ChannelId channelId,
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Note: For search queries it is calculated with:
|
||||||
|
/// DateTime.now() - how much time is was published.
|
||||||
|
DateTime? uploadDate,
|
||||||
|
|
||||||
|
/// Video publish date.
|
||||||
|
DateTime? publishDate,
|
||||||
|
|
||||||
|
/// Video description.
|
||||||
|
String description,
|
||||||
|
|
||||||
|
/// Duration of the video.
|
||||||
|
Duration? duration,
|
||||||
|
|
||||||
|
/// Available thumbnails for this video.
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
|
||||||
|
/// Search keywords used for this video.
|
||||||
Iterable<String>? keywords,
|
Iterable<String>? keywords,
|
||||||
this.engagement,
|
|
||||||
this.isLive, // ignore: avoid_positional_boolean_parameters
|
|
||||||
[this.watchPage])
|
|
||||||
: keywords = UnmodifiableListView(keywords ?? const []);
|
|
||||||
|
|
||||||
@override
|
/// Engagement statistics for this video.
|
||||||
String toString() => 'Video ($title)';
|
Engagement engagement,
|
||||||
|
|
||||||
@override
|
/// Returns true if this is a live stream.
|
||||||
List<Object> get props => [id];
|
//ignore: avoid_positional_boolean_parameters
|
||||||
|
bool isLive,
|
||||||
|
[
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal WatchPage? watchPage]) {
|
||||||
|
return Video._internal(
|
||||||
|
|
||||||
|
/// Video ID.
|
||||||
|
id,
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
title,
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
author,
|
||||||
|
|
||||||
|
/// Video author Id.
|
||||||
|
channelId,
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Note: For search queries it is calculated with:
|
||||||
|
/// DateTime.now() - how much time is was published.
|
||||||
|
uploadDate,
|
||||||
|
|
||||||
|
/// Video publish date.
|
||||||
|
publishDate,
|
||||||
|
description,
|
||||||
|
duration,
|
||||||
|
thumbnails,
|
||||||
|
UnmodifiableListView(keywords ?? const Iterable.empty()),
|
||||||
|
engagement,
|
||||||
|
isLive,
|
||||||
|
watchPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Initializes an instance of [Video]
|
||||||
|
const factory Video._internal(
|
||||||
|
|
||||||
|
/// Video ID.
|
||||||
|
VideoId id,
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
String title,
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
String author,
|
||||||
|
|
||||||
|
/// Video author Id.
|
||||||
|
ChannelId channelId,
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Note: For search queries it is calculated with:
|
||||||
|
/// DateTime.now() - how much time is was published.
|
||||||
|
DateTime? uploadDate,
|
||||||
|
|
||||||
|
/// Video publish date.
|
||||||
|
DateTime? publishDate,
|
||||||
|
|
||||||
|
/// Video description.
|
||||||
|
String description,
|
||||||
|
|
||||||
|
/// Duration of the video.
|
||||||
|
Duration? duration,
|
||||||
|
|
||||||
|
/// Available thumbnails for this video.
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
|
||||||
|
/// Search keywords used for this video.
|
||||||
|
UnmodifiableListView<String> keywords,
|
||||||
|
|
||||||
|
/// Engagement statistics for this video.
|
||||||
|
Engagement engagement,
|
||||||
|
|
||||||
|
/// Returns true if this is a live stream.
|
||||||
|
//ignore: avoid_positional_boolean_parameters
|
||||||
|
bool isLive,
|
||||||
|
[
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal WatchPage? watchPage]) = _Video;
|
||||||
|
|
||||||
|
const Video._();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,575 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'video.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$VideoTearOff {
|
||||||
|
const _$VideoTearOff();
|
||||||
|
|
||||||
|
_Video _internal(
|
||||||
|
VideoId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
ChannelId channelId,
|
||||||
|
DateTime? uploadDate,
|
||||||
|
DateTime? publishDate,
|
||||||
|
String description,
|
||||||
|
Duration? duration,
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
UnmodifiableListView<String> keywords,
|
||||||
|
Engagement engagement,
|
||||||
|
bool isLive,
|
||||||
|
[@internal WatchPage? watchPage]) {
|
||||||
|
return _Video(
|
||||||
|
id,
|
||||||
|
title,
|
||||||
|
author,
|
||||||
|
channelId,
|
||||||
|
uploadDate,
|
||||||
|
publishDate,
|
||||||
|
description,
|
||||||
|
duration,
|
||||||
|
thumbnails,
|
||||||
|
keywords,
|
||||||
|
engagement,
|
||||||
|
isLive,
|
||||||
|
watchPage,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $Video = _$VideoTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$Video {
|
||||||
|
/// Video ID.
|
||||||
|
VideoId get id => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
String get author => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video author Id.
|
||||||
|
ChannelId get channelId => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Note: For search queries it is calculated with:
|
||||||
|
/// DateTime.now() - how much time is was published.
|
||||||
|
DateTime? get uploadDate => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video publish date.
|
||||||
|
DateTime? get publishDate => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Video description.
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Duration of the video.
|
||||||
|
Duration? get duration => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Available thumbnails for this video.
|
||||||
|
ThumbnailSet get thumbnails => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Search keywords used for this video.
|
||||||
|
UnmodifiableListView<String> get keywords =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Engagement statistics for this video.
|
||||||
|
Engagement get engagement => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Returns true if this is a live stream.
|
||||||
|
//ignore: avoid_positional_boolean_parameters
|
||||||
|
bool get isLive => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
WatchPage? get watchPage => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$VideoCopyWith<Video> get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $VideoCopyWith<$Res> {
|
||||||
|
factory $VideoCopyWith(Video value, $Res Function(Video) then) =
|
||||||
|
_$VideoCopyWithImpl<$Res>;
|
||||||
|
$Res call(
|
||||||
|
{VideoId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
ChannelId channelId,
|
||||||
|
DateTime? uploadDate,
|
||||||
|
DateTime? publishDate,
|
||||||
|
String description,
|
||||||
|
Duration? duration,
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
UnmodifiableListView<String> keywords,
|
||||||
|
Engagement engagement,
|
||||||
|
bool isLive,
|
||||||
|
@internal WatchPage? watchPage});
|
||||||
|
|
||||||
|
$VideoIdCopyWith<$Res> get id;
|
||||||
|
$ChannelIdCopyWith<$Res> get channelId;
|
||||||
|
$ThumbnailSetCopyWith<$Res> get thumbnails;
|
||||||
|
$EngagementCopyWith<$Res> get engagement;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$VideoCopyWithImpl<$Res> implements $VideoCopyWith<$Res> {
|
||||||
|
_$VideoCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final Video _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(Video) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? author = freezed,
|
||||||
|
Object? channelId = freezed,
|
||||||
|
Object? uploadDate = freezed,
|
||||||
|
Object? publishDate = freezed,
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? duration = freezed,
|
||||||
|
Object? thumbnails = freezed,
|
||||||
|
Object? keywords = freezed,
|
||||||
|
Object? engagement = freezed,
|
||||||
|
Object? isLive = freezed,
|
||||||
|
Object? watchPage = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
id: id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as VideoId,
|
||||||
|
title: title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
author: author == freezed
|
||||||
|
? _value.author
|
||||||
|
: author // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
channelId: channelId == freezed
|
||||||
|
? _value.channelId
|
||||||
|
: channelId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ChannelId,
|
||||||
|
uploadDate: uploadDate == freezed
|
||||||
|
? _value.uploadDate
|
||||||
|
: uploadDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime?,
|
||||||
|
publishDate: publishDate == freezed
|
||||||
|
? _value.publishDate
|
||||||
|
: publishDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime?,
|
||||||
|
description: description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
duration: duration == freezed
|
||||||
|
? _value.duration
|
||||||
|
: duration // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Duration?,
|
||||||
|
thumbnails: thumbnails == freezed
|
||||||
|
? _value.thumbnails
|
||||||
|
: thumbnails // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ThumbnailSet,
|
||||||
|
keywords: keywords == freezed
|
||||||
|
? _value.keywords
|
||||||
|
: keywords // ignore: cast_nullable_to_non_nullable
|
||||||
|
as UnmodifiableListView<String>,
|
||||||
|
engagement: engagement == freezed
|
||||||
|
? _value.engagement
|
||||||
|
: engagement // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Engagement,
|
||||||
|
isLive: isLive == freezed
|
||||||
|
? _value.isLive
|
||||||
|
: isLive // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
watchPage: watchPage == freezed
|
||||||
|
? _value.watchPage
|
||||||
|
: watchPage // ignore: cast_nullable_to_non_nullable
|
||||||
|
as WatchPage?,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$VideoIdCopyWith<$Res> get id {
|
||||||
|
return $VideoIdCopyWith<$Res>(_value.id, (value) {
|
||||||
|
return _then(_value.copyWith(id: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ChannelIdCopyWith<$Res> get channelId {
|
||||||
|
return $ChannelIdCopyWith<$Res>(_value.channelId, (value) {
|
||||||
|
return _then(_value.copyWith(channelId: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ThumbnailSetCopyWith<$Res> get thumbnails {
|
||||||
|
return $ThumbnailSetCopyWith<$Res>(_value.thumbnails, (value) {
|
||||||
|
return _then(_value.copyWith(thumbnails: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
$EngagementCopyWith<$Res> get engagement {
|
||||||
|
return $EngagementCopyWith<$Res>(_value.engagement, (value) {
|
||||||
|
return _then(_value.copyWith(engagement: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$VideoCopyWith<$Res> implements $VideoCopyWith<$Res> {
|
||||||
|
factory _$VideoCopyWith(_Video value, $Res Function(_Video) then) =
|
||||||
|
__$VideoCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call(
|
||||||
|
{VideoId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
ChannelId channelId,
|
||||||
|
DateTime? uploadDate,
|
||||||
|
DateTime? publishDate,
|
||||||
|
String description,
|
||||||
|
Duration? duration,
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
UnmodifiableListView<String> keywords,
|
||||||
|
Engagement engagement,
|
||||||
|
bool isLive,
|
||||||
|
@internal WatchPage? watchPage});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$VideoIdCopyWith<$Res> get id;
|
||||||
|
@override
|
||||||
|
$ChannelIdCopyWith<$Res> get channelId;
|
||||||
|
@override
|
||||||
|
$ThumbnailSetCopyWith<$Res> get thumbnails;
|
||||||
|
@override
|
||||||
|
$EngagementCopyWith<$Res> get engagement;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$VideoCopyWithImpl<$Res> extends _$VideoCopyWithImpl<$Res>
|
||||||
|
implements _$VideoCopyWith<$Res> {
|
||||||
|
__$VideoCopyWithImpl(_Video _value, $Res Function(_Video) _then)
|
||||||
|
: super(_value, (v) => _then(v as _Video));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Video get _value => super._value as _Video;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? id = freezed,
|
||||||
|
Object? title = freezed,
|
||||||
|
Object? author = freezed,
|
||||||
|
Object? channelId = freezed,
|
||||||
|
Object? uploadDate = freezed,
|
||||||
|
Object? publishDate = freezed,
|
||||||
|
Object? description = freezed,
|
||||||
|
Object? duration = freezed,
|
||||||
|
Object? thumbnails = freezed,
|
||||||
|
Object? keywords = freezed,
|
||||||
|
Object? engagement = freezed,
|
||||||
|
Object? isLive = freezed,
|
||||||
|
Object? watchPage = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_Video(
|
||||||
|
id == freezed
|
||||||
|
? _value.id
|
||||||
|
: id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as VideoId,
|
||||||
|
title == freezed
|
||||||
|
? _value.title
|
||||||
|
: title // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
author == freezed
|
||||||
|
? _value.author
|
||||||
|
: author // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
channelId == freezed
|
||||||
|
? _value.channelId
|
||||||
|
: channelId // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ChannelId,
|
||||||
|
uploadDate == freezed
|
||||||
|
? _value.uploadDate
|
||||||
|
: uploadDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime?,
|
||||||
|
publishDate == freezed
|
||||||
|
? _value.publishDate
|
||||||
|
: publishDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime?,
|
||||||
|
description == freezed
|
||||||
|
? _value.description
|
||||||
|
: description // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
duration == freezed
|
||||||
|
? _value.duration
|
||||||
|
: duration // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Duration?,
|
||||||
|
thumbnails == freezed
|
||||||
|
? _value.thumbnails
|
||||||
|
: thumbnails // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ThumbnailSet,
|
||||||
|
keywords == freezed
|
||||||
|
? _value.keywords
|
||||||
|
: keywords // ignore: cast_nullable_to_non_nullable
|
||||||
|
as UnmodifiableListView<String>,
|
||||||
|
engagement == freezed
|
||||||
|
? _value.engagement
|
||||||
|
: engagement // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Engagement,
|
||||||
|
isLive == freezed
|
||||||
|
? _value.isLive
|
||||||
|
: isLive // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
watchPage == freezed
|
||||||
|
? _value.watchPage
|
||||||
|
: watchPage // ignore: cast_nullable_to_non_nullable
|
||||||
|
as WatchPage?,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_Video extends _Video {
|
||||||
|
const _$_Video(
|
||||||
|
this.id,
|
||||||
|
this.title,
|
||||||
|
this.author,
|
||||||
|
this.channelId,
|
||||||
|
this.uploadDate,
|
||||||
|
this.publishDate,
|
||||||
|
this.description,
|
||||||
|
this.duration,
|
||||||
|
this.thumbnails,
|
||||||
|
this.keywords,
|
||||||
|
this.engagement,
|
||||||
|
this.isLive,
|
||||||
|
[@internal this.watchPage])
|
||||||
|
: super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video ID.
|
||||||
|
final VideoId id;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
final String title;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
final String author;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video author Id.
|
||||||
|
final ChannelId channelId;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Note: For search queries it is calculated with:
|
||||||
|
/// DateTime.now() - how much time is was published.
|
||||||
|
final DateTime? uploadDate;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video publish date.
|
||||||
|
final DateTime? publishDate;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video description.
|
||||||
|
final String description;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Duration of the video.
|
||||||
|
final Duration? duration;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Available thumbnails for this video.
|
||||||
|
final ThumbnailSet thumbnails;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Search keywords used for this video.
|
||||||
|
final UnmodifiableListView<String> keywords;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Engagement statistics for this video.
|
||||||
|
final Engagement engagement;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Returns true if this is a live stream.
|
||||||
|
//ignore: avoid_positional_boolean_parameters
|
||||||
|
final bool isLive;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
final WatchPage? watchPage;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'Video._internal(id: $id, title: $title, author: $author, channelId: $channelId, uploadDate: $uploadDate, publishDate: $publishDate, description: $description, duration: $duration, thumbnails: $thumbnails, keywords: $keywords, engagement: $engagement, isLive: $isLive, watchPage: $watchPage)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _Video &&
|
||||||
|
(identical(other.id, id) ||
|
||||||
|
const DeepCollectionEquality().equals(other.id, id)) &&
|
||||||
|
(identical(other.title, title) ||
|
||||||
|
const DeepCollectionEquality().equals(other.title, title)) &&
|
||||||
|
(identical(other.author, author) ||
|
||||||
|
const DeepCollectionEquality().equals(other.author, author)) &&
|
||||||
|
(identical(other.channelId, channelId) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.channelId, channelId)) &&
|
||||||
|
(identical(other.uploadDate, uploadDate) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.uploadDate, uploadDate)) &&
|
||||||
|
(identical(other.publishDate, publishDate) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.publishDate, publishDate)) &&
|
||||||
|
(identical(other.description, description) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.description, description)) &&
|
||||||
|
(identical(other.duration, duration) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.duration, duration)) &&
|
||||||
|
(identical(other.thumbnails, thumbnails) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.thumbnails, thumbnails)) &&
|
||||||
|
(identical(other.keywords, keywords) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.keywords, keywords)) &&
|
||||||
|
(identical(other.engagement, engagement) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.engagement, engagement)) &&
|
||||||
|
(identical(other.isLive, isLive) ||
|
||||||
|
const DeepCollectionEquality().equals(other.isLive, isLive)) &&
|
||||||
|
(identical(other.watchPage, watchPage) ||
|
||||||
|
const DeepCollectionEquality()
|
||||||
|
.equals(other.watchPage, watchPage)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^
|
||||||
|
const DeepCollectionEquality().hash(id) ^
|
||||||
|
const DeepCollectionEquality().hash(title) ^
|
||||||
|
const DeepCollectionEquality().hash(author) ^
|
||||||
|
const DeepCollectionEquality().hash(channelId) ^
|
||||||
|
const DeepCollectionEquality().hash(uploadDate) ^
|
||||||
|
const DeepCollectionEquality().hash(publishDate) ^
|
||||||
|
const DeepCollectionEquality().hash(description) ^
|
||||||
|
const DeepCollectionEquality().hash(duration) ^
|
||||||
|
const DeepCollectionEquality().hash(thumbnails) ^
|
||||||
|
const DeepCollectionEquality().hash(keywords) ^
|
||||||
|
const DeepCollectionEquality().hash(engagement) ^
|
||||||
|
const DeepCollectionEquality().hash(isLive) ^
|
||||||
|
const DeepCollectionEquality().hash(watchPage);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$VideoCopyWith<_Video> get copyWith =>
|
||||||
|
__$VideoCopyWithImpl<_Video>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Video extends Video {
|
||||||
|
const factory _Video(
|
||||||
|
VideoId id,
|
||||||
|
String title,
|
||||||
|
String author,
|
||||||
|
ChannelId channelId,
|
||||||
|
DateTime? uploadDate,
|
||||||
|
DateTime? publishDate,
|
||||||
|
String description,
|
||||||
|
Duration? duration,
|
||||||
|
ThumbnailSet thumbnails,
|
||||||
|
UnmodifiableListView<String> keywords,
|
||||||
|
Engagement engagement,
|
||||||
|
bool isLive,
|
||||||
|
[@internal WatchPage? watchPage]) = _$_Video;
|
||||||
|
const _Video._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video ID.
|
||||||
|
VideoId get id => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video title.
|
||||||
|
String get title => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video author.
|
||||||
|
String get author => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video author Id.
|
||||||
|
ChannelId get channelId => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video upload date.
|
||||||
|
/// Note: For search queries it is calculated with:
|
||||||
|
/// DateTime.now() - how much time is was published.
|
||||||
|
DateTime? get uploadDate => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video publish date.
|
||||||
|
DateTime? get publishDate => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Video description.
|
||||||
|
String get description => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Duration of the video.
|
||||||
|
Duration? get duration => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Available thumbnails for this video.
|
||||||
|
ThumbnailSet get thumbnails => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Search keywords used for this video.
|
||||||
|
UnmodifiableListView<String> get keywords =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Engagement statistics for this video.
|
||||||
|
Engagement get engagement => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Returns true if this is a live stream.
|
||||||
|
//ignore: avoid_positional_boolean_parameters
|
||||||
|
bool get isLive => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// Used internally.
|
||||||
|
/// Shouldn't be used in the code.
|
||||||
|
@internal
|
||||||
|
WatchPage? get watchPage => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$VideoCopyWith<_Video> get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
|
@ -1,30 +1,46 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../extensions/helpers_extension.dart';
|
import '../extensions/helpers_extension.dart';
|
||||||
|
|
||||||
|
part 'video_id.freezed.dart';
|
||||||
|
|
||||||
/// Encapsulates a valid YouTube video ID.
|
/// Encapsulates a valid YouTube video ID.
|
||||||
class VideoId with EquatableMixin {
|
@freezed
|
||||||
|
class VideoId with _$VideoId {
|
||||||
static final _regMatchExp = RegExp(r'youtube\..+?/watch.*?v=(.*?)(?:&|/|$)');
|
static final _regMatchExp = RegExp(r'youtube\..+?/watch.*?v=(.*?)(?:&|/|$)');
|
||||||
static final _shortMatchExp = RegExp(r'youtu\.be/(.*?)(?:\?|&|/|$)');
|
static final _shortMatchExp = RegExp(r'youtu\.be/(.*?)(?:\?|&|/|$)');
|
||||||
static final _embedMatchExp = RegExp(r'youtube\..+?/embed/(.*?)(?:\?|&|/|$)');
|
static final _embedMatchExp = RegExp(r'youtube\..+?/embed/(.*?)(?:\?|&|/|$)');
|
||||||
|
|
||||||
/// ID as string.
|
const VideoId._();
|
||||||
final String value;
|
|
||||||
|
const factory VideoId._internal(
|
||||||
|
|
||||||
|
/// ID as string.
|
||||||
|
String value) = _VideoId;
|
||||||
|
|
||||||
/// Initializes an instance of [VideoId] with a url or video id.
|
/// Initializes an instance of [VideoId] with a url or video id.
|
||||||
VideoId(String idOrUrl) : value = parseVideoId(idOrUrl) ?? '' {
|
factory VideoId(String idOrUrl) {
|
||||||
if (value.isEmpty) {
|
final id = parseVideoId(idOrUrl);
|
||||||
|
|
||||||
|
if (id == null) {
|
||||||
throw ArgumentError.value(
|
throw ArgumentError.value(
|
||||||
idOrUrl, 'urlOrUrl', 'Invalid YouTube video ID or URL');
|
idOrUrl, 'urlOrUrl', 'Invalid YouTube video ID or URL');
|
||||||
}
|
}
|
||||||
|
return VideoId._internal(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Converts [obj] to a [VideoId] by calling .toString on that object.
|
||||||
|
/// If it is already a [VideoId], [obj] is returned
|
||||||
|
factory VideoId.fromString(dynamic obj) {
|
||||||
|
if (obj is VideoId) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
return VideoId(obj.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => value;
|
String toString() => value;
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [value];
|
|
||||||
|
|
||||||
/// Returns true if the given [videoId] is valid.
|
/// Returns true if the given [videoId] is valid.
|
||||||
static bool validateVideoId(String videoId) {
|
static bool validateVideoId(String videoId) {
|
||||||
if (videoId.isNullOrWhiteSpace) {
|
if (videoId.isNullOrWhiteSpace) {
|
||||||
|
@ -68,13 +84,4 @@ class VideoId with EquatableMixin {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts [obj] to a [VideoId] by calling .toString on that object.
|
|
||||||
/// If it is already a [VideoId], [obj] is returned
|
|
||||||
factory VideoId.fromString(dynamic obj) {
|
|
||||||
if (obj is VideoId) {
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
return VideoId(obj.toString());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
|
||||||
|
|
||||||
|
part of 'video_id.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$VideoIdTearOff {
|
||||||
|
const _$VideoIdTearOff();
|
||||||
|
|
||||||
|
_VideoId _internal(String value) {
|
||||||
|
return _VideoId(
|
||||||
|
value,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
const $VideoId = _$VideoIdTearOff();
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$VideoId {
|
||||||
|
/// ID as string.
|
||||||
|
String get value => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
$VideoIdCopyWith<VideoId> get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $VideoIdCopyWith<$Res> {
|
||||||
|
factory $VideoIdCopyWith(VideoId value, $Res Function(VideoId) then) =
|
||||||
|
_$VideoIdCopyWithImpl<$Res>;
|
||||||
|
$Res call({String value});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$VideoIdCopyWithImpl<$Res> implements $VideoIdCopyWith<$Res> {
|
||||||
|
_$VideoIdCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
final VideoId _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function(VideoId) _then;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? value = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_value.copyWith(
|
||||||
|
value: value == freezed
|
||||||
|
? _value.value
|
||||||
|
: value // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$VideoIdCopyWith<$Res> implements $VideoIdCopyWith<$Res> {
|
||||||
|
factory _$VideoIdCopyWith(_VideoId value, $Res Function(_VideoId) then) =
|
||||||
|
__$VideoIdCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
$Res call({String value});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$VideoIdCopyWithImpl<$Res> extends _$VideoIdCopyWithImpl<$Res>
|
||||||
|
implements _$VideoIdCopyWith<$Res> {
|
||||||
|
__$VideoIdCopyWithImpl(_VideoId _value, $Res Function(_VideoId) _then)
|
||||||
|
: super(_value, (v) => _then(v as _VideoId));
|
||||||
|
|
||||||
|
@override
|
||||||
|
_VideoId get _value => super._value as _VideoId;
|
||||||
|
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? value = freezed,
|
||||||
|
}) {
|
||||||
|
return _then(_VideoId(
|
||||||
|
value == freezed
|
||||||
|
? _value.value
|
||||||
|
: value // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$_VideoId extends _VideoId {
|
||||||
|
const _$_VideoId(this.value) : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// ID as string.
|
||||||
|
final String value;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(dynamic other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other is _VideoId &&
|
||||||
|
(identical(other.value, value) ||
|
||||||
|
const DeepCollectionEquality().equals(other.value, value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
runtimeType.hashCode ^ const DeepCollectionEquality().hash(value);
|
||||||
|
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
@override
|
||||||
|
_$VideoIdCopyWith<_VideoId> get copyWith =>
|
||||||
|
__$VideoIdCopyWithImpl<_VideoId>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _VideoId extends VideoId {
|
||||||
|
const factory _VideoId(String value) = _$_VideoId;
|
||||||
|
const _VideoId._() : super._();
|
||||||
|
|
||||||
|
@override
|
||||||
|
|
||||||
|
/// ID as string.
|
||||||
|
String get value => throw _privateConstructorUsedError;
|
||||||
|
@override
|
||||||
|
@JsonKey(ignore: true)
|
||||||
|
_$VideoIdCopyWith<_VideoId> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
14
pubspec.yaml
14
pubspec.yaml
|
@ -9,7 +9,7 @@ environment:
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
collection: ^1.15.0
|
collection: ^1.15.0
|
||||||
equatable: ^2.0.0
|
freezed_annotation: ^0.14.3
|
||||||
html: ^0.15.0
|
html: ^0.15.0
|
||||||
http: ^0.13.0
|
http: ^0.13.0
|
||||||
http_parser: ^4.0.0
|
http_parser: ^4.0.0
|
||||||
|
@ -18,10 +18,10 @@ dependencies:
|
||||||
xml: ^5.0.2
|
xml: ^5.0.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
build_runner: ^1.12.2
|
build_runner: ^2.0.6
|
||||||
console: ^4.0.0
|
console: ^4.1.0
|
||||||
grinder: ^0.9.0-nullsafety.0
|
freezed: ^0.14.3
|
||||||
json_serializable: ^4.1.0
|
grinder: ^0.9.0
|
||||||
|
json_serializable: ^5.0.0
|
||||||
lint: ^1.5.3
|
lint: ^1.5.3
|
||||||
pedantic: ^1.11.0
|
test: ^1.17.10
|
||||||
test: ^1.16.8
|
|
||||||
|
|
Loading…
Reference in New Issue