Ebenenhistory behalten bei Aufloesung.
Bei Aufloesung einer Ebene wird die History erstmal
behalten und spaeter erneut verwendet, wenn die
Ebene neu erstellt oder wieder aktiviert wird.
Die History wird im reset entfernt, wenn die
inaktive Ebene aus channelC expired wird.
Bei manuellem Loeschen (remove_channel) der Ebene
wird die History hingegen direkt geloescht.
Hierbei werden channelC und channelH auch bereinigt,
wenn die Ebene nur inaktiv im channelC ist.
Change-Id: I26b3b4000736a5e2ed780ca30919b44da9920fc9
diff --git a/p/daemon/channeld.c b/p/daemon/channeld.c
index 47ce0e9..3dade1c 100644
--- a/p/daemon/channeld.c
+++ b/p/daemon/channeld.c
@@ -572,10 +572,15 @@
// TODO: Zeit auf 2-3 Tage erhoehen.
// TODO 2: Zeit dynamisch machen und nur expiren, wenn mehr als n Eintraege.
// Zeit reduzieren, bis nur noch n/2 Eintraege verbleiben.
- channelC = filter_indices(channelC, function int (string ch_name)
- {
- return (channelC[ch_name][2] + 43200 > time());
- });
+ channelC = filter(channelC,
+ function int (string ch_name, <string|int>* data)
+ {
+ if (channelC[ch_name][2] + 43200 > time())
+ return 1;
+ // Ebenendaten koennen weg, inkl. History, die also auch loeschen
+ m_delete(channelH, ch_name);
+ return 0;
+ });
if (save_me_soon)
{
@@ -860,10 +865,9 @@
// Ebene loeschen
m_delete(channels, lower_case(ch));
- // History wird ebenfalls geloescht
- // TODO: History cachen und wiederherstellen, wenn eine namensgleiche
- // Ebene neu erstellt wird.
- m_delete(channelH, lower_case(ch));
+ // History wird nicht geloescht, damit sie noch verfuegbar ist, wenn die
+ // Ebene spaeter nochmal neu erstellt wird. Sie wird dann bereinigt, wenn
+ // channelC bereinigt wird.
stats["dispose"]++;
save_me_soon = 1;
@@ -1034,15 +1038,14 @@
// Anschliessend werden die Ebenendaten geloescht.
m_delete(channels, lower_case(ch));
- // Wird eine Ebene entfernt, kann auch ihre History weg.
- m_delete(channelH, lower_case(ch));
-
// Zaehler fuer zerstoerte Ebenen in der Statistik erhoehen.
stats["dispose"]++;
}
-
- if (channelC[lower_case(ch)])
- m_delete(channelC, lower_case(ch));
+ // Dies auuserhalb des Blocks oben ermoeglicht es, inaktive Ebenen bzw.
+ // deren Daten zu entfernen.
+ m_delete(channelC, lower_case(ch));
+ // In diesem Fall der gezielten Loeschung wird auch die History geloescht.
+ m_delete(channelH, lower_case(ch));
save_me_soon = 1;
return (0);