diff --git a/analysis_options.yaml b/analysis_options.yaml index 53cee87..6e1dd93 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -5,9 +5,14 @@ include: package:effective_dart/analysis_options.yaml # For lint rules and documentation, see http://dart-lang.github.io/linter/lints. # Uncomment to specify additional rules. -# linter: -# rules: -# - camel_case_types +linter: + rules: + - valid_regexps + - prefer_const_constructors + - prefer_const_declarations + - prefer_const_literals_to_create_immutables + - prefer_constructors_over_static_methods + - prefer_contains analyzer: # exclude: diff --git a/lib/src/models/audio_stream_info.dart b/lib/src/models/audio_stream_info.dart index 76599a9..6cccb45 100644 --- a/lib/src/models/audio_stream_info.dart +++ b/lib/src/models/audio_stream_info.dart @@ -9,7 +9,10 @@ class AudioStreamInfo extends MediaStreamInfo { final AudioEncoding audioEncoding; /// Initializes an instance of [AudioStreamInfo] - const AudioStreamInfo(int tag, Uri url, Container container, int size, - this.bitrate, this.audioEncoding) + AudioStreamInfo(int tag, Uri url, Container container, int size, this.bitrate, + this.audioEncoding) : super(tag, url, container, size); + + @override + List get props => super.props..addAll([bitrate, audioEncoding]); } diff --git a/lib/src/models/channel.dart b/lib/src/models/channel.dart index 4bc01a1..03287f4 100644 --- a/lib/src/models/channel.dart +++ b/lib/src/models/channel.dart @@ -1,5 +1,7 @@ +import 'package:equatable/equatable.dart'; + /// Information about a YouTube channel. -class Channel { +class Channel extends Equatable { /// ID of this channel. final String id; @@ -10,5 +12,8 @@ class Channel { final Uri logoUrl; /// Initializes an instance of [Channel] - Channel(this.id, this.title, this.logoUrl); + const Channel(this.id, this.title, this.logoUrl); + + @override + List get props => [id, title, logoUrl]; } diff --git a/lib/src/models/closed_caption.dart b/lib/src/models/closed_caption.dart index 72822e6..40e7c71 100644 --- a/lib/src/models/closed_caption.dart +++ b/lib/src/models/closed_caption.dart @@ -1,5 +1,8 @@ -/// Text that gets displayed at specific time during video playback, as part of a . -class ClosedCaption { +import 'package:equatable/equatable.dart'; + +/// Text that gets displayed at specific time during video playback, +/// as part of a [ClosedCaptionTrack] +class ClosedCaption extends Equatable { /// Text displayed by this caption. final String text; @@ -21,4 +24,7 @@ class ClosedCaption { @override String toString() => 'Caption: $text ($offset - $end)'; + + @override + List get props => [text, offset, duration]; } diff --git a/lib/src/models/closed_caption_track.dart b/lib/src/models/closed_caption_track.dart index 7bbe633..8411cae 100644 --- a/lib/src/models/closed_caption_track.dart +++ b/lib/src/models/closed_caption_track.dart @@ -1,7 +1,9 @@ +import 'package:equatable/equatable.dart'; + import 'models.dart'; /// Set of captions that get displayed during video playback. -class ClosedCaptionTrack { +class ClosedCaptionTrack extends Equatable { /// Metadata associated with this track. final ClosedCaptionTrackInfo info; @@ -10,4 +12,7 @@ class ClosedCaptionTrack { /// Initializes an instance of [ClosedCaptionTrack] const ClosedCaptionTrack(this.info, this.captions); + + @override + List get props => [info, captions]; } diff --git a/lib/src/models/closed_caption_track_info.dart b/lib/src/models/closed_caption_track_info.dart index c7db22f..a23d3a2 100644 --- a/lib/src/models/closed_caption_track_info.dart +++ b/lib/src/models/closed_caption_track_info.dart @@ -1,7 +1,9 @@ +import 'package:equatable/equatable.dart'; + import 'models.dart'; /// Metadata associated with a certain [ClosedCaptionTrack] -class ClosedCaptionTrackInfo { +class ClosedCaptionTrackInfo extends Equatable { /// Manifest URL of the associated track. final Uri url; @@ -13,4 +15,7 @@ class ClosedCaptionTrackInfo { /// Initializes an instance of [ClosedCaptionTrackInfo] const ClosedCaptionTrackInfo(this.url, this.language, {this.isAutoGenerated}); + + @override + List get props => [url, language, isAutoGenerated]; } diff --git a/lib/src/models/language.dart b/lib/src/models/language.dart index bce863f..6c92417 100644 --- a/lib/src/models/language.dart +++ b/lib/src/models/language.dart @@ -1,5 +1,7 @@ +import 'package:equatable/equatable.dart'; + /// Language information. -class Language { +class Language extends Equatable { /// ISO 639-1 code of this language. final String code; @@ -8,4 +10,7 @@ class Language { /// Initializes an instance of [Language] const Language(this.code, this.name); + + @override + List get props => [code, name]; } diff --git a/lib/src/models/media_stream_info.dart b/lib/src/models/media_stream_info.dart index 1d20930..86fff8e 100644 --- a/lib/src/models/media_stream_info.dart +++ b/lib/src/models/media_stream_info.dart @@ -1,7 +1,9 @@ +import 'package:equatable/equatable.dart'; + import 'models.dart'; /// Metadata associated with a certain [MediaStream] -class MediaStreamInfo { +class MediaStreamInfo extends Equatable { /// Unique tag that identifies the properties of the associated stream. final int itag; @@ -19,4 +21,7 @@ class MediaStreamInfo { @override String toString() => '$itag ($container)'; + + @override + List get props => [itag, url, container, size]; } diff --git a/lib/src/models/media_stream_info_set.dart b/lib/src/models/media_stream_info_set.dart index 7065c84..9a3cc2d 100644 --- a/lib/src/models/media_stream_info_set.dart +++ b/lib/src/models/media_stream_info_set.dart @@ -1,7 +1,9 @@ +import 'package:equatable/equatable.dart'; + import 'models.dart'; /// Set of all available media stream infos. -class MediaStreamInfoSet { +class MediaStreamInfoSet extends Equatable { /// Muxed streams. final List muxed; @@ -25,4 +27,8 @@ class MediaStreamInfoSet { /// Initializes an instance of [MediaStreamInfoSet]. const MediaStreamInfoSet(this.muxed, this.audio, this.video, this.hlsLiveStreamUrl, this.videoDetails, this.validUntil); + + @override + List get props => + [muxed, audio, video, hlsLiveStreamUrl, videoDetails, validUntil]; } diff --git a/lib/src/models/muxed_stream_info.dart b/lib/src/models/muxed_stream_info.dart index d44bb24..9fbe0c9 100644 --- a/lib/src/models/muxed_stream_info.dart +++ b/lib/src/models/muxed_stream_info.dart @@ -20,7 +20,7 @@ class MuxedStreamInfo extends MediaStreamInfo { /// Initializes an instance of [MuxedStreamInfo] const MuxedStreamInfo( - int tag, + int itag, Uri url, Container container, int size, @@ -29,5 +29,15 @@ class MuxedStreamInfo extends MediaStreamInfo { this.videoQualityLabel, this.videoQuality, this.videoResolution) - : super(tag, url, container, size); + : super(itag, url, container, size); + + @override + List get props => super.props + ..addAll([ + audioEncoding, + videoEncoding, + videoQualityLabel, + videoQuality, + videoResolution + ]); } diff --git a/lib/src/models/player_configuration.dart b/lib/src/models/player_configuration.dart index 2aae2ec..2395e0c 100644 --- a/lib/src/models/player_configuration.dart +++ b/lib/src/models/player_configuration.dart @@ -1,7 +1,9 @@ +import 'package:equatable/equatable.dart'; + import 'models.dart'; /// Player configuration. -class PlayerConfiguration { +class PlayerConfiguration extends Equatable { /// Player source url. final String playerSourceUrl; @@ -40,4 +42,17 @@ class PlayerConfiguration { this.adaptiveStreamInfosJson, this.video, this.validUntil); + + @override + List get props => [ + playerSourceUrl, + dashManifestUrl, + hlsManifestUrl, + muxedStreamInfosUrlEncoded, + adaptiveStreamInfosUrlEncoded, + muxedStreamInfoJson, + adaptiveStreamInfosJson, + video, + validUntil + ]; } diff --git a/lib/src/models/playlist.dart b/lib/src/models/playlist.dart index 978683e..052c813 100644 --- a/lib/src/models/playlist.dart +++ b/lib/src/models/playlist.dart @@ -1,7 +1,9 @@ +import 'package:equatable/equatable.dart'; + import 'models.dart'; /// Information about a YouTube playlist. -class Playlist { +class Playlist extends Equatable { /// ID of this playlist. final String id; @@ -26,4 +28,8 @@ class Playlist { /// Initializes an instance of [Playlist] Playlist(this.id, this.author, this.title, this.type, this.description, this.statistics, this.videos); + + @override + List get props => + [id, author, title, type, description, statistics, videos]; } diff --git a/lib/src/models/statistics.dart b/lib/src/models/statistics.dart index 122caf3..05822aa 100644 --- a/lib/src/models/statistics.dart +++ b/lib/src/models/statistics.dart @@ -1,5 +1,7 @@ +import 'package:equatable/equatable.dart'; + /// User activity statistics. -class Statistics { +class Statistics extends Equatable { /// View count. final int viewCount; @@ -9,7 +11,7 @@ class Statistics { /// Dislike count. final int dislikeCount; - /// Initializes an instance of . + /// Initializes an instance of [Statistics] const Statistics(this.viewCount, this.likeCount, this.dislikeCount); /// Average user rating in stars (1 star to 5 stars). @@ -19,4 +21,7 @@ class Statistics { } return 1 + 4.0 * likeCount / (likeCount + dislikeCount); } + + @override + List get props => [viewCount, likeCount, dislikeCount]; } diff --git a/lib/src/models/thumbnail_set.dart b/lib/src/models/thumbnail_set.dart index 375d2d1..fca1f52 100644 --- a/lib/src/models/thumbnail_set.dart +++ b/lib/src/models/thumbnail_set.dart @@ -1,5 +1,7 @@ +import 'package:equatable/equatable.dart'; + /// Set of thumbnails for a video. -class ThumbnailSet { +class ThumbnailSet extends Equatable { /// Video id. final String videoId; @@ -25,4 +27,7 @@ class ThumbnailSet { /// Not always available. String get maxResUrl => 'https://img.youtube.com/vi/$videoId/maxresdefault.jpg'; + + @override + List get props => [videoId]; } diff --git a/lib/src/models/video.dart b/lib/src/models/video.dart index 409abf2..e655101 100644 --- a/lib/src/models/video.dart +++ b/lib/src/models/video.dart @@ -1,7 +1,9 @@ +import 'package:equatable/equatable.dart'; + import 'models.dart'; /// Information about a YouTube video. -class Video { +class Video extends Equatable { /// ID of this video. final String id; @@ -43,4 +45,17 @@ class Video { @override String toString() => 'Video($id): $title'; + + @override + List get props => [ + id, + author, + uploadDate, + title, + description, + thumbnailSet, + duration, + keyWords, + statistics + ]; } diff --git a/lib/src/models/video_resolution.dart b/lib/src/models/video_resolution.dart index ef551ad..a6124cd 100644 --- a/lib/src/models/video_resolution.dart +++ b/lib/src/models/video_resolution.dart @@ -1,5 +1,7 @@ +import 'package:equatable/equatable.dart'; + /// Width and height of a video. -class VideoResolution { +class VideoResolution extends Equatable{ /// Viewport width. final int width; @@ -11,4 +13,7 @@ class VideoResolution { @override String toString() => '${width}x$height'; + + @override + List get props => [width, height]; } diff --git a/lib/src/models/video_stream_info.dart b/lib/src/models/video_stream_info.dart index af48d97..f5267d1 100644 --- a/lib/src/models/video_stream_info.dart +++ b/lib/src/models/video_stream_info.dart @@ -22,7 +22,7 @@ class VideoStreamInfo extends MediaStreamInfo { /// Initializes an instance of [VideoStreamInfo] const VideoStreamInfo( - int tag, + int itag, Uri url, Container container, int size, @@ -32,5 +32,16 @@ class VideoStreamInfo extends MediaStreamInfo { this.videoQuality, this.videoResolution, this.framerate) - : super(tag, url, container, size); + : super(itag, url, container, size); + + @override + List get props => super.props + ..addAll([ + bitrate, + videoEncoding, + videoQualityLabel, + videoQuality, + videoResolution, + framerate + ]); } diff --git a/pubspec.yaml b/pubspec.yaml index eacf8a2..785f71d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,6 +11,7 @@ dependencies: http: ^0.12.0+4 http_parser: ^3.1.3 xml: ^3.7.0 + equatable: ^1.1.0 dev_dependencies: effective_dart: ^1.2.1