opt: segment (#1831)

* opt: segment

* revert: block config
This commit is contained in:
My-Responsitories
2026-02-10 16:13:38 +08:00
committed by GitHub
parent 0460030a2b
commit ed2bd069ee
6 changed files with 134 additions and 93 deletions

View File

@@ -1,19 +1,54 @@
// ignore_for_file: non_constant_identifier_names
import 'package:PiliPlus/common/widgets/pair.dart';
import 'package:PiliPlus/models/common/sponsor_block/segment_type.dart';
import 'package:PiliPlus/models/common/sponsor_block/skip_type.dart';
import 'package:PiliPlus/models_new/sponsor_block/segment_item.dart';
import 'package:PiliPlus/pages/sponsor_block/block_mixin.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
class SegmentModel {
class SegmentModel implements Comparable<SegmentModel> {
SegmentModel({
required this.UUID,
required this.uuid,
required this.segmentType,
required this.segment,
required this.skipType,
});
String UUID;
SegmentType segmentType;
Pair<int, int> segment;
SkipType skipType;
late bool hasSkipped = false;
final String uuid;
final SegmentType segmentType;
final (int, int) segment;
final SkipType skipType;
bool hasSkipped = false;
factory SegmentModel.fromItemModel(
SegmentItemModel model,
BlockConfigMixin? config,
) {
final segmentType = SegmentType.values.byName(model.category);
final segment = (model.segment[0], model.segment[1]);
SkipType skipType;
if (config != null) {
skipType = config.blockSettings[segmentType.index].second;
if (skipType != SkipType.showOnly) {
if (segment.isEq || segment.length < config.blockLimit) {
skipType = SkipType.showOnly;
}
}
} else {
skipType = Pref.pgcSkipType;
}
return SegmentModel(
uuid: model.uuid,
segmentType: segmentType,
segment: segment,
skipType: skipType,
);
}
@override
int compareTo(SegmentModel other) => segment.$1.compareTo(other.segment.$1);
}
extension IntRecordExt on (int, int) {
bool get isEq => $1 == $2;
int get length => $2 - $1;
bool contains(num other) => $1 <= other && other < $2;
}