refa: download video (#1737)

* opt: save pb danmaku

* refa: download video

* opt: replaceAll

* fix: wait delete

* opt: remove completer

* fix: index.json

* tweaks

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

---------

Co-authored-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
My-Responsitories
2025-11-12 19:12:17 +08:00
committed by GitHub
parent 37b1228552
commit 407b31c5c1
16 changed files with 345 additions and 410 deletions

View File

@@ -6,7 +6,6 @@ import 'package:get/get.dart';
class DownloadPageController extends GetxController {
final _downloadService = Get.find<DownloadService>();
late final StreamSubscription _sub;
final pages = RxList<DownloadPageInfo>();
final flag = RxInt(0);
@@ -14,14 +13,12 @@ class DownloadPageController extends GetxController {
void onInit() {
super.onInit();
_loadList();
_sub = _downloadService.downloaFlag.listen((_) {
_loadList();
});
_downloadService.flagNotifier.add(_loadList);
}
@override
void onClose() {
_sub.cancel();
_downloadService.flagNotifier.remove(_loadList);
super.onClose();
}

View File

@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/dialog/dialog.dart';
@@ -10,12 +12,15 @@ import 'package:PiliPlus/models_new/download/bili_download_entry_info.dart';
import 'package:PiliPlus/services/download/download_service.dart';
import 'package:PiliPlus/utils/cache_manager.dart';
import 'package:PiliPlus/utils/duration_utils.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/path_utils.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:path/path.dart' as path;
class DetailItem extends StatelessWidget {
const DetailItem({
@@ -141,11 +146,35 @@ class DetailItem extends StatelessWidget {
AspectRatio(
aspectRatio: StyleString.aspectRatio,
child: LayoutBuilder(
builder: (context, constraints) => NetworkImgLayer(
src: entry.cover,
width: constraints.maxWidth,
height: constraints.maxHeight,
),
builder: (context, constraints) {
final cover = File(
path.join(entry.entryDirPath, PathUtils.coverName),
);
return cover.existsSync()
? ClipRRect(
borderRadius: StyleString.mdRadius,
child: Image.file(
cover,
width: constraints.maxWidth,
height: constraints.maxHeight,
fit: BoxFit.cover,
cacheHeight: constraints.maxWidth.cacheSize(
context,
),
colorBlendMode: NetworkImgLayer.reduce
? BlendMode.modulate
: null,
color: NetworkImgLayer.reduce
? NetworkImgLayer.reduceLuxColor
: null,
),
)
: NetworkImgLayer(
src: entry.cover,
width: constraints.maxWidth,
height: constraints.maxHeight,
);
},
),
),
if (entry.videoQuality case final videoQuality?)