From 675df74cdd4103ffdcbfa0a6ccfc105fd61af15a Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期五, 29 十月 2021 15:44:18 +0800
Subject: [PATCH] 2021-10-29 1.更新乐橙 AndroidSDK
---
HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs | 278 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 265 insertions(+), 13 deletions(-)
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
index 694e814..0a3fc25 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
@@ -4,12 +4,28 @@
using System.Net.Sockets;
using System.Security;
using System.Text;
+using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
using Shared;
namespace HDL_ON.UI.Music
{
public class SendMethod
{
+ private static SendMethod m_sendMethod=null;
+ public static SendMethod sendMethod
+ {
+ get
+ {
+ if (m_sendMethod == null)
+ {
+ m_sendMethod = new SendMethod();
+ }
+ return m_sendMethod;
+ }
+
+ }
+
/// <summary>
///鎼滅储A31闊充箰鎾斁鍣�
/// </summary>
@@ -209,7 +225,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)
@@ -221,10 +237,13 @@
#region 鏇存柊鍏朵粬鐣岄潰闊充箰鐘舵��
Application.RunOnMainThread(() =>
{
- a31MusicModel.on_off = a31MusicModel.A31PlayStatus.status == "play" ? "on" : "off";
- Console.WriteLine($"music 88ikgugjghgjkgkjhgkjhgkg {a31MusicModel.on_off}");
- //HomePage.
+ a31MusicModel.trait_on_off.curValue = a31MusicModel.A31PlayStatus.status == "play" ? "on" : "off";
+ //Console.WriteLine($"music : {a31MusicModel.sid} : {a31MusicModel.on_off}");
HomePage.UpdataFunctionStates(a31MusicModel);
+ foreach (var e in A31MusicModel.A31MusicModelList)
+ {
+ RoomPage.UpdataStates(a31MusicModel);
+ }
});
#endregion
}
@@ -460,7 +479,8 @@
/// <param name="volume">Volume.</param>
public static void ControlVolume(int volume, A31MusicModel a31player)
{
- System.Threading.Tasks.Task.Run(() => {
+ System.Threading.Tasks.Task.Run(() =>
+ {
A31MusicModel.ProgressDateTime = DateTime.Now;
try
{
@@ -520,14 +540,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;
@@ -567,7 +587,6 @@
/// <returns>璇诲彇鍒扮殑鐢靛彴缁勫垪琛ㄤ俊鎭紝璇诲彇涓嶅埌鍙嶉涓簄ull</returns>
public static string ReadRadioList(string url)
{
-
WebClient webClient = new WebClient();
webClient.Proxy = null;
webClient.Headers.Add("Content-type", "plain/text; charset=UTF-8");
@@ -595,7 +614,7 @@
/// <summary>
/// 鑾峰彇褰撳墠鎾斁鐨勫垪琛�
/// </summary>
- public static string GetCurrentPlayList(A31MusicModel a31player)
+ public static string GetCurrentPlayList(A31MusicModel a31player)
{
System.Text.StringBuilder getPlayList = new System.Text.StringBuilder();
getPlayList.AppendLine("<?xml version=\"1.0\"encoding=\"utf-8\"?>");
@@ -619,7 +638,7 @@
return null;
}
/// <summary>
- /// 鎾斁闊充箰鍛戒护
+ /// 鎾斁USB闊充箰鍛戒护
/// </summary>
/// <param name="listName">鍒楄〃鍚嶇О</param>
/// <param name="number">鎾斁绱㈠紩</param>
@@ -645,6 +664,172 @@
}
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>
@@ -716,5 +901,72 @@
public string creator = string.Empty;
}
+ /// <summary>
+ /// 鑾峰彇闊充箰鍒楄〃
+ /// </summary>
+ public List<Function> GetMusicList
+ {
+ get
+ {
+ return FunctionList.List.GetMusicList();
+ }
+ }
+ /// <summary>
+ /// 鍙戦�佹帶鍒跺懡浠�
+ /// </summary>
+ /// <param name="function">褰撳墠璁惧</param>
+ /// <param name="dic">鍙戦�佹帶鍒舵暟鎹�</param>
+ public void SendControlCommand(Function function, Dictionary<string, string> dic)
+ {
+ new System.Threading.Thread(() =>
+ {
+ DriverLayer.Control.Ins.SendWriteCommand(function, dic);
+ })
+ { IsBackground = true }.Start();
+ }
+
+ /// <summary>
+ /// 鍒锋柊璁惧鐘舵��
+ /// </summary>
+ /// <returns></returns>
+ public void RefreshDeviceStatus(Function music, List<string> functionIds)
+ {
+ try
+ {
+ Dictionary<string, object> d = new Dictionary<string, object>();
+ d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+ d.Add("deviceIds", functionIds);
+ var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_RefreshDeviceStatus);
+ if (responsePackNew.Code != "0")
+ {
+ return;
+ }
+ //鏁版嵁杩斿簭鍒楀寲涓篎unction瀵硅薄
+ var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data.ToString());
+ var function = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(str);
+ if (function == null)
+ {
+ return;
+ }
+ music.name = function.name;
+ music.sid = function.sid;
+ music.spk = function.spk;
+ music.status = function.status;
+ music.roomIds = function.roomIds;
+ music.attributes = function.attributes;
+ }
+ catch { }
+ }
+
+ /// <summary>
+ ///璇锋眰鏈嶅姟鍣紙涓庝綇瀹呮湁鍏�:渚嬪锛沨omeId锛�
+ /// </summary>
+ /// <returns></returns>
+ public ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 5)
+ {
+ var requestJson = HttpUtil.GetSignRequestJson(o);
+ return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
+
+ }
}
}
--
Gitblit v1.8.0