From cf1ad9eb0e4726635b76b9271c88aa4b6a83dc99 Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Sun, 20 Oct 2024 21:49:53 +0800 Subject: [PATCH] Migrate from kDebugMode to something we can control --- app/lib/account.dart | 10 +++--- app/lib/account.g.dart | 2 +- app/lib/api/api_util.dart | 9 +++--- app/lib/api/api_util.g.dart | 4 +-- app/lib/app_init.dart | 2 +- app/lib/bloc/home_search_suggestion.dart | 3 +- app/lib/bloc/search_suggestion.dart | 3 +- app/lib/debug_util.dart | 11 +++---- .../legacy/app_password_exchange_bloc.dart | 4 +-- .../legacy/app_password_exchange_bloc.g.dart | 2 +- app/lib/suggester.dart | 4 +-- app/lib/widget/dir_picker.dart | 4 +-- .../widget/settings/developer_settings.dart | 4 +-- app/test/debug_util_test.dart | 32 ++++++++++++++----- np_api/lib/src/type.dart | 4 +-- np_api/lib/src/type.g.dart | 2 +- np_api/lib/src/util.dart | 2 +- .../lib/src/database/compat_extension.dart | 2 +- np_db_sqlite/lib/src/database_extension.dart | 1 + np_db_sqlite/pubspec.yaml | 2 ++ np_log/lib/np_log.dart | 1 + np_log/lib/src/dev_mode.dart | 1 + 22 files changed, 66 insertions(+), 43 deletions(-) create mode 100644 np_log/lib/src/dev_mode.dart diff --git a/app/lib/account.dart b/app/lib/account.dart index bbb63c64..ab091af4 100644 --- a/app/lib/account.dart +++ b/app/lib/account.dart @@ -3,11 +3,11 @@ import 'dart:math'; import 'package:clock/clock.dart'; import 'package:copy_with/copy_with.dart'; import 'package:equatable/equatable.dart'; -import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:np_codegen/np_codegen.dart'; import 'package:np_collection/np_collection.dart'; import 'package:np_common/type.dart'; +import 'package:np_log/np_log.dart'; import 'package:np_string/np_string.dart'; import 'package:to_string/to_string.dart'; @@ -82,15 +82,15 @@ class Account with EquatableMixin { final String id; final String scheme; - @Format(r"${kDebugMode ? $? : '***'}") + @Format(r"${isDevMode ? $? : '***'}") final String address; // For non LDAP users, this is the username used to sign in - @Format(r"${kDebugMode ? $? : '***'}") + @Format(r"${isDevMode ? $? : '***'}") final CiString userId; // Username used to sign in. For non-LDAP users, this is identical to userId - @Format(r"${kDebugMode ? $? : '***'}") + @Format(r"${isDevMode ? $? : '***'}") final String username2; - @Format(r"${$?.isNotEmpty ? (kDebugMode ? $? : '***') : null}") + @Format(r"${$?.isNotEmpty ? (isDevMode ? $? : '***') : null}") final String password; @deepCopy diff --git a/app/lib/account.g.dart b/app/lib/account.g.dart index cc8842a0..3fadebb6 100644 --- a/app/lib/account.g.dart +++ b/app/lib/account.g.dart @@ -78,6 +78,6 @@ extension _$AccountUpgraderV1NpLog on AccountUpgraderV1 { extension _$AccountToString on Account { String _$toString() { // ignore: unnecessary_string_interpolations - return "Account {id: $id, scheme: $scheme, address: ${kDebugMode ? address : '***'}, userId: ${kDebugMode ? userId : '***'}, username2: ${kDebugMode ? username2 : '***'}, password: ${password.isNotEmpty ? (kDebugMode ? password : '***') : null}, roots: ${roots.toReadableString()}}"; + return "Account {id: $id, scheme: $scheme, address: ${isDevMode ? address : '***'}, userId: ${isDevMode ? userId : '***'}, username2: ${isDevMode ? username2 : '***'}, password: ${password.isNotEmpty ? (isDevMode ? password : '***') : null}, roots: ${roots.toReadableString()}}"; } } diff --git a/app/lib/api/api_util.dart b/app/lib/api/api_util.dart index e6fcf91f..c3f27b08 100644 --- a/app/lib/api/api_util.dart +++ b/app/lib/api/api_util.dart @@ -2,13 +2,13 @@ import 'dart:convert'; import 'package:clock/clock.dart'; -import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/account.dart'; import 'package:nc_photos/entity/file_descriptor.dart'; import 'package:nc_photos/entity/file_util.dart' as file_util; import 'package:nc_photos/exception.dart'; import 'package:np_api/np_api.dart' hide NcAlbumItem; +import 'package:np_log/np_log.dart'; import 'package:to_string/to_string.dart'; part 'api_util.g.dart'; @@ -46,7 +46,8 @@ String getFilePreviewUrlRelative( // We can't use the generic file preview url because collaborative albums do // not create a file share for photos not belonging to you, that means you // can only access the file view the Photos API - url = "index.php/apps/photos/api/v1/preview/${file.fdId}?x=$width&y=$height"; + url = + "index.php/apps/photos/api/v1/preview/${file.fdId}?x=$width&y=$height"; } else { if (file_util.isTrash(account, file)) { // trashbin does not support preview.png endpoint @@ -225,7 +226,7 @@ class InitiateLoginPollOptions { return clock.now().isBefore(_validUntil); } - @Format(r"${kDebugMode ? $? : '***'}") + @Format(r"${isDevMode ? $? : '***'}") final String token; final Uri endpoint; final DateTime _validUntil; @@ -255,7 +256,7 @@ class AppPasswordSuccess implements AppPasswordResponse { final Uri server; final String loginName; - @Format(r"${kDebugMode ? appPassword : '***'}") + @Format(r"${isDevMode ? appPassword : '***'}") final String appPassword; } diff --git a/app/lib/api/api_util.g.dart b/app/lib/api/api_util.g.dart index 7ddd5669..67648da6 100644 --- a/app/lib/api/api_util.g.dart +++ b/app/lib/api/api_util.g.dart @@ -16,13 +16,13 @@ extension _$InitiateLoginResponseToString on InitiateLoginResponse { extension _$InitiateLoginPollOptionsToString on InitiateLoginPollOptions { String _$toString() { // ignore: unnecessary_string_interpolations - return "InitiateLoginPollOptions {token: ${kDebugMode ? token : '***'}, endpoint: $endpoint, _validUntil: $_validUntil}"; + return "InitiateLoginPollOptions {token: ${isDevMode ? token : '***'}, endpoint: $endpoint, _validUntil: $_validUntil}"; } } extension _$AppPasswordSuccessToString on AppPasswordSuccess { String _$toString() { // ignore: unnecessary_string_interpolations - return "AppPasswordSuccess {server: $server, loginName: $loginName, appPassword: ${kDebugMode ? appPassword : '***'}}"; + return "AppPasswordSuccess {server: $server, loginName: $loginName, appPassword: ${isDevMode ? appPassword : '***'}}"; } } diff --git a/app/lib/app_init.dart b/app/lib/app_init.dart index a533b7e0..9800b935 100644 --- a/app/lib/app_init.dart +++ b/app/lib/app_init.dart @@ -93,7 +93,7 @@ void initLog() { } np_log.initLog( - isDebugMode: kDebugMode, + isDebugMode: np_log.isDevMode, print: (log) => debugPrint(log, wrapWidth: 1024), ); } diff --git a/app/lib/bloc/home_search_suggestion.dart b/app/lib/bloc/home_search_suggestion.dart index 98dc322d..3a48d5e4 100644 --- a/app/lib/bloc/home_search_suggestion.dart +++ b/app/lib/bloc/home_search_suggestion.dart @@ -17,6 +17,7 @@ import 'package:nc_photos/use_case/list_tag.dart'; import 'package:nc_photos/use_case/person/list_person.dart'; import 'package:np_codegen/np_codegen.dart'; import 'package:np_collection/np_collection.dart'; +import 'package:np_log/np_log.dart'; import 'package:np_string/np_string.dart'; import 'package:to_string/to_string.dart'; import 'package:woozy_search/woozy_search.dart'; @@ -162,7 +163,7 @@ class HomeSearchSuggestionBloc emit(HomeSearchSuggestionBlocLoading(state.results)); // doesn't work with upper case final results = _search.search(ev.phrase.toCaseInsensitiveString()); - if (kDebugMode) { + if (isDevMode) { final str = results.map((e) => "${e.score}: ${e.text}").join("\n"); _log.fine("[_onEventSearch] Search '${ev.phrase}':\n$str"); } diff --git a/app/lib/bloc/search_suggestion.dart b/app/lib/bloc/search_suggestion.dart index 57422938..5d2afc81 100644 --- a/app/lib/bloc/search_suggestion.dart +++ b/app/lib/bloc/search_suggestion.dart @@ -4,6 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:logging/logging.dart'; import 'package:np_codegen/np_codegen.dart'; import 'package:np_collection/np_collection.dart'; +import 'package:np_log/np_log.dart'; import 'package:np_string/np_string.dart'; import 'package:to_string/to_string.dart'; import 'package:woozy_search/woozy_search.dart'; @@ -81,7 +82,7 @@ class SearchSuggestionBloc emit(SearchSuggestionBlocLoading(state.results)); // doesn't work with upper case final results = _search.search(ev.phrase.toCaseInsensitiveString()); - if (kDebugMode) { + if (isDevMode) { final str = results.map((e) => "${e.score}: ${e.text}").join("\n"); _log.info("[_onEventSearch] Search '${ev.phrase}':\n$str"); } diff --git a/app/lib/debug_util.dart b/app/lib/debug_util.dart index a9793502..a7c793d1 100644 --- a/app/lib/debug_util.dart +++ b/app/lib/debug_util.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:convert'; -import 'package:flutter/foundation.dart'; import 'package:nc_photos/mobile/platform.dart' if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform; import 'package:np_log/np_log.dart'; @@ -39,8 +38,11 @@ class LogCapturer { static LogCapturer? _inst; } -String logFilename(String? filename) { - if (shouldLogFileName || filename == null) { +String logFilename( + String? filename, { + bool? shouldLogFileName, +}) { + if ((shouldLogFileName ?? isDevMode) || filename == null) { return "$filename"; } try { @@ -55,6 +57,3 @@ String logFilename(String? filename) { return "***"; } } - -@visibleForTesting -bool shouldLogFileName = kDebugMode; diff --git a/app/lib/legacy/app_password_exchange_bloc.dart b/app/lib/legacy/app_password_exchange_bloc.dart index d432219c..c7361ef6 100644 --- a/app/lib/legacy/app_password_exchange_bloc.dart +++ b/app/lib/legacy/app_password_exchange_bloc.dart @@ -1,12 +1,12 @@ import 'dart:io'; -import 'package:flutter/foundation.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/account.dart'; import 'package:nc_photos/exception.dart'; import 'package:nc_photos/np_api_util.dart'; import 'package:np_codegen/np_codegen.dart'; +import 'package:np_log/np_log.dart'; import 'package:to_string/to_string.dart'; part 'app_password_exchange_bloc.g.dart'; @@ -40,7 +40,7 @@ class AppPasswordExchangeBlocSuccess extends AppPasswordExchangeBlocState { @override String toString() => _$toString(); - @Format(r"${kDebugMode ? password : '***'}") + @Format(r"${isDevMode ? password : '***'}") final String password; } diff --git a/app/lib/legacy/app_password_exchange_bloc.g.dart b/app/lib/legacy/app_password_exchange_bloc.g.dart index d93aa030..d0c0e2b6 100644 --- a/app/lib/legacy/app_password_exchange_bloc.g.dart +++ b/app/lib/legacy/app_password_exchange_bloc.g.dart @@ -30,7 +30,7 @@ extension _$AppPasswordExchangeBlocSuccessToString on AppPasswordExchangeBlocSuccess { String _$toString() { // ignore: unnecessary_string_interpolations - return "AppPasswordExchangeBlocSuccess {password: ${kDebugMode ? password : '***'}}"; + return "AppPasswordExchangeBlocSuccess {password: ${isDevMode ? password : '***'}}"; } } diff --git a/app/lib/suggester.dart b/app/lib/suggester.dart index 547bf2aa..34e06029 100644 --- a/app/lib/suggester.dart +++ b/app/lib/suggester.dart @@ -1,8 +1,8 @@ import 'package:collection/collection.dart'; -import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:np_codegen/np_codegen.dart'; import 'package:np_collection/np_collection.dart'; +import 'package:np_log/np_log.dart'; import 'package:np_string/np_string.dart'; import 'package:woozy_search/woozy_search.dart'; @@ -24,7 +24,7 @@ class Suggester { List search(CiString phrase) { final results = _searcher.search(phrase.toCaseInsensitiveString()); - if (kDebugMode) { + if (isDevMode) { final str = results.map((e) => "${e.score}: ${e.text}").join("\n"); _log.info("[search] Search '$phrase':\n$str"); } diff --git a/app/lib/widget/dir_picker.dart b/app/lib/widget/dir_picker.dart index 2cba4016..34931087 100644 --- a/app/lib/widget/dir_picker.dart +++ b/app/lib/widget/dir_picker.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:kiwi/kiwi.dart'; @@ -13,6 +12,7 @@ import 'package:nc_photos/entity/file_util.dart' as file_util; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/snack_bar_manager.dart'; import 'package:np_codegen/np_codegen.dart'; +import 'package:np_log/np_log.dart'; import 'package:np_ui/np_ui.dart'; import 'package:path/path.dart' as path_lib; @@ -226,7 +226,7 @@ class DirPickerState extends State { if (state is LsDirBlocSuccess) { if (!_fillResult(_root, state)) { _log.shout("[_onStateChange] Failed while _fillResult" + - (kDebugMode + (isDevMode ? ", root:\n${_root.toString(isDeep: true)}\nstate: ${state.root.path}" : "")); } diff --git a/app/lib/widget/settings/developer_settings.dart b/app/lib/widget/settings/developer_settings.dart index 4db21ef0..33030d38 100644 --- a/app/lib/widget/settings/developer_settings.dart +++ b/app/lib/widget/settings/developer_settings.dart @@ -1,5 +1,4 @@ import 'package:copy_with/copy_with.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:kiwi/kiwi.dart'; @@ -13,6 +12,7 @@ import 'package:nc_photos/mobile/self_signed_cert_manager.dart'; import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/widget/page_visibility_mixin.dart'; import 'package:np_codegen/np_codegen.dart'; +import 'package:np_log/np_log.dart'; import 'package:np_platform_util/np_platform_util.dart'; import 'package:path_provider/path_provider.dart'; import 'package:to_string/to_string.dart'; @@ -90,7 +90,7 @@ class _WrappedDeveloperSettingsState extends State<_WrappedDeveloperSettings> context.read<_Bloc>().add(const _VacuumDb()); }, ), - if (kDebugMode) ...[ + if (isDevMode) ...[ ListTile( title: const Text("Export SQLite DB"), onTap: () { diff --git a/app/test/debug_util_test.dart b/app/test/debug_util_test.dart index 8b7d431d..009e2835 100644 --- a/app/test/debug_util_test.dart +++ b/app/test/debug_util_test.dart @@ -4,25 +4,41 @@ import 'package:test/test.dart'; void main() { group("debug_util", () { group("logFilename", () { - shouldLogFileName = false; - test("null", () { - expect(logFilename(null), "null"); + expect( + logFilename(null, shouldLogFileName: false), + "null", + ); }); test("path + name + ext", () { - expect(logFilename("path/to/a/fancy_file.ext"), "***/fan***ile.ext"); + expect( + logFilename("path/to/a/fancy_file.ext", shouldLogFileName: false), + "***/fan***ile.ext", + ); }); test("path + short name + ext", () { - expect(logFilename("path/to/a/file01.ext"), "***/file01.ext"); + expect( + logFilename("path/to/a/file01.ext", shouldLogFileName: false), + "***/file01.ext", + ); }); test("path + name", () { - expect(logFilename("path/to/a/fancy_file"), "***/fan***ile"); + expect( + logFilename("path/to/a/fancy_file", shouldLogFileName: false), + "***/fan***ile", + ); }); test("name + ext", () { - expect(logFilename("fancy_file"), "fan***ile"); + expect( + logFilename("fancy_file", shouldLogFileName: false), + "fan***ile", + ); }); test("name", () { - expect(logFilename("fancy_file.ext"), "fan***ile.ext"); + expect( + logFilename("fancy_file.ext", shouldLogFileName: false), + "fan***ile.ext", + ); }); }); }); diff --git a/np_api/lib/src/type.dart b/np_api/lib/src/type.dart index 2d621bc4..ed34e85c 100644 --- a/np_api/lib/src/type.dart +++ b/np_api/lib/src/type.dart @@ -1,7 +1,7 @@ import 'dart:convert'; -import 'package:flutter/foundation.dart'; import 'package:np_api/src/util.dart'; +import 'package:np_log/np_log.dart'; import 'package:np_string/np_string.dart'; import 'package:to_string/to_string.dart'; @@ -23,7 +23,7 @@ class Response { /// Content of the response body, String if isResponseString == true during /// request, Uint8List otherwise @Format( - r"${kDebugMode ? $?.toString().replaceAll(RegExp(r'\n\t'), '').slice(0, 200) : '...'}") + r"${isDevMode ? $?.toString().replaceAll(RegExp(r'\n\t'), '').slice(0, 200) : '...'}") final dynamic body; } diff --git a/np_api/lib/src/type.g.dart b/np_api/lib/src/type.g.dart index 88362717..be8e3c45 100644 --- a/np_api/lib/src/type.g.dart +++ b/np_api/lib/src/type.g.dart @@ -9,7 +9,7 @@ part of 'type.dart'; extension _$ResponseToString on Response { String _$toString() { // ignore: unnecessary_string_interpolations - return "Response {statusCode: $statusCode, headers: ..., body: ${kDebugMode ? body.toString().replaceAll(RegExp(r'\n\t'), '').slice(0, 200) : '...'}}"; + return "Response {statusCode: $statusCode, headers: ..., body: ${isDevMode ? body.toString().replaceAll(RegExp(r'\n\t'), '').slice(0, 200) : '...'}}"; } } diff --git a/np_api/lib/src/util.dart b/np_api/lib/src/util.dart index f048f008..34e56653 100644 --- a/np_api/lib/src/util.dart +++ b/np_api/lib/src/util.dart @@ -5,7 +5,7 @@ bool isHttpStatusGood(int status) => status ~/ 100 == 2; void initLog() { np_log.initLog( - isDebugMode: kDebugMode, + isDebugMode: np_log.isDevMode, print: (log) => debugPrint(log, wrapWidth: 1024), ); } diff --git a/np_db_sqlite/lib/src/database/compat_extension.dart b/np_db_sqlite/lib/src/database/compat_extension.dart index 09f60cdc..d3e96db6 100644 --- a/np_db_sqlite/lib/src/database/compat_extension.dart +++ b/np_db_sqlite/lib/src/database/compat_extension.dart @@ -57,7 +57,7 @@ extension SqliteDbCompatExtension on SqliteDb { _log.info( "[migrateV55] ${dateTimeUpdates.length} rows require updating, ${imageRemoves.length} rows require removing"); - if (kDebugMode) { + if (isDevMode) { _log.fine( "[migrateV55] dateTimeUpdates: ${dateTimeUpdates.map((e) => e.rowId).toReadableString()}"); _log.fine( diff --git a/np_db_sqlite/lib/src/database_extension.dart b/np_db_sqlite/lib/src/database_extension.dart index f90a147b..d39ab679 100644 --- a/np_db_sqlite/lib/src/database_extension.dart +++ b/np_db_sqlite/lib/src/database_extension.dart @@ -20,6 +20,7 @@ import 'package:np_db_sqlite/src/k.dart' as k; import 'package:np_db_sqlite/src/table.dart'; import 'package:np_db_sqlite/src/util.dart'; import 'package:np_geocoder/np_geocoder.dart'; +import 'package:np_log/np_log.dart'; import 'package:np_platform_lock/np_platform_lock.dart'; import 'package:np_platform_util/np_platform_util.dart'; diff --git a/np_db_sqlite/pubspec.yaml b/np_db_sqlite/pubspec.yaml index f4988cc1..d5f69408 100644 --- a/np_db_sqlite/pubspec.yaml +++ b/np_db_sqlite/pubspec.yaml @@ -35,6 +35,8 @@ dependencies: path: ../np_db np_geocoder: path: ../np_geocoder + np_log: + path: ../np_log np_platform_lock: path: ../np_platform_lock np_platform_util: diff --git a/np_log/lib/np_log.dart b/np_log/lib/np_log.dart index 8420de49..bb8b4e9c 100644 --- a/np_log/lib/np_log.dart +++ b/np_log/lib/np_log.dart @@ -1,3 +1,4 @@ library np_log; +export 'src/dev_mode.dart'; export 'src/log.dart'; diff --git a/np_log/lib/src/dev_mode.dart b/np_log/lib/src/dev_mode.dart new file mode 100644 index 00000000..790090d7 --- /dev/null +++ b/np_log/lib/src/dev_mode.dart @@ -0,0 +1 @@ +const isDevMode = false;