Exemple #1
0
        public async Task <bool> RegisterServer(SonosPlayer player, IPAddress serverIp)
        {
            var request = new HttpRequestMessage(HttpMethod.Post, string.Format("http://{0}:1400/customsd", player.Address))
            {
                Content = new FormUrlEncodedContent(new List <KeyValuePair <string, string> >
                {
                    new KeyValuePair <string, string>("sid", "255"),
                    new KeyValuePair <string, string>("name", "LANServer"),
                    new KeyValuePair <string, string>("uri", _config.ServerRoot + "/sonos-api"),
                    new KeyValuePair <string, string>("secureUri", _config.ServerRoot + "/sonos-api"),
                    new KeyValuePair <string, string>("pollInterval", "900"),
                    new KeyValuePair <string, string>("authType", "UserId"),
                    new KeyValuePair <string, string>("stringsVersion", "0"),
                    new KeyValuePair <string, string>("stringsUri", ""),
                    new KeyValuePair <string, string>("presentationMapVersion", "10"),
                    new KeyValuePair <string, string>("presentationMapUri", _config.ServerRoot + "/metadata/presentation-maps"),
                    new KeyValuePair <string, string>("containerType", "SoundLab"),
                    new KeyValuePair <string, string>("caps", "search"),
                    new KeyValuePair <string, string>("caps", "extendedMD"),
                    new KeyValuePair <string, string>("caps", "mediaUriActions"),
                })
            };

            var response = await Process(request);

            return(response.StatusCode == HttpStatusCode.OK);
        }
Exemple #2
0
 /// <summary>
 /// Wird aufgerufen, wenn sich etwas bei einem Player geändert hat
 /// </summary>
 /// <param name="obj"></param>
 public static void Sonos_Player_TopologieChanged(SonosPlayer obj)
 {
     lock (Sonos.Zones)
     {
         if (ZoneChangeList.ContainsKey(obj.UUID))
         {
             ZoneChangeList[obj.UUID] = obj.CurrentState.LastStateChange;
         }
         else
         {
             //Evtl. ein Cordinated Player?
             foreach (var sz in Sonos.Zones)
             {
                 if (sz.Players.Contains(obj))
                 {
                     if (ZoneChangeList.ContainsKey(sz.Coordinator.UUID))
                     {
                         ZoneChangeList[sz.Coordinator.UUID] = obj.CurrentState.LastStateChange;
                     }
                     break;
                 }
             }
         }
     }
     EventController.EventPlayerChange(obj);
 }
Exemple #3
0
 /// <summary>
 /// Prüft ob IsZoneCord gesetzt ist
 /// Falls nicht FallBack auf Zonen
 /// Falls Player in einer Zone ist, wird dieser aus dieser Rausgenommen.
 /// </summary>
 /// <param name="sp">Player der geprüft werden soll.</param>
 /// <param name="fromMessaQueue">Is the Call from MesseageQueue</param>
 /// <returns></returns>
 public static Boolean CheckIsZoneCord(SonosPlayer sp, Boolean fromMessaQueue = false)
 {
     try
     {
         if (sp.IsZoneCoord == false)
         {
             sp.BecomeCoordinatorofStandaloneGroup();
             Thread.Sleep(200);
             return(false);
         }
         if (sp.IsZoneCoord == null)
         {
             //Wenn IsZoneCoord Null und keine Zone gefunden wurde, dann ist der Player in einer Gruppe.
             var sz = GetZone(sp.Name);
             if (sz == null)
             {
                 sp.IsZoneCoord = false;
                 sp.BecomeCoordinatorofStandaloneGroup();
                 Thread.Sleep(200);
                 return(false);
             }
             sp.IsZoneCoord = true;
         }
         return(true);
     }
     catch (Exception ex)
     {
         ServerErrorsAdd("CheckIsZoneCord bei Player:" + sp.Name, ex);
         return(true);
     }
 }
