mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-13 05:06:35 +00:00
fhem.pl: add $lastDefChange, FHEMWEB: UpdateHashes only if necessary
git-svn-id: https://svn.fhem.de/fhem/trunk@6001 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
fd1f1a5958
commit
8095dd93f0
@ -82,6 +82,8 @@ $FW_formmethod = "post";
|
|||||||
my $FW_zlib_checked;
|
my $FW_zlib_checked;
|
||||||
my $FW_use_zlib = 1;
|
my $FW_use_zlib = 1;
|
||||||
my $FW_activateInform = 0;
|
my $FW_activateInform = 0;
|
||||||
|
my $FW_lastWebName = ""; # Name of last FHEMWEB instance, for caching
|
||||||
|
my $FW_lastHashUpdate = 0;
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
# As we are _not_ multithreaded, it is safe to use global variables.
|
# As we are _not_ multithreaded, it is safe to use global variables.
|
||||||
@ -93,6 +95,7 @@ my %FW_icons; # List of icons
|
|||||||
my @FW_iconDirs; # Directory search order for icons
|
my @FW_iconDirs; # Directory search order for icons
|
||||||
my $FW_RETTYPE; # image/png or the like
|
my $FW_RETTYPE; # image/png or the like
|
||||||
my %FW_rooms; # hash of all rooms
|
my %FW_rooms; # hash of all rooms
|
||||||
|
my @FW_roomsArr; # ordered list of rooms
|
||||||
my %FW_groups; # hash of all groups
|
my %FW_groups; # hash of all groups
|
||||||
my %FW_types; # device types, for sorting
|
my %FW_types; # device types, for sorting
|
||||||
my %FW_hiddengroup;# hash of hidden groups
|
my %FW_hiddengroup;# hash of hidden groups
|
||||||
@ -590,7 +593,11 @@ FW_answerCall($)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
FW_updateHashes();
|
if($FW_lastWebName ne $FW_wname || $FW_lastHashUpdate != $lastDefChange) {
|
||||||
|
FW_updateHashes();
|
||||||
|
$FW_lastWebName = $FW_wname;
|
||||||
|
$FW_lastHashUpdate = $lastDefChange;
|
||||||
|
}
|
||||||
|
|
||||||
my $t = AttrVal("global", "title", "Home, Sweet Home");
|
my $t = AttrVal("global", "title", "Home, Sweet Home");
|
||||||
|
|
||||||
@ -791,6 +798,17 @@ FW_updateHashes()
|
|||||||
}
|
}
|
||||||
|
|
||||||
$FW_room = AttrVal($FW_detail, "room", "Unsorted") if($FW_detail);
|
$FW_room = AttrVal($FW_detail, "room", "Unsorted") if($FW_detail);
|
||||||
|
|
||||||
|
if(AttrVal($FW_wname, "sortRooms", "")) { # Slow!
|
||||||
|
my @sortBy = split( " ", AttrVal( $FW_wname, "sortRooms", "" ) );
|
||||||
|
my %sHash;
|
||||||
|
map { $sHash{$_} = FW_roomIdx(\@sortBy,$_) } keys %FW_rooms;
|
||||||
|
@FW_roomsArr = sort { $sHash{$a} cmp $sHash{$b} } keys %FW_rooms;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
@FW_roomsArr = sort keys %FW_rooms;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
@ -1009,7 +1027,7 @@ FW_makeTableFromArray($$@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub
|
sub
|
||||||
FW_roomIdx(\@$)
|
FW_roomIdx($$)
|
||||||
{
|
{
|
||||||
my ($arr,$v) = @_;
|
my ($arr,$v) = @_;
|
||||||
my ($index) = grep { $v =~ /^$arr->[$_]$/ } 0..$#$arr;
|
my ($index) = grep { $v =~ /^$arr->[$_]$/ } 0..$#$arr;
|
||||||
@ -1084,22 +1102,10 @@ FW_roomOverview($)
|
|||||||
}
|
}
|
||||||
$FW_room = "" if(!$FW_room);
|
$FW_room = "" if(!$FW_room);
|
||||||
|
|
||||||
my @rlist;
|
|
||||||
if(AttrVal($FW_wname, "sortRooms", "")) { # Slow!
|
|
||||||
my @sortBy = split( " ", AttrVal( $FW_wname, "sortRooms", "" ) );
|
|
||||||
my %sHash;
|
|
||||||
map { $sHash{$_} = FW_roomIdx(@sortBy,$_) } keys %FW_rooms;
|
|
||||||
@rlist = sort { $sHash{$a} cmp $sHash{$b} } keys %FW_rooms;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
@rlist = sort keys %FW_rooms;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
##########################
|
##########################
|
||||||
# Rooms and other links
|
# Rooms and other links
|
||||||
foreach my $r (@rlist) {
|
foreach my $r (@FW_roomsArr) {
|
||||||
next if($r eq "hidden" || $FW_hiddenroom{$r});
|
next if($r eq "hidden" || $FW_hiddenroom{$r});
|
||||||
$FW_room = $r if(!$FW_room && $FW_ss);
|
$FW_room = $r if(!$FW_room && $FW_ss);
|
||||||
$r =~ s/</</g;
|
$r =~ s/</</g;
|
||||||
|
24
fhem/fhem.pl
24
fhem/fhem.pl
@ -211,6 +211,7 @@ use vars qw(%oldvalue); # Old values, see commandref.html
|
|||||||
use vars qw(%readyfnlist); # devices which want a "readyfn"
|
use vars qw(%readyfnlist); # devices which want a "readyfn"
|
||||||
use vars qw(%selectlist); # devices which want a "select"
|
use vars qw(%selectlist); # devices which want a "select"
|
||||||
use vars qw(%value); # Current values, see commandref.html
|
use vars qw(%value); # Current values, see commandref.html
|
||||||
|
use vars qw($lastDefChange); # number of last def/attr change
|
||||||
|
|
||||||
my $AttrList = "verbose:0,1,2,3,4,5 room group comment alias ".
|
my $AttrList = "verbose:0,1,2,3,4,5 room group comment alias ".
|
||||||
"eventMap userReadings";
|
"eventMap userReadings";
|
||||||
@ -231,6 +232,7 @@ my %duplicate; # Pool of received msg for multi-fhz/cul setups
|
|||||||
my @cmdList; # Remaining commands in a chain. Used by sleep
|
my @cmdList; # Remaining commands in a chain. Used by sleep
|
||||||
|
|
||||||
$init_done = 0;
|
$init_done = 0;
|
||||||
|
$lastDefChange = 0;
|
||||||
$readytimeout = ($^O eq "MSWin32") ? 0.1 : 5.0;
|
$readytimeout = ($^O eq "MSWin32") ? 0.1 : 5.0;
|
||||||
|
|
||||||
|
|
||||||
@ -481,6 +483,8 @@ $attr{global}{motd} = "$sc_text\n\n"
|
|||||||
if(!$attr{global}{motd} || $attr{global}{motd} =~ m/^$sc_text/);
|
if(!$attr{global}{motd} || $attr{global}{motd} =~ m/^$sc_text/);
|
||||||
|
|
||||||
$init_done = 1;
|
$init_done = 1;
|
||||||
|
$lastDefChange = 1;
|
||||||
|
|
||||||
foreach my $d (keys %defs) {
|
foreach my $d (keys %defs) {
|
||||||
if($defs{$d}{IODevMissing}) {
|
if($defs{$d}{IODevMissing}) {
|
||||||
Log 3, "No I/O device found for $defs{$d}{NAME}";
|
Log 3, "No I/O device found for $defs{$d}{NAME}";
|
||||||
@ -1565,6 +1569,7 @@ CommandDefine($$)
|
|||||||
%ntfyHash = ();
|
%ntfyHash = ();
|
||||||
DoTrigger("global", "DEFINED $name", 1) if($init_done);
|
DoTrigger("global", "DEFINED $name", 1) if($init_done);
|
||||||
}
|
}
|
||||||
|
$lastDefChange++ if(!$hash{TEMPORARY});
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1589,6 +1594,7 @@ CommandModify($$)
|
|||||||
"$a[0] $hash->{TYPE}".(defined($a[1]) ? " $a[1]" : ""));
|
"$a[0] $hash->{TYPE}".(defined($a[1]) ? " $a[1]" : ""));
|
||||||
$hash->{DEF} = $hash->{OLDDEF} if($ret);
|
$hash->{DEF} = $hash->{OLDDEF} if($ret);
|
||||||
delete($hash->{OLDDEF});
|
delete($hash->{OLDDEF});
|
||||||
|
$lastDefChange++ if(!$hash->{TEMPORARY});
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1651,7 +1657,7 @@ CommandDelete($$)
|
|||||||
my ($cl, $def) = @_;
|
my ($cl, $def) = @_;
|
||||||
return "Usage: delete <name>$namedef\n" if(!$def);
|
return "Usage: delete <name>$namedef\n" if(!$def);
|
||||||
|
|
||||||
my @rets;
|
my (@rets, $isReal);
|
||||||
foreach my $sdev (devspec2array($def)) {
|
foreach my $sdev (devspec2array($def)) {
|
||||||
if(!defined($defs{$sdev})) {
|
if(!defined($defs{$sdev})) {
|
||||||
push @rets, "Please define $sdev first";
|
push @rets, "Please define $sdev first";
|
||||||
@ -1669,6 +1675,8 @@ CommandDelete($$)
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$isReal = 1 if(!$defs{$sdev}{TEMPORARY});
|
||||||
|
|
||||||
# Delete releated hashes
|
# Delete releated hashes
|
||||||
foreach my $p (keys %selectlist) {
|
foreach my $p (keys %selectlist) {
|
||||||
if($selectlist{$p} && $selectlist{$p}{NAME} eq $sdev) {
|
if($selectlist{$p} && $selectlist{$p}{NAME} eq $sdev) {
|
||||||
@ -1686,6 +1694,7 @@ CommandDelete($$)
|
|||||||
DoTrigger("global", "DELETED $sdev", 1) if(!$temporary);
|
DoTrigger("global", "DELETED $sdev", 1) if(!$temporary);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
$lastDefChange++ if($isReal);
|
||||||
return join("\n", @rets);
|
return join("\n", @rets);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1698,7 +1707,7 @@ CommandDeleteAttr($$)
|
|||||||
my @a = split(" ", $def, 2);
|
my @a = split(" ", $def, 2);
|
||||||
return "Usage: deleteattr <name> [<attrname>]\n$namedef" if(@a < 1);
|
return "Usage: deleteattr <name> [<attrname>]\n$namedef" if(@a < 1);
|
||||||
|
|
||||||
my @rets;
|
my (@rets, $isReal);
|
||||||
foreach my $sdev (devspec2array($a[0])) {
|
foreach my $sdev (devspec2array($a[0])) {
|
||||||
|
|
||||||
if(!defined($defs{$sdev})) {
|
if(!defined($defs{$sdev})) {
|
||||||
@ -1718,6 +1727,8 @@ CommandDeleteAttr($$)
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$isReal = 1 if(!$defs{$sdev}{TEMPORARY});
|
||||||
|
|
||||||
if(@a == 1) {
|
if(@a == 1) {
|
||||||
delete($attr{$sdev});
|
delete($attr{$sdev});
|
||||||
} else {
|
} else {
|
||||||
@ -1726,6 +1737,7 @@ CommandDeleteAttr($$)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$lastDefChange++ if($isReal);
|
||||||
return join("\n", @rets);
|
return join("\n", @rets);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2025,6 +2037,7 @@ CommandRename($$)
|
|||||||
CallFn($new, "RenameFn", $new,$old);# ignore replies
|
CallFn($new, "RenameFn", $new,$old);# ignore replies
|
||||||
|
|
||||||
DoTrigger("global", "RENAMED $old $new", 1);
|
DoTrigger("global", "RENAMED $old $new", 1);
|
||||||
|
$lastDefChange++ if(!$defs{$new}{TEMPORARY});
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2158,8 +2171,7 @@ sub
|
|||||||
CommandAttr($$)
|
CommandAttr($$)
|
||||||
{
|
{
|
||||||
my ($cl, $param) = @_;
|
my ($cl, $param) = @_;
|
||||||
my $ret = undef;
|
my ($ret, $isReal, @a);
|
||||||
my @a;
|
|
||||||
|
|
||||||
@a = split(" ", $param, 3) if($param);
|
@a = split(" ", $param, 3) if($param);
|
||||||
|
|
||||||
@ -2234,6 +2246,8 @@ CommandAttr($$)
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$isReal = 1 if(!$defs{$sdev}{TEMPORARY});
|
||||||
|
|
||||||
$a[0] = $sdev;
|
$a[0] = $sdev;
|
||||||
$ret = CallFn($sdev, "AttrFn", "set", @a);
|
$ret = CallFn($sdev, "AttrFn", "set", @a);
|
||||||
if($ret) {
|
if($ret) {
|
||||||
@ -2258,6 +2272,8 @@ CommandAttr($$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$lastDefChange++ if($isReal);
|
||||||
Log 3, join(" ", @rets) if(!$cl && @rets);
|
Log 3, join(" ", @rets) if(!$cl && @rets);
|
||||||
return join("\n", @rets);
|
return join("\n", @rets);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user