Publish range_header
This commit is contained in:
parent
4603bfcc69
commit
3f55c1df67
6 changed files with 25 additions and 22 deletions
|
@ -1,7 +1,9 @@
|
|||
# range_header
|
||||
# angel3_range_header
|
||||
[![version](https://img.shields.io/badge/pub-v3.0.0-brightgreen)](https://pub.dartlang.org/packages/angel3_range_header)
|
||||
[![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety)
|
||||
[![Gitter](https://img.shields.io/gitter/room/angel_dart/discussion)](https://gitter.im/angel_dart/discussion)
|
||||
|
||||
[![Pub](https://img.shields.io/pub/v/range_header.svg)](https://pub.dartlang.org/packages/range_header)
|
||||
[![build status](https://travis-ci.org/thosakwe/range_header.svg)](https://travis-ci.org/thosakwe/range_header)
|
||||
[![License](https://img.shields.io/github/license/dukefirehawk/angel)](https://github.com/dukefirehawk/angel/tree/angel3/packages/range_header/LICENSE)
|
||||
|
||||
Range header parser for Dart.
|
||||
|
||||
|
@ -10,7 +12,7 @@ In your `pubspec.yaml`:
|
|||
|
||||
```yaml
|
||||
dependencies:
|
||||
range_header: ^2.0.0
|
||||
angel3_range_header: ^3.0.0
|
||||
```
|
||||
|
||||
# Usage
|
||||
|
@ -18,11 +20,11 @@ dependencies:
|
|||
```dart
|
||||
handleRequest(HttpRequest request) async {
|
||||
// Parse the header
|
||||
var header = new RangeHeader.parse(request.headers.value(HttpHeaders.rangeHeader));
|
||||
var header = RangeHeader.parse(request.headers.value(HttpHeaders.rangeHeader));
|
||||
|
||||
// Optimize/canonicalize it
|
||||
var items = RangeHeader.foldItems(header.items);
|
||||
header = new RangeHeader(items);
|
||||
header = RangeHeader(items);
|
||||
|
||||
// Get info
|
||||
header.items;
|
||||
|
@ -30,7 +32,7 @@ handleRequest(HttpRequest request) async {
|
|||
print(header.items[0].toContentRange(fileSize));
|
||||
|
||||
// Serve the file
|
||||
var transformer = new RangeHeaderTransformer(header);
|
||||
var transformer = RangeHeaderTransformer(header);
|
||||
await file.openRead().transform(transformer).pipe(request.response);
|
||||
}
|
||||
```
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
import 'dart:io';
|
||||
import 'package:range_header/range_header.dart';
|
||||
import 'package:angel3_range_header/angel3_range_header.dart';
|
||||
|
||||
var file = new File('some_video.mp4');
|
||||
var file = File('some_video.mp4');
|
||||
|
||||
handleRequest(HttpRequest request) async {
|
||||
// Parse the header
|
||||
var header =
|
||||
new RangeHeader.parse(request.headers.value(HttpHeaders.rangeHeader)!);
|
||||
RangeHeader.parse(request.headers.value(HttpHeaders.rangeHeader)!);
|
||||
|
||||
// Optimize/canonicalize it
|
||||
var items = RangeHeader.foldItems(header.items);
|
||||
header = new RangeHeader(items);
|
||||
header = RangeHeader(items);
|
||||
|
||||
// Get info
|
||||
header.items;
|
||||
|
@ -19,7 +19,7 @@ handleRequest(HttpRequest request) async {
|
|||
|
||||
// Serve the file
|
||||
var transformer =
|
||||
new RangeHeaderTransformer(header, 'video/mp4', await file.length());
|
||||
RangeHeaderTransformer(header, 'video/mp4', await file.length());
|
||||
await file
|
||||
.openRead()
|
||||
.cast<List<int>>()
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'dart:math';
|
||||
import 'package:quiver_hashcode/hashcode.dart';
|
||||
|
||||
import 'package:quiver/core.dart';
|
||||
|
||||
/// Represents an individual range, with an optional start index and optional end index.
|
||||
class RangeHeaderItem implements Comparable<RangeHeaderItem> {
|
||||
|
@ -14,8 +15,8 @@ class RangeHeaderItem implements Comparable<RangeHeaderItem> {
|
|||
/// Joins two items together into the largest possible range.
|
||||
RangeHeaderItem consolidate(RangeHeaderItem other) {
|
||||
if (!(other.overlaps(this)))
|
||||
throw new ArgumentError('The two ranges do not overlap.');
|
||||
return new RangeHeaderItem(min(start, other.start), max(end, other.end));
|
||||
throw ArgumentError('The two ranges do not overlap.');
|
||||
return RangeHeaderItem(min(start, other.start), max(end, other.end));
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -77,7 +78,7 @@ class RangeHeaderItem implements Comparable<RangeHeaderItem> {
|
|||
|
||||
if (end == -1) {
|
||||
if (totalSize == null) {
|
||||
throw new UnsupportedError(
|
||||
throw UnsupportedError(
|
||||
'If the end of this range is unknown, `totalSize` must not be null.');
|
||||
} else {
|
||||
// if (end == totalSize - 1) {
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
name: range_header
|
||||
name: angel3_range_header
|
||||
version: 3.0.0
|
||||
description: Range header parser for Dart. Beyond parsing, a stream transformer is included.
|
||||
homepage: https://github.com/thosakwe/range_header
|
||||
homepage: https://github.com/dukefirehawk/angel/tree/angel3/packages/range_header
|
||||
environment:
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
dependencies:
|
||||
async: ^2.6.0
|
||||
charcode: ^1.2.0
|
||||
quiver_hashcode: ^3.0.0+1
|
||||
quiver: ^3.0.1
|
||||
source_span: ^1.8.1
|
||||
string_scanner: ^1.1.0
|
||||
dev_dependencies:
|
||||
|
@ -16,4 +16,4 @@ dev_dependencies:
|
|||
file: ^6.1.0
|
||||
http_parser: ^4.0.0
|
||||
logging: ^1.0.1
|
||||
test: ^1.17.3
|
||||
test: ^1.17.4
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:test/test.dart';
|
||||
|
||||
import '../lib/range_header.dart';
|
||||
import '../lib/angel3_range_header.dart';
|
||||
import '../lib/src/range_header.dart';
|
||||
|
||||
final Matcher throwsRangeParseException =
|
||||
|
@ -9,7 +9,7 @@ final Matcher throwsRangeParseException =
|
|||
final Matcher throwsInvalidRangeHeaderException =
|
||||
throwsA(const TypeMatcher<InvalidRangeHeaderException>());
|
||||
|
||||
main() {
|
||||
void main() {
|
||||
group('one item', () {
|
||||
test('start and end', () {
|
||||
var r = RangeHeader.parse('bytes 1-200');
|
||||
|
|
Loading…
Reference in a new issue