Exemple #4
0
        /// <summary>
        /// Läd die übergebene Playlist
        /// </summary>
        /// <param name="pl"></param>
        /// <param name="sp"></param>
        /// <returns></returns>
        public static Boolean LoadPlaylist(SonosItem pl, SonosPlayer sp)
        {
            //laden der übergebenen Playlist
            StringBuilder stringb = new StringBuilder();

            try
            {
                stringb.AppendLine(sp.Name);
                //stringb.AppendLine("Suchen nach Playlist" + pl);
                //    var playlists = GetAllPlaylist();
                //var playlist = playlists.FirstOrDefault(x => x.Title.ToLower() == pl.ToLower());
                //if(playlist == null) throw new NullReferenceException("Playlist nicht gefunden");
                //stringb.AppendLine("Playlist gefunden" + playlist.Title);


                stringb.AppendLine("Löschen aller Tracks von " + sp.Name);
                sp.RemoveAllTracksFromQueue();
                Thread.Sleep(300);
                sp.Enqueue(pl, true);
                Thread.Sleep(200);
                stringb.AppendLine("Playlist wurde ersetzt.");
                sp.SetAVTransportURI(SonosConstants.xrinconqueue + sp.UUID + "#0");
                Thread.Sleep(500);
                return(true);
            }
            catch
            {
                SonosHelper.TraceLog("Loadplaylist.log", stringb.ToString());
                return(false);
            }
        }
        /// <summary>
        /// Baut Cover, Titel und Artist fpr Radio Sender auf.
        /// </summary>
        /// <param name="si"></param>
        /// <param name="pl"></param>
        /// <returns></returns>
        private static SonosItem GetStreamRadioStuff(SonosItem si, SonosPlayer pl)
        {
            try
            {
                try
                {
                    if (si.Title.StartsWith(xsonosapi) || si.Title == "Playlist" || !CheckRadioTitle(si.Title))
                    {
                        si.Title = String.Empty;
                    }
                    if (CheckRadioTitle(si.StreamContent))
                    {
                        si.Title = si.StreamContent;
                    }
                    si.StreamContent = radio;
                }
                catch (Exception ex)
                {
                    pl.ServerErrorsAdd("SonosItemHelper:GetStreamRadioStuff:Block1 ", ex);
                }

                List <string> k = new List <string>();
                try
                {
                    k = pl.GetMediaInfoURIMeta();
                    if (k.Count != 0)
                    {
                        si.AlbumArtURI = "/getaa?s=1&u=" + k[0];
                    }
                }
                catch (Exception ex)
                {
                    pl.ServerErrorsAdd("SonosItemHelper:GetStreamRadioStuff:Block2:CoverArt ", ex);
                }
                try
                {
                    if (k.Count > 0 && k.ElementAtOrDefault(2) != null && !string.IsNullOrEmpty(k[2]))
                    {
                        SonosItem streaminfo = SonosItem.ParseSingleItem(pl.GetAktSongInfo().TrackMetaData);
                        var       x          = SonosItem.ParseSingleItem(k[2]);
                        si.Artist = x.Title;
                        if (CheckRadioTitle(streaminfo.StreamContent))
                        {
                            si.Title = streaminfo.StreamContent.Contains("|")
                                ? streaminfo.StreamContent.Split('|')[0]
                                : streaminfo.StreamContent;
                        }
                    }
                }
                catch (Exception ex)
                {
                    pl.ServerErrorsAdd("SonosItemHelper:GetStreamRadioStuff:Block3:Anzahl K:" + k.Count, ex);
                }
            }
            catch (Exception ex)
            {
                pl.ServerErrorsAdd("SonosItemHelper:GetStreamRadioStuff ", ex);
            }
            return(si);
        }
        public async Task<bool> RegisterServer(SonosPlayer player, IPAddress serverIp)
        {
            var request = new HttpRequestMessage(HttpMethod.Post, string.Format("http://{0}:1400/customsd", player.Address))
            {
                Content = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>
                {
                    new KeyValuePair<string, string>("sid", Sid),
                    new KeyValuePair<string, string>("name", ServerName),
                    new KeyValuePair<string, string>("uri", _config.ServerRoot + "/sonos-api"),
                    new KeyValuePair<string, string>("secureUri", _config.ServerRoot + "/sonos-api"),
                    new KeyValuePair<string, string>("pollInterval", "900"),
                    new KeyValuePair<string, string>("authType", "UserId"),
                    new KeyValuePair<string, string>("stringsVersion", "0"),
                    new KeyValuePair<string, string>("stringsUri", ""),
                    new KeyValuePair<string, string>("presentationMapVersion", "10"),
                    new KeyValuePair<string, string>("presentationMapUri", _config.ServerRoot + "/metadata/presentation-maps"),
                    new KeyValuePair<string, string>("containerType", "SoundLab"),
                    new KeyValuePair<string, string>("caps", "search"),
                    new KeyValuePair<string, string>("caps", "extendedMD"),
                    new KeyValuePair<string, string>("caps", "mediaUriActions"),
                })
            };

            var response = await Process(request);
            return response.StatusCode == HttpStatusCode.OK;
        }
