diff --git a/_docs/img/ui-concept-en.png b/_docs/img/ui-concept-en.png index 9035d95a..a668d7ca 100644 Binary files a/_docs/img/ui-concept-en.png and b/_docs/img/ui-concept-en.png differ diff --git a/_docs/img/ui-concept-zh-CN.png b/_docs/img/ui-concept-zh-CN.png index 2013da41..78c2377d 100644 Binary files a/_docs/img/ui-concept-zh-CN.png and b/_docs/img/ui-concept-zh-CN.png differ 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); + }); +}