mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-12 22:56:34 +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_use_zlib = 1;
|
||||
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.
|
||||
@ -93,6 +95,7 @@ my %FW_icons; # List of icons
|
||||
my @FW_iconDirs; # Directory search order for icons
|
||||
my $FW_RETTYPE; # image/png or the like
|
||||
my %FW_rooms; # hash of all rooms
|
||||
my @FW_roomsArr; # ordered list of rooms
|
||||
my %FW_groups; # hash of all groups
|
||||
my %FW_types; # device types, for sorting
|
||||
my %FW_hiddengroup;# hash of hidden groups
|
||||
@ -590,7 +593,11 @@ FW_answerCall($)
|
||||
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");
|
||||
|
||||
@ -791,6 +798,17 @@ FW_updateHashes()
|
||||
}
|
||||
|
||||
$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
|
||||
FW_roomIdx(\@$)
|
||||
FW_roomIdx($$)
|
||||
{
|
||||
my ($arr,$v) = @_;
|
||||
my ($index) = grep { $v =~ /^$arr->[$_]$/ } 0..$#$arr;
|
||||
@ -1084,22 +1102,10 @@ FW_roomOverview($)
|
||||
}
|
||||
$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
|
||||
foreach my $r (@rlist) {
|
||||
foreach my $r (@FW_roomsArr) {
|
||||
next if($r eq "hidden" || $FW_hiddenroom{$r});
|
||||
$FW_room = $r if(!$FW_room && $FW_ss);
|
||||
$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(%selectlist); # devices which want a "select"
|
||||
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 ".
|
||||
"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
|
||||
|
||||
$init_done = 0;
|
||||
$lastDefChange = 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/);
|
||||
|
||||
$init_done = 1;
|
||||
$lastDefChange = 1;
|
||||
|
||||
foreach my $d (keys %defs) {
|
||||
if($defs{$d}{IODevMissing}) {
|
||||
Log 3, "No I/O device found for $defs{$d}{NAME}";
|
||||
@ -1565,6 +1569,7 @@ CommandDefine($$)
|
||||
%ntfyHash = ();
|
||||
DoTrigger("global", "DEFINED $name", 1) if($init_done);
|
||||
}
|
||||
$lastDefChange++ if(!$hash{TEMPORARY});
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@ -1589,6 +1594,7 @@ CommandModify($$)
|
||||
"$a[0] $hash->{TYPE}".(defined($a[1]) ? " $a[1]" : ""));
|
||||
$hash->{DEF} = $hash->{OLDDEF} if($ret);
|
||||
delete($hash->{OLDDEF});
|
||||
$lastDefChange++ if(!$hash->{TEMPORARY});
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@ -1651,7 +1657,7 @@ CommandDelete($$)
|
||||
my ($cl, $def) = @_;
|
||||
return "Usage: delete <name>$namedef\n" if(!$def);
|
||||
|
||||
my @rets;
|
||||
my (@rets, $isReal);
|
||||
foreach my $sdev (devspec2array($def)) {
|
||||
if(!defined($defs{$sdev})) {
|
||||
push @rets, "Please define $sdev first";
|
||||
@ -1669,6 +1675,8 @@ CommandDelete($$)
|
||||
next;
|
||||
}
|
||||
|
||||
$isReal = 1 if(!$defs{$sdev}{TEMPORARY});
|
||||
|
||||
# Delete releated hashes
|
||||
foreach my $p (keys %selectlist) {
|
||||
if($selectlist{$p} && $selectlist{$p}{NAME} eq $sdev) {
|
||||
@ -1686,6 +1694,7 @@ CommandDelete($$)
|
||||
DoTrigger("global", "DELETED $sdev", 1) if(!$temporary);
|
||||
|
||||
}
|
||||
$lastDefChange++ if($isReal);
|
||||
return join("\n", @rets);
|
||||
}
|
||||
|
||||
@ -1698,7 +1707,7 @@ CommandDeleteAttr($$)
|
||||
my @a = split(" ", $def, 2);
|
||||
return "Usage: deleteattr <name> [<attrname>]\n$namedef" if(@a < 1);
|
||||
|
||||
my @rets;
|
||||
my (@rets, $isReal);
|
||||
foreach my $sdev (devspec2array($a[0])) {
|
||||
|
||||
if(!defined($defs{$sdev})) {
|
||||
@ -1718,6 +1727,8 @@ CommandDeleteAttr($$)
|
||||
next;
|
||||
}
|
||||
|
||||
$isReal = 1 if(!$defs{$sdev}{TEMPORARY});
|
||||
|
||||
if(@a == 1) {
|
||||
delete($attr{$sdev});
|
||||
} else {
|
||||
@ -1726,6 +1737,7 @@ CommandDeleteAttr($$)
|
||||
|
||||
}
|
||||
|
||||
$lastDefChange++ if($isReal);
|
||||
return join("\n", @rets);
|
||||
}
|
||||
|
||||
@ -2025,6 +2037,7 @@ CommandRename($$)
|
||||
CallFn($new, "RenameFn", $new,$old);# ignore replies
|
||||
|
||||
DoTrigger("global", "RENAMED $old $new", 1);
|
||||
$lastDefChange++ if(!$defs{$new}{TEMPORARY});
|
||||
return undef;
|
||||
}
|
||||
|
||||
@ -2158,8 +2171,7 @@ sub
|
||||
CommandAttr($$)
|
||||
{
|
||||
my ($cl, $param) = @_;
|
||||
my $ret = undef;
|
||||
my @a;
|
||||
my ($ret, $isReal, @a);
|
||||
|
||||
@a = split(" ", $param, 3) if($param);
|
||||
|
||||
@ -2234,6 +2246,8 @@ CommandAttr($$)
|
||||
next;
|
||||
}
|
||||
|
||||
$isReal = 1 if(!$defs{$sdev}{TEMPORARY});
|
||||
|
||||
$a[0] = $sdev;
|
||||
$ret = CallFn($sdev, "AttrFn", "set", @a);
|
||||
if($ret) {
|
||||
@ -2258,6 +2272,8 @@ CommandAttr($$)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$lastDefChange++ if($isReal);
|
||||
Log 3, join(" ", @rets) if(!$cl && @rets);
|
||||
return join("\n", @rets);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user