diff --git a/lib/ui/home_page.dart b/lib/ui/home_page.dart index 538ffd1..6d29c7a 100644 --- a/lib/ui/home_page.dart +++ b/lib/ui/home_page.dart @@ -21,6 +21,7 @@ import 'package:path/path.dart' as p; import '../app/settings.dart' show MoveTarget; import 'folder_picker.dart'; +import 'network_settings.dart' show DnsFailureLine; import 'player_page.dart'; import 'subtitle_editor_page.dart'; import 'subtitle_search_dialog.dart'; @@ -100,6 +101,8 @@ class HomePage extends StatelessWidget { ), ), const Divider(height: 1), + // 249: DNS 서버에 닿지 않는 동안 작업 기록 위에 (아래 안내를 놓쳐도 MKV 화면에서 보고 바꿀 수 있게) + Padding(padding: const EdgeInsets.symmetric(horizontal: 12), child: DnsFailureLine(c: c)), if (c.settings.showLog) SizedBox( // 화면이 낮은 기기 (휴대폰 가로) 에서 목록 · 자세히 보기를 가리지 않도록 화면 높이에 맞춘다 diff --git a/test/components_test.dart b/test/components_test.dart index bb633a2..473be69 100644 --- a/test/components_test.dart +++ b/test/components_test.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/app/app_controller.dart'; import 'package:jj_mkvmaker/app/components.dart'; +import 'package:jj_mkvmaker/app/net_guard.dart'; import 'package:jj_mkvmaker/app/settings.dart'; import 'package:jj_mkvmaker/platform/windows/desktop_storage_service.dart'; import 'package:jj_mkvmaker/platform/windows/process_media_tool.dart'; @@ -51,6 +52,29 @@ void main() { expect(AppComponent.reorder(['future_screen', 'mkv'], ['mkv', 'explorer']), ['future_screen', 'mkv', 'explorer']); }); + testWidgets('249: DNS 서버에 닿지 않는 동안 MKV 화면의 작업 기록 위에 상태 줄 (기록을 숨겨도)', (tester) async { + tester.view.physicalSize = const Size(1500, 900); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.reset); + final g = NetGuard.instance; + addTearDown(() => g.failure.value = null); + final c = _plain(); + await tester.pumpWidget(MaterialApp( + builder: (context, child) => AppScope(controller: c, child: child!), + home: HomePage(c: c), + )); + expect(find.textContaining('에 닿지 않음'), findsNothing); + g.failure.value = DnsFailure('192.0.2.1', 'x', DateTime(2026, 10, 12, 1, 35)); + await tester.pump(); + expect(find.text('DNS 서버 (192.0.2.1) 에 닿지 않음 (01:35부터)'), findsOneWidget); + await c.updateSettings((s) => s.showLog = !s.showLog); + await tester.pump(); + expect(find.text('DNS 서버 (192.0.2.1) 에 닿지 않음 (01:35부터)'), findsOneWidget); + await tester.tap(find.text('시스템 DNS 로 바꾸기')); + await tester.pump(); + expect(c.settings.dnsMode, 'system'); + }); + testWidgets('위쪽 이동 버튼: 설치한 화면만 · 설정을 바꾸면 바로 · 하나뿐이면 그것만', (tester) async { tester.view.physicalSize = const Size(1500, 900); tester.view.devicePixelRatio = 1;