2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-07 19:04:20 +00:00

Sonos: DeleteFn eingebaut

git-svn-id: https://svn.fhem.de/fhem/trunk@7324 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rleins 2014-12-26 13:59:37 +00:00
parent 411c433da6
commit 2dd26490f5
2 changed files with 75 additions and 5 deletions

View File

@ -32,8 +32,8 @@
# Changelog
#
# SVN-History:
# 26.12.2014:
# ReportUnresponsiveDevice hat manchmal versucht, die Mitteilung an "sich selbst" zu senden, was naturgemäß nicht klappen kann.
# 26.12.2014:
# ReportUnresponsiveDevice hat manchmal versucht, die Mitteilung an "sich selbst" zu senden, was naturgemäß nicht klappen kann.
#
# 2.6: Die Zeichenkodierung bei Datenübernahme vom Zoneplayer kann nun über das Attribut characterDecoding eingestellt werden
# Bei Gruppen-/LineIn-/SPDIF-Wiedergabe wird wieder die liefernde Zone angezeigt (als Albumname)
@ -407,6 +407,7 @@ sub SONOS_Initialize ($) {
# Normal Defines
$hash->{DefFn} = 'SONOS_Define';
$hash->{UndefFn} = 'SONOS_Undef';
$hash->{DeleteFn} = 'SONOS_Delete';
$hash->{ShutdownFn} = 'SONOS_Shutdown';
$hash->{ReadFn} = "SONOS_Read";
$hash->{ReadyFn} = "SONOS_Ready";
@ -5682,12 +5683,43 @@ sub SONOS_getSonosPlayerByRoomName($) {
########################################################################################
sub SONOS_Undef ($$) {
my ($hash, $name) = @_;
RemoveInternalTimer($hash);
DevIo_SimpleWrite($hash, "disconnect\n", 0);
DevIo_CloseDev($hash);
return undef;
}
########################################################################################
#
# SONOS_Delete - Implements DeleteFn function
#
# Parameter hash = hash of the master, name
#
########################################################################################
sub SONOS_Delete($$) {
my ($hash, $name) = @_;
# Erst alle SonosPlayer-Devices löschen
for my $player (SONOS_getAllSonosplayerDevices()) {
CommandDelete(undef, $player->{NAME});
}
# Den SubProzess beenden
# Wenn wir einen eigenen UPnP-Server gestartet haben, diesen hier auch wieder beenden, ansonsten nichts tun...
if ($SONOS_StartedOwnUPnPServer) {
# Da die Verbindung bereits durch UndefFn beendet wurde, muss sie hier neu aufgebaut werden, damit ich den Subprozess selbst beenden kann (vorher wurde nur die Verbindung beendet)...
DevIo_OpenDev($hash, 1, undef);
DevIo_SimpleWrite($hash, "shutdown\n", 0);
DevIo_CloseDev($hash);
}
# Etwas warten...
select(undef, undef, undef, 1);
# Das Entfernen des Sonos-Devices selbst übernimmt Fhem
return undef;
}
@ -5713,7 +5745,7 @@ sub SONOS_Shutdown ($$) {
DevIo_CloseDev($hash);
select(undef, undef, undef, 2);
return undef;
}

View File

@ -175,6 +175,7 @@ sub SONOSPLAYER_Initialize ($) {
$hash->{DefFn} = "SONOSPLAYER_Define";
$hash->{UndefFn} = "SONOSPLAYER_Undef";
$hash->{DeleteFn} = "SONOSPLAYER_Delete";
$hash->{GetFn} = "SONOSPLAYER_Get";
$hash->{SetFn} = "SONOSPLAYER_Set";
$hash->{StateFn} = "SONOSPLAYER_State";
@ -725,6 +726,43 @@ sub SONOSPLAYER_Undef ($) {
return undef;
}
########################################################################################
#
# SONOSPLAYER_Delete - Implements DeleteFn function
#
# Parameter hash = hash of the master, name
#
########################################################################################
sub SONOSPLAYER_Delete($$) {
my ($hash, $name) = @_;
# Alle automatisch erzeugten Komponenten mit entfernen, sofern es sie noch gibt...
SONOSPLAYER_DeleteIfExists($hash->{NAME}.'RC_Notify');
SONOSPLAYER_DeleteIfExists($hash->{NAME}.'RC_Weblink');
SONOSPLAYER_DeleteIfExists($hash->{NAME}.'RC');
SONOSPLAYER_DeleteIfExists($hash->{NAME}.'RG');
SONOSPLAYER_DeleteIfExists($hash->{NAME}.'RG_Favourites');
SONOSPLAYER_DeleteIfExists($hash->{NAME}.'RG_Playlists');
SONOSPLAYER_DeleteIfExists($hash->{NAME}.'RG_Radios');
# Das Entfernen des Sonos-Devices selbst übernimmt Fhem
return undef;
}
########################################################################################
#
# SONOSPLAYER_DeleteIfExists - Deletes the Device with the given Name
#
# Parameter hash = hash of the master, name
#
########################################################################################
sub SONOSPLAYER_DeleteIfExists($) {
my ($name) = @_;
CommandDelete(undef, $name) if ($main::defs{$name});
}
########################################################################################
#
# SONOSPLAYER_Log - Log to the normal Log-command with additional Infomations like Thread-ID and the prefix 'SONOSPLAYER'