39 lines
1.2 KiB
Dart
39 lines
1.2 KiB
Dart
enum PaichanContextChange { firstScan, samePaichan, switchedPaichan }
|
|
|
|
class PaichanContextDecision {
|
|
final PaichanContextChange change;
|
|
final int? boxNoToApply;
|
|
|
|
const PaichanContextDecision({required this.change, this.boxNoToApply});
|
|
|
|
bool get isSwitched => change == PaichanContextChange.switchedPaichan;
|
|
}
|
|
|
|
PaichanContextDecision decideMultiCodePaichanContext({
|
|
required String? lastPaichanNo,
|
|
required String? currentPaichanNo,
|
|
required String currentBoxNoText,
|
|
required int maxBoxNo,
|
|
}) {
|
|
final recommendedBoxNo = maxBoxNo + 1;
|
|
if (currentPaichanNo == null || currentPaichanNo.isEmpty) {
|
|
return const PaichanContextDecision(change: PaichanContextChange.firstScan);
|
|
}
|
|
if (lastPaichanNo == null || lastPaichanNo.isEmpty) {
|
|
return PaichanContextDecision(
|
|
change: PaichanContextChange.firstScan,
|
|
boxNoToApply: currentBoxNoText.trim().isEmpty ? recommendedBoxNo : null,
|
|
);
|
|
}
|
|
if (lastPaichanNo == currentPaichanNo) {
|
|
return PaichanContextDecision(
|
|
change: PaichanContextChange.samePaichan,
|
|
boxNoToApply: currentBoxNoText.trim().isEmpty ? recommendedBoxNo : null,
|
|
);
|
|
}
|
|
return PaichanContextDecision(
|
|
change: PaichanContextChange.switchedPaichan,
|
|
boxNoToApply: recommendedBoxNo,
|
|
);
|
|
}
|