Exemple #7
0
 public void AddPlayer(SonosPlayer player)
 {
     if (player.UUID == CoordinatorUUID)
     {
         Coordinator = player;
     }
     cplayers.Add(player);
 }
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            //Testen ob man den Player bekommen kann

            if (_sonos.Players.Any())
            {
                SonosPlayer pl = _sonos.Players.First(x => x.UUID == uuid);
                MessageBox.Show(pl.Name);
            }
        }
Exemple #9
0
        public void FillPlaylist(SonosPlayer pl)
        {
            IList <PlaylistItem> list = new List <PlaylistItem>();

            try
            {
                var xml = pl.GetPlaylistWithTotalNumbers(NumberReturned, 0);
                if (xml[0] == null || xml[0].Length == 0)
                {
                    xml = pl.GetPlaylistWithTotalNumbers(NumberReturned, 0, 500);
                }
                if (xml[0] == null || xml[0].Length == 0)
                {
                    SonosHelper.ServerErrorsAdd("Playlist:FillPlaylist:Block1", new Exception("Zurückgelieferte Liste Leer"));
                }

                if (xml[1] != null)
                {
                    TotalMatches = Convert.ToInt16(xml[1]);
                    list         = ParseSonosXML(xml[0]);
                }
            }
            catch (Exception ex)
            {
                SonosHelper.ServerErrorsAdd("Playlist:FillPlaylist:Block1", ex);
            }

            //Eintrag in der Liste vorhanden
            if (TotalMatches == 0 && list.Count == 0)
            {
                PlayListItems.Add(new PlaylistItem()
                {
                    Album = "Leer", Artist = "Leer", Title = "Leer"
                });
                return;
            }
            try
            {
                if (list.Count > 0)
                {
                    PlayListItems.AddRange(list);
                    NumberReturned = Convert.ToUInt16(PlayListItems.Count);
                }

                if (PlayListItems.Count < TotalMatches)
                {
                    FillPlaylist(pl);
                }
            }
            catch (Exception ex)
            {
                SonosHelper.ServerErrorsAdd("Playlist:FillPlaylist:Block2", ex);
            }
        }
Exemple #10
0
        private async void StartPlayer(SonosPlayer player, string streamUrl)
        {
            try
            {
                await player.SetAvTransportUri(streamUrl);

                await player.Play();
            }
            catch
            {
                StreamAction.IsEnabled = true;
            }
        }
