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); }
/// <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); }
/// <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); } }
/// <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; }
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); } }
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); } }
private async void StartPlayer(SonosPlayer player, string streamUrl) { try { await player.SetAvTransportUri(streamUrl); await player.Play(); } catch { StreamAction.IsEnabled = true; } }
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 } }
/// <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); } }
/// <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); }
/// <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); } }
/// <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); } }
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); }
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); } }
/// <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); }
private async void StartPlayer(SonosPlayer player, string streamUrl) { await player.SetAvTransportUri(streamUrl); await player.Play(); }
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); } }