From 77dfa780fe8e65ab19fe5843be182a78fdec205d Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Wed, 2 Apr 2025 16:09:48 +0200 Subject: [PATCH 01/20] Make app internet observer optional --- boxes/connection_observer/script.sh | 36 +++++++++++++++++++ boxes/connection_observer/src/export.dart | 1 + .../app_internet_observing_strategy.dart | 0 .../src/files}/app_network_service.dart | 0 core/lib/src/services/services.dart | 2 +- core/pubspec.yaml | 1 - 6 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 boxes/connection_observer/script.sh create mode 100644 boxes/connection_observer/src/export.dart rename {core/lib/src/services => boxes/connection_observer/src/files}/app_internet_observing_strategy.dart (100%) rename {core/lib/src/services => boxes/connection_observer/src/files}/app_network_service.dart (100%) diff --git a/boxes/connection_observer/script.sh b/boxes/connection_observer/script.sh new file mode 100644 index 0000000..0e1e54c --- /dev/null +++ b/boxes/connection_observer/script.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +if [ -z "$1" ]; then + echo "Error: Specify path to a project root" + exit 1 +fi + +projectPath="$1" + +if [ ! -f "$projectPath/pubspec.yaml" ]; then + echo "Error: pubspec.yaml not found in project root!" + exit 1 +fi + +sourceDir="src/files" +destinationPath="$projectPath/core/lib/src/services" + +if [ ! -d "$sourceDir" ]; then + echo "Error: Source directory '$sourceDir' not found!" + exit 1 +fi + +mkdir -p "$destinationPath" +cp -r "$sourceDir"/* "$destinationPath" && echo "Files copied to $destinationPath" + +exportFileSource="src/export.dart" +exportFileDestination="$destinationPath/services.dart" + +if [ -f "$exportFileSource" ]; then + cat "$exportFileSource" >> "$exportFileDestination" + dart format "$exportFileDestination" > /dev/null 2>&1 + echo "Added exports to $exportFileDestination" +fi + +cd "$projectPath/core" +dart pub add observe_internet_connectivity diff --git a/boxes/connection_observer/src/export.dart b/boxes/connection_observer/src/export.dart new file mode 100644 index 0000000..608e721 --- /dev/null +++ b/boxes/connection_observer/src/export.dart @@ -0,0 +1 @@ +export 'app_network_service.dart'; diff --git a/core/lib/src/services/app_internet_observing_strategy.dart b/boxes/connection_observer/src/files/app_internet_observing_strategy.dart similarity index 100% rename from core/lib/src/services/app_internet_observing_strategy.dart rename to boxes/connection_observer/src/files/app_internet_observing_strategy.dart diff --git a/core/lib/src/services/app_network_service.dart b/boxes/connection_observer/src/files/app_network_service.dart similarity index 100% rename from core/lib/src/services/app_network_service.dart rename to boxes/connection_observer/src/files/app_network_service.dart diff --git a/core/lib/src/services/services.dart b/core/lib/src/services/services.dart index 608e721..8b13789 100644 --- a/core/lib/src/services/services.dart +++ b/core/lib/src/services/services.dart @@ -1 +1 @@ -export 'app_network_service.dart'; + diff --git a/core/pubspec.yaml b/core/pubspec.yaml index 12cd159..c42be51 100644 --- a/core/pubspec.yaml +++ b/core/pubspec.yaml @@ -15,7 +15,6 @@ dependencies: dio: ^5.4.0 logger: ^2.0.2 flutter_bloc: ^8.1.4 - observe_internet_connectivity: ^1.0.2 http: ^1.2.1 easy_localization: ^3.0.7 From 34ce5564468a014a26ac7eb41eddd4ecec2dde2a Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Wed, 2 Apr 2025 16:55:03 +0200 Subject: [PATCH 02/20] Add test output --- boxes/connection_observer/script.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boxes/connection_observer/script.sh b/boxes/connection_observer/script.sh index 0e1e54c..74c00d7 100644 --- a/boxes/connection_observer/script.sh +++ b/boxes/connection_observer/script.sh @@ -1,5 +1,7 @@ #!/bin/bash +echo "TEST" + if [ -z "$1" ]; then echo "Error: Specify path to a project root" exit 1 From 1eff3b48cb806522e351a66c8e0e4875541e98f4 Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Wed, 2 Apr 2025 16:56:36 +0200 Subject: [PATCH 03/20] Make script file executable --- boxes/connection_observer/script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 boxes/connection_observer/script.sh diff --git a/boxes/connection_observer/script.sh b/boxes/connection_observer/script.sh old mode 100644 new mode 100755 index 74c00d7..0aa8b22 --- a/boxes/connection_observer/script.sh +++ b/boxes/connection_observer/script.sh @@ -1,6 +1,6 @@ #!/bin/bash -echo "TEST" +echo "TEST 2" if [ -z "$1" ]; then echo "Error: Specify path to a project root" From e54c5211064e1c16b22fbfec1ceac9aaad6cbfbd Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Wed, 2 Apr 2025 17:08:30 +0200 Subject: [PATCH 04/20] Remove debug output --- boxes/connection_observer/script.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/boxes/connection_observer/script.sh b/boxes/connection_observer/script.sh index 0aa8b22..0e1e54c 100755 --- a/boxes/connection_observer/script.sh +++ b/boxes/connection_observer/script.sh @@ -1,7 +1,5 @@ #!/bin/bash -echo "TEST 2" - if [ -z "$1" ]; then echo "Error: Specify path to a project root" exit 1 From bc81de8cdb77291bc645428315b46aeff8866dae Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Thu, 3 Apr 2025 12:24:37 +0200 Subject: [PATCH 05/20] Make ApiProvider optional --- boxes/api_provider/files/export.dart | 3 ++ .../files/src}/http/api_provider.dart | 0 .../files/src}/http/request/api_request.dart | 0 .../http/request/api_request_options.dart | 0 .../files/src}/http/request/http_method.dart | 0 boxes/api_provider/script.sh | 46 +++++++++++++++++ boxes/connection_observer/files/export.dart | 1 + .../src}/app_internet_observing_strategy.dart | 0 .../src}/app_network_service.dart | 0 boxes/connection_observer/script.sh | 4 +- boxes/connection_observer/src/export.dart | 1 - boxes/shared_scripts/append_di.sh | 49 +++++++++++++++++++ data/lib/src/di/data_di.dart | 8 --- data/lib/src/providers/shared/shared.dart | 3 -- 14 files changed, 101 insertions(+), 14 deletions(-) create mode 100644 boxes/api_provider/files/export.dart rename {data/lib/src/providers/shared/remote => boxes/api_provider/files/src}/http/api_provider.dart (100%) rename {data/lib/src/providers/shared/remote => boxes/api_provider/files/src}/http/request/api_request.dart (100%) rename {data/lib/src/providers/shared/remote => boxes/api_provider/files/src}/http/request/api_request_options.dart (100%) rename {data/lib/src/providers/shared/remote => boxes/api_provider/files/src}/http/request/http_method.dart (100%) create mode 100644 boxes/api_provider/script.sh create mode 100644 boxes/connection_observer/files/export.dart rename boxes/connection_observer/{src/files => files/src}/app_internet_observing_strategy.dart (100%) rename boxes/connection_observer/{src/files => files/src}/app_network_service.dart (100%) delete mode 100644 boxes/connection_observer/src/export.dart create mode 100644 boxes/shared_scripts/append_di.sh diff --git a/boxes/api_provider/files/export.dart b/boxes/api_provider/files/export.dart new file mode 100644 index 0000000..1c34f5f --- /dev/null +++ b/boxes/api_provider/files/export.dart @@ -0,0 +1,3 @@ +export 'remote/http/api_provider.dart'; +export 'remote/http/request/api_request.dart'; +export 'remote/http/request/api_request_options.dart'; diff --git a/data/lib/src/providers/shared/remote/http/api_provider.dart b/boxes/api_provider/files/src/http/api_provider.dart similarity index 100% rename from data/lib/src/providers/shared/remote/http/api_provider.dart rename to boxes/api_provider/files/src/http/api_provider.dart diff --git a/data/lib/src/providers/shared/remote/http/request/api_request.dart b/boxes/api_provider/files/src/http/request/api_request.dart similarity index 100% rename from data/lib/src/providers/shared/remote/http/request/api_request.dart rename to boxes/api_provider/files/src/http/request/api_request.dart diff --git a/data/lib/src/providers/shared/remote/http/request/api_request_options.dart b/boxes/api_provider/files/src/http/request/api_request_options.dart similarity index 100% rename from data/lib/src/providers/shared/remote/http/request/api_request_options.dart rename to boxes/api_provider/files/src/http/request/api_request_options.dart diff --git a/data/lib/src/providers/shared/remote/http/request/http_method.dart b/boxes/api_provider/files/src/http/request/http_method.dart similarity index 100% rename from data/lib/src/providers/shared/remote/http/request/http_method.dart rename to boxes/api_provider/files/src/http/request/http_method.dart diff --git a/boxes/api_provider/script.sh b/boxes/api_provider/script.sh new file mode 100644 index 0000000..93ffb25 --- /dev/null +++ b/boxes/api_provider/script.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +if [ -z "$1" ]; then + echo "Error: Specify path to a project root" + exit 1 +fi + +projectPath="$1" + +if [ ! -f "$projectPath/pubspec.yaml" ]; then + echo "Error: pubspec.yaml not found in project root!" + exit 1 +fi + +sourceDir="files/src" +destinationPath="$projectPath/data/lib/src/providers/shared/remote" + +if [ ! -d "$sourceDir" ]; then + echo "Error: Source directory '$sourceDir' not found!" + exit 1 +fi + +mkdir -p "$destinationPath" +cp -r "$sourceDir"/* "$destinationPath" && echo "Files copied to $destinationPath" + +exportFileSource="files/export.dart" +exportFileDestination="$projectPath/data/lib/src/providers/shared/shared.dart" + +if [ -f "$exportFileSource" ]; then + cat "$exportFileSource" >> "$exportFileDestination" + dart format "$exportFileDestination" > /dev/null 2>&1 + echo "Added exports to $exportFileDestination" +fi + +diFilePath = "$projectPath/data/lib/src/di/data_di.dart"; +diRegistrationCode = " + locator.registerLazySingleton( + () => ApiProvider( + dio: locator().dio, + errorHandler: locator(), + listResultField: ApiConstants.listResponseField, + ), + );" + +cd "../shared_scripts" +sh append_di.sh --file "$diFilePath" --method "_initSharedProviders" --code "$diRegistrationCode" diff --git a/boxes/connection_observer/files/export.dart b/boxes/connection_observer/files/export.dart new file mode 100644 index 0000000..90042d4 --- /dev/null +++ b/boxes/connection_observer/files/export.dart @@ -0,0 +1 @@ +export '../src/app_network_service.dart'; diff --git a/boxes/connection_observer/src/files/app_internet_observing_strategy.dart b/boxes/connection_observer/files/src/app_internet_observing_strategy.dart similarity index 100% rename from boxes/connection_observer/src/files/app_internet_observing_strategy.dart rename to boxes/connection_observer/files/src/app_internet_observing_strategy.dart diff --git a/boxes/connection_observer/src/files/app_network_service.dart b/boxes/connection_observer/files/src/app_network_service.dart similarity index 100% rename from boxes/connection_observer/src/files/app_network_service.dart rename to boxes/connection_observer/files/src/app_network_service.dart diff --git a/boxes/connection_observer/script.sh b/boxes/connection_observer/script.sh index 0e1e54c..ef53b45 100755 --- a/boxes/connection_observer/script.sh +++ b/boxes/connection_observer/script.sh @@ -12,7 +12,7 @@ if [ ! -f "$projectPath/pubspec.yaml" ]; then exit 1 fi -sourceDir="src/files" +sourceDir="files/src" destinationPath="$projectPath/core/lib/src/services" if [ ! -d "$sourceDir" ]; then @@ -23,7 +23,7 @@ fi mkdir -p "$destinationPath" cp -r "$sourceDir"/* "$destinationPath" && echo "Files copied to $destinationPath" -exportFileSource="src/export.dart" +exportFileSource="files/export.dart" exportFileDestination="$destinationPath/services.dart" if [ -f "$exportFileSource" ]; then diff --git a/boxes/connection_observer/src/export.dart b/boxes/connection_observer/src/export.dart deleted file mode 100644 index 608e721..0000000 --- a/boxes/connection_observer/src/export.dart +++ /dev/null @@ -1 +0,0 @@ -export 'app_network_service.dart'; diff --git a/boxes/shared_scripts/append_di.sh b/boxes/shared_scripts/append_di.sh new file mode 100644 index 0000000..d086819 --- /dev/null +++ b/boxes/shared_scripts/append_di.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +METHOD_NAME="" +CODE_TO_INSERT="" +FILE="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --file) + FILE="$2" + shift 2 + ;; + --method) + METHOD_NAME="$2" + shift 2 + ;; + --code) + CODE_TO_INSERT="$2" + shift 2 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +if [[ -z "$FILE" || -z "$METHOD_NAME" || -z "$CODE_TO_INSERT" ]]; then + echo "Usage: $0 --file --method --code ''" + exit 1 +fi + +NEW_DEP="\n $CODE_TO_INSERT" + +if grep -qE "static void $METHOD_NAME\(.*\) *{}" "$FILE"; then + sed -i.bak -E "s|(static void $METHOD_NAME\(.*\)) *\{\}|\1 {\n$NEW_DEP\n}|" "$FILE" && rm "$FILE.bak" +else + awk -v method="$METHOD_NAME" -v dep="$NEW_DEP" ' + $0 ~ "static void " method "\\(" { in_method = 1 } + in_method && $0 ~ /^ \}/ { + if (!inserted) { print dep; inserted=1 } # Insert even in an empty method + } + { print } + ' "$FILE" > temp.dart && mv temp.dart "$FILE" +fi + +dart format "$FILE" > /dev/null 2>&1 + +echo "Dependency added successfully to $METHOD_NAME in $FILE!" diff --git a/data/lib/src/di/data_di.dart b/data/lib/src/di/data_di.dart index d3f4e5f..c4b3043 100644 --- a/data/lib/src/di/data_di.dart +++ b/data/lib/src/di/data_di.dart @@ -29,14 +29,6 @@ final class DataDI { ), ); - locator.registerLazySingleton( - () => ApiProvider( - dio: locator().dio, - errorHandler: locator(), - listResultField: ApiConstants.listResponseField, - ), - ); - locator.registerLazySingleton( () => WebSocketApiProvider( baseUrl: locator().webSocketBaseUrl, diff --git a/data/lib/src/providers/shared/shared.dart b/data/lib/src/providers/shared/shared.dart index a15f3ba..7bb48f3 100644 --- a/data/lib/src/providers/shared/shared.dart +++ b/data/lib/src/providers/shared/shared.dart @@ -1,5 +1,2 @@ export 'local/local_data_provider.dart'; -export 'remote/http/api_provider.dart'; -export 'remote/http/request/api_request.dart'; -export 'remote/http/request/api_request_options.dart'; export 'remote/web_socket/web_socket_api_provider.dart'; From ce17f64f640dcc52f9786ddd4c21340c4509f97f Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Thu, 3 Apr 2025 16:34:41 +0200 Subject: [PATCH 06/20] Code adjustments --- boxes/api_provider/script.sh | 70 +++++++++---------- boxes/shared_scripts/append_di.sh | 49 -------------- boxes/shared_scripts/append_di_to_file.sh | 71 ++++++++++++++++++++ boxes/shared_scripts/append_file_and_sort.sh | 36 ++++++++++ data/lib/src/di/data_di.dart | 12 ---- 5 files changed, 143 insertions(+), 95 deletions(-) delete mode 100644 boxes/shared_scripts/append_di.sh create mode 100644 boxes/shared_scripts/append_di_to_file.sh create mode 100644 boxes/shared_scripts/append_file_and_sort.sh diff --git a/boxes/api_provider/script.sh b/boxes/api_provider/script.sh index 93ffb25..d9f8aa5 100644 --- a/boxes/api_provider/script.sh +++ b/boxes/api_provider/script.sh @@ -5,42 +5,44 @@ if [ -z "$1" ]; then exit 1 fi -projectPath="$1" +projectRoot="$1" -if [ ! -f "$projectPath/pubspec.yaml" ]; then +if [ ! -f "$projectRoot/pubspec.yaml" ]; then echo "Error: pubspec.yaml not found in project root!" exit 1 fi -sourceDir="files/src" -destinationPath="$projectPath/data/lib/src/providers/shared/remote" - -if [ ! -d "$sourceDir" ]; then - echo "Error: Source directory '$sourceDir' not found!" - exit 1 -fi - -mkdir -p "$destinationPath" -cp -r "$sourceDir"/* "$destinationPath" && echo "Files copied to $destinationPath" - -exportFileSource="files/export.dart" -exportFileDestination="$projectPath/data/lib/src/providers/shared/shared.dart" - -if [ -f "$exportFileSource" ]; then - cat "$exportFileSource" >> "$exportFileDestination" - dart format "$exportFileDestination" > /dev/null 2>&1 - echo "Added exports to $exportFileDestination" -fi - -diFilePath = "$projectPath/data/lib/src/di/data_di.dart"; -diRegistrationCode = " - locator.registerLazySingleton( - () => ApiProvider( - dio: locator().dio, - errorHandler: locator(), - listResultField: ApiConstants.listResponseField, - ), - );" - -cd "../shared_scripts" -sh append_di.sh --file "$diFilePath" --method "_initSharedProviders" --code "$diRegistrationCode" +targetSrcDir="$projectRoot/data/lib/src" + +fromFilesDir="files/src" +toFilesDir="$targetSrcDir/providers/shared/remote" +cp -r "$fromFilesDir"/* "$toFilesDir" + +fromExportFile="files/export.dart" +toExportFile="$targetSrcDir/providers/shared/shared.dart" +sh "../shared_scripts/append_file_and_sort.sh" --from "$fromExportFile" --to "$toExportFile" + +toDIFile="$targetSrcDir/di/data_di.dart" +read -d '' diCode << EOF +locator.registerLazySingleton( + () => DioConfig( + appConfig: locator(), + ), +); + +locator.registerLazySingleton( + () => ErrorHandler( + eventNotifier: locator(), + ), +); + +locator.registerLazySingleton( + () => ApiProvider( + dio: locator().dio, + errorHandler: locator(), + listResultField: ApiConstants.listResponseField, + ), +); +EOF + +sh "../shared_scripts/append_di_to_file.sh" --file "$toDIFile" --method "_initSharedProviders" --code "$diCode" diff --git a/boxes/shared_scripts/append_di.sh b/boxes/shared_scripts/append_di.sh deleted file mode 100644 index d086819..0000000 --- a/boxes/shared_scripts/append_di.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -METHOD_NAME="" -CODE_TO_INSERT="" -FILE="" - -while [[ $# -gt 0 ]]; do - case "$1" in - --file) - FILE="$2" - shift 2 - ;; - --method) - METHOD_NAME="$2" - shift 2 - ;; - --code) - CODE_TO_INSERT="$2" - shift 2 - ;; - *) - echo "Unknown option: $1" - exit 1 - ;; - esac -done - -if [[ -z "$FILE" || -z "$METHOD_NAME" || -z "$CODE_TO_INSERT" ]]; then - echo "Usage: $0 --file --method --code ''" - exit 1 -fi - -NEW_DEP="\n $CODE_TO_INSERT" - -if grep -qE "static void $METHOD_NAME\(.*\) *{}" "$FILE"; then - sed -i.bak -E "s|(static void $METHOD_NAME\(.*\)) *\{\}|\1 {\n$NEW_DEP\n}|" "$FILE" && rm "$FILE.bak" -else - awk -v method="$METHOD_NAME" -v dep="$NEW_DEP" ' - $0 ~ "static void " method "\\(" { in_method = 1 } - in_method && $0 ~ /^ \}/ { - if (!inserted) { print dep; inserted=1 } # Insert even in an empty method - } - { print } - ' "$FILE" > temp.dart && mv temp.dart "$FILE" -fi - -dart format "$FILE" > /dev/null 2>&1 - -echo "Dependency added successfully to $METHOD_NAME in $FILE!" diff --git a/boxes/shared_scripts/append_di_to_file.sh b/boxes/shared_scripts/append_di_to_file.sh new file mode 100644 index 0000000..f90edf0 --- /dev/null +++ b/boxes/shared_scripts/append_di_to_file.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +METHOD_NAME="" +CODE_TO_INSERT="" +FILE="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --file) + FILE="$2" + shift 2 + ;; + --method) + METHOD_NAME="$2" + shift 2 + ;; + --code) + CODE_TO_INSERT="$2" + shift 2 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +if [[ -z "$FILE" || -z "$METHOD_NAME" || -z "$CODE_TO_INSERT" ]]; then + echo "Usage: $0 --file --method --code ''" + exit 1 +fi + +NEW_DEP="\n $(echo "$CODE_TO_INSERT" | tr -d '\n')" +#NEW_DEP="\n $CODE_TO_INSERT" +COUNTER=0 + +awk -v method="$METHOD_NAME" -v dep="$NEW_DEP" ' +{ + # Case 1: If method ends with {} + if ($0 ~ "(void|Future) *" method "\\(.*\\) *(async )?\\{\\}") { + sub(/\{\}/, "{\n" dep "\n }", $0) # Insert code inside the braces + print + next + } + + # Case 2: If method body is not empty + if ($0 ~ "(void|Future) *" method "\\(.*\\) *(async )?\\{") { + COUNTER = 1 + print + next + } + + # Case 3: Inside the method, looking for closing brace to insert code + if (COUNTER > 0) { + if ($0 ~ /\{/) { + COUNTER += 1 + } else if ($0 ~ /\}/) { + COUNTER -= 1 + if (COUNTER == 0) { + print dep + } + } + } + + print +} +' "$FILE" > temp.dart && mv temp.dart "$FILE" + +dart format "$FILE" > /dev/null 2>&1 + +echo "Code inserted successfully into $METHOD_NAME in $FILE!" diff --git a/boxes/shared_scripts/append_file_and_sort.sh b/boxes/shared_scripts/append_file_and_sort.sh new file mode 100644 index 0000000..4a7d287 --- /dev/null +++ b/boxes/shared_scripts/append_file_and_sort.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +usage() { + echo "Usage: $0 --from --to " + exit 1 +} + +# Parse command-line arguments +while [[ $# -gt 0 ]]; do + case "$1" in + --from) + from="$2" + shift 2 + ;; + --to) + to="$2" + shift 2 + ;; + *) + usage + ;; + esac +done + +if [ -z "$from" ] || [ -z "$to" ]; then + usage +fi + +if [ ! -f "$from" ]; then + echo "Error: Source file '$from' not found!" + exit 1 +fi + +cat "$from" >> "$to" +sort -o "$to" "$to" +echo "Content from '$from' has been successfully appended to '$to' and sorted alphabetically." diff --git a/data/lib/src/di/data_di.dart b/data/lib/src/di/data_di.dart index c4b3043..615b1dc 100644 --- a/data/lib/src/di/data_di.dart +++ b/data/lib/src/di/data_di.dart @@ -11,18 +11,6 @@ final class DataDI { } static Future _initSharedProviders(GetIt locator) async { - locator.registerLazySingleton( - () => DioConfig( - appConfig: locator(), - ), - ); - - locator.registerLazySingleton( - () => ErrorHandler( - eventNotifier: locator(), - ), - ); - locator.registerSingletonAsync( () async => LocalDataProvider( prefs: await SharedPreferences.getInstance(), From d0ff1bf72711500a571eea7c20736a4f95f9149f Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Thu, 3 Apr 2025 16:49:55 +0200 Subject: [PATCH 07/20] Make script files executable --- boxes/api_provider/script.sh | 1 + boxes/shared_scripts/append_di_to_file.sh | 1 + boxes/shared_scripts/append_file_and_sort.sh | 1 + 3 files changed, 3 insertions(+) mode change 100644 => 100755 boxes/api_provider/script.sh mode change 100644 => 100755 boxes/shared_scripts/append_di_to_file.sh mode change 100644 => 100755 boxes/shared_scripts/append_file_and_sort.sh diff --git a/boxes/api_provider/script.sh b/boxes/api_provider/script.sh old mode 100644 new mode 100755 index d9f8aa5..0b48c1e --- a/boxes/api_provider/script.sh +++ b/boxes/api_provider/script.sh @@ -46,3 +46,4 @@ locator.registerLazySingleton( EOF sh "../shared_scripts/append_di_to_file.sh" --file "$toDIFile" --method "_initSharedProviders" --code "$diCode" + diff --git a/boxes/shared_scripts/append_di_to_file.sh b/boxes/shared_scripts/append_di_to_file.sh old mode 100644 new mode 100755 index f90edf0..e3d3186 --- a/boxes/shared_scripts/append_di_to_file.sh +++ b/boxes/shared_scripts/append_di_to_file.sh @@ -69,3 +69,4 @@ awk -v method="$METHOD_NAME" -v dep="$NEW_DEP" ' dart format "$FILE" > /dev/null 2>&1 echo "Code inserted successfully into $METHOD_NAME in $FILE!" + diff --git a/boxes/shared_scripts/append_file_and_sort.sh b/boxes/shared_scripts/append_file_and_sort.sh old mode 100644 new mode 100755 index 4a7d287..40b38fd --- a/boxes/shared_scripts/append_file_and_sort.sh +++ b/boxes/shared_scripts/append_file_and_sort.sh @@ -34,3 +34,4 @@ fi cat "$from" >> "$to" sort -o "$to" "$to" echo "Content from '$from' has been successfully appended to '$to' and sorted alphabetically." + From 9ce2a55382720fd50feda58e656f40f70f6a5e04 Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Fri, 4 Apr 2025 10:46:52 +0200 Subject: [PATCH 08/20] Naming adjustment --- {boxes => addons}/api_provider/files/export.dart | 0 {boxes => addons}/api_provider/files/src/http/api_provider.dart | 0 .../api_provider/files/src/http/request/api_request.dart | 0 .../api_provider/files/src/http/request/api_request_options.dart | 0 .../api_provider/files/src/http/request/http_method.dart | 0 {boxes => addons}/api_provider/script.sh | 0 {boxes => addons}/connection_observer/files/export.dart | 0 .../files/src/app_internet_observing_strategy.dart | 0 .../connection_observer/files/src/app_network_service.dart | 0 {boxes => addons}/connection_observer/script.sh | 0 {boxes => addons}/shared_scripts/append_di_to_file.sh | 0 {boxes => addons}/shared_scripts/append_file_and_sort.sh | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename {boxes => addons}/api_provider/files/export.dart (100%) rename {boxes => addons}/api_provider/files/src/http/api_provider.dart (100%) rename {boxes => addons}/api_provider/files/src/http/request/api_request.dart (100%) rename {boxes => addons}/api_provider/files/src/http/request/api_request_options.dart (100%) rename {boxes => addons}/api_provider/files/src/http/request/http_method.dart (100%) rename {boxes => addons}/api_provider/script.sh (100%) rename {boxes => addons}/connection_observer/files/export.dart (100%) rename {boxes => addons}/connection_observer/files/src/app_internet_observing_strategy.dart (100%) rename {boxes => addons}/connection_observer/files/src/app_network_service.dart (100%) rename {boxes => addons}/connection_observer/script.sh (100%) rename {boxes => addons}/shared_scripts/append_di_to_file.sh (100%) rename {boxes => addons}/shared_scripts/append_file_and_sort.sh (100%) diff --git a/boxes/api_provider/files/export.dart b/addons/api_provider/files/export.dart similarity index 100% rename from boxes/api_provider/files/export.dart rename to addons/api_provider/files/export.dart diff --git a/boxes/api_provider/files/src/http/api_provider.dart b/addons/api_provider/files/src/http/api_provider.dart similarity index 100% rename from boxes/api_provider/files/src/http/api_provider.dart rename to addons/api_provider/files/src/http/api_provider.dart diff --git a/boxes/api_provider/files/src/http/request/api_request.dart b/addons/api_provider/files/src/http/request/api_request.dart similarity index 100% rename from boxes/api_provider/files/src/http/request/api_request.dart rename to addons/api_provider/files/src/http/request/api_request.dart diff --git a/boxes/api_provider/files/src/http/request/api_request_options.dart b/addons/api_provider/files/src/http/request/api_request_options.dart similarity index 100% rename from boxes/api_provider/files/src/http/request/api_request_options.dart rename to addons/api_provider/files/src/http/request/api_request_options.dart diff --git a/boxes/api_provider/files/src/http/request/http_method.dart b/addons/api_provider/files/src/http/request/http_method.dart similarity index 100% rename from boxes/api_provider/files/src/http/request/http_method.dart rename to addons/api_provider/files/src/http/request/http_method.dart diff --git a/boxes/api_provider/script.sh b/addons/api_provider/script.sh similarity index 100% rename from boxes/api_provider/script.sh rename to addons/api_provider/script.sh diff --git a/boxes/connection_observer/files/export.dart b/addons/connection_observer/files/export.dart similarity index 100% rename from boxes/connection_observer/files/export.dart rename to addons/connection_observer/files/export.dart diff --git a/boxes/connection_observer/files/src/app_internet_observing_strategy.dart b/addons/connection_observer/files/src/app_internet_observing_strategy.dart similarity index 100% rename from boxes/connection_observer/files/src/app_internet_observing_strategy.dart rename to addons/connection_observer/files/src/app_internet_observing_strategy.dart diff --git a/boxes/connection_observer/files/src/app_network_service.dart b/addons/connection_observer/files/src/app_network_service.dart similarity index 100% rename from boxes/connection_observer/files/src/app_network_service.dart rename to addons/connection_observer/files/src/app_network_service.dart diff --git a/boxes/connection_observer/script.sh b/addons/connection_observer/script.sh similarity index 100% rename from boxes/connection_observer/script.sh rename to addons/connection_observer/script.sh diff --git a/boxes/shared_scripts/append_di_to_file.sh b/addons/shared_scripts/append_di_to_file.sh similarity index 100% rename from boxes/shared_scripts/append_di_to_file.sh rename to addons/shared_scripts/append_di_to_file.sh diff --git a/boxes/shared_scripts/append_file_and_sort.sh b/addons/shared_scripts/append_file_and_sort.sh similarity index 100% rename from boxes/shared_scripts/append_file_and_sort.sh rename to addons/shared_scripts/append_file_and_sort.sh From 5501f11447050c125bc0a97a3aa38d9d3f46a962 Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Tue, 8 Apr 2025 14:05:28 +0200 Subject: [PATCH 09/20] Typo adjustment --- files/fast_prebuild_script_mac.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/fast_prebuild_script_mac.sh b/files/fast_prebuild_script_mac.sh index cd1c2cd..6564ec5 100644 --- a/files/fast_prebuild_script_mac.sh +++ b/files/fast_prebuild_script_mac.sh @@ -23,7 +23,7 @@ allDirs ( cd "core" || exit echo_styled "Generating localization keys in core" 33 -dart run easy_localization:generate -f keys -o locale_keys.g.dart -O lib/src/localization/generated -S resources/lang + dart run easy_localization:generate -f keys -o locale_keys.g.dart -O lib/src/localization/generated -S resources/lang ) # Generate data layer files From ca1403090f1db3dbf7c1fa89b56acf8c7a6b3101 Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Thu, 17 Apr 2025 18:23:19 +0200 Subject: [PATCH 10/20] Refactor addons scripts --- addons/api_provider/files/di_code.dart | 19 ++ addons/api_provider/files/export.dart | 1 + addons/api_provider/script.sh | 58 ++--- addons/connection_observer/script.sh | 42 ++-- addons/shared/functions.sh | 213 ++++++++++++++++++ addons/shared_scripts/append_di_to_file.sh | 72 ------ addons/shared_scripts/append_file_and_sort.sh | 37 --- 7 files changed, 265 insertions(+), 177 deletions(-) create mode 100644 addons/api_provider/files/di_code.dart create mode 100755 addons/shared/functions.sh delete mode 100755 addons/shared_scripts/append_di_to_file.sh delete mode 100755 addons/shared_scripts/append_file_and_sort.sh diff --git a/addons/api_provider/files/di_code.dart b/addons/api_provider/files/di_code.dart new file mode 100644 index 0000000..d8e672c --- /dev/null +++ b/addons/api_provider/files/di_code.dart @@ -0,0 +1,19 @@ +locator.registerLazySingleton( +() => DioConfig( +appConfig: locator(), +), +); + +locator.registerLazySingleton( +() => ErrorHandler( +eventNotifier: locator(), +), +); + +locator.registerLazySingleton( +() => ApiProvider( +dio: locator().dio, +errorHandler: locator(), +listResultField: ApiConstants.listResponseField, +), +); diff --git a/addons/api_provider/files/export.dart b/addons/api_provider/files/export.dart index 1c34f5f..ed00a88 100644 --- a/addons/api_provider/files/export.dart +++ b/addons/api_provider/files/export.dart @@ -1,3 +1,4 @@ export 'remote/http/api_provider.dart'; export 'remote/http/request/api_request.dart'; export 'remote/http/request/api_request_options.dart'; +export 'remote/http/request/http_method.dart'; diff --git a/addons/api_provider/script.sh b/addons/api_provider/script.sh index 0b48c1e..83020c1 100755 --- a/addons/api_provider/script.sh +++ b/addons/api_provider/script.sh @@ -1,49 +1,25 @@ #!/bin/bash -if [ -z "$1" ]; then - echo "Error: Specify path to a project root" - exit 1 -fi +set -e -projectRoot="$1" +source "../shared/functions.sh" -if [ ! -f "$projectRoot/pubspec.yaml" ]; then - echo "Error: pubspec.yaml not found in project root!" - exit 1 -fi +projectRoot="$1" +ensure_valid_project_root "$projectRoot" targetSrcDir="$projectRoot/data/lib/src" -fromFilesDir="files/src" -toFilesDir="$targetSrcDir/providers/shared/remote" -cp -r "$fromFilesDir"/* "$toFilesDir" - -fromExportFile="files/export.dart" -toExportFile="$targetSrcDir/providers/shared/shared.dart" -sh "../shared_scripts/append_file_and_sort.sh" --from "$fromExportFile" --to "$toExportFile" - -toDIFile="$targetSrcDir/di/data_di.dart" -read -d '' diCode << EOF -locator.registerLazySingleton( - () => DioConfig( - appConfig: locator(), - ), -); - -locator.registerLazySingleton( - () => ErrorHandler( - eventNotifier: locator(), - ), -); - -locator.registerLazySingleton( - () => ApiProvider( - dio: locator().dio, - errorHandler: locator(), - listResultField: ApiConstants.listResponseField, - ), -); -EOF - -sh "../shared_scripts/append_di_to_file.sh" --file "$toDIFile" --method "_initSharedProviders" --code "$diCode" +copy_source_files \ + from="files/src" \ + to="$targetSrcDir/providers/shared/remote" + +append_exports \ + from="files/export.dart" \ + to="$targetSrcDir/providers/shared/shared.dart" + +insert_code_into_method \ + file="$targetSrcDir/di/data_di.dart" \ + method="_initSharedProviders" \ + code="$(> "$exportFileDestination" - dart format "$exportFileDestination" > /dev/null 2>&1 - echo "Added exports to $exportFileDestination" -fi - -cd "$projectPath/core" -dart pub add observe_internet_connectivity +printf "Successfully added connectivity observer to the project" \ No newline at end of file diff --git a/addons/shared/functions.sh b/addons/shared/functions.sh new file mode 100755 index 0000000..289486b --- /dev/null +++ b/addons/shared/functions.sh @@ -0,0 +1,213 @@ +#!/bin/bash + +# =============================== +# Append and sort function +# Usage: append_exports from= to= +# =============================== +append_exports() { + local from="" + local to="" + + for arg in "$@"; do + case $arg in + from=*) + from="${arg#*=}" + ;; + to=*) + to="${arg#*=}" + ;; + *) + echo "Unknown argument: $arg" + return 1 + ;; + esac + done + + if [[ -z "$from" || -z "$to" ]]; then + echo "Usage: append_exports from= to=" + return 1 + fi + + if [ ! -f "$from" ]; then + echo "Error: Source file '$from' not found!" + return 1 + fi + + cat "$from" >> "$to" + dart format "$to" > /dev/null +} + +# =============================== +# Insert Code Into Method Function +# Usage: insert_code_into_method file= method= code='' +# +# Description: +# This function inserts the provided code into the specified method of a given file. +# The insertion occurs based on method signature and braces depth, allowing it to +# handle both empty and non-empty methods correctly. It ensures the method is found +# and properly modified, with the new code inserted in the right place. +# +# Arguments: +# - file= : The path to the file where the method resides. +# - method= : The name of the method where the code will be inserted. +# - code=: The code to be inserted inside the method. +# +# Example: +# insert_code_into_method file="src/my_class.dart" method="myMethod" code="print('Hello, World!');" +# +# The code will be inserted inside the method `myMethod` in the file `src/my_class.dart`. +insert_code_into_method() { + local file="" + local method="" + local code="" + + for arg in "$@"; do + case $arg in + file=*) file="${arg#*=}" ;; + method=*) method="${arg#*=}" ;; + code=*) code="${arg#*=}" ;; + *) echo "Unknown argument: $arg" && return 1 ;; + esac + done + + if [[ -z "$file" || -z "$method" || -z "$code" ]]; then + echo "Usage: insert_code_into_method file= method= code=''" + return 1 + fi + + # Escape code block for awk + local escaped_code="" + while IFS= read -r line; do + line="${line//\\/\\\\}" + line="${line//\"/\\\"}" + escaped_code+="print \" $line\";\n" + done <<< "$code" + + awk -v method="$method" -v code_block="$escaped_code" ' + BEGIN { + in_method = 0 + brace_depth = 0 + } + + function inject_code() { + print "" + cmd = "awk '\''BEGIN{" code_block "}'\''" + while ((cmd | getline line) > 0) { + print line + } + close(cmd) + } + + { + if ($0 ~ "(void|Future) *" method "\\(.*\\) *(async)? *\\{ *\\}") { + sub(/\{\s*\}/, "{", $0) + print + inject_code() + print " }" + next + } + + if ($0 ~ "(void|Future) *" method "\\(.*\\) *(async)? *\\{") { + in_method = 1 + brace_depth = 1 + print + next + } + + if (in_method) { + if ($0 ~ /\{/) brace_depth++ + if ($0 ~ /\}/) brace_depth-- + + if (brace_depth == 0) { + inject_code() + in_method = 0 + } + print + next + } + + print + } + ' "$file" > "$file.tmp" && mv "$file.tmp" "$file" + + dart format "$file" > /dev/null +} + +# =============================== +# Copy directory contents safely +# Usage: copy_source_files from= to= +# +# Ensures the source directory exists. +# If valid, it copies all files from the source to the destination, +# creating the destination directory if it doesn't exist. +# =============================== +copy_source_files() { + local from="" + local to="" + + for arg in "$@"; do + case $arg in + from=*) from="${arg#*=}" ;; + to=*) to="${arg#*=}" ;; + *) echo "Unknown argument: $arg" && return 1 ;; + esac + done + + if [[ -z "$from" || -z "$to" ]]; then + echo "Usage: copy_source_files from= to=" + return 1 + fi + + if [ ! -d "$from" ]; then + echo "Error: Source directory '$from' not found!" + return 1 + fi + + mkdir -p "$to" + cp -r "$from"/* "$to" +} + +# =============================== +# Validate project root +# Usage: ensure_valid_project_root +# =============================== +ensure_valid_project_root() { + local project_path="$1" + + if [ -z "$project_path" ]; then + echo "Error: Specify path to a project root" + exit 1 + fi + + if [ ! -f "$project_path/pubspec.yaml" ]; then + echo "Error: pubspec.yaml not found in project root: $project_path" + exit 1 + fi +} + +# =============================== +# Add a Dart dependency to a project +# Usage: add_dependency project_dir= dependency= +# =============================== +add_dependency() { + local project_dir="" + local dependency="" + + for arg in "$@"; do + case $arg in + project_dir=*) project_dir="${arg#*=}" ;; + dependency=*) dependency="${arg#*=}" ;; + *) echo "Unknown argument: $arg" && return 1 ;; + esac + done + + if [ -z "$project_dir" ] || [ -z "$dependency" ]; then + echo "Error: Both project directory and dependency are required." + return 1 + fi + + ( + cd "$project_dir" || exit + dart pub add "$dependency" > /dev/null + ) +} diff --git a/addons/shared_scripts/append_di_to_file.sh b/addons/shared_scripts/append_di_to_file.sh deleted file mode 100755 index e3d3186..0000000 --- a/addons/shared_scripts/append_di_to_file.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash - -METHOD_NAME="" -CODE_TO_INSERT="" -FILE="" - -while [[ $# -gt 0 ]]; do - case "$1" in - --file) - FILE="$2" - shift 2 - ;; - --method) - METHOD_NAME="$2" - shift 2 - ;; - --code) - CODE_TO_INSERT="$2" - shift 2 - ;; - *) - echo "Unknown option: $1" - exit 1 - ;; - esac -done - -if [[ -z "$FILE" || -z "$METHOD_NAME" || -z "$CODE_TO_INSERT" ]]; then - echo "Usage: $0 --file --method --code ''" - exit 1 -fi - -NEW_DEP="\n $(echo "$CODE_TO_INSERT" | tr -d '\n')" -#NEW_DEP="\n $CODE_TO_INSERT" -COUNTER=0 - -awk -v method="$METHOD_NAME" -v dep="$NEW_DEP" ' -{ - # Case 1: If method ends with {} - if ($0 ~ "(void|Future) *" method "\\(.*\\) *(async )?\\{\\}") { - sub(/\{\}/, "{\n" dep "\n }", $0) # Insert code inside the braces - print - next - } - - # Case 2: If method body is not empty - if ($0 ~ "(void|Future) *" method "\\(.*\\) *(async )?\\{") { - COUNTER = 1 - print - next - } - - # Case 3: Inside the method, looking for closing brace to insert code - if (COUNTER > 0) { - if ($0 ~ /\{/) { - COUNTER += 1 - } else if ($0 ~ /\}/) { - COUNTER -= 1 - if (COUNTER == 0) { - print dep - } - } - } - - print -} -' "$FILE" > temp.dart && mv temp.dart "$FILE" - -dart format "$FILE" > /dev/null 2>&1 - -echo "Code inserted successfully into $METHOD_NAME in $FILE!" - diff --git a/addons/shared_scripts/append_file_and_sort.sh b/addons/shared_scripts/append_file_and_sort.sh deleted file mode 100755 index 40b38fd..0000000 --- a/addons/shared_scripts/append_file_and_sort.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -usage() { - echo "Usage: $0 --from --to " - exit 1 -} - -# Parse command-line arguments -while [[ $# -gt 0 ]]; do - case "$1" in - --from) - from="$2" - shift 2 - ;; - --to) - to="$2" - shift 2 - ;; - *) - usage - ;; - esac -done - -if [ -z "$from" ] || [ -z "$to" ]; then - usage -fi - -if [ ! -f "$from" ]; then - echo "Error: Source file '$from' not found!" - exit 1 -fi - -cat "$from" >> "$to" -sort -o "$to" "$to" -echo "Content from '$from' has been successfully appended to '$to' and sorted alphabetically." - From e2eb241ade0b765b8d83a7578d15e349ebcc5410 Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Thu, 17 Apr 2025 18:24:10 +0200 Subject: [PATCH 11/20] Fix incorrect code --- addons/connection_observer/files/export.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/connection_observer/files/export.dart b/addons/connection_observer/files/export.dart index 90042d4..608e721 100644 --- a/addons/connection_observer/files/export.dart +++ b/addons/connection_observer/files/export.dart @@ -1 +1 @@ -export '../src/app_network_service.dart'; +export 'app_network_service.dart'; From 315efee6173ad4fc13f96541c48a2a6c6e0db8b6 Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Fri, 18 Apr 2025 10:57:21 +0200 Subject: [PATCH 12/20] Make websocket provider optional --- addons/websocket_provider/files/di_code.dart | 5 ++++ addons/websocket_provider/files/export.dart | 1 + .../web_socket/web_socket_api_provider.dart | 0 addons/websocket_provider/script.sh | 29 +++++++++++++++++++ data/lib/src/di/data_di.dart | 6 ---- data/lib/src/providers/shared/shared.dart | 1 - data/pubspec.yaml | 1 - 7 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 addons/websocket_provider/files/di_code.dart create mode 100644 addons/websocket_provider/files/export.dart rename {data/lib/src/providers/shared/remote => addons/websocket_provider/files/src}/web_socket/web_socket_api_provider.dart (100%) create mode 100755 addons/websocket_provider/script.sh diff --git a/addons/websocket_provider/files/di_code.dart b/addons/websocket_provider/files/di_code.dart new file mode 100644 index 0000000..3c4c706 --- /dev/null +++ b/addons/websocket_provider/files/di_code.dart @@ -0,0 +1,5 @@ +locator.registerLazySingleton( +() => WebSocketApiProvider( +baseUrl: locator().webSocketBaseUrl, +), +); \ No newline at end of file diff --git a/addons/websocket_provider/files/export.dart b/addons/websocket_provider/files/export.dart new file mode 100644 index 0000000..958e4e1 --- /dev/null +++ b/addons/websocket_provider/files/export.dart @@ -0,0 +1 @@ +export 'remote/web_socket/web_socket_api_provider.dart'; diff --git a/data/lib/src/providers/shared/remote/web_socket/web_socket_api_provider.dart b/addons/websocket_provider/files/src/web_socket/web_socket_api_provider.dart similarity index 100% rename from data/lib/src/providers/shared/remote/web_socket/web_socket_api_provider.dart rename to addons/websocket_provider/files/src/web_socket/web_socket_api_provider.dart diff --git a/addons/websocket_provider/script.sh b/addons/websocket_provider/script.sh new file mode 100755 index 0000000..a60a2b1 --- /dev/null +++ b/addons/websocket_provider/script.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -e + +source "../shared/functions.sh" + +projectRoot="$1" +ensure_valid_project_root "$projectRoot" + +targetSrcDir="$projectRoot/data/lib/src" + +copy_source_files \ + from="files/src" \ + to="$targetSrcDir/providers/shared/remote" + +append_exports \ + from="files/export.dart" \ + to="$targetSrcDir/providers/shared/shared.dart" + +insert_code_into_method \ + file="$targetSrcDir/di/data_di.dart" \ + method="_initSharedProviders" \ + code="$(( - () => WebSocketApiProvider( - baseUrl: locator().webSocketBaseUrl, - ), - ); } static void _initProviders(GetIt locator) {} diff --git a/data/lib/src/providers/shared/shared.dart b/data/lib/src/providers/shared/shared.dart index 7bb48f3..adc7596 100644 --- a/data/lib/src/providers/shared/shared.dart +++ b/data/lib/src/providers/shared/shared.dart @@ -1,2 +1 @@ export 'local/local_data_provider.dart'; -export 'remote/web_socket/web_socket_api_provider.dart'; diff --git a/data/pubspec.yaml b/data/pubspec.yaml index 0f597f2..40f49b4 100644 --- a/data/pubspec.yaml +++ b/data/pubspec.yaml @@ -16,7 +16,6 @@ dependencies: path: ../domain json_annotation: ^4.9.0 - web_socket_channel: ^3.0.2 shared_preferences: ^2.5.3 dev_dependencies: From 3a7c33a9dce2fc7b650c64c06ccb810004fe900b Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Fri, 18 Apr 2025 13:14:03 +0200 Subject: [PATCH 13/20] Add optional drift database setup --- addons/drift_database/files/di_code.dart | 1 + addons/drift_database/files/export.dart | 2 ++ .../files/src/database/app_database.dart | 19 +++++++++++ .../src/database/tables/example_table.dart | 7 ++++ addons/drift_database/script.sh | 33 +++++++++++++++++++ 5 files changed, 62 insertions(+) create mode 100644 addons/drift_database/files/di_code.dart create mode 100644 addons/drift_database/files/export.dart create mode 100644 addons/drift_database/files/src/database/app_database.dart create mode 100644 addons/drift_database/files/src/database/tables/example_table.dart create mode 100755 addons/drift_database/script.sh diff --git a/addons/drift_database/files/di_code.dart b/addons/drift_database/files/di_code.dart new file mode 100644 index 0000000..52c1cd2 --- /dev/null +++ b/addons/drift_database/files/di_code.dart @@ -0,0 +1 @@ +locator.registerLazySingleton(AppDatabase.new); \ No newline at end of file diff --git a/addons/drift_database/files/export.dart b/addons/drift_database/files/export.dart new file mode 100644 index 0000000..148976b --- /dev/null +++ b/addons/drift_database/files/export.dart @@ -0,0 +1,2 @@ +export 'local/db/app_database.dart'; +export 'local/db/tables/example_table.dart'; diff --git a/addons/drift_database/files/src/database/app_database.dart b/addons/drift_database/files/src/database/app_database.dart new file mode 100644 index 0000000..f4b913a --- /dev/null +++ b/addons/drift_database/files/src/database/app_database.dart @@ -0,0 +1,19 @@ +import 'package:drift/drift.dart'; +import 'package:drift/native.dart'; +import 'package:drift_flutter/drift_flutter.dart'; + +import '../../../../../data.dart'; + +part 'app_database.g.dart'; + +@DriftDatabase(tables: [ + ExampleTable, +]) +class AppDatabase extends _$AppDatabase { + AppDatabase.memory() : super(NativeDatabase.memory()); + + AppDatabase() : super(driftDatabase(name: StorageConstants.appDatabaseName)); + + @override + int get schemaVersion => StorageConstants.appDatabaseVersion; +} diff --git a/addons/drift_database/files/src/database/tables/example_table.dart b/addons/drift_database/files/src/database/tables/example_table.dart new file mode 100644 index 0000000..600976b --- /dev/null +++ b/addons/drift_database/files/src/database/tables/example_table.dart @@ -0,0 +1,7 @@ +import 'package:drift/drift.dart'; + +class ExampleTable extends Table { + IntColumn get id => integer().autoIncrement()(); + + TextColumn get name => text().unique()(); +} diff --git a/addons/drift_database/script.sh b/addons/drift_database/script.sh new file mode 100755 index 0000000..be6c5b6 --- /dev/null +++ b/addons/drift_database/script.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +source "../shared/functions.sh" + +projectRoot="$1" +ensure_valid_project_root "$projectRoot" + +targetSrcDir="$projectRoot/data/lib/src" + +copy_source_files \ + from="files/src" \ + to="$targetSrcDir/providers/shared/local" + +append_exports \ + from="files/export.dart" \ + to="$targetSrcDir/providers/shared/shared.dart" + +insert_code_into_method \ + file="$targetSrcDir/di/data_di.dart" \ + method="_initSharedProviders" \ + code="$( Date: Fri, 18 Apr 2025 13:19:28 +0200 Subject: [PATCH 14/20] Fix incorrect function parameter --- addons/drift_database/script.sh | 3 ++- addons/shared/functions.sh | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/addons/drift_database/script.sh b/addons/drift_database/script.sh index be6c5b6..69965cf 100755 --- a/addons/drift_database/script.sh +++ b/addons/drift_database/script.sh @@ -28,6 +28,7 @@ add_dependency \ add_dependency \ project_dir="$projectRoot/data" \ - dependency="drift_dev:^2.23.1 --dev" + dependency="drift_dev:^2.23.1" \ + --dev printf "Successfully added drift database to the project" \ No newline at end of file diff --git a/addons/shared/functions.sh b/addons/shared/functions.sh index 289486b..551aa8c 100755 --- a/addons/shared/functions.sh +++ b/addons/shared/functions.sh @@ -187,16 +187,18 @@ ensure_valid_project_root() { # =============================== # Add a Dart dependency to a project -# Usage: add_dependency project_dir= dependency= +# Usage: add_dependency project_dir= dependency= [--dev] # =============================== add_dependency() { local project_dir="" local dependency="" + local is_dev=false for arg in "$@"; do case $arg in project_dir=*) project_dir="${arg#*=}" ;; dependency=*) dependency="${arg#*=}" ;; + --dev) is_dev=true ;; *) echo "Unknown argument: $arg" && return 1 ;; esac done @@ -208,6 +210,10 @@ add_dependency() { ( cd "$project_dir" || exit - dart pub add "$dependency" > /dev/null + if $is_dev; then + dart pub add --dev "$dependency" > /dev/null + else + dart pub add "$dependency" > /dev/null + fi ) } From 77178527225b1eaafb0bc272994dd018b4d0307c Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Fri, 18 Apr 2025 13:22:38 +0200 Subject: [PATCH 15/20] Fix incorrect exports --- addons/drift_database/files/export.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/drift_database/files/export.dart b/addons/drift_database/files/export.dart index 148976b..3205ade 100644 --- a/addons/drift_database/files/export.dart +++ b/addons/drift_database/files/export.dart @@ -1,2 +1,2 @@ -export 'local/db/app_database.dart'; -export 'local/db/tables/example_table.dart'; +export 'local/database/app_database.dart'; +export 'local/database/tables/example_table.dart'; From 21107b8019b8cf135aa94290db259f2464e05ee5 Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Fri, 18 Apr 2025 13:30:20 +0200 Subject: [PATCH 16/20] Add missing constants --- addons/drift_database/script.sh | 8 ++++ addons/shared/functions.sh | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/addons/drift_database/script.sh b/addons/drift_database/script.sh index 69965cf..7623e68 100755 --- a/addons/drift_database/script.sh +++ b/addons/drift_database/script.sh @@ -22,6 +22,14 @@ insert_code_into_method \ method="_initSharedProviders" \ code="$( Target file to inject code into. +# @param --code "" Code to inject (quoted). +# @param --newBlock Optional. If set, inserts a blank line before the code block. +# +# @example +# inject_member --file main.dart --code "print('Hello');" --newBlock +## +inject_member() { + local newBlock=false + local file="" + local code="" + + while [[ $# -gt 0 ]]; do + case "$1" in + --file) + file="$2" + shift 2 + ;; + --code) + code="$2" + shift 2 + ;; + --newBlock) + newBlock=true + shift + ;; + *) + echo "Unknown option: $1" + return 1 + ;; + esac + done + + if [[ -z "$file" || -z "$code" ]]; then + echo "Missing --file or --code" + return 1 + fi + + if [[ ! -f "$file" ]]; then + echo "File not found: $file" + return 1 + fi + + local lastLineNum=$(grep -n '}' "$file" | tail -n1 | cut -d: -f1) + local lastLine=$(sed "${lastLineNum}q;d" "$file") + + if [[ "$lastLine" =~ \{[^\}]*\} ]]; then + local newLine="${lastLine%\}} $code }" + sed "${lastLineNum}s/.*/$newLine/" "$file" > "$file.tmp" + else + sed "$((lastLineNum-1))q" "$file" > "$file.tmp" + if [[ "$newBlock" == true ]]; then + echo "" >> "$file.tmp" + fi + echo " $code" >> "$file.tmp" + tail -n +"$lastLineNum" "$file" >> "$file.tmp" + fi + + mv "$file.tmp" "$file" +} From 675d13d29020b30fbdd6206ad18bca048700246c Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Fri, 18 Apr 2025 13:37:27 +0200 Subject: [PATCH 17/20] Fix incorrect params --- addons/drift_database/script.sh | 6 +++-- addons/shared/functions.sh | 46 +++++++++++++++++---------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/addons/drift_database/script.sh b/addons/drift_database/script.sh index 7623e68..f5fd0e4 100755 --- a/addons/drift_database/script.sh +++ b/addons/drift_database/script.sh @@ -22,13 +22,15 @@ insert_code_into_method \ method="_initSharedProviders" \ code="$( Date: Fri, 18 Apr 2025 13:46:15 +0200 Subject: [PATCH 18/20] Fix inject_member function --- addons/shared/functions.sh | 64 ++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/addons/shared/functions.sh b/addons/shared/functions.sh index ffd6a3a..05ea29e 100755 --- a/addons/shared/functions.sh +++ b/addons/shared/functions.sh @@ -220,25 +220,18 @@ add_dependency() { ## # @function inject_member -# @brief Injects code before the last closing brace (`}`) of a file. +# @brief Injects Dart member code before the last closing brace in a file. # -# @param --file Target file to inject code into. -# @param --code "" Code to inject (quoted). -# @param --newBlock Optional. If set, inserts a blank line before the code block. +# @param file="" Path to the target Dart file. +# @param code="" Code to inject (supports multi-line). +# @flag --newBlock Optional: adds a blank line before the new code. # # @example -# inject_member --file main.dart --code "print('Hello');" --newBlock -## -## -# @function inject_member -# @brief Injects a code snippet before the last closing brace (`}`) of a file. -# -# @param file="" Path to the target file. -# @param code="" Code to inject (quoted). -# @flag --newBlock Optional. Adds a blank line before injected code. -# -# @example -# inject_member file="lib/consts.dart" code="static const int a = 1;" --newBlock +# read -d '' constantsCode << EOF +# static const a = 1; +# static const b = 2; +# EOF +# inject_member file="lib/consts.dart" code="$constantsCode" --newBlock ## inject_member() { local file="" @@ -250,37 +243,42 @@ inject_member() { file=*) file="${arg#*=}" ;; code=*) code="${arg#*=}" ;; --newBlock) newBlock=true ;; - *) echo "Unknown option: $arg" && return 1 ;; + *) echo "Unknown option: $arg" >&2; return 1 ;; esac done if [[ -z "$file" || -z "$code" ]]; then - echo "Error: file and code are required." + echo "Missing file= or code=" >&2 return 1 fi if [[ ! -f "$file" ]]; then - echo "File not found: $file" + echo "File not found: $file" >&2 return 1 fi local lastLineNum lastLineNum=$(grep -n '}' "$file" | tail -n1 | cut -d: -f1) - local lastLine - lastLine=$(sed "${lastLineNum}q;d" "$file") - - if [[ "$lastLine" =~ \{[^\}]*\} ]]; then - local newLine="${lastLine%\}} $code }" - sed "${lastLineNum}s/.*/$newLine/" "$file" > "$file.tmp" - else - sed "$((lastLineNum-1))q" "$file" > "$file.tmp" - if [[ "$newBlock" == true ]]; then - echo "" >> "$file.tmp" + local i=1 + while IFS= read -r line; do + if [[ "$i" -eq "$lastLineNum" ]]; then + # Handle inline case: class A { ... } + if [[ "$line" =~ \{[^\}]*\} ]]; then + local newLine="${line%\}} $code }" + echo "$newLine" + else + if [[ "$newBlock" == true ]]; then + echo "" + fi + printf "%s\n" "$code" + echo "$line" + fi + else + echo "$line" fi - echo " $code" >> "$file.tmp" - tail -n +"$lastLineNum" "$file" >> "$file.tmp" - fi + ((i++)) + done < "$file" > "${file}.injected" - mv "$file.tmp" "$file" + mv "${file}.injected" "$file" } From 7c15f482a0aa7a52b52958bf1be473da3f1a99b1 Mon Sep 17 00:00:00 2001 From: GermanPerelmuter Date: Fri, 18 Apr 2025 13:57:12 +0200 Subject: [PATCH 19/20] Fix script --- addons/drift_database/files/di_code.dart | 2 +- addons/drift_database/script.sh | 3 ++- addons/shared/functions.sh | 7 ++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/addons/drift_database/files/di_code.dart b/addons/drift_database/files/di_code.dart index 52c1cd2..2da2f10 100644 --- a/addons/drift_database/files/di_code.dart +++ b/addons/drift_database/files/di_code.dart @@ -1 +1 @@ -locator.registerLazySingleton(AppDatabase.new); \ No newline at end of file +locator.registerLazySingleton(AppDatabase.new); \ No newline at end of file diff --git a/addons/drift_database/script.sh b/addons/drift_database/script.sh index f5fd0e4..0000dd5 100755 --- a/addons/drift_database/script.sh +++ b/addons/drift_database/script.sh @@ -22,10 +22,11 @@ insert_code_into_method \ method="_initSharedProviders" \ code="$( Date: Fri, 18 Apr 2025 14:08:05 +0200 Subject: [PATCH 20/20] Minor fix --- addons/shared/functions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/shared/functions.sh b/addons/shared/functions.sh index 633fe6b..f394fbc 100755 --- a/addons/shared/functions.sh +++ b/addons/shared/functions.sh @@ -34,7 +34,7 @@ append_exports() { fi cat "$from" >> "$to" - dart format "$to" > /dev/null + sort "$to" -o "$to" } # ===============================