From 2bec9c838d2d688025698de8ec1de401ffd7dd1f Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期二, 11 八月 2020 14:13:55 +0800 Subject: [PATCH] 20200811 --- HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs | 185 ++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 176 insertions(+), 9 deletions(-) diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs index 694e814..f7e8f97 100644 --- a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs +++ b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs @@ -209,7 +209,7 @@ a31MusicModel.A31PlayStatus.loop = se.SearchForTextOfTag("LoopMode"); a31MusicModel.A31PlayStatus.Source = se.SearchForTextOfTag("PlayMedium"); a31MusicModel.A31PlayStatus.playSource = se.SearchForTextOfTag("TrackSource"); - a31MusicModel.A31PlayStatus.TrackURL = se.SearchForTextOfTag("TrackURI"); + a31MusicModel.A31PlayStatus.TrackURL = se.SearchForTextOfTag("TrackURI").Replace("&", "&amp;"); } catch (Exception ex) @@ -222,9 +222,12 @@ Application.RunOnMainThread(() => { a31MusicModel.on_off = a31MusicModel.A31PlayStatus.status == "play" ? "on" : "off"; - Console.WriteLine($"music 88ikgugjghgjkgkjhgkjhgkg {a31MusicModel.on_off}"); - //HomePage. + //Console.WriteLine($"music : {a31MusicModel.sid} : {a31MusicModel.on_off}"); HomePage.UpdataFunctionStates(a31MusicModel); + foreach (var e in A31MusicModel.A31MusicModelList) + { + RoomPage.UpdataStates(a31MusicModel); + } }); #endregion } @@ -520,14 +523,14 @@ foreach (SecurityElement track in SecurityElement.FromString(se.Text).SearchForChildByTag("Tracks").Children) { MusicInfo musicInfo = new MusicInfo(); - musicInfo.URL = track.SearchForTextOfTag("URL"); + musicInfo.URL = track.SearchForTextOfTag("URL").Replace("&", "&amp;"); var metadata = track.SearchForTextOfTag("Metadata").Replace("&", "&"); var item = SecurityElement.FromString(metadata).SearchForChildByTag("item"); - musicInfo.Title = item.SearchForTextOfTag("dc:title"); - musicInfo.Artist = item.SearchForTextOfTag("upnp:artist"); - musicInfo.Album = item.SearchForTextOfTag("upnp:album"); + musicInfo.Title = item.SearchForTextOfTag("dc:title").Replace("&", "&amp;"); + musicInfo.Artist = item.SearchForTextOfTag("upnp:artist").Replace("&", "&amp;"); + musicInfo.Album = item.SearchForTextOfTag("upnp:album").Replace("&", "&amp;"); musicInfo.Duration = item.SearchForTextOfTag("res"); - musicInfo.AlbumId = item.SearchForTextOfTag("song:albumid"); + musicInfo.AlbumId = item.SearchForTextOfTag("song:albumid").Replace("&", "&amp;"); musicInfoList.Add(musicInfo); } return musicInfoList; @@ -619,7 +622,7 @@ return null; } /// <summary> - /// 鎾斁闊充箰鍛戒护 + /// 鎾斁USB闊充箰鍛戒护 /// </summary> /// <param name="listName">鍒楄〃鍚嶇О</param> /// <param name="number">鎾斁绱㈠紩</param> @@ -646,6 +649,170 @@ catch { } } + + + /// <summary> + /// 鎺ㄩ�佹挱鏀惧懡浠� + /// </summary> + /// <param name="musicInfo">鎾斁闊充箰</param> + /// <param name="listName">鍒楄〃鍚嶇О</param> + /// <param name="musicList">鎺ㄩ�佸垪琛�(榛樿鎺�50棣�)</param> + public static void PushList(MusicInfo musicInfo, string listName, List<MusicInfo> musicList, A31MusicModel a31player,string musicSource) + { + + //鏈�澶у彂閫佺殑鏉℃暟 + int maxCount = 50; + //鎵惧嚭褰撳墠鐐瑰嚮闊充箰鐨勭储寮� + int statIndex = musicList.FindIndex((obj) => { return obj == musicInfo; }); + //鐐瑰嚮鍚庨潰杩樻湁澶氬皯鏉¢煶涔� + int count = musicList.Count - statIndex; + int endIndex = 0; + if (maxCount < count) + { + //濡傛灉鍚庨潰鐨勯煶涔愬ぇ浜庢渶澶ф暟锛岃缃悗闈㈡暟鎹殑鏈�澶х储寮� + endIndex = statIndex + maxCount - 1; + } + else + { + //濡傛灉鍚庨潰鏁版嵁涓嶅锛屽氨鐢ㄦ�绘暟鍑忓幓鏈�澶ф潯鏁帮紝寰楀埌寮�濮嬬储寮� + statIndex = musicList.Count - maxCount - 1; + endIndex = musicList.Count - 1; + } + //濡傛灉寮�濮嬬储寮曞皬浜�0锛岄偅灏辫缃负绗竴鏉¢煶涔� + if (statIndex < 0) + { + statIndex = 0; + } + + StringBuilder sb = new StringBuilder(); + sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); + sb.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); + sb.AppendLine("<s:Body>"); + sb.AppendLine("<u:CreateQueue xmlns:u=\"urn:schemas-wiimu-com:service:PlayQueue:1\">"); + sb.AppendLine("<QueueContext><?xml version=\"1.0\"?>"); + sb.AppendLine("<PlayList>"); + sb.AppendLine("<ListName>DLNA" + listName + "</ListName>"); + sb.AppendLine("<ListInfo>"); + sb.AppendLine("<Radio>0</Radio>");// + sb.AppendLine("<SourceName>UPnPServer</SourceName>");// + sb.AppendLine("<MarkSearch>0</MarkSearch>"); + sb.AppendLine("<TrackNumber>" + (endIndex - statIndex + 1) + "</TrackNumber>"); + sb.AppendLine("<Quality>0</Quality>"); + sb.AppendLine("<UpdateTime>5367</UpdateTime>"); + sb.AppendLine("<LastPlayIndex>2</LastPlayIndex>"); + sb.AppendLine("<SwitchPageMode>0</SwitchPageMode>"); + sb.AppendLine("<CurrentPage>0</CurrentPage>"); + sb.AppendLine("<TotalPages>0</TotalPages>"); + sb.AppendLine("</ListInfo>"); + sb.AppendLine("<Tracks>"); + + int number = 1; + + for (int i = statIndex, Tracknumber = 1; i <= endIndex; i++, Tracknumber++) + { + var tempMusicInfo = musicList[i]; + + if (musicInfo == tempMusicInfo) + { + number = Tracknumber; + } + + if (tempMusicInfo.SourceType == "Local") + { + tempMusicInfo.URL = "http://" + new Shared.Net.NetWiFi().IpAddress + ":" + com.hdl.on.Server.Port + "/" + tempMusicInfo.ID; + } + + sb.AppendLine("<Track" + Tracknumber + ">"); + sb.AppendLine("<URL>" + tempMusicInfo.URL + "</URL>"); + sb.AppendLine("<Metadata>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;"); + sb.AppendLine("&lt;DIDL-Lite xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot; xmlns:song=&quot;www.wiimu.com/song/&quot; xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot;&gt;"); + sb.AppendLine("&lt;upnp:class&gt;object.item.audioItem.musicTrack&lt;/upnp:class&gt;"); + sb.AppendLine("&lt;item id=&quot;0&quot;&gt;"); + sb.AppendLine("&lt;song:subid&gt;&lt;/song:subid&gt;"); + sb.AppendLine("&lt;song:description&gt;unknown&lt;/song:description&gt;"); + sb.AppendLine("&lt;song:skiplimit&gt;6&lt;/song:skiplimit&gt;"); + sb.AppendLine("&lt;song:id&gt;" + tempMusicInfo.ID + "&lt;/song:id&gt;"); + sb.AppendLine("&lt;song:like&gt;0&lt;/song:like&gt;"); + sb.AppendLine("&lt;song:singerid&gt;0&lt;/song:singerid&gt;"); + sb.AppendLine("&lt;song:albumid&gt;" + tempMusicInfo.AlbumId + "&lt;/song:albumid&gt;"); + + sb.AppendLine("&lt;res protocolInfo=&quot;http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;&quot; duration=&quot;" + "0:0:0.0" + "&quot;&gt;" + tempMusicInfo.URL + "&lt;/res&gt;"); + + sb.AppendLine("&lt;dc:title&gt;" + tempMusicInfo.Title + "&lt;/dc:title&gt;"); + sb.AppendLine("&lt;dc:creator&gt;DJ Sanny J&lt;/dc:creator&gt;"); + if (musicSource== "鎴戠殑鍒楄〃") { + sb.AppendLine("&lt;upnp:artist&gt;" + listName + "&lt;/upnp:artist&gt;"); + } + else { + sb.AppendLine("&lt;upnp:artist&gt;" + tempMusicInfo.Artist + "&lt;/upnp:artist&gt;"); + } + sb.AppendLine("&lt;upnp:album&gt;" + tempMusicInfo.Album + "&lt;/upnp:album&gt;"); + sb.AppendLine("&lt;upnp:albumArtURI&gt;unknown&lt;/upnp:albumArtURI&gt;"); + sb.AppendLine("&lt;/item&gt;"); + sb.AppendLine("&lt;/DIDL-Lite&gt;"); + sb.AppendLine("</Metadata>"); + sb.AppendLine("<Id>" + tempMusicInfo.ID + "</Id>"); + sb.AppendLine("<Source>STATION-NETWORK</Source>");//UPnPServer + sb.AppendLine("<Key>" + tempMusicInfo.URL + "</Key>"); + sb.AppendLine("</Track" + Tracknumber + ">"); + } + sb.AppendLine("</Tracks>"); + sb.AppendLine("</PlayList>"); + sb.AppendLine("</QueueContext>"); + sb.AppendLine("</u:CreateQueue>"); + sb.AppendLine("</s:Body>"); + sb.AppendLine("</s:Envelope>"); + + SendMusicLists(a31player.IPAddress, a31player.Port, "CreateQueue", sb.ToString()); + + StringBuilder playString = new StringBuilder(); + playString.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); + playString.AppendLine("<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"); + playString.AppendLine("<s:Body>"); + playString.AppendLine("<u:PlayQueueWithIndex xmlns:u=\"urn:schemas-wiimu-com:service:PlayQueue:1\">"); + playString.AppendLine("<QueueName>DLNA" + listName + "</QueueName>"); + playString.AppendLine("<Index>" + number + "</Index>"); + playString.AppendLine("</u:PlayQueueWithIndex>"); + playString.AppendLine("</s:Body>"); + playString.AppendLine("</s:Envelope>"); + + Play(a31player.IPAddress, a31player.Port, playString.ToString()); + } + + static void SendMusicLists(string ip, int port, string soapAction, string listInfo) + { + System.Net.WebClient webClient = new System.Net.WebClient(); + webClient.Headers.Add("SOAPACTION", "\"urn:schemas-wiimu-com:service:PlayQueue:1#" + soapAction + "\""); + webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); + try + { + byte[] recevieBytes = webClient.UploadData(new Uri("http://" + ip + ":" + port + "/upnp/control/PlayQueue1"), "POST", System.Text.Encoding.UTF8.GetBytes(listInfo)); + var s = System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length); + } + catch(Exception e) + { + var d = e.Message; + } + } + + static void Play(string ip, int port, string info) + { + System.Net.WebClient webClient = new System.Net.WebClient(); + webClient.Headers.Add("SOAPACTION", "\"urn:schemas-wiimu-com:service:PlayQueue:1#PlayQueueWithIndex\""); + webClient.Headers.Add("CONTENT-TYPE", "text/xml; charset=\"utf-8\""); + try + { + byte[] recevieBytes = webClient.UploadData(new Uri("http://" + ip + ":" + port + "/upnp/control/PlayQueue1"), "POST", System.Text.Encoding.UTF8.GetBytes(info)); + var s = System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length); + } + catch + { + + } + } + + + static System.Threading.Thread thread; /// <summary> /// 淇敼钃濈墮鍚嶇О -- Gitblit v1.8.0