wjc
2021-12-17 e2a009ca812c2f933e195c4276b79c34ed31862a
HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
@@ -74,62 +74,67 @@
                playView.collectIconBtn.IsSelected = !playView.collectIconBtn.IsSelected;
                if (playView.collectIconBtn.IsSelected)
                {
                    A31MusicModel.Current.collect = true;
                    A31MusicModel.Current.functionMusic.collect = true;
                }
                else
                {
                    A31MusicModel.Current.collect = false;
                    A31MusicModel.Current.functionMusic.collect = false;
                }
            };
            //快进滑动弹起事件;
            playView.diyArcSeekBar.OnStopTrackingTouchEvent+= (sender, e) =>
            {
                int totalSecond = (int)(playView.diyArcSeekBar.Progress * 1.0f / 100 * int.Parse(A31MusicModel.Current.A31PlayStatus.totlen) / 1000);
                int totalSecond = (int)(playView.diyArcSeekBar.Progress * 1.0f / 100 * int.Parse(A31MusicModel.Current.functionMusic.GetAttrState("song_time")));
                //分钟
                int Minute = totalSecond / 60;
                //秒钟
                int Second = totalSecond % 60;
                string time = "00" + ":" + (Minute.ToString().Length < 2 ? "0" + Minute.ToString() : Minute.ToString()) + ":" + (Second.ToString().Length < 2 ? "0" + Second.ToString() : Second.ToString());
                SendMethod.Seek(time, A31MusicModel.Current);
                //SendMethod.Seek(time, A31MusicModel.Current);
                //Dictionary<string, string> dic = new Dictionary<string, string>();
                //dic.Add("mode", modeValueString);
                //SendMethod.sendMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
                A31MusicModel.Current.A31PlayStatus.curpos = (DateTime.Parse(time) - DateTime.Parse("00:00:00")).TotalMilliseconds.ToString();
            };
            ///切换播放模式点击事件;
            playView.playOrderBtn.MouseUpEventHandler += (sender, e) =>
             {
                 string modeValueString = string.Empty;
                 string msg = Language.StringByID(StringId.switchTo);
                 switch (A31MusicModel.Current.A31PlayStatus.loop)
                 {
                     //0列表循环,1单曲循环,2随机播放;
                     case "0":
                         A31MusicModel.Current.A31PlayStatus.loop = "1";
                     //list_cycle列表循环,single_cycle单曲循环,random随机播放;
                     case "list_cycle":
                         modeValueString="single_cycle";
                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
                         msg += Language.StringByID(StringId.singleMode);
                         break;
                     case "1":
                         A31MusicModel.Current.A31PlayStatus.loop = "2";
                     case "single_cycle":
                         modeValueString = "random";
                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
                         msg += Language.StringByID(StringId.randomMode);
                         break;
                     case "2":
                         A31MusicModel.Current.A31PlayStatus.loop = "0";
                     case "random":
                         modeValueString = "list_cycle";
                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
                         msg += Language.StringByID(StringId.listMode);
                         break;
                 }
                 A31MusicModel.Current.functionMusic.SetAttrState("mode", modeValueString);
                 new PublicAssmebly().TipMsgAutoClose(msg, false,1000);
                 string url = "http://" + A31MusicModel.Current.IPAddress + "/httpapi.asp?command=setPlayerCmd:" + "loopmode:" + A31MusicModel.Current.A31PlayStatus.loop;
                 SendMethod.SendCommand(url);
                 Dictionary<string, string> dic = new Dictionary<string, string>();
                 dic.Add("mode",modeValueString);
                 SendMethod.sendMethod.SendControlCommand(A31MusicModel.Current.functionMusic,dic);
             };
            ///添加喜爱点击事件;
            playView.loveBtn.MouseUpEventHandler += (sender, e) =>
            {
                var url = A31MusicModel.Current.A31PlayStatus.TrackURL;
                var album = A31MusicModel.Current.A31PlayStatus.Album;
                var artist = A31MusicModel.Current.A31PlayStatus.Artist;
                var song = A31MusicModel.Current.A31PlayStatus.Title;
                var name = A31MusicModel.Current.functionMusic.GetAttribute("song_name").ToString();
                var songTime = A31MusicModel.Current.functionMusic.GetAttribute("song_time").ToString();
                if (A31MusicModel.Current.A31PlayStatus.Source == "RADIO-NETWORK")
                {
                    playView.loveBtn.IsSelected = !playView.loveBtn.IsSelected;
@@ -137,17 +142,17 @@
                    {
                        if (null == A31MusicModel.Current.LoveRadioInfoList.Find((musicInfo) =>
                        {
                            return url == musicInfo.URL;
                            return name == musicInfo.name;
                        }))
                        {
                            A31MusicModel.Current.LoveRadioInfoList.Add(new MusicInfo { Title = song, URL = url, });
                            A31MusicModel.Current.LoveRadioInfoList.Add(new Songs { name = name, time = songTime});
                        }
                    }
                    else
                    {
                        A31MusicModel.Current.LoveRadioInfoList.RemoveAll((musicInfo) =>
                        {
                            return url == musicInfo.URL;
                            return name == musicInfo.name;
                        });
                    }
                }
@@ -158,10 +163,10 @@
                    {
                        if (null == A31MusicModel.Current.LoveMusicInfoList.Find((musicInfo) =>
                        {
                            return url == musicInfo.URL;
                            return name == musicInfo.name;
                        }))
                        {
                            A31MusicModel.Current.LoveMusicInfoList.Add(new MusicInfo { Title = song, URL = url, Artist = artist, Album = album });
                            A31MusicModel.Current.LoveMusicInfoList.Add(new Songs { name = name, time = songTime});
                        }
                    }
                    else
@@ -169,7 +174,7 @@
                        A31MusicModel.Current.LoveMusicInfoList.RemoveAll((musicInfo) =>
                        {
                            //也要加歌手名判断
                            return musicInfo.URL == url;
                            return musicInfo.name == name;
                        });
                    }