Exemple #11
0
 public static void EventPlayerChange(SonosPlayer pl)
 {
     try
     {
         if (pl == null || pl.CurrentState.TransportState == PlayerStatus.TRANSITIONING || _streammessage == null)
         {
             return;
         }
         foreach (var data in _streammessage.ToArray())
         {
             try
             {
                 var t = new RinconLastChangeItem
                 {
                     UUID       = pl.UUID,
                     LastChange = pl.CurrentState.LastStateChange
                 };
                 data.WriteLine("data:" + JsonConvert.SerializeObject(t) + "\n\n");
                 data.Flush();
                 //data.WriteLine("data:" + JsonConvert.SerializeObject(t) + "\n\n");
                 //data.Flush();
             }
             catch
             {
                 lock (DisconnectedClients)
                 {
                     DisconnectedClients.Add(data);
                 }
             }
         }
         if (DisconnectedClients.Count == 0)
         {
             return;
         }
         lock (DisconnectedClients)
         {
             foreach (StreamWriter disconnectedClient in DisconnectedClients)
             {
                 _streammessage.Remove(disconnectedClient);
                 disconnectedClient.Close();
                 disconnectedClient.Dispose();
             }
             DisconnectedClients.Clear();
         }
     }
     catch (Exception ex)
     {
         //ignore
     }
 }
Exemple #12
0
        /// <summary>
        /// Generiert die Zonen sowie die Player in diesen.
        /// </summary>
        /// <param name="zoneXml"></param>
        /// <param name="sz">List of SonosZones</param>
        private void CreateZone(XElement zoneXml, List <SonosZone> sz)
        {
            var list = zoneXml.Descendants("ZoneGroupMember").Where(x => x.Attribute("Invisible") == null).ToList();

            if (list.Count > 0)
            {
                var internalzone = new SonosZone((string)zoneXml.Attribute("Coordinator"));

                foreach (var playerXml in list)
                {
                    var player = new SonosPlayer
                    {
                        Name           = (string)playerXml.Attribute("ZoneName"),
                        UUID           = (string)playerXml.Attribute("UUID"),
                        DeviceLocation = new Uri((string)playerXml.Attribute("Location")),
                        ControlPoint   = ControlPoint,
                        CurrentState   = new PlayerState()
                    };
                    if (player.UUID == internalzone.CoordinatorUUID)
                    {
                        internalzone.Coordinator = player;
                    }
                    else
                    {
                        internalzone.AddPlayer(player);
                        Players.Add(player);
                    }

                    // This can happen before or after the topology event...
                    if (playerDevices.ContainsKey(player.UUID))
                    {
                        player.SetDevice(playerDevices[player.UUID]);
                    }
                    else
                    {
                        ControlPoint.ForceDeviceAddition(player.DeviceLocation);
                    }
                }
                if (!sz.Contains(internalzone))
                {
                    sz.Add(internalzone);
                }
                //Zones.Add(zone);
            }
        }
Exemple #13
0
        /// <summary>
        /// Prüft ob das Ziel Konstrukt schon vorhanden ist.
        /// </summary>
        /// <param name="primaray"></param>
        /// <param name="listOfPlayers"></param>
        /// <returns></returns>
        public static Boolean IsSonosTargetGroupExist(SonosPlayer primaray, List <SonosPlayer> listOfPlayers)
        {
            SonosZone sz = SonosHelper.GetZone(primaray.Name);

            if (sz == null || sz.Players.Count != listOfPlayers.Count || sz.Players.Count == 0 || listOfPlayers.Count == 0)
            {
                return(false);
            }

            foreach (SonosPlayer sonosPlayer in sz.Players)
            {
                if (!listOfPlayers.Contains(sonosPlayer))
                {
                    return(false);
                }
            }



            return(true);
        }
Exemple #14
0
 /// <summary>
 /// Prüft die übergebene Playlist mit dem Übergeben Player ob neu geladen werden muss.
 /// </summary>
 /// <param name="pl">Playliste, die geladen werden soll.</param>
 /// <param name="sp">Coordinator aus der Führenden Zone</param>
 /// <returns>True muss neu geladen werden</returns>
 public static Boolean CheckPlaylist(string pl, SonosPlayer sp)
 {
     try
     {
         Boolean retval     = false;
         var     evtlStream = sp.GetAktSongInfo();
         if (SonosItemHelper.CheckItemForStreamingUriCheck(evtlStream.TrackURI))
         {
             return(true);
         }
         var actpl = sp.GetPlaylist(0, 10);
         if (actpl.Count == 0)
         {
             return(true);
         }
         var toLoadpl = sp.BrowsingWithLimitResults(pl, 10);
         if (toLoadpl.Count == 0)
         {
             return(true);                    //eigentlich ein Fehler
         }
         for (int i = 0; i < actpl.Count; i++)
         {
             if (actpl[i].Title == toLoadpl[i].Title)
             {
                 continue;
             }
             retval = true;
             break;
         }
         return(retval);
     }
     catch (Exception ex)
     {
         SonosHelper.ServerErrorsAdd("Dash2:CheckPlaylist", ex);
         return(true);
     }
 }
