youtube_explode/lib/src/videos/streams/bitrate.dart

65 lines
1.5 KiB
Dart
Raw Normal View History

import 'package:freezed_annotation/freezed_annotation.dart';
2020-06-03 13:18:37 +02:00
part 'bitrate.freezed.dart';
part 'bitrate.g.dart';
2020-06-03 13:18:37 +02:00
/// Encapsulates bitrate.
@freezed
class Bitrate with Comparable<Bitrate>, _$Bitrate {
2020-06-03 13:18:37 +02:00
/// Kilobits per second.
double get kiloBitsPerSecond => bitsPerSecond / 1024;
2020-06-05 16:17:08 +02:00
2020-06-03 13:18:37 +02:00
/// Megabits per second.
double get megaBitsPerSecond => kiloBitsPerSecond / 1024;
2020-06-05 16:17:08 +02:00
2020-06-03 13:18:37 +02:00
/// Gigabits per second.
double get gigaBitsPerSecond => megaBitsPerSecond / 1024;
/// Initializes an instance of [Bitrate]
2022-02-28 12:26:56 +01:00
//@With<Comparable<Bitrate>>()
const factory Bitrate(
/// Bits per second.
int bitsPerSecond) = _Bitrate;
factory Bitrate.fromJson(Map<String, dynamic> json) =>
_$BitrateFromJson(json);
const Bitrate._();
2020-06-03 13:18:37 +02:00
2021-09-28 16:49:38 +02:00
static const Bitrate unknown = Bitrate(0);
2020-06-03 13:18:37 +02:00
@override
2020-06-05 16:17:08 +02:00
int compareTo(Bitrate other) => bitsPerSecond.compareTo(other.bitsPerSecond);
2020-06-03 13:18:37 +02:00
String _getLargestSymbol() {
if (gigaBitsPerSecond.abs() >= 1) {
return 'Gbit/s';
}
if (megaBitsPerSecond.abs() >= 1) {
return 'Mbit/s';
}
if (kiloBitsPerSecond.abs() >= 1) {
return 'Kbit/s';
}
return 'Bit/s';
}
num _getLargestValue() {
if (gigaBitsPerSecond.abs() >= 1) {
return gigaBitsPerSecond;
}
if (megaBitsPerSecond.abs() >= 1) {
return megaBitsPerSecond;
}
if (kiloBitsPerSecond.abs() >= 1) {
return kiloBitsPerSecond;
}
return bitsPerSecond;
}
@override
String toString() =>
'${_getLargestValue().toStringAsFixed(2)} ${_getLargestSymbol()}';
2020-06-05 16:17:08 +02:00
}