@@ -198,13 +203,12 @@
                myListView.backIextBtn.MouseUpEventHandler += removeFromParentView;
                myListView.popFra.MouseUpEventHandler += removeFromParentView;
                #endregion
                loading.Start();
                GetMusicList((listName) =>
                {
                    loading.Hide();
                    PlayListView(myListView.popFra, myListView.verticalScrolViewLayout, listName);
                //var listName = A31MusicModel.Current.functionMusic.GetAttribute("playlist_name").ToString();
                //var musicList = A31MusicModel.Current.GetSongList(listName);
                //new A31SongPlay { }.SongListView(myListView.verticalScrolViewLayout, musicList, listName);
                PlayListView(myListView.popFra, myListView.verticalScrolViewLayout);
                    UpdateSelectedMusic(myListView.popFra, myListView.verticalScrolViewLayout);
                });
               
            };
            ///音量图标点击事件
@@ -227,8 +231,11 @@
                if (startVolume != e)
                {
                    startVolume = e;
                    SendMethod.ControlVolume(e, A31MusicModel.Current);
                    A31MusicModel.Current.A31PlayStatus.vol = e.ToString();
                    A31MusicModel.Current.functionMusic.SetAttrState("volume", startVolume);
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    dic.Add("volume", startVolume.ToString());
                    SendMethod.sendMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
                }
            };
            playView.volSeekBar.OnProgressChangedEvent += progressClick;