Exemple #15
0
 /// <summary>
 /// Wait until Player is not more in Transition Playstate
 /// </summary>
 /// <param name="sp"></param>
 public static void WaitForTransitioning(SonosPlayer sp)
 {
     try
     {
         if (sp.CurrentState.TransportState == PlayerStatus.TRANSITIONING)
         {
             Boolean trans   = false;
             int     counter = 0;
             while (!trans)
             {
                 if (sp.CurrentState.TransportState != PlayerStatus.TRANSITIONING || counter > 5)
                 {
                     trans = true;
                 }
                 Thread.Sleep(200);
                 counter++;
             }
         }
     }
     catch (Exception ex)
     {
         ServerErrorsAdd("WaitForTransitioning bei Player: " + sp.Name, ex);
     }
 }
Exemple #16
0
        public string Dash2(int id)
        {
            //Durch alle Zonen gehen und Gruppen auflösen und Pausieren, falls einer abspielt.

            #region STOPP

            Boolean foundplayed = false;
            //List<string> foundedPlayer = new List<string>();
            try
            {
                try
                {
                    if (SonosHelper.Sonos == null)
                    {
                        SonosHelper.Initialisierung();
                    }
                    if (SonosHelper.Sonos == null)
                    {
                        return(retValReload + " Sonos ist null und konnte nicht initialisiert werden!");
                    }
                    lock (SonosHelper.Sonos.Zones)
                    {
                        foreach (SonosZone sp in SonosHelper.Sonos.Zones)
                        {
                            try
                            {
                                if (sp.Coordinator.CurrentState.TransportState == PlayerStatus.PLAYING)
                                {
                                    foundplayed = true;
                                    sp.Coordinator.SetPause();
                                }
                            }
                            catch (Exception ex)
                            {
                                return(retValReload + "Block1.1 Exception: Beim prüfen ob ausgeschaltet werden muss:" +
                                       ex.Message);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    return(retValReload + "Block1 Exception: Beim prüfen ob ausgeschaltet werden muss:" + ex.Message);
                }
            }
            catch (Exception ex)
            {
                return(retValReload + " Exception: Beim prüfen ob ausgeschaltet werden muss:" + ex.Message);
            }

            if (foundplayed)
            {
                try
                {
                    Task.Factory.StartNew(DashHelper.PowerOffMarantz);
                }
                catch
                {
                    return(retValReload + " Exception: Marantz konnte nicht geschaltet werden. ");
                }
                try
                {
                    Task.Factory.StartNew(DashHelper.PowerOffAruroras);
                }
                catch (Exception ex)
                {
                    return(retValReload + "exception: Aurora konnten nicht ausgeschaltet werden. " + ex.Message);
                }
                try
                {
                    SonosPlayer primaryplayer         = SonosHelper.GetPlayer(primaryPlayerName);
                    SonosPlayer secondaryplayer       = SonosHelper.GetPlayer(SonosConstants.EsszimmerName);
                    SonosPlayer thirdplayer           = SonosHelper.GetPlayer(SonosConstants.KücheName);
                    ushort      secondaryplayerVolume = SonosConstants.EsszimmerVolume;
                    ushort      thirdplayerVolume     = SonosConstants.KücheVolume;
                    if (secondaryplayer.GetVolume() != secondaryplayerVolume)
                    {
                        secondaryplayer.SetVolume(secondaryplayerVolume);
                    }
                    if (primaryplayer.GetVolume() != primaryplayerVolume)
                    {
                        primaryplayer.SetVolume(primaryplayerVolume);
                    }
                    if (thirdplayer.GetVolume() != thirdplayerVolume)
                    {
                        thirdplayer.SetVolume(thirdplayerVolume);
                    }
                }
                catch (Exception ex)
                {
                    return(retValReload + "Lautstärke resetet mit Fehler: " + ex.Message);
                }
                return("ok, Musik wurde ausgeschaltet.");
            }

            #endregion STOPP
            #region Start Devices
            try
            {
                //Aurora einschalten zwischen 18 Uhr und 5 Uhr oder immer Oktober bsi März
                //if (DateTime.Now.Hour > 17 || DateTime.Now.Hour < 6 || DateTime.Now.Month > 9 || DateTime.Now.Month < 4)
                //{
                Task.Factory.StartNew(DashHelper.PowerOnAruroras);
                //}
            }
            catch (Exception ex)
            {
                return(retValReload + "exception: Aurora konnten nicht eingeschaltet werden. " + ex.Message);
            }
            try
            {
                //Marantz Verarbeiten.
                Task.Factory.StartNew(DashHelper.PowerOnMarantz);
            }
            catch (Exception ex)
            {
                return(retValReload + " Exception beim Marantz: " + ex.Message);
            }
            #endregion Start Devices
            try
            {
                //Alles ins Wohnzimmer legen.
                SonosPlayer primaryplayer   = SonosHelper.GetPlayer(primaryPlayerName);
                SonosPlayer secondaryplayer = SonosHelper.GetPlayer(SonosConstants.EsszimmerName);
                SonosPlayer thirdplayer     = SonosHelper.GetPlayer(SonosConstants.KücheName);
                if (DashHelper.IsSonosTargetGroupExist(primaryplayer, new List <SonosPlayer> {
                    secondaryplayer, thirdplayer
                }))
                {
                    //Die Zielarchitektur existiert, daher keine Lautstärkesondern nur Playlist
                    int     oldcurrenttrack = primaryplayer.GetAktSongInfo().TrackIndex;
                    var     playlists       = GetAllPlaylist();
                    var     playlist        = playlists.FirstOrDefault(x => x.Title.ToLower() == defaultPlaylist.ToLower());
                    Boolean loadPlaylist    = false;
                    if (playlist != null)
                    {
                        loadPlaylist = DashHelper.CheckPlaylist(playlist.ContainerID, primaryplayer);
                    }
                    if (loadPlaylist)
                    {
                        if (!DashHelper.LoadPlaylist(playlist, primaryplayer))
                        {
                            return("reload, weil Playlist nicht geladen werden konnte");
                        }
                    }
                    else
                    {
                        //alten Song aus der Playlist laden, da immer wieder auf 1 reset passiert.
                        primaryplayer.SetTrackInPlaylist(oldcurrenttrack.ToString());
                        Thread.Sleep(100);
                    }
                    ushort secondaryplayerVolume = SonosConstants.EsszimmerVolume;
                    ushort thirdplayerVolume     = SonosConstants.KücheVolume;
                    if (secondaryplayer.GetVolume() != secondaryplayerVolume)
                    {
                        secondaryplayer.SetVolume(secondaryplayerVolume);
                    }
                    if (primaryplayer.GetVolume() != primaryplayerVolume)
                    {
                        primaryplayer.SetVolume(primaryplayerVolume);
                    }
                    if (thirdplayer.GetVolume() != thirdplayerVolume)
                    {
                        thirdplayer.SetVolume(thirdplayerVolume);
                    }
                }
                else
                {
                    //alles neu
                    try
                    {
                        primaryplayer.BecomeCoordinatorofStandaloneGroup();
                        Thread.Sleep(500);
                        secondaryplayer.SetAVTransportURI(SonosConstants.xrincon + primaryplayer.UUID);
                        Thread.Sleep(300);
                        thirdplayer.SetAVTransportURI(SonosConstants.xrincon + primaryplayer.UUID);
                        Thread.Sleep(300);
                    }
                    catch (Exception ex)
                    {
                        return(retValReload + " Exception beim Gruppenauflösen: " + ex.Message);
                    }
                    try
                    {
                        ushort secondaryplayerVolume = SonosConstants.EsszimmerVolume;
                        ushort thirdplayerVolume     = SonosConstants.KücheVolume;
                        if (secondaryplayer.GetVolume() != secondaryplayerVolume)
                        {
                            secondaryplayer.SetVolume(secondaryplayerVolume);
                        }
                        if (primaryplayer.GetVolume() != primaryplayerVolume)
                        {
                            primaryplayer.SetVolume(primaryplayerVolume);
                        }
                        if (thirdplayer.GetVolume() != thirdplayerVolume)
                        {
                            thirdplayer.SetVolume(thirdplayerVolume);
                        }
                    }
                    catch (Exception ex)
                    {
                        return(retValReload + " Exception beim Lautstärke setzen: " + ex.Message);
                    }
                    try
                    {
                        //Playlist verarveiten
                        var playlists = GetAllPlaylist();
                        var playlist  = playlists.FirstOrDefault(x => x.Title.ToLower() == defaultPlaylist.ToLower());
                        if (!DashHelper.LoadPlaylist(playlist, primaryplayer))
                        {
                            return("reload, weil Playlist nicht geladen werden konnte");
                        }
                    }
                    catch (Exception ex)
                    {
                        return(retValReload + " Exception beim Playlist setzen: " + ex.Message);
                    }
                }
                try
                {
                    primaryplayer.SetPlay();
                }
                catch (Exception ex)
                {
                    return(retValReload + " Exception beim Starten der Wiedergabe: " + ex.Message);
                }
            }
            catch (Exception ex)
            {
                return(retValReload + "exception: Großer Block nicht abgefangen: " + ex.Message);
            }

            return(retValok);
        }
Exemple #17
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);
            }
        }
