JJ_MKVMaker/lib/app/settings/reader_settings.dart

69 lines
3.3 KiB
Dart

import '../../core/reader_sources.dart' show defaultImageExtensions;
import 'settings_group.dart';
/// 약속 (설정 A): 환경 설정 > 보기 화면 (그림 · 만화 · PDF · 문서) - 자기 키 (이름 · 처음 값 · 읽기 · 쓰기) 를 스스로 갖는다.
/// 설정 하나를 더할 때는 이 파일만 고친다. 저장 파일의 키 이름은 예전 그대로 (평평한 키)
class ReaderSettings implements SettingsGroup {
/// 보기: 'page' 한 쪽 맞추기 · 'width' 좌우 맞추기 (세로로 밀어 봄)
String fit = 'page';
/// 보기: 오른쪽에서 왼쪽으로 넘김 (일본 만화)
bool rtl = false;
/// 보기: 밝기 (-0.7 어둡게 ~ 0.7 밝게)
double brightness = 0;
/// 30 · 101: 보기 화면에서 위 · 아래 시스템 막대 (시계 · 알림 · 뒤로) 를 그대로 보이기 (기본: 보임 - 기기의 평소 동작, 화면 가득은 버튼 · 설정으로)
bool systemBars = true;
/// 117: 보기 화면 "계속 보기" 간격 (초, 1 ~ 60)
int autoSeconds = 3;
/// X-plore 맞추기 (관리자 지시 10/20): 그림 보기 화면 아래 갤러리 줄 (썸네일, 누르면 그 장으로). 처음 끔
bool gallery = false;
/// X-plore 맞추기 (관리자 지시 10/20): 보기 화면에서 볼륨 키로 넘기기 (아래 = 다음 장, 위 = 이전 장, Android). 처음 끔.
/// 보기 화면에서만 가로챈다 (동영상 · 다른 화면의 볼륨은 그대로)
bool volumeKeys = false;
/// 119: 한 장에 두 쪽이 붙은 그림을 반씩 나눠 보기 - 'auto' 가로가 세로보다 긴 그림만 · 'on' 늘 · 'off' 안 함
String split = 'auto';
/// ZIP · CBZ 를 두 번 누르면 안의 그림을 만화처럼 보기 (끄면 목록). 기본은 목록 (사용자 지시)
bool zipComic = false;
/// 그림 보기 (만화 보기) 대상 확장자 (파일 탐색기에서 두 번 누르면 보기로 연다)
List<String> imageExts = [...defaultImageExtensions];
@override
void write(Map<String, Object?> j, {required bool plainSecrets}) {
j['readerFit'] = fit;
j['readerRtl'] = rtl;
j['readerBrightness'] = brightness;
j['readerSystemBars'] = systemBars;
j['readerAutoSeconds'] = autoSeconds;
j['readerGallery'] = gallery;
j['readerVolumeKeys'] = volumeKeys;
j['readerSplit'] = split;
j['zipComic'] = zipComic;
j['imageExts'] = imageExts;
// 예전 기본값 (만화 보기 켜짐) 은 지시와 반대였으므로 한 번 꺼진 상태 (목록) 로
j['zipComicV2'] = true;
}
@override
void read(Map<String, dynamic> j) {
fit = j['readerFit'] == 'width' ? 'width' : 'page';
rtl = j['readerRtl'] as bool? ?? false;
brightness = ((j['readerBrightness'] as num?)?.toDouble() ?? 0).clamp(-0.7, 0.7);
systemBars = j['readerSystemBars'] != false;
autoSeconds = ((j['readerAutoSeconds'] as num?)?.toInt() ?? 3).clamp(1, 60);
gallery = j['readerGallery'] as bool? ?? false;
volumeKeys = j['readerVolumeKeys'] as bool? ?? false;
split = const ['auto', 'on', 'off'].contains(j['readerSplit']) ? j['readerSplit'] as String : 'auto';
zipComic = j['zipComic'] == true && j['zipComicV2'] == true;
imageExts = j['imageExts'] is List ? [for (final x in j['imageExts'] as List) '$x'.toLowerCase()] : [...defaultImageExtensions];
}
}