using System; using System.Collections.Generic; using System.Text; using Shared; using System.Xml; using Shared.SimpleControl.R; namespace Shared.SimpleControl.Pad.Music { class A31DlnaList : FrameLayout { public void show (DLNAServer dlnaServer, string ListName, List list, FrameLayout MusicSourcePage, FrameLayout PalyMusicPage) { var topFrameLayout = new FrameLayout { Height = Application.GetRealHeight (100), BackgroundColor = SkinStyle.Current.MainColor, }; this.AddChidren (topFrameLayout); var dlnalistName = new Button { Text = ListName, }; topFrameLayout.AddChidren (dlnalistName); var back = new Button { Width = Application.GetRealWidth (82), Height = Application.GetRealHeight (89), X = Application.GetRealWidth (10), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "MusicIcon/HomepageBack.png", }; topFrameLayout.AddChidren (back); back.MouseDownEventHandler += (sender, e) => { RemoveFromParent (); }; VerticalScrolViewLayout middle = new VerticalScrolViewLayout (); middle.Y = topFrameLayout.Bottom; middle.Height = Application.GetRealHeight (Application.DesignHeight - 100 - 150); middle.BackgroundColor = 0xff2F2F2F; AddChidren (middle); for (int i = 0; i < list.Count; i++) { var music = list [i]; var dlnarowLayout = new RowLayout { Height = Application.GetRealHeight (100), }; middle.AddChidren (dlnarowLayout); var radius = new Button { Width = Application.GetRealWidth (36), Height = Application.GetRealHeight (36), TextAlignment = TextAlignment.CenterLeft, X = Application.GetRealWidth (20), UnSelectedImagePath = "MusicIcon/radius.png", Gravity = Gravity.CenterVertical, }; dlnarowLayout.AddChidren (radius); var listnext = new Button { Width = Application.GetRealWidth (87), Height = Application.GetRealHeight (100), UnSelectedImagePath = "MusicIcon/Next.png", X = Application.GetRealWidth (480), }; dlnarowLayout.AddChidren (listnext); var dlnalists = new Button { TextAlignment = TextAlignment.CenterLeft, X = Application.GetRealWidth (80), Text = music.dlnalistName, }; dlnarowLayout.AddChidren (dlnalists); EventHandler A31dlnaserver = (sender, e) => { MainPage.Loading.Start (Language.StringByID (MyInternationalizationString.load) + "..."); System.Threading.Tasks.Task.Run (() => { try { var dlnaString = dlnalistsong (dlnaServer, music.ID); if (dlnaString == null) { return; } list.Clear (); dlnaString = dlnaString.Replace ("&", "&").Replace ("<", "<").Replace (">", ">").Replace (""", "\"").Replace ("", "").Replace ("&", ""); int StartIndex = dlnaString.IndexOf ("") + "".Length; if (endIndex <= StartIndex) { return; } var xml = new XmlDocument (); xml.LoadXml (dlnaString.Substring (StartIndex, endIndex - StartIndex)); foreach (XmlNode node in xml.ChildNodes [0].ChildNodes) { MusicInfo musicInfo = new MusicInfo (); musicInfo.ID = node.Attributes ["id"].Value; foreach (XmlNode temnode in node.ChildNodes) { switch (temnode.Name) { case "upnp:class": musicInfo.IsDirectory = temnode.InnerText != "object.item.audioItem.musicTrack"; break; case "upnp:album": musicInfo.Album = temnode.InnerText; break; case "dc:title": musicInfo.Title = temnode.InnerText; break; case "upnp:artist": musicInfo.Artist = temnode.InnerText; break; case "upnp:albumArtURI": //musicInfo.Image = temnode.InnerText; #region 初始化网络图片路径 string path = ""; if (Shared.Application.IsPad) { path = "Pad/" + "MusicImage/"; } else { path = "Phone/" + "MusicImage/"; } path = System.IO.Path.Combine (Shared.IO.FileUtils.RootPath, path + temnode.InnerText.Replace ('/', '_').Replace ('\\', '_').Replace (':', '_').Replace ('*', '_').Replace ('?', '_').Replace ('"', '_').Replace ('<', '_').Replace ('>', '_').Replace ('|', '_')); musicInfo.Image = path; #endregion Shared.IO.FileUtils.DownLoadImage (musicInfo.Image, temnode.InnerText); break; case "res": musicInfo.URL = temnode.InnerText; var duration = temnode.Attributes ["duration"]; if (duration != null) { musicInfo.Duration = duration.Value; } break; } } list.Add (musicInfo); } } catch { } finally { Application.RunOnMainThread (() => { MainPage.Loading.Hide (); A31DlnaListMusic a31DlnaListMusic = new A31DlnaListMusic (); MusicSourcePage.AddChidren (a31DlnaListMusic); a31DlnaListMusic.show (dlnaServer, music.dlnalistName, list, MusicSourcePage, PalyMusicPage); }); } }); }; dlnalists.MouseUpEventHandler += A31dlnaserver; listnext.MouseUpEventHandler += A31dlnaserver; } } string dlnalistsong (DLNAServer dlnaServer, string id) { string aa = "" + id + "BrowseDirectChildren*0999+dc:title"; Shared.Net.MyWebClient webClient = new Shared.Net.MyWebClient (); webClient.Proxy = null; webClient.Headers.Add ("Content-type", "text/xml;charset=\"utf-8\""); webClient.Headers.Add ("Soapaction", "\"urn:schemas-upnp-org:service:ContentDirectory:1#Browse\""); try { byte [] recevieBytes = webClient.UploadData (new Uri ("http://" + dlnaServer.URL + dlnaServer.ControlURL), "POST", System.Text.Encoding.UTF8.GetBytes (aa)); return System.Text.Encoding.UTF8.GetString (recevieBytes, 0, recevieBytes.Length); } catch (Exception e) { string s = e.Message; } return null; } } }