Exemple #18
0
 /// <summary>
 /// Prüft ob ein Item ein Streaming Item (Stream, Dienst wie Amazon) ist
 /// </summary>
 /// <param name="si">Zu bearbeitendes SonosItems</param>
 /// <param name="pl">Player um Prüfungen vorzunehmen.</param>
 /// <returns>Bearbeitetes SonosItem</returns>
 public static SonosItem CheckItemForStreaming(SonosItem si, SonosPlayer pl)
 {
     if (pl == null)
     {
         return(si);
     }
     try
     {
         if (CheckItemForStreamingUriCheck(si.Uri))
         {
             si.Stream = true;
             if (si.Uri.StartsWith("x-rincon-stream:RINCON"))
             {
                 //Eingang eines Players
                 si.StreamContent = audio;
             }
             else
             {
                 if (si.StreamContent == audio)
                 {
                     si.StreamContent = String.Empty;
                 }
             }
             if (si.Uri.StartsWith(xsonosapistream) || si.Uri.StartsWith(xsonosapiradio) ||
                 si.Uri.StartsWith("aac:") || si.Uri.StartsWith("x-rincon-mp3radio"))
             {
                 //Radio
                 si = GetStreamRadioStuff(si, pl);
             }
             if (si.Uri.StartsWith("x-sonos-http:") || si.Uri.StartsWith(xsonosapihlsstatic))
             {
                 //HTTP Dienst wie Amazon
                 si.StreamContent = service;
                 //test
                 var minfo = pl.GetMediaInfoURIMeta();
                 if (minfo[0].StartsWith(xsonosapiradio))
                 {
                     si.ClassType = "object.item.audioItem.audioBroadcast";
                 }
             }
             if (si.Uri.StartsWith("x-sonosprog-http:song") || si.Uri.StartsWith("x-sonos-http:song"))
             {
                 //HTTP Dienst Apple
                 //prüfen ob Apple Radio
                 List <string> k = pl.GetMediaInfoURIMeta();
                 if (k != null && k.Count > 1 && k[0].StartsWith(xsonosapiradio))
                 {
                     si.StreamContent = radio;
                 }
                 else
                 {
                     si.StreamContent = "Apple";
                 }
             }
         }
         else
         {
             if (si.StreamContent == audio)
             {
                 si.StreamContent = String.Empty;
                 si.Stream        = false;
             }
         }
     }
     catch (Exception ex)
     {
         pl.ServerErrorsAdd("SonosItemHelper:CheckItemForStreaming ", ex);
     }
     return(si);
 }
