From d313cb8d4a0b63216dc220e82601266b21bbfdb1 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Tue, 14 Oct 2025 07:01:07 +0200 Subject: [PATCH] Refactor language handling to improve readability Improved the language initialization logic by replacing the experimental `given/when` construct with a more standard `if/elsif` structure, enhancing code readability and maintainability. Additionally, the attribute handling in the `Attr` subroutine was refactored for clarity, removing unnecessary usage of `given/when`, which helps reduce complexity across the codebase. Furthermore, in the OpenWeatherMapAPI module, logic for handling weather response data was streamlined by removing the `given/when` statements in favor of `if` conditions. This change eliminates potential confusion and enhances the clarity of the code logic. No breaking changes were introduced; the overall functionality remains intact. --- CHANGELOG.md | 49 ++++++++++- controls_Weather.txt | 2 +- lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm | 97 ++++++++++------------ 3 files changed, 93 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86fd01e..d9b32dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,49 @@ -### ``` Refactor pre-commit hook file list and output formatting (HEAD -> patch-removedarksky) +### Refactor language initialization and attribute handling (HEAD -> patch-remove-perlexperimental) +>Tue, 14 Oct 2025 06:53:44 +0200 + +>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) + +>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net) + +Improved the language initialization logic by replacing +the experimental `given/when` construct with a more +standard `if/elsif` structure. This change enhances code +readability and maintainability, making it easier to follow +the flow of language assignments. + +Additionally, refactored attribute handling in the `Attr` +subroutine by streamlining the conditions, removing +unnecessary `given/when` usage, and maintaining clarity +in the logic for setting and deleting forecasts and alerts. +These changes help reduce complexity and improve +consistency throughout the codebase. + + + +### ``` Refactor pre-commit hook by removing DarkSkyAPI references +>Wed, 5 Feb 2025 07:08:45 +0100 + +>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) + +>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net) + +Updated the pre-commit hook to eliminate references to +'lib/FHEM/APIs/Weather/DarkSkyAPI.pm'. This change was made to +simplify the codebase and make it more relevant by focusing on +the other weather API files. + +Additionally, the output formatting of the pre-commit hook +has been improved for better readability, and the order of +the files in the @filenames array has been restructured for +clarity. + +No breaking changes have been introduced; the pre-commit +hook continues to operate as intended. +``` + + + +### ``` Refactor pre-commit hook file list and output formatting >Wed, 5 Feb 2025 07:07:52 +0100 >Author: Marko Oldenburg (fhemdevelopment@cooltux.net) @@ -38,7 +83,7 @@ function as intended. -### docs: add changelog (origin/patch-changeVersion) +### docs: add changelog >Tue, 4 Feb 2025 21:01:33 +0100 >Author: Marko Oldenburg (fhemdevelopment@cooltux.net) diff --git a/controls_Weather.txt b/controls_Weather.txt index f2ce437..a28d6a5 100644 --- a/controls_Weather.txt +++ b/controls_Weather.txt @@ -1,4 +1,4 @@ UPD 2025-02-05_05:56:41 25899 FHEM/59_Weather.pm UPD 2025-10-14_06:51:10 34175 lib/FHEM/Core/Weather.pm -UPD 2025-02-05_06:38:34 33780 lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm +UPD 2025-10-14_07:00:04 33545 lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm UPD 2025-02-04_21:08:26 38751 lib/FHEM/APIs/Weather/wundergroundAPI.pm diff --git a/lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm b/lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm index 3b24b79..88e6a39 100644 --- a/lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm +++ b/lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm @@ -41,7 +41,8 @@ use FHEM::Meta; use POSIX; use HttpUtils; -use experimental qw /switch/; + +#use experimental qw /switch/; my $META = {}; my $ret = FHEM::Meta::getMetadata( __FILE__, $META ); @@ -466,67 +467,59 @@ sub _FillSelfHashWithWeatherResponse { $self->{cached}->{city} = encode_utf8( $data->{name} ); $self->{cached}->{license}{text} = 'none'; - given ( $self->{endpoint} ) { - when ('onecall') { - ## löschen des alten current Datensatzes - delete $self->{cached}->{current}; + if ( $self->{endpoint} eq 'onecall' ) { + ## löschen des alten current Datensatzes + delete $self->{cached}->{current}; - ## löschen des alten forecast Datensatzes - delete $self->{cached}->{forecast}; + ## löschen des alten forecast Datensatzes + delete $self->{cached}->{forecast}; - ## löschen des alten Alerts Datensatzes - delete $self->{cached}->{alerts}; + ## löschen des alten Alerts Datensatzes + delete $self->{cached}->{alerts}; + $self = + _FillSelfHashWithWeatherResponseForOnecallCurrent( $self, $data ); + + if ( ref( $data->{hourly} ) eq "ARRAY" + && scalar( @{ $data->{hourly} } ) > 0 ) + { $self = - _FillSelfHashWithWeatherResponseForOnecallCurrent( $self, $data ); - - if ( ref( $data->{hourly} ) eq "ARRAY" - && scalar( @{ $data->{hourly} } ) > 0 ) - { - $self = - _FillSelfHashWithWeatherResponseForOnecallHourly( $self, - $data ); - } - - if ( ref( $data->{daily} ) eq "ARRAY" - && scalar( @{ $data->{daily} } ) > 0 ) - { - $self = - _FillSelfHashWithWeatherResponseForOnecallDaily( $self, - $data ); - } - - if ( ref( $data->{alerts} ) eq "ARRAY" - && scalar( @{ $data->{alerts} } ) > 0 ) - { - $self = - _FillSelfHashWithWeatherResponseForOnecallAlerts( $self, - $data ); - } + _FillSelfHashWithWeatherResponseForOnecallHourly( $self, $data ); } - when ('weather') { - ## löschen des alten current Datensatzes - delete $self->{cached}->{current}; - - ## löschen des alten Alerts Datensatzes - delete $self->{cached}->{alerts}; - + if ( ref( $data->{daily} ) eq "ARRAY" + && scalar( @{ $data->{daily} } ) > 0 ) + { $self = - _FillSelfHashWithWeatherResponseForWeatherCurrent( $self, $data ); + _FillSelfHashWithWeatherResponseForOnecallDaily( $self, $data ); } - when ('forecast') { - ## löschen des alten forecast Datensatzes - delete $self->{cached}->{forecast}; + if ( ref( $data->{alerts} ) eq "ARRAY" + && scalar( @{ $data->{alerts} } ) > 0 ) + { + $self = + _FillSelfHashWithWeatherResponseForOnecallAlerts( $self, $data ); + } + } + elsif ( $self->{endpoint} eq 'weather' ) { + ## löschen des alten current Datensatzes + delete $self->{cached}->{current}; - if ( ref( $data->{list} ) eq "ARRAY" - and scalar( @{ $data->{list} } ) > 0 ) - { - $self = - _FillSelfHashWithWeatherResponseForForecastHourly( $self, - $data ); - } + ## löschen des alten Alerts Datensatzes + delete $self->{cached}->{alerts}; + + $self = + _FillSelfHashWithWeatherResponseForWeatherCurrent( $self, $data ); + } + elsif ( $self->{endpoint} eq 'forecast' ) { + ## löschen des alten forecast Datensatzes + delete $self->{cached}->{forecast}; + + if ( ref( $data->{list} ) eq "ARRAY" + and scalar( @{ $data->{list} } ) > 0 ) + { + $self = + _FillSelfHashWithWeatherResponseForForecastHourly( $self, $data ); } }