mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 16:05:18 +00:00
72 lines
1.5 KiB
Dart
72 lines
1.5 KiB
Dart
class ContentRangeHeader {
|
|
final int start;
|
|
final int end;
|
|
final int total;
|
|
|
|
ContentRangeHeader(this.start, this.end, this.total);
|
|
|
|
factory ContentRangeHeader.parse(String value) {
|
|
if (value.isEmpty) {
|
|
throw FormatException('Invalid Content-Range header: $value');
|
|
}
|
|
|
|
final parts = value.split(' ');
|
|
if (parts.length != 2) {
|
|
throw FormatException('Invalid Content-Range header: $value');
|
|
}
|
|
|
|
final rangeParts = parts[1].split('/');
|
|
if (rangeParts.length != 2) {
|
|
throw FormatException('Invalid Content-Range header: $value');
|
|
}
|
|
|
|
final range = rangeParts[0].split('-');
|
|
if (range.length != 2) {
|
|
throw FormatException('Invalid Content-Range header: $value');
|
|
}
|
|
|
|
return ContentRangeHeader(
|
|
int.parse(range[0]),
|
|
int.parse(range[1]),
|
|
int.parse(rangeParts[1]),
|
|
);
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
return 'bytes $start-$end/$total';
|
|
}
|
|
}
|
|
|
|
class RangeHeader {
|
|
final int start;
|
|
final int? end;
|
|
|
|
RangeHeader(this.start, this.end);
|
|
|
|
factory RangeHeader.parse(String value) {
|
|
if (value.isEmpty) {
|
|
return RangeHeader(0, null);
|
|
}
|
|
|
|
final parts = value.split('=');
|
|
if (parts.length != 2) {
|
|
throw FormatException('Invalid Range header: $value');
|
|
}
|
|
|
|
final ranges = parts[1].split('-');
|
|
|
|
return RangeHeader(
|
|
int.parse(ranges[0]),
|
|
ranges.elementAtOrNull(1) != null && ranges[1].isNotEmpty
|
|
? int.parse(ranges[1])
|
|
: null,
|
|
);
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
return 'bytes=$start-${end ?? ""}';
|
|
}
|
|
}
|