From aafd0392056db6cd2b2662300bd17bdc45c753e9 Mon Sep 17 00:00:00 2001 From: Levi Date: Sun, 6 Sep 2026 13:00:06 +0800 Subject: [PATCH] fix(flutter): create log directory recursively (#1478) --- ui/flutter/lib/util/log_util.dart | 9 ++++---- ui/flutter/test/log_util_test.dart | 35 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 ui/flutter/test/log_util_test.dart diff --git a/ui/flutter/lib/util/log_util.dart b/ui/flutter/lib/util/log_util.dart index cf5799e8..77ecf63a 100644 --- a/ui/flutter/lib/util/log_util.dart +++ b/ui/flutter/lib/util/log_util.dart @@ -19,14 +19,15 @@ String logsDir() { return path.join(Util.getStorageDir(), 'logs'); } +Directory ensureLogDirectory(String logDirPath) { + return Directory(logDirPath)..createSync(recursive: true); +} + LogOutput? _buildOutput() { // if is debug mode, don't log to file if (!kDebugMode && Util.isDesktop()) { final logDirPath = logsDir(); - var logDir = Directory(logsDir()); - if (!logDir.existsSync()) { - logDir.createSync(); - } + ensureLogDirectory(logDirPath); return FileOutput(file: File('$logDirPath/client.log')); } return null; diff --git a/ui/flutter/test/log_util_test.dart b/ui/flutter/test/log_util_test.dart new file mode 100644 index 00000000..dcd76073 --- /dev/null +++ b/ui/flutter/test/log_util_test.dart @@ -0,0 +1,35 @@ +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:gopeed/util/log_util.dart'; +import 'package:path/path.dart' as path; + +void main() { + late Directory temporaryDirectory; + + setUp(() async { + temporaryDirectory = await Directory.systemTemp.createTemp('gopeed-log-util-'); + }); + + tearDown(() async { + await temporaryDirectory.delete(recursive: true); + }); + + test('creates the log directory when its parents do not exist', () { + final logDirPath = path.join(temporaryDirectory.path, 'storage', 'logs'); + + final logDirectory = ensureLogDirectory(logDirPath); + + expect(logDirectory.path, logDirPath); + expect(logDirectory.existsSync(), isTrue); + }); + + test('allows the log directory to be initialized repeatedly', () { + final logDirPath = path.join(temporaryDirectory.path, 'storage', 'logs'); + + ensureLogDirectory(logDirPath); + final logDirectory = ensureLogDirectory(logDirPath); + + expect(logDirectory.existsSync(), isTrue); + }); +}