Esempio n. 1
0
        /// <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;
            //}
        }
Esempio n. 2
0
        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);
            }
        }