예제 #1
0
        /// <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);
        }
예제 #2
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);
 }
예제 #3
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);
            }
        }