logo和名称替换

This commit is contained in:
谢宇宁
2026-10-14 11:23:36 +07:00
parent 1cb514cd02
commit c5c04a7967
478 changed files with 8990 additions and 4948 deletions
+43 -21
View File
@@ -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();
}
}