@@ -237,7 +244,12 @@
            playView.prevBtn.MouseDownEventHandler += (sender, e) =>
            {
                playView.prevBtn.IsSelected = true;
                SendMethod.Previous(A31MusicModel.Current);
                A31MusicModel.Current.functionMusic.SetAttrState("song_step", "down");
                Dictionary<string, string> dic = new Dictionary<string, string>();
                dic.Add("song_step", "down");
                SendMethod.sendMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
            };
            playView.prevBtn.MouseUpEventHandler += (sender, e) =>
            {
@@ -246,24 +258,30 @@
            ///暂停/播放点击事件
            playView.playBtn.MouseDownEventHandler += (sender, e) =>
            {
                string status = string.Empty;
                if (playView.playBtn.IsSelected)
                {
                    playView.playBtn.IsSelected = false;
                    SendMethod.Pause(A31MusicModel.Current);
                    A31MusicModel.Current.A31PlayStatus.status = "pause";
                    status = "off";
                }
                else
                {
                    playView.playBtn.IsSelected = true;
                    SendMethod.Play(A31MusicModel.Current);
                    A31MusicModel.Current.A31PlayStatus.status = "play";
                    status = "on";
                }
                A31MusicModel.Current.functionMusic.SetAttrState("on_off", status);
                Dictionary<string, string> dic = new Dictionary<string, string>();
                dic.Add("on_off", status);
                SendMethod.sendMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
            };
            ///下一曲点击事件
            playView.nextBtn.MouseDownEventHandler += (sender, e) =>
            {
                playView.nextBtn.IsSelected = true;
                SendMethod.Next(A31MusicModel.Current);
                A31MusicModel.Current.functionMusic.SetAttrState("song_step", "down");
                Dictionary<string, string> dic = new Dictionary<string, string>();
                dic.Add("song_step", "down");
                SendMethod.sendMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
            };
            playView.nextBtn.MouseUpEventHandler += (sender, e) =>
            {
@@ -281,8 +299,10 @@
                if (startVolume != volume)
                {
                    startVolume = volume;
                    SendMethod.ControlVolume(volume, A31MusicModel.Current);
                    A31MusicModel.Current.A31PlayStatus.vol = volume.ToString();
                    A31MusicModel.Current.functionMusic.SetAttrState("volume", startVolume);
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    dic.Add("volume", startVolume.ToString());
                    SendMethod.sendMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
                }
            };
@@ -308,7 +328,7 @@
                            //更新总时间                            
                            //总共有多少秒
                            int totalSecond = int.Parse(A31MusicModel.Current.A31PlayStatus.totlen) / 1000;
                            int totalSecond = int.Parse(A31MusicModel.Current.functionMusic.GetAttrState("song_time"));
                            //分钟
                            int totalMusicMinute = totalSecond / 60;
                            //秒钟
@@ -319,52 +339,52 @@
                            //topView.topNameBtn.Text = A31MusicModel.Current.Name;
                            switch (A31MusicModel.Current.A31PlayStatus.loop)
                            switch (A31MusicModel.Current.functionMusic.GetAttrState("mode"))
                            {
                                case "0"://列表循环
                                case "list_cycle"://列表循环
                                    playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
                                    break;
                                case "1"://单曲顺环
                                case "single_cycle"://单曲循环
                                    playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
                                    break;
                                case "2"://随机播放
                                case "random"://随机播放
                                    playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
                                    break;
                            }
                            if (A31MusicModel.Current.A31PlayStatus.Source == "RADIO-NETWORK")
                            {
                                var v = A31MusicModel.Current.LoveRadioInfoList.Find((like) =>
                                {
                                    return like.URL == A31MusicModel.Current.A31PlayStatus.TrackURL;
                                });
                                if (v != null)
                                {
                                    playView.loveBtn.IsSelected = true;
                                }
                                else
                                {
                                    playView.loveBtn.IsSelected = false;
                                }
                            }
                            else
                            {
                                var v = A31MusicModel.Current.LoveMusicInfoList.Find((like) =>
                                {
                                    return like.URL == A31MusicModel.Current.A31PlayStatus.TrackURL;
                                });
                                if (v != null)
                                {
                                    playView.loveBtn.IsSelected = true;
                                }
                                else
                                {
                                    playView.loveBtn.IsSelected = false;
                                }
                            }
                            playView.regionBtn.Text = A31MusicModel.Current.GetRoomListName();
                            if (A31MusicModel.Current.collect)
                            //if (A31MusicModel.Current.A31PlayStatus.Source == "RADIO-NETWORK")
                            //{
                            //    var v = A31MusicModel.Current.LoveRadioInfoList.Find((like) =>
                            //    {
                            //        return like.URL == A31MusicModel.Current.A31PlayStatus.TrackURL;
                            //    });
                            //    if (v != null)
                            //    {
                            //        playView.loveBtn.IsSelected = true;
                            //    }
                            //    else
                            //    {
                            //        playView.loveBtn.IsSelected = false;
                            //    }
                            //}
                            //else
                            //{
                            //    var v = A31MusicModel.Current.LoveMusicInfoList.Find((like) =>
                            //    {
                            //        return like.URL == A31MusicModel.Current.A31PlayStatus.TrackURL;
                            //    });
                            //    if (v != null)
                            //    {
                            //        playView.loveBtn.IsSelected = true;
                            //    }
                            //    else
                            //    {
                            //        playView.loveBtn.IsSelected = false;
                            //    }
                            //}
                            playView.regionBtn.Text = A31MusicModel.Current.functionMusic.GetRoomListName();
                            if (A31MusicModel.Current.functionMusic.collect)
                            {
                                playView.collectIconBtn.IsSelected = true;
                            }
@@ -399,7 +419,7 @@
                            //更新播放器音量给系统音量
                            Volume.MusicVolume = playView.volSeekBar.Progress;
                            //当前播放音乐时间        
                            int playSecond = int.Parse(A31MusicModel.Current.A31PlayStatus.curpos) / 1000 + (int)(DateTime.Now - A31MusicModel.Current.LastDateTime).TotalSeconds;
                            int playSecond = int.Parse(A31MusicModel.Current.functionMusic.GetAttrState("playing_time"))+ (int)(DateTime.Now - A31MusicModel.Current.LastDateTime).TotalSeconds;
                            int playMusicMinute = playSecond / 60;
                            //秒钟
@@ -407,7 +427,7 @@
                            string playTime = (playMusicMinute.ToString().Length < 2 ? "0" + playMusicMinute.ToString() : playMusicMinute.ToString()) + ":" + (playMusicSecond.ToString().Length < 2 ? "0" + playMusicSecond.ToString() : playMusicSecond.ToString());
                            if (A31MusicModel.Current.A31PlayStatus.status == "play")
                            if (A31MusicModel.Current.functionMusic.GetAttrState("on_off") == "on")
                            {
                                playView.playBtn.IsSelected = true;
                                //如果在播放,时间就不断变化                    
@@ -430,10 +450,10 @@
                                //停止播放
                                playView.startTimeBtn.Text =playTime;
                            }
                            playView.songNameTextView.Text = (A31MusicModel.Current.A31PlayStatus.Title == null ? "Unkown" : A31MusicModel.Current.A31PlayStatus.Title);
                            playView.singerBtn.Text = (A31MusicModel.Current.A31PlayStatus.Artist == null ? "Unkown" : A31MusicModel.Current.A31PlayStatus.Artist.Trim());
                            playView.songNameTextView.Text = A31MusicModel.Current.functionMusic.GetAttrState("song_name") == null ? "Unkown" : A31MusicModel.Current.functionMusic.GetAttrState("song_name");
                            playView.singerBtn.Text = A31MusicModel.Current.functionMusic.GetAttrState("song_name") == null ? "Unkown" : A31MusicModel.Current.functionMusic.GetAttrState("song_name");
                            //更新源的界面
                            showSourcePage();
                           // showSourcePage();
                        }
                        catch (Exception e)
                        {
@@ -469,7 +489,7 @@
            playView.diyArcSeekBar.IsClickable = true;
            switch (A31MusicModel.Current.A31PlayStatus.Source)
            switch (A31MusicModel.Current.functionMusic.GetAttrState("source"))
            {
                case "QPLAY"://QQ音乐
@@ -539,91 +559,20 @@
        /// 加载播放音乐列表View
        /// </summary>
        /// <param name="verticalScrolViewLayout"></param>
        void PlayListView(FrameLayout frameLayout, VerticalRefreshLayout verticalScrolViewLayout, string playListName)
        void PlayListView(FrameLayout frameLayout, VerticalRefreshLayout verticalScrolViewLayout)
        {
            verticalScrolViewLayout.RemoveAll();
            UI2.FuntionControlView.Music.UpdateThread.playMusuc(verticalScrolViewLayout,"播放列表", playListName, A31MusicModel.Current.CurrentPlayMusicInfoList,A31MusicModel.Current,frameLayout);
            var listName = A31MusicModel.Current.functionMusic.GetAttribute("playlist_name").ToString();
            var musicList = A31MusicModel.Current.GetSongList(listName);
            UI2.FuntionControlView.Music.UpdateThread.PlayMusicClick(verticalScrolViewLayout,"播放列表", listName, musicList, frameLayout);
        }
        /// <summary>
        /// 定时更新当前播放音乐
        /// </summary>
        void UpdateSelectedMusic(FrameLayout frameLayout, VerticalRefreshLayout middViewLayout)
        {
            UI2.FuntionControlView.Music.UpdateThread.updateThread(frameLayout, middViewLayout, A31MusicModel.Current);
            UI2.FuntionControlView.Music.UpdateThread.updateCurrMusicThread(frameLayout, middViewLayout, A31MusicModel.Current);
        }
        /// <summary>
        /// 读取播放音乐列表
        /// </summary>
        /// <param name="action"></param>
        void GetMusicList(Action<string> action) {
            System.Threading.Tasks.Task.Run(() =>
            {
                string playListName = "List";
                string sourceName = "SourceName";
                try
                {
                    if (A31MusicModel.Current.A31PlayStatus.Source == "STATION-NETWORK")
                    {
                        A31MusicModel.Current.CurrentPlayMusicInfoList = new List<MusicInfo>();
                        return;
                    }
                    if (A31MusicModel.Current.A31PlayStatus.Source == "AIRPLAY")
                    {
                        A31MusicModel.Current.CurrentPlayMusicInfoList = new List<MusicInfo>();
                        return;
                    }
                    var playString = SendMethod.GetCurrentPlayList(A31MusicModel.Current);
                    A31MusicModel.Current.CurrentPlayMusicInfoList = new List<MusicInfo>();
                    var se = System.Security.SecurityElement.FromString(playString);
                    while (se.Children != null)
                    {
                        se = se.Children[0] as System.Security.SecurityElement;
                    }
                    playListName = SecurityElement.FromString(se.Text).SearchForChildByTag("ListName").Text;
                    sourceName = SecurityElement.FromString(se.Text).SearchForChildByTag("ListInfo").SearchForTextOfTag("SourceName");
                    foreach (SecurityElement track in SecurityElement.FromString(se.Text).SearchForChildByTag("Tracks").Children)
                    {
                        MusicInfo musicInfo = new MusicInfo();
                        musicInfo.URL = track.SearchForTextOfTag("URL").Replace("&", "&amp;amp;");
                        var metadata = track.SearchForTextOfTag("Metadata");
                        musicInfo.SourceName = track.SearchForTextOfTag("Source");
                        if (string.IsNullOrEmpty(metadata))
                        {
                            continue;
                        }
                        if (A31MusicModel.IsJson(metadata))
                        {
                            var qqSong = Newtonsoft.Json.JsonConvert.DeserializeObject<SendMethod.A31QQSong>(metadata);
                            musicInfo.Album = qqSong.album;
                            musicInfo.Title = qqSong.title;
                            musicInfo.Artist = qqSong.creator;
                        }
                        else
                        {
                            metadata = metadata.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "").Replace("&", "&amp;amp;");
                            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.Duration = item.SearchForTextOfTag("res");
                            musicInfo.AlbumId = item.SearchForTextOfTag("song:albumid");
                        }
                        A31MusicModel.Current.CurrentPlayMusicInfoList.Add(musicInfo);
                    }
                }
                catch { }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        action(playListName);
                        //loading.Hide();
                        //PlayListView(myListView.popFra, myListView.verticalScrolViewLayout, playListName);
                        //UpdateSelectedMusic(myListView.popFra, myListView.verticalScrolViewLayout);
                    });
                }
            });
        }
    }
}