logo和名称替换
This commit is contained in:
@@ -4,10 +4,10 @@ import 'dart:io';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||
import 'package:hgmj/extension/extensions.dart';
|
||||
import 'package:hgmj/hj_utils/text_util.dart';
|
||||
import 'package:hgmj/hj_utils/video_cache_manager.dart';
|
||||
import 'package:hgmj/tools_base/toast.dart';
|
||||
import 'package:wydj/extension/extensions.dart';
|
||||
import 'package:wydj/hj_utils/text_util.dart';
|
||||
import 'package:wydj/hj_utils/video_cache_manager.dart';
|
||||
import 'package:wydj/tools_base/toast.dart';
|
||||
|
||||
import '../tools_base/cache/cancel_token_manager.dart';
|
||||
import '../tools_base/net/load_apk/dio_cli.dart';
|
||||
@@ -61,7 +61,8 @@ class ReqFilter {
|
||||
final int? port; // null or 12345
|
||||
final String pathPrefix; //m3u8 是api/app/vid/m3u8
|
||||
final HeadersBuilder? headersBuilder;
|
||||
ReqFilter(this.reg, this.schema, this.host, {this.port, this.pathPrefix = "", this.headersBuilder})
|
||||
ReqFilter(this.reg, this.schema, this.host,
|
||||
{this.port, this.pathPrefix = "", this.headersBuilder})
|
||||
: assert(TextUtil.isNotEmpty(reg)),
|
||||
assert(TextUtil.isNotEmpty(host));
|
||||
|
||||
@@ -192,7 +193,8 @@ class CacheServer {
|
||||
await stop(true);
|
||||
_server = await _bindAlways();
|
||||
csPrint("_startInner()...begin listen:$serverPort");
|
||||
_server?.listen(_onRequest, onDone: _onServerDone, onError: _onServerError, cancelOnError: true);
|
||||
_server?.listen(_onRequest,
|
||||
onDone: _onServerDone, onError: _onServerError, cancelOnError: true);
|
||||
|
||||
csPrint("_bind success, start listen address:$localServerUri");
|
||||
_startCompleter?.complete();
|
||||
@@ -230,7 +232,8 @@ class CacheServer {
|
||||
/// 请求转发过滤器
|
||||
/// 根据文件后缀转发
|
||||
/// [reg] 正则表达式fileExtension需要带上. ".m3u8" ".ts"
|
||||
void addReqFilter(String reg, String forwardUrl, {bool force = false, String pathPrefix = "", HeadersBuilder? hb}) {
|
||||
void addReqFilter(String reg, String forwardUrl,
|
||||
{bool force = false, String pathPrefix = "", HeadersBuilder? hb}) {
|
||||
assert(reg.startsWith("."));
|
||||
if (TextUtil.isEmpty(forwardUrl)) {
|
||||
showToast("CDN地址为空");
|
||||
@@ -241,7 +244,8 @@ class CacheServer {
|
||||
return;
|
||||
}
|
||||
// 转发结构体
|
||||
final reqFilter = ReqFilter(reg, uri.scheme, uri.host, port: uri.port, pathPrefix: pathPrefix, headersBuilder: hb);
|
||||
final reqFilter = ReqFilter(reg, uri.scheme, uri.host,
|
||||
port: uri.port, pathPrefix: pathPrefix, headersBuilder: hb);
|
||||
if (force) {
|
||||
// 不同的转发域,对应的转发函数
|
||||
_reqFilterMap[reg] = reqFilter;
|
||||
@@ -251,7 +255,8 @@ class CacheServer {
|
||||
}
|
||||
|
||||
/// 添加外部系统拦截调用,对于localserver一般是ttl
|
||||
void addCustomResponse(String path, CustomResponse response, {bool force = false}) {
|
||||
void addCustomResponse(String path, CustomResponse response,
|
||||
{bool force = false}) {
|
||||
if (force) {
|
||||
_customResponse[path] = response;
|
||||
} else {
|
||||
@@ -260,7 +265,8 @@ class CacheServer {
|
||||
}
|
||||
|
||||
/// 获取localserver的信息
|
||||
Uri get localServerUri => Uri(scheme: "http", host: _server?.address.host, port: _server?.port);
|
||||
Uri get localServerUri =>
|
||||
Uri(scheme: "http", host: _server?.address.host, port: _server?.port);
|
||||
|
||||
/// localserver的请求拦截
|
||||
void _onRequest(HttpRequest request) {
|
||||
@@ -331,7 +337,8 @@ class CacheServer {
|
||||
|
||||
// 根据文件扩展名字获取请求过滤
|
||||
final fileExtension = localReq.uri.path.substring(dot);
|
||||
var reqFilter = _reqFilterMap[fileExtension] ?? _reqFilterMap[LOCAL_ALL_FILTER];
|
||||
var reqFilter =
|
||||
_reqFilterMap[fileExtension] ?? _reqFilterMap[LOCAL_ALL_FILTER];
|
||||
if (reqFilter == null) {
|
||||
//l.e(local_server_tag, "_handleGet path not find ${localReq.uri} reqFilter:$fileExtension");
|
||||
localReq.response.statusCode = HttpStatus.badRequest;
|
||||
@@ -353,7 +360,8 @@ class CacheServer {
|
||||
scheme: reqFilter.schema,
|
||||
host: reqFilter.host,
|
||||
port: reqFilter.port,
|
||||
queryParameters: fileExtension == LOCAL_TS_FILTER ? {} : queryParameters);
|
||||
queryParameters:
|
||||
fileExtension == LOCAL_TS_FILTER ? {} : queryParameters);
|
||||
var remoteUriStr = remoteUri.toString();
|
||||
if (remoteUriStr.endsWith("?")) {
|
||||
remoteUri = Uri.parse(remoteUriStr.replaceAll("?", ""));
|
||||
@@ -471,7 +479,9 @@ class CacheServer {
|
||||
|
||||
var cacheManager = _getCacheManager(remoteUri.toString());
|
||||
var s = cacheManager
|
||||
.getFileStream(remoteUri.toString(), headers: localReqHeaders, withProgress: fileExtension != LOCAL_M3U8_FILTER)
|
||||
.getFileStream(remoteUri.toString(),
|
||||
headers: localReqHeaders,
|
||||
withProgress: fileExtension != LOCAL_M3U8_FILTER)
|
||||
.handleError(
|
||||
(e) {
|
||||
if (!isPreCache) {
|
||||
@@ -479,7 +489,9 @@ class CacheServer {
|
||||
}
|
||||
// TODO 是否需要处理
|
||||
//l.e(local_server_tag, "getFileStream()...开始处理远端请求$remoteUri 错误");
|
||||
if (TextUtil.isNotEmpty(cacheKey) && cacheKey.contains(LOCAL_M3U8_FILTER) && !failedM3u8List.contains(cacheKey)) {
|
||||
if (TextUtil.isNotEmpty(cacheKey) &&
|
||||
cacheKey.contains(LOCAL_M3U8_FILTER) &&
|
||||
!failedM3u8List.contains(cacheKey)) {
|
||||
//l.e(local_server_tag, "getFileStream()...添加到失败错误列表$cacheKey");
|
||||
failedM3u8List.add(cacheKey);
|
||||
}
|
||||
@@ -513,10 +525,12 @@ class CacheServer {
|
||||
}
|
||||
|
||||
/// 处理M3u8
|
||||
_handleM3u8(Uri remoteUri, HttpRequest localReq, Stream<FileResponse> s, BaseCacheManager cacheManager) async {
|
||||
_handleM3u8(Uri remoteUri, HttpRequest localReq, Stream<FileResponse> s,
|
||||
BaseCacheManager cacheManager) async {
|
||||
final sc = s.listen((f) {
|
||||
if (f is FileInfo) {
|
||||
var len = localReq.response.headers.value(HttpHeaders.contentLengthHeader);
|
||||
var len =
|
||||
localReq.response.headers.value(HttpHeaders.contentLengthHeader);
|
||||
if (null != len) {
|
||||
// 避���文件30天过期之后重新请求再次发送
|
||||
//l.e(local_server_tag, "handleM3u8()...$remoteUri already send resp to user now skip");
|
||||
@@ -548,11 +562,14 @@ class CacheServer {
|
||||
// .add(HttpHeaders.contentLengthHeader, afterSize);
|
||||
// localReq.response.headers
|
||||
// .add(HttpHeaders.contentTypeHeader, "application/octet-stream");
|
||||
localReq.response.headers.add(HttpHeaders.contentLengthHeader, afterSize);
|
||||
localReq.response.headers.add(HttpHeaders.contentTypeHeader, "application/octet-stream");
|
||||
localReq.response.headers
|
||||
.add(HttpHeaders.contentLengthHeader, afterSize);
|
||||
localReq.response.headers
|
||||
.add(HttpHeaders.contentTypeHeader, "application/octet-stream");
|
||||
// localReq.response.contentLength = source.length;
|
||||
localReq.response.add(source.codeUnits);
|
||||
csPrint("handleM3u8()...本地请求$remoteUri 完成:sourceSize:$sourceSize afterSize:$afterSize");
|
||||
csPrint(
|
||||
"handleM3u8()...本地请求$remoteUri 完成:sourceSize:$sourceSize afterSize:$afterSize");
|
||||
localReq.response.close();
|
||||
} else {
|
||||
//l.e(local_server_tag, "handleM3u8()...本地请求$remoteUri 完成但是���件不存在");
|
||||
@@ -681,7 +698,11 @@ class CacheServer {
|
||||
} else {
|
||||
//这里替换local127.0.0.1
|
||||
var localUrl = remoteUri
|
||||
.replace(scheme: localServerUri.scheme, host: localServerUri.host, port: localServerUri.port, queryParameters: query)
|
||||
.replace(
|
||||
scheme: localServerUri.scheme,
|
||||
host: localServerUri.host,
|
||||
port: localServerUri.port,
|
||||
queryParameters: query)
|
||||
.toString();
|
||||
return localUrl;
|
||||
}
|
||||
@@ -707,7 +728,8 @@ class CacheServer {
|
||||
}
|
||||
var uri = Uri.parse(remotePath);
|
||||
//这里替换远程
|
||||
final remoteUri = uri.replace(scheme: reqFilter.schema, host: reqFilter.host, port: reqFilter.port);
|
||||
final remoteUri = uri.replace(
|
||||
scheme: reqFilter.schema, host: reqFilter.host, port: reqFilter.port);
|
||||
return remoteUri.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user