using System; using System.Collections.Generic; using System.Text; using Shared; using Shared.SimpleControl.R; using System.Xml; using Shared.SimpleControl.Pad; using Shared.SimpleControl; namespace SmartHome.UI.SimpleControl.Pad.Music { /// /// 电台界面 /// class A31CNRadio : FrameLayout { public void show(A31MusicModel a31, string data,FrameLayout SettingView,FrameLayout PalyPage) { initList(a31, data); var topFrameLayout = new FrameLayout { Height = Application.GetRealHeight(100), BackgroundColor = SkinStyle.Current.MainColor, }; AddChidren(topFrameLayout); var RadiolistName = new Button { TextID = MyInternationalizationString.cnRadio, }; topFrameLayout.AddChidren(RadiolistName); 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(); }; var middle = new VerticalScrolViewLayout() { Y = topFrameLayout.Bottom, Height = Application.GetRealHeight(Application.DesignHeight - 100-150), BackgroundColor = 0xff2F2F2F }; AddChidren(middle); for (int i = 0; i < a31.CnRadioInfoList.Count; i++) { var cnrow = new RowLayout { Height = Application.GetRealHeight(100) }; middle.AddChidren(cnrow); var title = new Button { Width = Application.GetRealWidth(61), Height = Application.GetRealHeight(81), X = Application.GetRealWidth(30), Gravity = Gravity.CenterVertical, }; cnrow.AddChidren(title); var cntext = new Button { Gravity = Gravity.CenterVertical, Text = a31.CnRadioInfoList[i].Cnkey, X = Application.GetRealWidth(130), Tag = a31.CnRadioInfoList[i].URL, TextAlignment = TextAlignment.CenterLeft, }; cnrow.AddChidren(cntext); var next = new Button { Width = Application.GetRealWidth(87), Height = Application.GetRealHeight(100), UnSelectedImagePath = "MusicIcon/Next.png", SelectedImagePath = "MusicIcon/NextSelecte.png", X = Application.GetRealWidth(480), }; cnrow.AddChidren(next); EventHandler CNresources = (sender, e) => { MainPage.Loading.Start(Language.StringByID(MyInternationalizationString.load) + "..."); System.Threading.Tasks.Task.Run(() => { try { var dataString = readRadioList(cntext.Tag.ToString()); if (dataString == null) { return; } int startIndex1 = dataString.IndexOf(""); int endIndex1 = dataString.IndexOf("") + "".Length; if (endIndex1 <= startIndex1) { return; } XmlDocument xml1 = new XmlDocument(); xml1.LoadXml(dataString.Substring(startIndex1, endIndex1 - startIndex1)); var dataList = xml1.SelectSingleNode("body"); if (dataList == null) { return; } a31.CnRadioInfoList.Clear(); foreach (XmlNode childNodes in dataList.ChildNodes) { if (childNodes.Name == "outline" && childNodes.Attributes["URL"] != null) { MusicInfo musicInfoCN = new MusicInfo(); musicInfoCN.URL = childNodes.Attributes["URL"] == null ? "" : childNodes.Attributes["URL"].Value; musicInfoCN.Title = childNodes.Attributes["text"] == null ? "" : childNodes.Attributes["text"].Value; musicInfoCN.Image = childNodes.Attributes["image"] == null ? "" : childNodes.Attributes["image"].Value; if (childNodes.Attributes["image"]!=null) { string path = ""; if (Shared.Application.IsPad) { path = ""; } else { path = "Phone/" + "MusicImage/"; } } musicInfoCN.Cntype = childNodes.Attributes["type"] == null ? "" : childNodes.Attributes["type"].Value; a31.CnRadioInfoList.Add(musicInfoCN); } foreach (XmlNode a in childNodes.ChildNodes) { if (a.Name == "outline") { MusicInfo musicInfoCN = new MusicInfo(); musicInfoCN.URL = a.Attributes["URL"] == null ? "" : a.Attributes["URL"].Value; musicInfoCN.Title = a.Attributes["text"] == null ? "" : a.Attributes["text"].Value; if (a.Attributes["image"] != null) { #region 初始化网络图片路径 string path = ""; if (Shared.Application.IsPad) { path = "Pad/" + "MusicImage/"; } else { path = "Phone/" + "MusicImage/"; } path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, path + a.Attributes["image"].Value.Replace('/', '_').Replace('\\', '_').Replace(':', '_').Replace('*', '_').Replace('?', '_').Replace('"', '_').Replace('<', '_').Replace('>', '_').Replace('|', '_')); musicInfoCN.Image = path; #endregion Shared.IO.FileUtils.DownLoadImage(musicInfoCN.Image, a.Attributes["image"].Value); } musicInfoCN.Cntype = a.Attributes["type"] == null ? "" : a.Attributes["type"].Value; a31.CnRadioInfoList.Add(musicInfoCN); } } } } catch { } finally { Application.RunOnMainThread(() => { MainPage.Loading.Hide(); A31CnList a31CnList = new A31CnList(); SettingView.AddChidren(a31CnList); a31CnList.Show(a31, cntext.Text, SettingView); }); } }); }; title.MouseUpEventHandler += CNresources; next.MouseUpEventHandler += CNresources; cntext.MouseUpEventHandler += CNresources; switch (cntext.Text) { case "local": title.UnSelectedImagePath = "MusicIcon/ocalradio.png"; break; case "recent": title.UnSelectedImagePath = "MusicIcon/Lately.png"; break; case "trending": title.UnSelectedImagePath = "MusicIcon/popular.png"; break; case "music": title.UnSelectedImagePath = "MusicIcon/musiccn.png"; break; case "talk": title.UnSelectedImagePath = "MusicIcon/Talk.png"; break; case "sports": title.UnSelectedImagePath = "MusicIcon/sports.png"; break; case "language": title.UnSelectedImagePath = "MusicIcon/language.png"; break; case "location": title.UnSelectedImagePath = "MusicIcon/place.png"; break; case "news": title.UnSelectedImagePath = "MusicIcon/news.png"; break; case "podcast": title.UnSelectedImagePath = "MusicIcon/podcast.png"; break; default: title.UnSelectedImagePath = "MusicIcon/podcast.png"; break; } cntext.Text = a31.CnRadioInfoList[i].Title; } } void initList(A31MusicModel a31, string data) { try { var readString = data; if (readString == null) { return; } int startIndex = readString.IndexOf(""); int endIndex = readString.IndexOf("") + "".Length; if (endIndex <= startIndex) { return; } var aa = readString.Substring(startIndex, endIndex - startIndex); XmlDocument xml = new XmlDocument(); xml.LoadXml(aa); var CNList = xml.SelectSingleNode("body"); if (CNList == null) { return; } a31.CnRadioInfoList.Clear(); foreach (XmlNode v in CNList.ChildNodes) { switch (v.Name) { case "outline": MusicInfo musicInfo = new MusicInfo(); musicInfo.Title = v.Attributes["text"].Value; musicInfo.URL = v.Attributes["URL"].Value; musicInfo.Cnkey= v.Attributes["key"].Value; a31.CnRadioInfoList.Add(musicInfo); break; } } } catch { } } /// /// 读取电台列表 /// /// 读取到的电台组列表信息,读取不到反馈为null string readRadioList(string url) { System.Net.WebClient webClient = new System.Net.WebClient(); webClient.Proxy = null; webClient.Headers.Add("Content-type", "plain/text; charset=UTF-8"); if (Language.CurrentLanguage == "Chinese") { webClient.Headers.Add("Accept-Language", "zh-cn"); } else { webClient.Headers.Add("Accept-Language", "en-us"); } try { byte[] recevieBytes = webClient.DownloadData(new Uri(url)); return System.Text.Encoding.UTF8.GetString(recevieBytes, 0, recevieBytes.Length); } catch (Exception e) { return null; } } } }