2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-15 04:20:56 +00:00

SONOS: New feature at LoadSearchList, LoadFavourite introduced

git-svn-id: https://svn.fhem.de/fhem/trunk@10131 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rleins 2015-12-08 17:54:18 +00:00
parent a61bd90324
commit 52e9ffc897
2 changed files with 32 additions and 13 deletions

View File

@ -49,6 +49,11 @@
# Cover von Amazon funktionieren nicht
#
# SVN-History:
# 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.
# Es wurde ein neuer Setter "LoadFavourite" eingebaut, der einem StartFavourite mit der Angabe von NoStart entspricht.
# Man kann bei LoadSearchList nun auch an das Ende der aktuellen Abspielliste anhängen lassen. Dazu muss man an den Parameter maxElem ein "+" anhängen.
# 07.12.2015
# Zwei neue Setter "DialogLevel" und "NightMode", die an einer PlayBar ausgeführt werden können.
# "Set Sonos Groups" hat eine neue Option "Reset", mit der alle Gruppen in einem Rutsch aufgelöst werden können.
@ -72,12 +77,6 @@
# 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.
# 14.06.2015
# Zwei weitere Ausnahmen für das Neustarten des SubThreads eingefügt.
# ControlPoint.pm: Beim Renew von Subscription wurde aus dem "carp" ein "croak" gemacht. Dadurch greifen die darüberliegenden Auffangmassnahmen.
# Neues Feature: Bookmarks für Playlisten und Titel
# Changelog in der Quelltextdatei enthält nur noch für die letzten vier Veröffentlichungen. Die komplette Liste ist nur noch im Wiki vorhanden. Dadurch wird die Dateigröße geringer.
# SetEQ eingebaut, um Subwoofer und Surroundeinstellungen vornehmen zu können: "SurroundEnable", "SurroundLevel", "SubEnable", "SubGain" und "AudioDelay"
#
########################################################################################
#
@ -1910,6 +1909,8 @@ sub SONOS_Set($@) {
# Alle Player als Standalone-Group festlegen
for(my $i = 0; $i <= $#list; $i++) {
next if (!$list[$i]); # Wenn hier ein Leerstring aus dem Split kam, dann überspringen...
my $elemHash = SONOS_getDeviceDefHash($list[$i]);
SONOS_DoWork($elemHash->{UDN}, 'makeStandaloneGroup');
@ -2833,7 +2834,7 @@ sub SONOS_Discover() {
}
# Nicht alle übernehmen?
if ($maxElems =~ m/^\*{0,1}(\d+)-{0,1}$/) {
if ($maxElems =~ m/^\*{0,1}(\d+)[\+-]{0,1}$/) {
splice(@matches, $1) if ($1 && ($1 <= $#matches));
SONOS_Log $udn, 4, 'getSearchlist maxElems('.$maxElems.'): '.$1;
}
@ -2847,7 +2848,13 @@ sub SONOS_Discover() {
$answer .= 'Queue successfully emptied. ';
}
my $currentInsertPos = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('Track') + 1;
# An das Ende der Playlist oder hinter dem aktuellen Titel einfügen?
my $currentInsertPos = 0;
if ($maxElems =~ m/\+$/) {
$currentInsertPos = $SONOS_AVTransportControlProxy{$udn}->GetMediaInfo(0)->getValue('NrTracks') + 1;
} else {
$currentInsertPos = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('Track') + 1;
}
# Die Matches in die Playlist laden...
my $sliceSize = 16;
@ -4291,7 +4298,7 @@ sub SONOS_RestoreOldPlaystate() {
SONOS_Log $udn, 3, 'Restoring playerstate...';
SONOS_Log $udn, 5, 'StoredURI: "'.$old{CurrentURI}.'"';
# Die Liste als aktuelles Abspielstück einstellen, oder den Stream wieder anwerfen
if ($old{CurrentURI} =~ /^x-.*?-.*?stream/) {
if ($old{CurrentURI} =~ /^x-.*?-(.*?stream|mp3radio)/) {
SONOS_Log $udn, 5, 'Restore Stream...';
$AVProxy->SetAVTransportURI(0, $old{CurrentURI}, $old{CurrentURIMetaData});
@ -5173,7 +5180,7 @@ sub SONOS_Discover_Callback($$$) {
$result = $SONOS_AVTransportControlProxy{$udn}->GetMediaInfo(0);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'numberOfTracks', $result->getValue('NrTracks'));
my $stream = ($result->getValue('CurrentURI') =~ m/^x-(sonosapi|rincon)-stream:.*?/);
my $stream = ($result->getValue('CurrentURI') =~ m/^x-(sonosapi|rincon)-(stream|mp3radio):.*?/);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'currentStreamAudio', $stream);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'currentNormalAudio', !$stream);
};
@ -5893,7 +5900,7 @@ sub SONOS_ServiceCallback($$) {
SONOS_Client_Notifier('ProcessCover:'.$udn.':0:'.$tempURI.':'.$groundURL);
# Auch hier den XML-Parser verhindern, und alles per regulärem Ausdruck ermitteln...
if ($currentTrackMetaData =~ m/<dc:title>x-(sonosapi|rincon)-stream:.*?<\/dc:title>/) {
if ($currentTrackMetaData =~ m/<dc:title>x-(sonosapi|rincon)-(stream|mp3radio):.*?<\/dc:title>/) {
# Wenn es ein Stream ist, dann muss da was anderes erkannt werden
SONOS_Log $udn, 4, "Transport-Event: Stream erkannt!";
SONOS_Client_Notifier('SetCurrent:StreamAudio:1');

View File

@ -87,6 +87,7 @@ my %sets = (
'DeletePlaylist' => 'playlistname',
'CurrentPlaylist' => '',
'EmptyPlaylist' => '',
'LoadFavourite' => 'favouritename',
'StartFavourite' => 'favouritename [NoStart]',
'LoadRadio' => 'radioname',
'StartRadio' => 'radioname',
@ -624,6 +625,11 @@ sub SONOSPLAYER_Set($@) {
SONOS_DoWork($udn, 'loadRadio', $value);
SONOS_DoWork($udn, 'play');
} elsif (lc($key) eq 'loadfavourite') {
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
$udn = $hash->{UDN};
SONOS_DoWork($udn, 'startFavourite', $value, 'NoStart');
} elsif (lc($key) eq 'startfavourite') {
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
$udn = $hash->{UDN};
@ -1239,6 +1245,9 @@ sub SONOSPLAYER_Log($$$) {
<li><a name="SONOSPLAYER_setter_EmptyPlaylist">
<b><code>EmptyPlaylist</code></b></a>
<br /> Clears the current queue</li>
<li><a name="SONOSPLAYER_setter_LoadFavourite">
<b><code>LoadFavourite &lt;Favouritename&gt;</code></b></a>
<br /> Loads the named sonos-favorite. The parameter should be URL-encoded for proper naming of lists with special characters.<br />Additionally it's possible to use a regular expression as the name. The first hit will be used. The format is e.g. <code>/meine.hits/</code>.</li>
<li><a name="SONOSPLAYER_setter_LoadPlaylist">
<b><code>LoadPlaylist &lt;Playlistname|Fhem-Devicename&gt; [EmptyQueueBeforeImport]</code></b></a>
<br /> Loads the named playlist to the current playing queue. The parameter should be URL-encoded for proper naming of lists with special characters. The Playlistnamen can be an Fhem-Devicename, then the current playlist of this referenced player will be copied. The Playlistname can also be a filename and then must be startet with 'file:' (e.g. 'file:c:/Test.m3u')<br />If EmptyQueueBeforeImport is given and set to 1, the queue will be emptied before the import process. If not given, the parameter will be interpreted as 1.<br />Additionally it's possible to use a regular expression as the name. The first hit will be used. The format is e.g. <code>/hits.2014/</code>.</li>
@ -1246,7 +1255,7 @@ sub SONOSPLAYER_Log($$$) {
<b><code>LoadRadio &lt;Radiostationname&gt;</code></b></a>
<br /> Loads the named radiostation (favorite). The current queue will not be touched but deactivated. The parameter should be URL-encoded for proper naming of lists with special characters.<br />Additionally it's possible to use a regular expression as the name. The first hit will be used. The format is e.g. <code>/radio/</code>.</li>
<li><a name="SONOSPLAYER_setter_LoadSearchlist">
<b><code>LoadSearchlist &lt;Categoryname&gt; &lt;CategoryElement&gt; [[TitlefilterRegEx]/[AlbumfilterRegEx]/[ArtistfilterRegEx] [maxElem]]</code></b></a>
<b><code>LoadSearchlist &lt;Categoryname&gt; &lt;CategoryElement&gt; [[TitlefilterRegEx]/[AlbumfilterRegEx]/[ArtistfilterRegEx] [[*]maxElem[+|-]]]</code></b></a>
<br /> Loads titles from the Sonos-Bibliothek into the current playlist according to the given category and filtervalues. Please consult the (german) Wiki for detailed informations.</li>
<li><a name="SONOSPLAYER_setter_SavePlaylist">
<b><code>SavePlaylist &lt;Playlistname&gt;</code></b></a>
@ -1586,6 +1595,9 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<li><a name="SONOSPLAYER_setter_EmptyPlaylist">
<b><code>EmptyPlaylist</code></b></a>
<br /> Leert die aktuelle Abspielliste</li>
<li><a name="SONOSPLAYER_setter_LoadFavourite">
<b><code>LoadFavourite &lt;FavouriteName&gt;</code></b></a>
<br /> Lädt den angegebenen Favoriten. Der Name bezeichnet einen Eintrag in der Sonos-Favoritenliste. Der Parameter sollte/kann URL-Encoded werden um auch Spezialzeichen zu ermöglichen.<br />Zusätzlich kann ein regulärer Ausdruck für den Namen verwendet werden. Der erste Treffer wird verwendet. Das Format ist z.B. <code>/meine.hits/</code>.</li>
<li><a name="SONOSPLAYER_setter_LoadPlaylist">
<b><code>LoadPlaylist &lt;Playlistname|Fhem-Devicename&gt; [EmptyQueueBeforeImport]</code></b></a>
<br /> Lädt die angegebene Playlist in die aktuelle Abspielliste. Der Parameter sollte/kann URL-Encoded werden um auch Spezialzeichen zu ermöglichen. Der Playlistname kann ein Fhem-Sonosplayer-Devicename sein, dann wird dessen aktuelle Abpielliste kopiert. Der Playlistname kann aber auch ein Dateiname sein. Dann muss dieser mit 'file:' beginnen (z.B. 'file:c:/Test.m3u).<br />Wenn der Parameter EmptyQueueBeforeImport mit ''1'' angegeben wirde, wird die aktuelle Abspielliste vor dem Import geleert. Standardmäßig wird hier ''1'' angenommen.<br />Zusätzlich kann ein regulärer Ausdruck für den Namen verwendet werden. Der erste Treffer wird verwendet. Das Format ist z.B. <code>/hits.2014/</code>.</li>
@ -1593,7 +1605,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<b><code>LoadRadio &lt;Radiostationname&gt;</code></b></a>
<br /> Startet den angegebenen Radiostream. Der Name bezeichnet einen Sender in der Radiofavoritenliste. Die aktuelle Abspielliste wird nicht verändert. Der Parameter sollte/kann URL-Encoded werden um auch Spezialzeichen zu ermöglichen.<br />Zusätzlich kann ein regulärer Ausdruck für den Namen verwendet werden. Der erste Treffer wird verwendet. Das Format ist z.B. <code>/radio/</code>.</li>
<li><a name="SONOSPLAYER_setter_LoadSearchlist">
<b><code>LoadSearchlist &lt;Kategoriename&gt; &lt;KategorieElement&gt; [[TitelfilterRegEx]/[AlbumfilterRegEx]/[ArtistfilterRegEx] [maxElem]]</code></b></a>
<b><code>LoadSearchlist &lt;Kategoriename&gt; &lt;KategorieElement&gt; [[TitelfilterRegEx]/[AlbumfilterRegEx]/[ArtistfilterRegEx] [[*]maxElem[+|-]]]</code></b></a>
<br /> Lädt Titel nach diversen Kriterien in die aktuelle Abspielliste. Nähere Beschreibung bitte im Wiki nachlesen.</li>
<li><a name="SONOSPLAYER_setter_SavePlaylist">
<b><code>SavePlaylist &lt;Playlistname&gt;</code></b></a>