mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-01 01:09:47 +00:00
SONOS: Added RepeatOne and DeleteFromQueue, fixed a bug according to the fieldType-Reading
git-svn-id: https://svn.fhem.de/fhem/trunk@10179 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
ec40aced3f
commit
a84b15ee04
@ -49,6 +49,10 @@
|
||||
# Cover von Amazon funktionieren nicht
|
||||
#
|
||||
# SVN-History:
|
||||
# 15.12.2015
|
||||
# Es gibt eine neue Funktionalität an den Sonosplayern: Repeat für einen einzelnen Titel. Durch diese Umstellung wurde der Repeat-Zustand nicht korrekt erkannt. Dafür gibt es jetzt noch einen zusätzlichen Setter und ein zusätzliches Reading: "RepeatOne".
|
||||
# Es gibt eine neue Funktion "DeleteFromQueue", die Titel aus der aktuellen Abspielliste entfernen kann. Angegeben wird der Index des Elements / der Elemente.
|
||||
# Das Reading "fieldType" wurde nicht ordnungsgemäß auf Leer gesetzt, wenn du Gruppierung aufgelöst wurde.
|
||||
# 08.12.2015
|
||||
# Bei der Erkennung von Streams beim Restore von PlayURITemp wurde ein neues Format nicht berücksichtigt.
|
||||
# Bei der Verwendung von "set Sonos Groups Reset" tauchte eine Fehlermeldung wegen eines Leerstrings auf.
|
||||
@ -74,9 +78,6 @@
|
||||
# 02.08.2015
|
||||
# uri_escape() umgestellt, sodass auch UTF8-Sonderzeichen übersetzt werden
|
||||
# Google-Translator-URL parametrisiert und um die mittlerweile notwendigen Parameter 'client=t' und 'prev=input' erweitert
|
||||
# 12.07.2015
|
||||
# Es gibt zwei neue Setter "GroupVolumeU" und "GroupVolumeD", um die Gruppenlautstärke um 'VolumeStep'-Einheiten zu erhöhen oder zu verringern.
|
||||
# Innerhalb des SubProzesses wurden die Devicenamen der bereits in Fhem definierten Player nicht korrekt verwendet. Das machte sich erst mit dem neuen Feature Bookmarks bemerkbar.
|
||||
#
|
||||
########################################################################################
|
||||
#
|
||||
@ -1216,6 +1217,7 @@ sub SONOS_Read($) {
|
||||
SONOS_readingsBulkUpdateIfChanged($hash, "transportState", $current{TransportState});
|
||||
SONOS_readingsBulkUpdateIfChanged($hash, "Shuffle", $current{Shuffle});
|
||||
SONOS_readingsBulkUpdateIfChanged($hash, "Repeat", $current{Repeat});
|
||||
SONOS_readingsBulkUpdateIfChanged($hash, "RepeatOne", $current{RepeatOne});
|
||||
SONOS_readingsBulkUpdateIfChanged($hash, "CrossfadeMode", $current{CrossfadeMode});
|
||||
SONOS_readingsBulkUpdateIfChanged($hash, "SleepTimer", $current{SleepTimer});
|
||||
SONOS_readingsBulkUpdateIfChanged($hash, "AlarmRunning", $current{AlarmRunning});
|
||||
@ -2394,22 +2396,16 @@ sub SONOS_Discover() {
|
||||
|
||||
if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn})) {
|
||||
my $result = $SONOS_AVTransportControlProxy{$udn}->GetTransportSettings(0)->getValue('PlayMode');
|
||||
my ($shuffle, $repeat, $repeatOne) = SONOS_GetShuffleRepeatStates($result);
|
||||
|
||||
my $shuffle = $result eq 'SHUFFLE' || $result eq 'SHUFFLE_NOREPEAT';
|
||||
my $repeat = $result eq 'SHUFFLE' || $result eq 'REPEAT_ALL';
|
||||
$value1 = !$shuffle if (!defined($value1));
|
||||
|
||||
$value1 = !$shuffle if (!$value1);
|
||||
|
||||
my $newMode = 'NORMAL';
|
||||
$newMode = 'SHUFFLE' if ($value1 && $repeat);
|
||||
$newMode = 'SHUFFLE_NOREPEAT' if ($value1 && !$repeat);
|
||||
$newMode = 'REPEAT_ALL' if (!$value1 && $repeat);
|
||||
|
||||
$SONOS_AVTransportControlProxy{$udn}->SetPlayMode(0, $newMode);
|
||||
$SONOS_AVTransportControlProxy{$udn}->SetPlayMode(0, SONOS_GetShuffleRepeatString($value1, $repeat, $repeatOne));
|
||||
|
||||
# Wert wieder abholen, um das wahre Ergebnis anzeigen zu können
|
||||
$result = $SONOS_AVTransportControlProxy{$udn}->GetTransportSettings(0)->getValue('PlayMode');
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($result eq 'SHUFFLE' || $result eq 'SHUFFLE_NOREPEAT'));
|
||||
($shuffle, $repeat, $repeatOne) = SONOS_GetShuffleRepeatStates($result);
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($shuffle));
|
||||
}
|
||||
} elsif ($workType eq 'setRepeat') {
|
||||
my $value1 = undef;
|
||||
@ -2420,22 +2416,36 @@ sub SONOS_Discover() {
|
||||
|
||||
if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn})) {
|
||||
my $result = $SONOS_AVTransportControlProxy{$udn}->GetTransportSettings(0)->getValue('PlayMode');
|
||||
my ($shuffle, $repeat, $repeatOne) = SONOS_GetShuffleRepeatStates($result);
|
||||
|
||||
my $shuffle = $result eq 'SHUFFLE' || $result eq 'SHUFFLE_NOREPEAT';
|
||||
my $repeat = $result eq 'SHUFFLE' || $result eq 'REPEAT_ALL';
|
||||
$value1 = !$repeat if (!defined($value1));
|
||||
|
||||
$value1 = !$repeat if (!$value1);
|
||||
|
||||
my $newMode = 'NORMAL';
|
||||
$newMode = 'SHUFFLE' if ($value1 && $shuffle);
|
||||
$newMode = 'SHUFFLE_NOREPEAT' if (!$value1 && $shuffle);
|
||||
$newMode = 'REPEAT_ALL' if ($value1 && !$shuffle);
|
||||
|
||||
$SONOS_AVTransportControlProxy{$udn}->SetPlayMode(0, $newMode);
|
||||
$SONOS_AVTransportControlProxy{$udn}->SetPlayMode(0, SONOS_GetShuffleRepeatString($shuffle, $value1, $repeatOne && !$value1));
|
||||
|
||||
# Wert wieder abholen, um das wahre Ergebnis anzeigen zu können
|
||||
$result = $SONOS_AVTransportControlProxy{$udn}->GetTransportSettings(0)->getValue('PlayMode');
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($result eq 'SHUFFLE' || $result eq 'REPEAT_ALL'));
|
||||
($shuffle, $repeat, $repeatOne) = SONOS_GetShuffleRepeatStates($result);
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($repeat));
|
||||
}
|
||||
} elsif ($workType eq 'setRepeatOne') {
|
||||
my $value1 = undef;
|
||||
|
||||
if ($params[0] ne '~~') {
|
||||
$value1 = SONOS_ConvertWordToNum($params[0]);
|
||||
}
|
||||
|
||||
if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn})) {
|
||||
my $result = $SONOS_AVTransportControlProxy{$udn}->GetTransportSettings(0)->getValue('PlayMode');
|
||||
my ($shuffle, $repeat, $repeatOne) = SONOS_GetShuffleRepeatStates($result);
|
||||
|
||||
$value1 = !$repeatOne if (!defined($value1));
|
||||
|
||||
$SONOS_AVTransportControlProxy{$udn}->SetPlayMode(0, SONOS_GetShuffleRepeatString($shuffle, $repeat && !$value1, $value1));
|
||||
|
||||
# Wert wieder abholen, um das wahre Ergebnis anzeigen zu können
|
||||
$result = $SONOS_AVTransportControlProxy{$udn}->GetTransportSettings(0)->getValue('PlayMode');
|
||||
($shuffle, $repeat, $repeatOne) = SONOS_GetShuffleRepeatStates($result);
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($repeatOne));
|
||||
}
|
||||
} elsif ($workType eq 'setCrossfadeMode') {
|
||||
my $value1 = SONOS_ConvertWordToNum($params[0]);
|
||||
@ -3353,6 +3363,31 @@ sub SONOS_Discover() {
|
||||
}
|
||||
}
|
||||
}
|
||||
} elsif ($workType eq 'deleteFromQueue') {
|
||||
$params[0] = uri_unescape($params[0]);
|
||||
|
||||
# Simple Check...
|
||||
if ($params[0] !~ m/^[\.\,\d]*$/) {
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': Parameter Error: '.$params[0]);
|
||||
return;
|
||||
}
|
||||
my @elemList = sort { $a <=> $b } SONOS_DeleteDoublettes(eval('('.$params[0].')'));
|
||||
SONOS_Log undef, 5, 'DeleteFromQueue: Index-Liste: '.Dumper(\@elemList);
|
||||
|
||||
if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn}) && SONOS_CheckProxyObject($udn, $SONOS_ContentDirectoryControlProxy{$udn})) {
|
||||
# Maximale Indizies bestimmen
|
||||
my $maxElems = $SONOS_ContentDirectoryControlProxy{$udn}->Browse('Q:0', 'BrowseDirectChildren', '', 0, 0, '')->getValue('TotalMatches');
|
||||
|
||||
my $deleteCounter = 0;
|
||||
foreach my $elem (@elemList) {
|
||||
if (($elem > 0) && ($elem <= $maxElems)) {
|
||||
$deleteCounter++ if ($SONOS_AVTransportControlProxy{$udn}->RemoveTrackFromQueue(0, 'Q:0/'.($elem - $deleteCounter), 0)->isSuccessful());
|
||||
}
|
||||
}
|
||||
|
||||
$maxElems = $SONOS_ContentDirectoryControlProxy{$udn}->Browse('Q:0', 'BrowseDirectChildren', '', 0, 0, '')->getValue('TotalMatches');
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': Deleted '.$deleteCounter.' elems. In list are now '.$maxElems.' elems.');
|
||||
}
|
||||
} elsif ($workType eq 'deletePlaylist') {
|
||||
my $regSearch = ($params[0] =~ m/^ *\/(.*)\/ *$/);
|
||||
my $playlistName = $1 if ($regSearch);
|
||||
@ -3817,6 +3852,52 @@ sub SONOS_Fisher_Yates_Shuffle($) {
|
||||
}
|
||||
}
|
||||
|
||||
########################################################################################
|
||||
#
|
||||
# SONOS_GetShuffleRepeatStates - Retreives the information according shuffle and repeat
|
||||
#
|
||||
########################################################################################
|
||||
sub SONOS_GetShuffleRepeatStates($) {
|
||||
my ($data) = @_;
|
||||
|
||||
my $shuffle = $data =~ m/SHUFFLE/;
|
||||
my $repeat = $data eq 'SHUFFLE' || $data eq 'REPEAT_ALL';
|
||||
my $repeatOne = $data =~ m/REPEAT_ONE/;
|
||||
|
||||
return ($shuffle, $repeat, $repeatOne);
|
||||
}
|
||||
|
||||
########################################################################################
|
||||
#
|
||||
# SONOS_GetShuffleRepeatString - Generates the information string according shuffle and repeat
|
||||
#
|
||||
########################################################################################
|
||||
sub SONOS_GetShuffleRepeatString($$$) {
|
||||
my ($shuffle, $repeat, $repeatOne) = @_;
|
||||
|
||||
my $newMode = 'NORMAL';
|
||||
$newMode = 'SHUFFLE' if ($shuffle && $repeat && $repeatOne);
|
||||
$newMode = 'SHUFFLE' if ($shuffle && $repeat && !$repeatOne);
|
||||
$newMode = 'SHUFFLE_REPEAT_ONE' if ($shuffle && !$repeat && $repeatOne);
|
||||
$newMode = 'SHUFFLE_NOREPEAT' if ($shuffle && !$repeat && !$repeatOne);
|
||||
|
||||
$newMode = 'REPEAT_ALL' if (!$shuffle && $repeat && $repeatOne);
|
||||
$newMode = 'REPEAT_ALL' if (!$shuffle && $repeat && !$repeatOne);
|
||||
$newMode = 'REPEAT_ONE' if (!$shuffle && !$repeat && $repeatOne);
|
||||
$newMode = 'NORMAL' if (!$shuffle && !$repeat && !$repeatOne);
|
||||
|
||||
return $newMode;
|
||||
}
|
||||
|
||||
########################################################################################
|
||||
#
|
||||
# SONOS_DeleteDoublettes - Deletes duplicate entries in the given array
|
||||
#
|
||||
########################################################################################
|
||||
sub SONOS_DeleteDoublettes{
|
||||
return keys %{{ map { $_ => 1 } @_ }};
|
||||
}
|
||||
|
||||
########################################################################################
|
||||
#
|
||||
# SONOS_Trim - Trim the given string
|
||||
@ -5588,6 +5669,7 @@ sub SONOS_GetReadingsToCurrentHash($$) {
|
||||
$current{TransportState} = 'ERROR';
|
||||
$current{Shuffle} = 0;
|
||||
$current{Repeat} = 0;
|
||||
$current{RepeatOne} = 0;
|
||||
$current{CrossfadeMode} = 0;
|
||||
$current{NumberOfTracks} = '';
|
||||
$current{Track} = '';
|
||||
@ -5626,6 +5708,7 @@ sub SONOS_GetReadingsToCurrentHash($$) {
|
||||
$current{TransportState} = ReadingsVal($name, 'transportState', 'ERROR');
|
||||
$current{Shuffle} = ReadingsVal($name, 'Shuffle', 0);
|
||||
$current{Repeat} = ReadingsVal($name, 'Repeat', 0);
|
||||
$current{RepeatOne} = ReadingsVal($name, 'RepeatOne', 0);
|
||||
$current{CrossfadeMode} = ReadingsVal($name, 'CrossfadeMode', 0);
|
||||
$current{NumberOfTracks} = ReadingsVal($name, 'numberOfTracks', '');
|
||||
$current{Track} = ReadingsVal($name, 'currentTrack', '');
|
||||
@ -5840,8 +5923,10 @@ sub SONOS_ServiceCallback($$) {
|
||||
# PlayMode ermitteln
|
||||
my $currentPlayMode = 'NORMAL';
|
||||
$currentPlayMode = $1 if ($properties{LastChangeDecoded} =~ m/<CurrentPlayMode.*?val="(.*?)".*?\/>/i);
|
||||
SONOS_Client_Notifier('SetCurrent:Shuffle:1') if ($currentPlayMode eq 'SHUFFLE' || $currentPlayMode eq 'SHUFFLE_NOREPEAT');
|
||||
SONOS_Client_Notifier('SetCurrent:Repeat:1') if ($currentPlayMode eq 'SHUFFLE' || $currentPlayMode eq 'REPEAT_ALL');
|
||||
my ($shuffle, $repeat, $repeatOne) = SONOS_GetShuffleRepeatStates($currentPlayMode);
|
||||
SONOS_Client_Notifier('SetCurrent:Shuffle:1') if ($shuffle);
|
||||
SONOS_Client_Notifier('SetCurrent:Repeat:1') if ($repeat);
|
||||
SONOS_Client_Notifier('SetCurrent:RepeatOne:1') if ($repeatOne);
|
||||
|
||||
# CrossfadeMode ermitteln
|
||||
SONOS_Client_Notifier('SetCurrent:CrossfadeMode:'.$1) if ($properties{LastChangeDecoded} =~ m/<CurrentCrossfadeMode.*?val="(\d+)".*?\/>/i);
|
||||
@ -7157,7 +7242,11 @@ sub SONOS_ZoneGroupTopologyCallback($$) {
|
||||
}
|
||||
|
||||
SONOS_Log undef, 4, 'Retrieved TopoType: '.$topoType;
|
||||
$fieldType = substr($topoType, 1) if ($topoType ne '');
|
||||
if ($topoType ne '') {
|
||||
$fieldType = substr($topoType, 1);
|
||||
} else {
|
||||
$fieldType = '';
|
||||
}
|
||||
|
||||
# Für den Aliasnamen schöne Bezeichnungen ermitteln...
|
||||
my $aliasSuffix = '';
|
||||
|
@ -85,6 +85,7 @@ my %sets = (
|
||||
'StartPlaylist' => 'playlistname [ClearPlaylist]',
|
||||
'SavePlaylist' => 'playlistname',
|
||||
'DeletePlaylist' => 'playlistname',
|
||||
'DeleteFromQueue' => 'PerlNumberListOfIndizies',
|
||||
'CurrentPlaylist' => '',
|
||||
'EmptyPlaylist' => '',
|
||||
'LoadFavourite' => 'favouritename',
|
||||
@ -99,11 +100,13 @@ my %sets = (
|
||||
'Mute' => 'state',
|
||||
'Shuffle' => 'state',
|
||||
'Repeat' => 'state',
|
||||
'RepeatOne' => 'state',
|
||||
'CrossfadeMode' => 'state',
|
||||
'LEDState' => 'state',
|
||||
'MuteT' => '',
|
||||
'ShuffleT' => '',
|
||||
'RepeatT' => '',
|
||||
'RepeatOneT' => '',
|
||||
'VolumeD' => '',
|
||||
'VolumeU' => '',
|
||||
'Volume' => 'volumelevel(0..100) [RampType]',
|
||||
@ -396,7 +399,7 @@ sub SONOSPLAYER_Set($@) {
|
||||
$key = $key.':slider,-100,1,100' if ($key eq 'Balance');
|
||||
$key = $key.':slider,-15,1,15' if ($key eq 'SubGain');
|
||||
$key = $key.':slider,-15,1,15' if ($key eq 'SurroundLevel');
|
||||
$key = $key.':slider,1,1,'.ReadingsVal($hash->{NAME}, 'numberOfTracks', 0) if ($key eq 'currentTrack');
|
||||
$key = $key.':slider,1,1,'.ReadingsVal($hash->{NAME}, 'numberOfTracks', 0) if (($key eq 'currentTrack') || ($key eq 'track'));
|
||||
}
|
||||
|
||||
$key = $key.':0,1,2' if ($key eq 'SubPolarity');
|
||||
@ -418,6 +421,7 @@ sub SONOSPLAYER_Set($@) {
|
||||
|| (lc($key) eq 'outputfixed')
|
||||
|| (lc($key) eq 'resetattributestodefault')
|
||||
|| (lc($key) eq 'repeat')
|
||||
|| (lc($key) eq 'repeatone')
|
||||
|| (lc($key) eq 'shuffle'));
|
||||
|
||||
# Iconauswahl einsetzen
|
||||
@ -577,6 +581,16 @@ sub SONOSPLAYER_Set($@) {
|
||||
$udn = $hash->{UDN};
|
||||
|
||||
SONOS_DoWork($udn, 'setRepeat', '~~');
|
||||
} elsif (lc($key) eq 'repeatone') {
|
||||
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
|
||||
$udn = $hash->{UDN};
|
||||
|
||||
SONOS_DoWork($udn, 'setRepeatOne', $value);
|
||||
} elsif (lc($key) eq 'repeatonet') {
|
||||
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
|
||||
$udn = $hash->{UDN};
|
||||
|
||||
SONOS_DoWork($udn, 'setRepeatOne', '~~');
|
||||
} elsif (lc($key) eq 'crossfademode') {
|
||||
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
|
||||
$udn = $hash->{UDN};
|
||||
@ -680,6 +694,13 @@ sub SONOSPLAYER_Set($@) {
|
||||
}
|
||||
} elsif (lc($key) eq 'deleteplaylist') {
|
||||
SONOS_DoWork($udn, 'deletePlaylist', $value);
|
||||
} elsif (lc($key) eq 'deletefromqueue') {
|
||||
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
|
||||
$udn = $hash->{UDN};
|
||||
|
||||
$value =~ s/ //g;
|
||||
|
||||
SONOS_DoWork($udn, 'deleteFromQueue', uri_escape($value));
|
||||
} elsif (lc($key) eq 'currentplaylist') {
|
||||
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
|
||||
$udn = $hash->{UDN};
|
||||
@ -1201,6 +1222,12 @@ sub SONOSPLAYER_Log($$$) {
|
||||
<li><a name="SONOSPLAYER_setter_Repeat">
|
||||
<b><code>Repeat <State></code></b></a>
|
||||
<br /> Sets the repeat-state. Retrieves the new state as the result.</li>
|
||||
<li><a name="SONOSPLAYER_setter_RepeatOne">
|
||||
<b><code>RepeatOne <State></code></b></a>
|
||||
<br /> Sets the repeatOne-state. Retrieves the new state as the result.</li>
|
||||
<li><a name="SONOSPLAYER_setter_RepeatOneT">
|
||||
<b><code>RepeatOneT</code></b></a>
|
||||
<br /> Toggles the repeatOne-state. Retrieves the new state as the result.</li>
|
||||
<li><a name="SONOSPLAYER_setter_RepeatT">
|
||||
<b><code>RepeatT</code></b></a>
|
||||
<br /> Toggles the repeat-state. Retrieves the new state as the result.</li>
|
||||
@ -1239,6 +1266,9 @@ sub SONOSPLAYER_Log($$$) {
|
||||
<li><a name="SONOSPLAYER_setter_CurrentPlaylist">
|
||||
<b><code>CurrentPlaylist</code></b></a>
|
||||
<br /> Sets the current playing to the current queue, but doesn't start playing (e.g. after hearing of a radiostream, where the current playlist still exists but is currently "not in use")</li>
|
||||
<li><a name="SONOSPLAYER_setter_DeleteFromQueue">
|
||||
<b><code>DeleteFromQueue <index_of_elems></code></b></a>
|
||||
<br /> Deletes the elements from the current queue with the given indices. You can use the ususal perl-array-formats like "1..12,17,20..22". The indices reference to the position in the current view of the list (this usually differs between the normal playmode and the shuffleplaymode).</li>
|
||||
<li><a name="SONOSPLAYER_setter_DeletePlaylist">
|
||||
<b><code>DeletePlaylist</code></b></a>
|
||||
<br /> Deletes the Sonos-Playlist with the given name. According to the possibilities of the playlistname have a close look at LoadPlaylist.</li>
|
||||
@ -1367,7 +1397,7 @@ sub SONOSPLAYER_Log($$$) {
|
||||
<li><a name="SONOSPLAYER_attribut_generateInfoSummarize4"><b><code>generateInfoSummarize4 <string></code></b>
|
||||
</a><br /> Generates the reading 'InfoSummarize4' with the given format. More Information on this in the examples-section.</li>
|
||||
<li><a name="SONOSPLAYER_attribut_stateVariable"><b><code>stateVariable <string></code></b>
|
||||
</a><br /> One of (TransportState,NumberOfTracks,Track,TrackURI,TrackDuration,Title,Artist,Album,OriginalTrackNumber,AlbumArtist,<br />Sender,SenderCurrent,SenderInfo,StreamAudio,NormalAudio,AlbumArtURI,nextTrackDuration,nextTrackURI,nextAlbumArtURI,<br />nextTitle,nextArtist,nextAlbum,nextAlbumArtist,nextOriginalTrackNumber,Volume,Mute,Shuffle,Repeat,CrossfadeMode,Balance,<br />HeadphoneConnected,SleepTimer,Presence,RoomName,SaveRoomName,PlayerType,Location,SoftwareRevision,SerialNum,InfoSummarize1,<br />InfoSummarize2,InfoSummarize3,InfoSummarize4). Defines, which variable has to be copied to the content of the state-variable.</li>
|
||||
</a><br /> One of (TransportState,NumberOfTracks,Track,TrackURI,TrackDuration,Title,Artist,Album,OriginalTrackNumber,AlbumArtist,<br />Sender,SenderCurrent,SenderInfo,StreamAudio,NormalAudio,AlbumArtURI,nextTrackDuration,nextTrackURI,nextAlbumArtURI,<br />nextTitle,nextArtist,nextAlbum,nextAlbumArtist,nextOriginalTrackNumber,Volume,Mute,Shuffle,Repeat,RepeatOne,CrossfadeMode,Balance,<br />HeadphoneConnected,SleepTimer,Presence,RoomName,SaveRoomName,PlayerType,Location,SoftwareRevision,SerialNum,InfoSummarize1,<br />InfoSummarize2,InfoSummarize3,InfoSummarize4). Defines, which variable has to be copied to the content of the state-variable.</li>
|
||||
</ul></li>
|
||||
<li><b>Controloptions</b><ul>
|
||||
<li><a name="SONOSPLAYER_attribut_maxVolume"><b><code>maxVolume <int></code></b>
|
||||
@ -1392,7 +1422,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
|
||||
<li><a name="SONOSPLAYER_examples_InfoSummarize">Format of InfoSummarize:</a><br />
|
||||
<code>infoSummarizeX := <NormalAudio>:summarizeElem:</NormalAudio> <StreamAudio>:summarizeElem:</StreamAudio>|:summarizeElem:</code><br />
|
||||
<code>:summarizeElem: := <:variable:[ prefix=":text:"][ suffix=":text:"][ instead=":text:"][ ifempty=":text:"]/[ emptyVal=":text:"]></code><br />
|
||||
<code>:variable: := TransportState|NumberOfTracks|Track|TrackURI|TrackDuration|Title|Artist|Album|OriginalTrackNumber|AlbumArtist|<br />Sender|SenderCurrent|SenderInfo|StreamAudio|NormalAudio|AlbumArtURI|nextTrackDuration|nextTrackURI|nextAlbumArtURI|<br />nextTitle|nextArtist|nextAlbum|nextAlbumArtist|nextOriginalTrackNumber|Volume|Mute|Shuffle|Repeat|CrossfadeMode|Balance|<br />HeadphoneConnected|SleepTimer|Presence|RoomName|SaveRoomName|PlayerType|Location|SoftwareRevision|SerialNum|InfoSummarize1|<br />InfoSummarize2|InfoSummarize3|InfoSummarize4</code><br />
|
||||
<code>:variable: := TransportState|NumberOfTracks|Track|TrackURI|TrackDuration|Title|Artist|Album|OriginalTrackNumber|AlbumArtist|<br />Sender|SenderCurrent|SenderInfo|StreamAudio|NormalAudio|AlbumArtURI|nextTrackDuration|nextTrackURI|nextAlbumArtURI|<br />nextTitle|nextArtist|nextAlbum|nextAlbumArtist|nextOriginalTrackNumber|Volume|Mute|Shuffle|Repeat|RepeatOne|CrossfadeMode|Balance|<br />HeadphoneConnected|SleepTimer|Presence|RoomName|SaveRoomName|PlayerType|Location|SoftwareRevision|SerialNum|InfoSummarize1|<br />InfoSummarize2|InfoSummarize3|InfoSummarize4</code><br />
|
||||
<code>:text: := [Any text without double-quotes]</code><br /></li>
|
||||
</ul>
|
||||
|
||||
@ -1551,6 +1581,12 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
|
||||
<li><a name="SONOSPLAYER_setter_Repeat">
|
||||
<b><code>Repeat <State></code></b></a>
|
||||
<br /> Legt den Zustand des Repeat-Zustands fest. Liefert den aktuell gültigen Repeat-Zustand.</li>
|
||||
<li><a name="SONOSPLAYER_setter_RepeatOne">
|
||||
<b><code>RepeatOne <State></code></b></a>
|
||||
<br /> Legt den Zustand des RepeatOne-Zustands fest. Liefert den aktuell gültigen RepeatOne-Zustand.</li>
|
||||
<li><a name="SONOSPLAYER_setter_RepeatOneT">
|
||||
<b><code>RepeatOneT</code></b></a>
|
||||
<br /> Schaltet den Zustand des RepeatOne-Zustands um. Liefert den aktuell gültigen RepeatOne-Zustand.</li>
|
||||
<li><a name="SONOSPLAYER_setter_RepeatT">
|
||||
<b><code>RepeatT</code></b></a>
|
||||
<br /> Schaltet den Zustand des Repeat-Zustands um. Liefert den aktuell gültigen Repeat-Zustand.</li>
|
||||
@ -1589,6 +1625,9 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
|
||||
<li><a name="SONOSPLAYER_setter_CurrentPlaylist">
|
||||
<b><code>CurrentPlaylist</code></b></a>
|
||||
<br /> Setzt den Abspielmodus auf die aktuelle Abspielliste, startet aber keine Wiedergabe (z.B. nach dem Hören eines Radiostreams, wo die aktuelle Abspielliste noch existiert, aber gerade "nicht verwendet" wird)</li>
|
||||
<li><a name="SONOSPLAYER_setter_DeleteFromQueue">
|
||||
<b><code>DeleteFromQueue <index_of_elems></code></b></a>
|
||||
<br /> Löscht die angegebenen Elemente aus der aktuellen Abspielliste. Die Angabe erfolgt über die Indizies der Titel. Es können die bei Perl-Array-üblichen Formate verwendet werden: "1..12,17,20..22". Die Indizies beziehen sich auf die aktuell angezeigte Reihenfolge (diese unterscheidet sich zwischen der normalen Abspielweise und dem Shufflemodus).</li>
|
||||
<li><a name="SONOSPLAYER_setter_DeletePlaylist">
|
||||
<b><code>DeletePlaylist</code></b></a>
|
||||
<br /> Löscht die bezeichnete Playliste. Zum möglichen Format des Playlistenamen unter LoadPlaylist nachsehen.</li>
|
||||
@ -1717,7 +1756,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
|
||||
<li><a name="SONOSPLAYER_attribut_generateInfoSummarize4"><b><code>generateInfoSummarize4 <string></code></b>
|
||||
</a><br /> Erzeugt das Reading 'InfoSummarize4' mit dem angegebenen Format. Mehr Informationen dazu im Bereich Beispiele.</li>
|
||||
<li><a name="SONOSPLAYER_attribut_stateVariable"><b><code>stateVariable <string></code></b>
|
||||
</a><br /> One of (TransportState,NumberOfTracks,Track,TrackURI,TrackDuration,Title,Artist,Album,OriginalTrackNumber,AlbumArtist,<br />Sender,SenderCurrent,SenderInfo,StreamAudio,NormalAudio,AlbumArtURI,nextTrackDuration,nextTrackURI,nextAlbumArtURI,<br />nextTitle,nextArtist,nextAlbum,nextAlbumArtist,nextOriginalTrackNumber,Volume,Mute,Shuffle,Repeat,CrossfadeMode,Balance,<br />HeadphoneConnected,SleepTimer,Presence,RoomName,SaveRoomName,PlayerType,Location,SoftwareRevision,SerialNum,InfoSummarize1,I<br />nfoSummarize2,InfoSummarize3,InfoSummarize4). Gibt an, welche Variable in das Reading <code>state</code> kopiert werden soll.</li>
|
||||
</a><br /> One of (TransportState,NumberOfTracks,Track,TrackURI,TrackDuration,Title,Artist,Album,OriginalTrackNumber,AlbumArtist,<br />Sender,SenderCurrent,SenderInfo,StreamAudio,NormalAudio,AlbumArtURI,nextTrackDuration,nextTrackURI,nextAlbumArtURI,<br />nextTitle,nextArtist,nextAlbum,nextAlbumArtist,nextOriginalTrackNumber,Volume,Mute,Shuffle,Repeat,RepeatOne,CrossfadeMode,Balance,<br />HeadphoneConnected,SleepTimer,Presence,RoomName,SaveRoomName,PlayerType,Location,SoftwareRevision,SerialNum,InfoSummarize1,I<br />nfoSummarize2,InfoSummarize3,InfoSummarize4). Gibt an, welche Variable in das Reading <code>state</code> kopiert werden soll.</li>
|
||||
</ul></li>
|
||||
<li><b>Steueroptionen</b><ul>
|
||||
<li><a name="SONOSPLAYER_attribut_maxVolume"><b><code>maxVolume <int></code></b>
|
||||
@ -1742,7 +1781,7 @@ Hier wird definiert, dass ein Event erzeugt werden soll, wenn innerhalb von 2 Se
|
||||
<li><a name="SONOSPLAYER_examples_InfoSummarize">Format von InfoSummarize:</a><br />
|
||||
<code>infoSummarizeX := <NormalAudio>:summarizeElem:</NormalAudio> <StreamAudio>:summarizeElem:</StreamAudio>|:summarizeElem:</code><br />
|
||||
<code>:summarizeElem: := <:variable:[ prefix=":text:"][ suffix=":text:"][ instead=":text:"][ ifempty=":text:"]/[ emptyVal=":text:"]></code><br />
|
||||
<code>:variable: := TransportState|NumberOfTracks|Track|TrackURI|TrackDuration|Title|Artist|Album|OriginalTrackNumber|AlbumArtist|<br />Sender|SenderCurrent|SenderInfo|StreamAudio|NormalAudio|AlbumArtURI|nextTrackDuration|nextTrackURI|nextAlbumArtURI|<br />nextTitle|nextArtist|nextAlbum|nextAlbumArtist|nextOriginalTrackNumber|Volume|Mute|Shuffle|Repeat|CrossfadeMode|Balance|<br />HeadphoneConnected|SleepTimer|Presence|RoomName|SaveRoomName|PlayerType|Location|SoftwareRevision|SerialNum|InfoSummarize1|<br />InfoSummarize2|InfoSummarize3|InfoSummarize4</code><br />
|
||||
<code>:variable: := TransportState|NumberOfTracks|Track|TrackURI|TrackDuration|Title|Artist|Album|OriginalTrackNumber|AlbumArtist|<br />Sender|SenderCurrent|SenderInfo|StreamAudio|NormalAudio|AlbumArtURI|nextTrackDuration|nextTrackURI|nextAlbumArtURI|<br />nextTitle|nextArtist|nextAlbum|nextAlbumArtist|nextOriginalTrackNumber|Volume|Mute|Shuffle|Repeat|RepeatOne|CrossfadeMode|Balance|<br />HeadphoneConnected|SleepTimer|Presence|RoomName|SaveRoomName|PlayerType|Location|SoftwareRevision|SerialNum|InfoSummarize1|<br />InfoSummarize2|InfoSummarize3|InfoSummarize4</code><br />
|
||||
<code>:text: := [Jeder beliebige Text ohne doppelte Anführungszeichen]</code><br /></li>
|
||||
</ul>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user