85 lines
4.0 KiB
Dart
85 lines
4.0 KiB
Dart
import 'dart:io';
|
|
|
|
import 'settings_group.dart';
|
|
|
|
/// 약속 (설정 A): 환경 설정 > 실행 · 종료 · 업데이트 - 자기 키 (이름 · 처음 값 · 읽기 · 쓰기) 를 스스로 갖는다.
|
|
/// 설정 하나를 더할 때는 이 파일만 고친다. 저장 파일의 키 이름은 예전 그대로 (평평한 키)
|
|
class RunSettings implements SettingsGroup {
|
|
/// 최소화하면 작업 표시줄 대신 트레이로
|
|
bool minimizeToTray = true;
|
|
|
|
/// 종료 (창 X · 종료 버튼) 를 눌렀을 때:
|
|
/// 'background' 창만 숨기고 다운로드 · 변환 계속 / 'quit' 묻지 않고 모두 종료 / 'ask' 매번 고르기
|
|
String closeAction = 'background';
|
|
|
|
/// 창 보이기 단축키 (예: Ctrl+Shift+X)
|
|
String showHotkey = 'Ctrl+Shift+X';
|
|
|
|
/// 99 (Windows): 시작 메뉴에 등록 - 알림이 JJ_MKVMaker 로 보이고 눌러서 열린다
|
|
bool startMenuShortcut = true;
|
|
|
|
/// 백그라운드로 실행 (Android): 켜면 ← 로 닫거나 최근 앱에서 밀어도 동기화 · MKV 만들기 · 다운로드를 계속한다 (알림에 표시).
|
|
/// 끄면 지금처럼 닫을 때 끝난다. Windows 는 [closeAction] 'background' 가 같은 뜻 ([backgroundRun]).
|
|
bool inBackground = true;
|
|
|
|
/// 시작할 때 새 버전 확인 (하루 한 번)
|
|
bool autoCheckUpdates = true;
|
|
|
|
String lastUpdateCheck = '';
|
|
|
|
/// [lastUpdateCheck] 를 한 버전 (같은 설정 파일을 쓰는 다른 버전이 확인했으면 다시 확인)
|
|
String lastUpdateCheckVersion = '';
|
|
|
|
/// 마지막으로 이 설정을 쓴 (실행한) 버전. 예전 버전은 이 항목을 몰라 저장하면서 지운다 →
|
|
/// 돌아온 버전이 자기 것이 아니면 보관해 둔 그 버전의 설정을 되살릴지 묻는다 (VersionSnapshot)
|
|
String lastRunVersion = '';
|
|
|
|
/// P0 (Android 되돌리기): 받은 AI 모델을 공용 폴더에 옮겨 두었다가 되살릴지. '' = 남은 공간이 모델의 2배 이상이면 켬 · 'on' · 'off'
|
|
String rollbackKeepModels = '';
|
|
|
|
/// "이 버전 건너뛰기" 한 버전
|
|
String skippedVersion = '';
|
|
|
|
/// 백그라운드로 실행 (설정 화면의 체크 하나). Windows: 창 ✕ 를 누르면 트레이로 (끄면 종료), Android: [inBackground]
|
|
bool get backgroundRun => Platform.isWindows ? closeAction == 'background' : inBackground;
|
|
set backgroundRun(bool v) {
|
|
if (Platform.isWindows) {
|
|
closeAction = v ? 'background' : 'quit';
|
|
} else {
|
|
inBackground = v;
|
|
}
|
|
}
|
|
|
|
@override
|
|
void write(Map<String, Object?> j, {required bool plainSecrets}) {
|
|
j['minimizeToTray'] = minimizeToTray;
|
|
j['closeAction'] = closeAction;
|
|
j['showHotkey'] = showHotkey;
|
|
j['runInBackground'] = inBackground;
|
|
j['startMenuShortcut'] = startMenuShortcut;
|
|
j['autoCheckUpdates'] = autoCheckUpdates;
|
|
j['lastUpdateCheck'] = lastUpdateCheck;
|
|
j['lastUpdateCheckVersion'] = lastUpdateCheckVersion;
|
|
j['lastRunVersion'] = lastRunVersion;
|
|
j['rollbackKeepModels'] = rollbackKeepModels;
|
|
j['skippedVersion'] = skippedVersion;
|
|
j['backgroundV2'] = true;
|
|
}
|
|
|
|
@override
|
|
void read(Map<String, dynamic> j) {
|
|
minimizeToTray = j['minimizeToTray'] as bool? ?? true;
|
|
closeAction = const ['background', 'quit', 'ask'].contains(j['closeAction']) ? j['closeAction'] as String : 'background';
|
|
showHotkey = j['showHotkey'] as String? ?? 'Ctrl+Shift+X';
|
|
startMenuShortcut = j['startMenuShortcut'] != false;
|
|
// 사용자 결정 (10/8): 기본 켜짐. 예전 기본 (꺼짐) 은 한 번 켜짐으로
|
|
inBackground = j['backgroundV2'] == true ? j['runInBackground'] != false : true;
|
|
autoCheckUpdates = j['autoCheckUpdates'] as bool? ?? true;
|
|
lastUpdateCheck = j['lastUpdateCheck'] as String? ?? '';
|
|
lastUpdateCheckVersion = j['lastUpdateCheckVersion'] as String? ?? '';
|
|
lastRunVersion = j['lastRunVersion'] as String? ?? '';
|
|
rollbackKeepModels = const ['on', 'off'].contains(j['rollbackKeepModels']) ? j['rollbackKeepModels'] as String : '';
|
|
skippedVersion = j['skippedVersion'] as String? ?? '';
|
|
}
|
|
}
|