/// <summary> /// Starte und Stoppt übergebenen Player. /// Fügt diesen der primär Gruppe hinzu, wenn diese Spielt /// </summary> /// <param name="_player">Name des Players</param> /// <param name="_volume">Läutstärke des Players</param> /// <param name="addToPrimary">Soll der Player zum Primären (Aktuell Wohnzimmer) zugefügt werden, falls dieser Abspielt.</param> /// <param name="_Playlist">Wiedergabeliste. Wenn keine Angegeben wird, dann wird die default genommen.</param> /// <returns>Ok oder ein Fehler</returns> private String MakePlayerFine(string _player, ushort _volume, Boolean addToPrimary = true, string _Playlist = defaultPlaylist) { /* * Übergebener Player soll der Primären (esszimmer und Wohnzimmer) zugefügt werden, wenn diese Spielen. * Wenn nicht, dann eigene Playlist und single Player * Wenn der Player schon Musik macht, dann aus Gruppe nehmen oder Pausieren */ SonosPlayer player; SonosZone currZone; SonosZone primaryPlayer; try { player = SonosHelper.GetPlayer(_player); if (player == null) { return(retValReload + _player + " konnte nicht gefunden werden."); } primaryPlayer = SonosHelper.GetZone(SonosConstants.WohnzimmerName); if (primaryPlayer == null) { return(retValReload + " Primärzone konnte nicht gefunden werden."); } currZone = SonosHelper.GetZone(_player); } catch (Exception exceptio) { return(retValReload + " MakePlayerFine:Exception:Block0: " + exceptio.Message); } try { if (player.GetVolume() != _volume) { player.SetVolume(_volume); } var playlist = GetAllPlaylist().FirstOrDefault(x => String.Equals(x.Title, _Playlist, StringComparison.CurrentCultureIgnoreCase)); if (currZone != null) { //Player alleine und Spielt Musik soll beendet werden. SonosHelper.WaitForTransitioning(currZone.Coordinator); if (currZone.Coordinator.CurrentState.TransportState == PlayerStatus.PLAYING) { currZone.Coordinator.SetPause(); return(retValok + " Player als Zone ausgeschaltet"); } SonosHelper.WaitForTransitioning(primaryPlayer.Coordinator); //Player alleine und soll dem primären zugefügt werden, wenn dieser abspielt. if (primaryPlayer.Coordinator.CurrentState.TransportState == PlayerStatus.PLAYING && addToPrimary) { player.SetAVTransportURI(SonosConstants.xrincon + primaryPlayer.CoordinatorUUID); return(retValok + " Player zum " + primaryPlayer.Coordinator.Name + " zugefügt."); } //Player ist alleine und soll nicht dem Primary zugefügt werden oder dieser spielt nicht ab. if (playlist == null) { return("Playlist konnte nicht geladen werden:" + _Playlist); } Boolean loadpl = DashHelper.CheckPlaylist(playlist.ContainerID, player); if (loadpl) { DashHelper.LoadPlaylist(playlist, player); } player.SetPlay(); return(retValok + " Player spielt alleine"); } //Player ist nicht alleine SonosHelper.CheckIsZoneCord(player); Thread.Sleep(200); //Es wurde abgespielt und nun soll nichts mehr passieren. SonosHelper.WaitForTransitioning(primaryPlayer.Coordinator); if (primaryPlayer.Coordinator.CurrentState.TransportState == PlayerStatus.PLAYING) { return(retValok + " Player ausgeschaltet"); } if (playlist == null) { return("Playlist konnte nicht geladen werden:" + _Playlist); } Boolean loadpl2 = DashHelper.CheckPlaylist(playlist.ContainerID, player); if (loadpl2) { DashHelper.LoadPlaylist(playlist, player); } player.SetPlay(); return(retValok + " Player spielt alleine"); } catch (Exception exceptio) { return(retValReload + " MakePlayerFine:Exception:Block1: " + exceptio.Message); } //return "Ich dürfte an diese Stelle nicht kommen...."; //try //{ // //Prüfen, ob er abspielt // SonosHelper.WaitForTransitioning(player); // if (player.CurrentState.TransportState == PlayerStatus.PLAYING) // { // player.SetPause(); // return retValok + " ist ausgeschaltet"; // } //} //catch (Exception exceptio) //{ // return retValReload + " MakePlayerFine:Exception:Block2: " + exceptio.Message; //} //try //{ // if (player.GetVolume() != _volume) // { // player.SetVolume(_volume); // } // //Prüfen, ob Esszimmer spielt // SonosHelper.WaitForTransitioning(primaryPlayer.Coordinator); // if (primaryPlayer.Coordinator.CurrentState.TransportState == PlayerStatus.PLAYING && addToPrimary) // { // player.SetAVTransportURI(SonosConstants.xrincon + primaryPlayer.CoordinatorUUID); // return retValok + " Player zum Esszimmer zugefügt."; // } // var playlist = GetAllPlaylist().FirstOrDefault(x => String.Equals(x.Title, _Playlist, StringComparison.CurrentCultureIgnoreCase)); // //Soll selber etwas abspielen. // if (playlist == null) return "Playlist konnte nicht geladen werden:" + _Playlist; // Boolean loadpl = DashHelper.CheckPlaylist(playlist.ContainerID, player); // if (loadpl) // { // DashHelper.LoadPlaylist(playlist, player); // } // player.SetPlay(); // return retValok + " Player spielt alleine"; //} //catch (Exception exceptio) //{ // return retValReload + " MakePlayerFine:Exception:Block3: " + exceptio.Message; //} }
public string Dash5(string id) { const string rsh = "x-sonosapi-stream:s18353?sid=254&flags=8224&sn=0"; try { SonosPlayer primaryplayer = SonosHelper.GetPlayer(primaryPlayerName); SonosPlayer secondaryplayer = SonosHelper.GetPlayer(SonosConstants.KücheName); ushort secondaryPlayerVolume = SonosConstants.KücheVolume; SonosPlayer thirdplayer = SonosHelper.GetPlayer(SonosConstants.EsszimmerName); ushort thirdPlayerVolume = SonosConstants.EsszimmerVolume; var aktUri = primaryplayer.GetMediaInfoURIMeta()[0]; //scheint schon dash5 gedrückt worden zu sein. if (aktUri == rsh) { if (primaryplayer.CurrentState.TransportState == PlayerStatus.PLAYING) { //ausschalten primaryplayer.SetPause(); //Daten vom Marantz ermitteln if (Marantz.Initialisieren(SonosConstants.MarantzUrl)) { if (Marantz.SelectedInput == MarantzInputs.Sonos && Marantz.PowerOn) { Marantz.PowerOn = false; } } return(retValok + " RSH ausgeschaltet."); } //Daten vom Marantz ermitteln if (Marantz.Initialisieren(SonosConstants.MarantzUrl)) { if (Marantz.SelectedInput != MarantzInputs.Sonos || !Marantz.PowerOn) { if (Marantz.PowerOn) { Marantz.SelectedInput = MarantzInputs.Sonos; } else { Marantz.PowerOn = true; } if (Marantz.SelectedInput != MarantzInputs.Sonos) { Marantz.SelectedInput = MarantzInputs.Sonos; } } } primaryplayer.SetPlay(); return(retValok + " RSH eingeschaltet."); } try { //ab hier alles neu var primaryZone = SonosHelper.GetZone(primaryPlayerName); if (primaryZone != null && primaryZone.Players.Count == 2 && primaryZone.Players.Contains(thirdplayer) && primaryZone.Players.Contains(secondaryplayer)) { } else { if (primaryZone == null) { primaryplayer.BecomeCoordinatorofStandaloneGroup(); Thread.Sleep(200); secondaryplayer.SetAVTransportURI(SonosConstants.xrincon + primaryplayer.UUID); Thread.Sleep(300); thirdplayer.SetAVTransportURI(SonosConstants.xrincon + primaryplayer.UUID); Thread.Sleep(300); if (secondaryplayer.GetVolume() != secondaryPlayerVolume) { secondaryplayer.SetVolume(secondaryPlayerVolume); } if (thirdplayer.GetVolume() != thirdPlayerVolume) { thirdplayer.SetVolume(thirdPlayerVolume); } } else { if (!primaryZone.Players.Contains(secondaryplayer)) { secondaryplayer.SetAVTransportURI(SonosConstants.xrincon + primaryplayer.UUID); Thread.Sleep(300); if (secondaryplayer.GetVolume() != secondaryPlayerVolume) { secondaryplayer.SetVolume(secondaryPlayerVolume); } } if (!primaryZone.Players.Contains(thirdplayer)) { thirdplayer.SetAVTransportURI(SonosConstants.xrincon + primaryplayer.UUID); Thread.Sleep(300); if (thirdplayer.GetVolume() != thirdPlayerVolume) { thirdplayer.SetVolume(thirdPlayerVolume); } } } } } catch (Exception ex) { return("Dash5:Block1:" + ex.Message); } try { //Daten vom Marantz ermitteln if (Marantz.Initialisieren(SonosConstants.MarantzUrl)) { if (Marantz.SelectedInput != MarantzInputs.Sonos || !Marantz.PowerOn) { if (Marantz.PowerOn) { Marantz.SelectedInput = MarantzInputs.Sonos; } else { Marantz.PowerOn = true; } if (Marantz.SelectedInput != MarantzInputs.Sonos) { Marantz.SelectedInput = MarantzInputs.Sonos; } } } } catch (Exception ex) { return("Dash5:Block2:" + ex.Message); } if (primaryplayer.GetVolume() != primaryplayerVolume) { primaryplayer.SetVolume(primaryplayerVolume); } if (aktUri != rsh) { primaryplayer.SetAVTransportURI(rsh, "<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\" xmlns:r=\"urn:schemas-rinconnetworks-com:metadata-1-0/\" xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"><item id=\"F00092020s18353\" parentID=\"F00082064y1%3apopular\" restricted=\"true\"><dc:title>R.SH</dc:title><upnp:class>object.item.audioItem.audioBroadcast</upnp:class><desc id=\"cdudn\" nameSpace=\"urn:schemas-rinconnetworks-com:metadata-1-0/\">SA_RINCON65031_</desc></item></DIDL-Lite>"); Thread.Sleep(300); } primaryplayer.SetPlay(); return(retValok + " eingeschaltet und RSH gestartet"); } catch (Exception ex) { return(ex.Message); } }