BREAKING CHANGE: Rename class `Container` to `StreamContainer` to avoid name conflict with Flutter's `Container`.
This closes #66
This commit is contained in:
parent
de9eb97fc3
commit
8955308359
|
@ -67,7 +67,6 @@ Future<void> download(String id) async {
|
||||||
// Listen for data received.
|
// Listen for data received.
|
||||||
var progressBar = ProgressBar();
|
var progressBar = ProgressBar();
|
||||||
await for (var data in audioStream) {
|
await for (var data in audioStream) {
|
||||||
|
|
||||||
// Keep track of the current downloaded data.
|
// Keep track of the current downloaded data.
|
||||||
count += data.length;
|
count += data.length;
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,6 @@ class DashManifest {
|
||||||
final xml.XmlDocument _root;
|
final xml.XmlDocument _root;
|
||||||
Iterable<_StreamInfo> _streams;
|
Iterable<_StreamInfo> _streams;
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
Iterable<_StreamInfo> get streams => _streams ??= _root
|
Iterable<_StreamInfo> get streams => _streams ??= _root
|
||||||
.findElements('Representation')
|
.findElements('Representation')
|
||||||
|
|
|
@ -98,11 +98,10 @@ extension on Duration {
|
||||||
}
|
}
|
||||||
var twoDigitHours = twoDigits(inHours);
|
var twoDigitHours = twoDigits(inHours);
|
||||||
var twoDigitMinutes =
|
var twoDigitMinutes =
|
||||||
twoDigits(inMinutes.remainder(Duration.minutesPerHour));
|
twoDigits(inMinutes.remainder(Duration.minutesPerHour));
|
||||||
var twoDigitSeconds =
|
var twoDigitSeconds =
|
||||||
twoDigits(inSeconds.remainder(Duration.secondsPerMinute));
|
twoDigits(inSeconds.remainder(Duration.secondsPerMinute));
|
||||||
var fourDigitsUs =
|
var fourDigitsUs = threeDigits(inMilliseconds.remainder(1000));
|
||||||
threeDigits(inMilliseconds.remainder(1000));
|
|
||||||
return '$twoDigitHours:$twoDigitMinutes:$twoDigitSeconds,$fourDigitsUs';
|
return '$twoDigitHours:$twoDigitMinutes:$twoDigitSeconds,$fourDigitsUs';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
export 'comment.dart';
|
export 'comment.dart';
|
||||||
export 'comments_client.dart';
|
export 'comments_client.dart';
|
||||||
|
|
|
@ -9,7 +9,7 @@ class AudioOnlyStreamInfo implements AudioStreamInfo {
|
||||||
final Uri url;
|
final Uri url;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
final Container container;
|
final StreamContainer container;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
final FileSize size;
|
final FileSize size;
|
||||||
|
|
|
@ -6,7 +6,7 @@ abstract class AudioStreamInfo extends StreamInfo {
|
||||||
final String audioCodec;
|
final String audioCodec;
|
||||||
|
|
||||||
///
|
///
|
||||||
AudioStreamInfo(int tag, Uri url, Container container, FileSize size,
|
AudioStreamInfo(int tag, Uri url, StreamContainer container, FileSize size,
|
||||||
Bitrate bitrate, this.audioCodec)
|
Bitrate bitrate, this.audioCodec)
|
||||||
: super(tag, url, container, size, bitrate);
|
: super(tag, url, container, size, bitrate);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'audio_stream_info.dart';
|
import 'audio_stream_info.dart';
|
||||||
import 'bitrate.dart';
|
import 'bitrate.dart';
|
||||||
import 'container.dart';
|
|
||||||
import 'filesize.dart';
|
import 'filesize.dart';
|
||||||
import 'framerate.dart';
|
import 'framerate.dart';
|
||||||
|
import 'stream_container.dart';
|
||||||
import 'video_quality.dart';
|
import 'video_quality.dart';
|
||||||
import 'video_resolution.dart';
|
import 'video_resolution.dart';
|
||||||
import 'video_stream_info.dart';
|
import 'video_stream_info.dart';
|
||||||
|
@ -16,7 +16,7 @@ class MuxedStreamInfo implements AudioStreamInfo, VideoStreamInfo {
|
||||||
final Uri url;
|
final Uri url;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
final Container container;
|
final StreamContainer container;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
final FileSize size;
|
final FileSize size;
|
||||||
|
|
|
@ -1,33 +1,33 @@
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
|
||||||
/// Stream container.
|
/// Stream container.
|
||||||
class Container with EquatableMixin {
|
class StreamContainer with EquatableMixin {
|
||||||
/// Container name.
|
/// Container name.
|
||||||
/// Can be used as file extension
|
/// Can be used as file extension
|
||||||
final String name;
|
final String name;
|
||||||
|
|
||||||
/// Initializes an instance of [Container]
|
/// Initializes an instance of [StreamContainer]
|
||||||
Container._(this.name);
|
StreamContainer._(this.name);
|
||||||
|
|
||||||
/// MPEG-4 Part 14 (.mp4).
|
/// MPEG-4 Part 14 (.mp4).
|
||||||
static final Container mp4 = Container._('mp4');
|
static final StreamContainer mp4 = StreamContainer._('mp4');
|
||||||
|
|
||||||
/// Web Media (.webm).
|
/// Web Media (.webm).
|
||||||
static final Container webM = Container._('webm');
|
static final StreamContainer webM = StreamContainer._('webm');
|
||||||
|
|
||||||
/// 3rd Generation Partnership Project (.3gpp).
|
/// 3rd Generation Partnership Project (.3gpp).
|
||||||
static final Container tgpp = Container._('3gpp');
|
static final StreamContainer tgpp = StreamContainer._('3gpp');
|
||||||
|
|
||||||
/// Parse a container from name.
|
/// Parse a container from name.
|
||||||
static Container parse(String name) {
|
static StreamContainer parse(String name) {
|
||||||
if (name.toLowerCase() == 'mp4') {
|
if (name.toLowerCase() == 'mp4') {
|
||||||
return Container.mp4;
|
return StreamContainer.mp4;
|
||||||
}
|
}
|
||||||
if (name.toLowerCase() == 'webm') {
|
if (name.toLowerCase() == 'webm') {
|
||||||
return Container.webM;
|
return StreamContainer.webM;
|
||||||
}
|
}
|
||||||
if (name.toLowerCase() == '3gpp') {
|
if (name.toLowerCase() == '3gpp') {
|
||||||
return Container.tgpp;
|
return StreamContainer.tgpp;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw ArgumentError.value(name, 'name', 'Valid values: mp4, webm, 3gpp');
|
throw ArgumentError.value(name, 'name', 'Valid values: mp4, webm, 3gpp');
|
|
@ -1,6 +1,6 @@
|
||||||
import 'bitrate.dart';
|
import 'bitrate.dart';
|
||||||
import 'container.dart';
|
|
||||||
import 'filesize.dart';
|
import 'filesize.dart';
|
||||||
|
import 'stream_container.dart';
|
||||||
|
|
||||||
/// Generic YouTube media stream.
|
/// Generic YouTube media stream.
|
||||||
abstract class StreamInfo {
|
abstract class StreamInfo {
|
||||||
|
@ -12,7 +12,7 @@ abstract class StreamInfo {
|
||||||
final Uri url;
|
final Uri url;
|
||||||
|
|
||||||
/// Stream container.
|
/// Stream container.
|
||||||
final Container container;
|
final StreamContainer container;
|
||||||
|
|
||||||
/// Stream size.
|
/// Stream size.
|
||||||
final FileSize size;
|
final FileSize size;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
export 'audio_only_stream_info.dart';
|
export 'audio_only_stream_info.dart';
|
||||||
export 'audio_stream_info.dart';
|
export 'audio_stream_info.dart';
|
||||||
export 'bitrate.dart';
|
export 'bitrate.dart';
|
||||||
export 'container.dart';
|
|
||||||
export 'filesize.dart';
|
export 'filesize.dart';
|
||||||
export 'framerate.dart';
|
export 'framerate.dart';
|
||||||
export 'muxed_stream_info.dart';
|
export 'muxed_stream_info.dart';
|
||||||
|
export 'stream_container.dart';
|
||||||
export 'stream_context.dart';
|
export 'stream_context.dart';
|
||||||
export 'stream_info.dart';
|
export 'stream_info.dart';
|
||||||
export 'stream_manifest.dart';
|
export 'stream_manifest.dart';
|
||||||
|
|
|
@ -6,9 +6,9 @@ import '../../reverse_engineering/responses/responses.dart';
|
||||||
import '../../reverse_engineering/youtube_http_client.dart';
|
import '../../reverse_engineering/youtube_http_client.dart';
|
||||||
import '../video_id.dart';
|
import '../video_id.dart';
|
||||||
import 'bitrate.dart';
|
import 'bitrate.dart';
|
||||||
import 'container.dart';
|
|
||||||
import 'filesize.dart';
|
import 'filesize.dart';
|
||||||
import 'framerate.dart';
|
import 'framerate.dart';
|
||||||
|
import 'stream_container.dart';
|
||||||
import 'stream_context.dart';
|
import 'stream_context.dart';
|
||||||
import 'stream_info.dart';
|
import 'stream_info.dart';
|
||||||
import 'stream_manifest.dart';
|
import 'stream_manifest.dart';
|
||||||
|
@ -145,7 +145,7 @@ class StreamsClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Common
|
// Common
|
||||||
var container = Container.parse(streamInfo.container);
|
var container = StreamContainer.parse(streamInfo.container);
|
||||||
var fileSize = FileSize(contentLength);
|
var fileSize = FileSize(contentLength);
|
||||||
var bitrate = Bitrate(streamInfo.bitrate);
|
var bitrate = Bitrate(streamInfo.bitrate);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import 'bitrate.dart';
|
import 'bitrate.dart';
|
||||||
import 'container.dart';
|
|
||||||
import 'filesize.dart';
|
import 'filesize.dart';
|
||||||
import 'framerate.dart';
|
import 'framerate.dart';
|
||||||
|
import 'stream_container.dart';
|
||||||
import 'video_quality.dart';
|
import 'video_quality.dart';
|
||||||
import 'video_resolution.dart';
|
import 'video_resolution.dart';
|
||||||
import 'video_stream_info.dart';
|
import 'video_stream_info.dart';
|
||||||
|
@ -15,7 +15,7 @@ class VideoOnlyStreamInfo implements VideoStreamInfo {
|
||||||
final Uri url;
|
final Uri url;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
final Container container;
|
final StreamContainer container;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
final FileSize size;
|
final FileSize size;
|
||||||
|
|
|
@ -21,7 +21,7 @@ abstract class VideoStreamInfo extends StreamInfo {
|
||||||
VideoStreamInfo(
|
VideoStreamInfo(
|
||||||
int tag,
|
int tag,
|
||||||
Uri url,
|
Uri url,
|
||||||
Container container,
|
StreamContainer container,
|
||||||
FileSize size,
|
FileSize size,
|
||||||
Bitrate bitrate,
|
Bitrate bitrate,
|
||||||
this.videoCodec,
|
this.videoCodec,
|
||||||
|
|
|
@ -1,16 +1,13 @@
|
||||||
import 'package:grinder/grinder.dart';
|
import 'package:grinder/grinder.dart';
|
||||||
|
|
||||||
|
final pub = sdkBin('pub');
|
||||||
final pub = sdkBin('pub');
|
|
||||||
void main(args) => grind(args);
|
void main(args) => grind(args);
|
||||||
|
|
||||||
@Task('Run tests')
|
@Task('Run tests')
|
||||||
void test() => TestRunner().testAsync();
|
void test() => TestRunner().testAsync();
|
||||||
|
|
||||||
@Task('Dart analysis')
|
@Task('Dart analysis')
|
||||||
void analysis() {
|
void analysis() {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@DefaultTask()
|
@DefaultTask()
|
||||||
@Depends(test)
|
@Depends(test)
|
||||||
|
|
Loading…
Reference in New Issue