Exemple #19
0
        private async void StartPlayer(SonosPlayer player, string streamUrl)
        {
            await player.SetAvTransportUri(streamUrl);

            await player.Play();
        }
Exemple #20
0
        public string Dash1(string id)
        {
            if (id != "0" && id != "1")
            {
                return("Wrong ID");                        //abfangen von falschen werten.
            }
            try
            {
                SonosPlayer gzmPlayer = SonosHelper.GetPlayer(SonosConstants.GästezimmerName);
                if (gzmPlayer == null)
                {
                    return(retValReload + " kein Gästezimmer gefunden");
                }
                //Plalist Items generieren
                SonosItem pl0;
                SonosItem pl1;
                try
                {
                    //todo: Checkplaylist so umbauen, das die Playlist als String Übergeben werden kann. Danach MErge mit Loadplaylist und in eigene Methode
                    var sonosplaylists = GetAllPlaylist();
                    pl0 = sonosplaylists.FirstOrDefault(x => x.Title.ToLower() == "zzz regen neu");
                    if (pl0 == null)
                    {
                        throw new Exception("Kein Item für Playliste Regen gefunden");
                    }
                    pl1 = sonosplaylists.FirstOrDefault(x => x.Title.ToLower() == "zzz tempsleep");
                    if (pl1 == null)
                    {
                        throw new Exception("Kein Item für Playliste tempsleep");
                    }
                }
                catch (Exception ex)
                {
                    return(retValReload + "Ermittlung der Playlists Exception:" + ex.Message);
                }
                //hier nun den Code ausführen, der benötigt wird.

                /*
                 * Es soll für das Schlafen Regen bzw. die Tempsleep geladen werden und die Lautstärke auf 1 gesetzt werden.
                 */
                SonosHelper.WaitForTransitioning(gzmPlayer);
                if (gzmPlayer.CurrentState.TransportState == PlayerStatus.PLAYING)
                {
                    //Es wird gespielt und nochmal gedrückt, daher die Playlist wechseln.
                    if (id == "0")
                    {
                        //Prüfen, ob Regen abgespielt wird
                        var israinloaded = !DashHelper.CheckPlaylist(pl0.ContainerID, gzmPlayer);
                        if (israinloaded)
                        {
                            id = "1";
                        }
                    }
                    else
                    {
                        var isTempSleepLoad = !DashHelper.CheckPlaylist(pl1.ContainerID, gzmPlayer);
                        if (isTempSleepLoad)
                        {
                            id = "0";
                        }
                    }
                }
                if (gzmPlayer.GetVolume() != SonosConstants.GästezimmerVolume)
                {
                    gzmPlayer.SetVolume(SonosConstants.GästezimmerVolume);
                }

                switch (id)
                {
                case "0":

                    Boolean checkplaylist = DashHelper.CheckPlaylist(pl0.ContainerID, gzmPlayer);
                    if (checkplaylist)
                    {
                        if (!DashHelper.LoadPlaylist(pl0, gzmPlayer))
                        {
                            return(retValReload + " weil Playlist nicht geladen werden konnte");
                        }
                    }
                    break;

                case "1":
                    Boolean checkplaylist2 = DashHelper.CheckPlaylist(pl1.ContainerID, gzmPlayer);
                    if (checkplaylist2)
                    {
                        if (!DashHelper.LoadPlaylist(pl1, gzmPlayer))
                        {
                            return(retValReload + " weil Playlist nicht geladen werden konnte");
                        }
                    }
                    break;
                }
                gzmPlayer.SetPlay();
                return(retValok);
            }
            catch (Exception ex)
            {
                return(retValReload + " Exception:" + ex.Message);
            }
        }