Lint fixes
This commit is contained in:
parent
994ad62cc4
commit
c81f0774c1
|
@ -12,3 +12,4 @@ linter:
|
|||
no_runtimetype_tostring: false
|
||||
avoid_escaping_inner_quotes: false
|
||||
prefer_const_constructors: true
|
||||
avoid_positional_boolean_parameters: false
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -74,22 +74,20 @@ class ChannelClient {
|
|||
Future<ChannelAbout> getAboutPageByUsername(dynamic username) async {
|
||||
username = Username.fromString(username);
|
||||
|
||||
var channelAboutPage =
|
||||
var page =
|
||||
await ChannelAboutPage.getByUsername(_httpClient, username.value);
|
||||
|
||||
// TODO: Expose metadata from the [ChannelAboutPage] class.
|
||||
var id = channelAboutPage.initialData;
|
||||
return ChannelAbout(
|
||||
id.description,
|
||||
id.viewCount,
|
||||
id.joinDate,
|
||||
id.title,
|
||||
page.description,
|
||||
page.viewCount,
|
||||
page.joinDate,
|
||||
page.title,
|
||||
[
|
||||
for (var e in id.avatar)
|
||||
for (var e in page.avatar)
|
||||
Thumbnail(Uri.parse(e['url']), e['height'], e['width'])
|
||||
],
|
||||
id.country,
|
||||
id.channelLinks);
|
||||
page.country,
|
||||
page.channelLinks);
|
||||
}
|
||||
|
||||
/// Gets the metadata associated with the channel
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ class ChannelUploadsList extends DelegatingList<Video> {
|
|||
return null;
|
||||
}
|
||||
return ChannelUploadsList(
|
||||
page.initialData.uploads
|
||||
page.uploads
|
||||
.map((e) => Video(
|
||||
e.videoId,
|
||||
e.videoTitle,
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,150 +0,0 @@
|
|||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:http_parser/http_parser.dart';
|
||||
|
||||
import '../../exceptions/exceptions.dart';
|
||||
import '../../extensions/helpers_extension.dart';
|
||||
import '../../retry.dart';
|
||||
import '../models/stream_info_provider.dart';
|
||||
import '../player/player_response.dart';
|
||||
import '../youtube_http_client.dart';
|
||||
|
||||
///
|
||||
///
|
||||
@Deprecated('This endpoint is not supported anymore.')
|
||||
class VideoInfoClient {
|
||||
final Map<String, String> root;
|
||||
|
||||
///
|
||||
late final String status = root['status']!;
|
||||
|
||||
///
|
||||
late final bool isVideoAvailable = status.toLowerCase() != 'fail';
|
||||
|
||||
///
|
||||
late final PlayerResponse playerResponse =
|
||||
PlayerResponse.parse(root['player_response']!);
|
||||
|
||||
///
|
||||
late final Iterable<_StreamInfo> muxedStreams =
|
||||
root['url_encoded_fmt_stream_map']
|
||||
?.split(',')
|
||||
.map(Uri.splitQueryString)
|
||||
.map((e) => _StreamInfo(e)) ??
|
||||
const [];
|
||||
|
||||
///
|
||||
late final Iterable<_StreamInfo> adaptiveStreams = root['adaptive_fmts']
|
||||
?.split(',')
|
||||
.map(Uri.splitQueryString)
|
||||
.map((e) => _StreamInfo(e)) ??
|
||||
const [];
|
||||
|
||||
///
|
||||
late final Iterable<_StreamInfo> streams = [
|
||||
...muxedStreams,
|
||||
...adaptiveStreams
|
||||
];
|
||||
|
||||
///
|
||||
VideoInfoClient(this.root);
|
||||
|
||||
///
|
||||
VideoInfoClient.parse(String raw) : root = Uri.splitQueryString(raw);
|
||||
|
||||
///
|
||||
@alwaysThrows
|
||||
static Future<VideoInfoClient> get(
|
||||
YoutubeHttpClient httpClient, String videoId,
|
||||
[String? sts]) {
|
||||
var eurl = Uri.encodeFull('https://youtube.googleapis.com/v/$videoId');
|
||||
|
||||
final url = Uri(
|
||||
scheme: 'https',
|
||||
host: 'youtube.com',
|
||||
path: '/get_video_info',
|
||||
queryParameters: {
|
||||
'video_id': videoId,
|
||||
'el': 'embedded',
|
||||
'eurl': eurl,
|
||||
'hl': 'en',
|
||||
if (sts != null) 'sts': sts,
|
||||
'html5': '1',
|
||||
'c': 'TVHTML5',
|
||||
'cver': '6.20180913'
|
||||
});
|
||||
|
||||
return retry(() async {
|
||||
var raw = await httpClient.getString(url);
|
||||
var result = VideoInfoClient.parse(raw);
|
||||
|
||||
if (!result.isVideoAvailable || !result.playerResponse.isVideoAvailable) {
|
||||
throw VideoUnplayableException(videoId);
|
||||
}
|
||||
return result;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class _StreamInfo extends StreamInfoProvider {
|
||||
final Map<String, String> root;
|
||||
|
||||
@override
|
||||
late final int tag = int.parse(root['itag']!);
|
||||
|
||||
@override
|
||||
late final String url = root['url']!;
|
||||
|
||||
@override
|
||||
late final String? signature = root['s'];
|
||||
|
||||
@override
|
||||
late final String? signatureParameter = root['sp'];
|
||||
|
||||
@override
|
||||
late final int? contentLength = int.tryParse(root['clen'] ??
|
||||
StreamInfoProvider.contentLenExp.firstMatch(url)?.group(1) ??
|
||||
'');
|
||||
|
||||
@override
|
||||
late final int? bitrate = int.tryParse(root['bitrate'] ?? '');
|
||||
|
||||
late final MediaType mimeType = MediaType.parse(root['type']!);
|
||||
|
||||
@override
|
||||
late final String container = mimeType.subtype;
|
||||
|
||||
late final List<String> codecs = mimeType.parameters['codecs']!
|
||||
.split(',')
|
||||
.map((e) => e.trim())
|
||||
.toList()
|
||||
.cast<String>();
|
||||
|
||||
@override
|
||||
late final String audioCodec = codecs.last;
|
||||
|
||||
@override
|
||||
late final String? videoCodec = isAudioOnly ? null : codecs.first;
|
||||
|
||||
late final bool isAudioOnly = mimeType.type == 'audio';
|
||||
|
||||
@override
|
||||
late final String? videoQualityLabel = root['quality_label'];
|
||||
|
||||
late final List<int>? _size = root
|
||||
.getT<String>('size')
|
||||
?.split(',')
|
||||
.map((e) => int.tryParse(e))
|
||||
.toList()
|
||||
.cast<int>();
|
||||
|
||||
@override
|
||||
late final int? videoWidth = _size?.first;
|
||||
|
||||
@override
|
||||
late final int? videoHeight = _size?.last;
|
||||
|
||||
@override
|
||||
late final int? framerate = int.tryParse(root['fps'] ?? '');
|
||||
|
||||
_StreamInfo(this.root);
|
||||
}
|
|
@ -5,6 +5,7 @@ import '../../../youtube_explode_dart.dart';
|
|||
import '../../extensions/helpers_extension.dart';
|
||||
import 'initial_data.dart';
|
||||
|
||||
/// Generic class to handle the various youtube pages.
|
||||
abstract class YoutubePage<T extends InitialData> {
|
||||
@protected
|
||||
final Document? root;
|
||||
|
|
|
@ -18,6 +18,12 @@ class SearchPage extends YoutubePage<_InitialData> {
|
|||
///
|
||||
final String queryString;
|
||||
|
||||
late final List<BaseSearchContent> searchContent = initialData.searchContent;
|
||||
|
||||
late final List<dynamic> relatedVideos = initialData.relatedVideos;
|
||||
|
||||
late final int estimatedResults = initialData.estimatedResults;
|
||||
|
||||
/// InitialData
|
||||
SearchPage.id(this.queryString, _InitialData initialData)
|
||||
: super(null, null, initialData);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ class SearchClient {
|
|||
final page = await SearchPage.get(_httpClient, searchQuery, filter: filter);
|
||||
|
||||
return SearchList(
|
||||
page.initialData.searchContent
|
||||
page.searchContent
|
||||
.whereType<SearchVideo>()
|
||||
.map((e) => Video(
|
||||
e.id,
|
||||
|
@ -69,9 +69,9 @@ class SearchClient {
|
|||
|
||||
if (onlyVideos) {
|
||||
yield* Stream.fromIterable(
|
||||
page!.initialData.searchContent.whereType<SearchVideo>());
|
||||
page!.searchContent.whereType<SearchVideo>());
|
||||
} else {
|
||||
yield* Stream.fromIterable(page!.initialData.searchContent);
|
||||
yield* Stream.fromIterable(page!.searchContent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ class SearchList extends DelegatingList<Video> {
|
|||
return null;
|
||||
}
|
||||
return SearchList(
|
||||
page.initialData.searchContent
|
||||
page.searchContent
|
||||
.whereType<SearchVideo>()
|
||||
.map((e) => Video(
|
||||
e.id,
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -32,12 +32,12 @@ class SearchQuery {
|
|||
|
||||
/// Content of this search.
|
||||
/// Contains either [SearchVideo] or [SearchPlaylist]
|
||||
List<dynamic> get content => _page.initialData.searchContent;
|
||||
List<dynamic> get content => _page.searchContent;
|
||||
|
||||
/// Videos related to this search.
|
||||
/// Contains either [SearchVideo] or [SearchPlaylist]
|
||||
List<dynamic> get relatedVideos => _page.initialData.relatedVideos;
|
||||
List<dynamic> get relatedVideos => _page.relatedVideos;
|
||||
|
||||
/// Returns the estimated search result count.
|
||||
int get estimatedResults => _page.initialData.estimatedResults;
|
||||
int get estimatedResults => _page.estimatedResults;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ class Comment with _$Comment {
|
|||
int replyCount,
|
||||
|
||||
/// True if the comment is hearted by the creator.
|
||||
//ignore: avoid_positional_boolean_parameters
|
||||
bool isHearted,
|
||||
|
||||
/// Used internally.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
@ -62,6 +63,7 @@ mixin _$Comment {
|
|||
int get replyCount => throw _privateConstructorUsedError;
|
||||
|
||||
/// True if the comment is hearted by the creator.
|
||||
//ignore: avoid_positional_boolean_parameters
|
||||
bool get isHearted => throw _privateConstructorUsedError;
|
||||
|
||||
/// Used internally.
|
||||
|
@ -269,6 +271,7 @@ class _$_Comment implements _Comment {
|
|||
@override
|
||||
|
||||
/// True if the comment is hearted by the creator.
|
||||
//ignore: avoid_positional_boolean_parameters
|
||||
final bool isHearted;
|
||||
@override
|
||||
|
||||
|
@ -366,6 +369,7 @@ abstract class _Comment implements Comment {
|
|||
@override
|
||||
|
||||
/// True if the comment is hearted by the creator.
|
||||
//ignore: avoid_positional_boolean_parameters
|
||||
bool get isHearted => throw _privateConstructorUsedError;
|
||||
@override
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import '../../reverse_engineering/clients/comments_client.dart' as re;
|
||||
|
||||
import '../../../youtube_explode_dart.dart';
|
||||
import '../../reverse_engineering/clients/comments_client.dart' as re;
|
||||
|
||||
/// This list contains search videos.
|
||||
///This behaves like a [List] but has the [SearchList.nextPage] to get the next batch of videos.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// coverage:ignore-file
|
||||
// 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
|
||||
|
||||
|
|
Loading…
Reference in New Issue