using System;
using Shared;
using com.hdl.on;
using System.Collections.Generic;
using System.Security;
namespace HDL_ON.UI.Music
{
public class A31PlayMusicPage : FrameLayout
{
///
/// 当前对象构造函数
///
public A31PlayMusicPage() { }
///
/// 重写RemoveFromParent方法
///
public override void RemoveFromParent()
{
base.RemoveFromParent();
Volume.VolumeChange = null;
if (timerThread != null)
{
try
{
if (timerThread.IsAlive)
{
timerThread.Abort();
}
}
catch { }
}
}
///
/// new布局界面
///
View.PlayView playView = new View.PlayView();
public void Show()
{
///1秒定时更新状态
timerUpdateStatus();
#region ---界面布局---
this.BackgroundColor = MusicColor.ViewColor;
var topView = new TopView();
topView.setBtn.Visible = true;
this.AddChidren(topView.TopFLayoutView());
topView.topNameBtn.Text = A31MusicModel.Current.Name;
topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
{
RemoveFromParent();
};
topView.clickSetBtn.MouseUpEventHandler += (sender, e) =>
{
A31MusicSourcePage a31MusicSourcePage = new A31MusicSourcePage();
MainPage.BasePageView.AddChidren(a31MusicSourcePage);
a31MusicSourcePage.Show();
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
};
var middLayout = new FrameLayout
{
Y = topView.fLayout.Bottom,
Height = Application.GetRealHeight(H_W.H - H_W.T_Height),
};
this.AddChidren(middLayout);
///加载播放音乐界面的控件方法
playView.viewFrameLayout(middLayout);
#endregion
#region ---控件的点击事件---
//收藏图标事件
playView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
{
playView.collectIconBtn.IsSelected = !playView.collectIconBtn.IsSelected;
if (playView.collectIconBtn.IsSelected)
{
A31MusicModel.Current.collection = true;
}
else
{
A31MusicModel.Current.collection = false;
}
};
//快进滑动弹起事件;
playView.diyArcSeekBar.OnStopTrackingTouchEvent+= (sender, e) =>
{
int totalSecond = (int)(playView.diyArcSeekBar.Progress * 1.0f / 100 * int.Parse(A31MusicModel.Current.A31PlayStatus.totlen) / 1000);
//分钟
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);
A31MusicModel.Current.A31PlayStatus.curpos = (DateTime.Parse(time) - DateTime.Parse("00:00:00")).TotalMilliseconds.ToString();
};
///切换播放模式点击事件;
playView.playOrderBtn.MouseUpEventHandler += (sender, e) =>
{
string msg = Language.StringByID(StringId.switchTo);
switch (A31MusicModel.Current.A31PlayStatus.loop)
{
//0列表循环,1单曲循环,2随机播放;
case "0":
A31MusicModel.Current.A31PlayStatus.loop = "1";
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
msg += Language.StringByID(StringId.singleMode);
break;
case "1":
A31MusicModel.Current.A31PlayStatus.loop = "2";
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
msg += Language.StringByID(StringId.randomMode);
break;
case "2":
A31MusicModel.Current.A31PlayStatus.loop = "0";
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
msg += Language.StringByID(StringId.listMode);
break;
}
new PublicAssmebly().TipMsgAutoClose(msg, false,1000);
string url = "http://" + A31MusicModel.Current.IPAddress + "/httpapi.asp?command=setPlayerCmd:" + "loopmode:" + A31MusicModel.Current.A31PlayStatus.loop;
SendMethod.SendCommand(url);
};
///添加喜爱点击事件;
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;
if (A31MusicModel.Current.A31PlayStatus.Source == "RADIO-NETWORK")
{
playView.loveBtn.IsSelected = !playView.loveBtn.IsSelected;
if (playView.loveBtn.IsSelected)
{
if (null == A31MusicModel.Current.LoveRadioInfoList.Find((musicInfo) =>
{
return url == musicInfo.URL;
}))
{
A31MusicModel.Current.LoveRadioInfoList.Add(new MusicInfo { Title = song, URL = url, });
}
}
else
{
A31MusicModel.Current.LoveRadioInfoList.RemoveAll((musicInfo) =>
{
return url == musicInfo.URL;
});
}
}
else
{
playView.loveBtn.IsSelected = !playView.loveBtn.IsSelected;
if (playView.loveBtn.IsSelected)
{
if (null == A31MusicModel.Current.LoveMusicInfoList.Find((musicInfo) =>
{
return url == musicInfo.URL;
}))
{
A31MusicModel.Current.LoveMusicInfoList.Add(new MusicInfo { Title = song, URL = url, Artist = artist, Album = album });
}
}
else
{
A31MusicModel.Current.LoveMusicInfoList.RemoveAll((musicInfo) =>
{
//也要加歌手名判断
return musicInfo.URL == url;
});
}
}
A31MusicModel.Save();
};
///我的列表点击事件
playView.playlistBtn.MouseUpEventHandler += (sender, e) =>
{
#region 布局界面---
Loading loading = new Loading();
UI2.FuntionControlView.Music.View.MyListView myListView = new UI2.FuntionControlView.Music.View.MyListView();
myListView.frameLayout(this, A31MusicModel.Current);
myListView.dialogFra.AddChidren(loading);//dialogFra刷新图标父控件
///下拉刷新
myListView.verticalScrolViewLayout.BeginHeaderRefreshingAction += () =>
{
//结束刷新
myListView.verticalScrolViewLayout.EndHeaderRefreshing();
};
///移除界面
EventHandler removeFromParentView = (sen, e1) =>
{
myListView.popFra.RemoveFromParent();
};
myListView.backIextBtn.MouseUpEventHandler += removeFromParentView;
myListView.popFra.MouseUpEventHandler += removeFromParentView;
#endregion
loading.Start();
GetMusicList((listName) =>
{
loading.Hide();
PlayListView(myListView.popFra, myListView.verticalScrolViewLayout, listName);
UpdateSelectedMusic(myListView.popFra, myListView.verticalScrolViewLayout);
});
};
///音量图标点击事件
playView.volIconBtn.MouseUpEventHandler += (sender, e) =>
{
if (A31MusicModel.Current.ServerClientType == 1 && A31MusicModel.Current.Slave.slave_list.Count != 0)
{ ///主播放器
var volumeView = new View.DialogView { };
volumeView.PlayerVolumeView(A31MusicModel.Current);
volumeView.UpdateVolume();
}
};
///音量进度条点击事件
int startVolume =0;//之前的音量
//int endVolume = 0;//现在的音量
EventHandler progressClick = (sender, e) =>
{
playView.volValueBtn.Text = playView.volSeekBar.Progress + "%";
if (startVolume != e)
{
startVolume = e;
SendMethod.ControlVolume(e, A31MusicModel.Current);
A31MusicModel.Current.A31PlayStatus.vol = e.ToString();
}
};
playView.volSeekBar.OnProgressChangedEvent += progressClick;
playView.volSeekBar.OnStopTrackingTouchEvent += progressClick;
///上一曲点击事件
playView.prevBtn.MouseDownEventHandler += (sender, e) =>
{
playView.prevBtn.IsSelected = true;
SendMethod.Previous(A31MusicModel.Current);
};
playView.prevBtn.MouseUpEventHandler += (sender, e) =>
{
playView.prevBtn.IsSelected = false;
};
///暂停/播放点击事件
playView.playBtn.MouseDownEventHandler += (sender, e) =>
{
if (playView.playBtn.IsSelected)
{
playView.playBtn.IsSelected = false;
SendMethod.Pause(A31MusicModel.Current);
A31MusicModel.Current.A31PlayStatus.status = "pause";
}
else
{
playView.playBtn.IsSelected = true;
SendMethod.Play(A31MusicModel.Current);
A31MusicModel.Current.A31PlayStatus.status = "play";
}
};
///下一曲点击事件
playView.nextBtn.MouseDownEventHandler += (sender, e) =>
{
playView.nextBtn.IsSelected = true;
SendMethod.Next(A31MusicModel.Current);
};
playView.nextBtn.MouseUpEventHandler += (sender, e) =>
{
playView.nextBtn.IsSelected = false;
};
///物理按键的点击事件
Volume.VolumeChange = (volume) =>
{
if (Application.DeviceType == Device.Ios && A31MusicModel.Current.A31PlayStatus.Source == "BLUETOOTH")
{
return;
}
playView.volSeekBar.Progress = volume;
if (startVolume != volume)
{
startVolume = volume;
SendMethod.ControlVolume(volume, A31MusicModel.Current);
A31MusicModel.Current.A31PlayStatus.vol = volume.ToString();
}
};
#endregion
}
///
/// 定义全局线程
///
System.Threading.Thread timerThread;
///
/// 定时更新状态
///
void timerUpdateStatus()
{
timerThread = new System.Threading.Thread((obj) =>
{
while (true)
{
Application.RunOnMainThread(() =>
{
try
{
//更新总时间
//总共有多少秒
int totalSecond = int.Parse(A31MusicModel.Current.A31PlayStatus.totlen) / 1000;
//分钟
int totalMusicMinute = totalSecond / 60;
//秒钟
int totalMusicSecond = totalSecond % 60;
string totalTime = (totalMusicMinute.ToString().Length < 2 ? "0" + totalMusicMinute.ToString() : totalMusicMinute.ToString()) + ":" + (totalMusicSecond.ToString().Length < 2 ? "0" + totalMusicSecond.ToString() : totalMusicSecond.ToString());
playView.endTimeBtn.Text = totalTime;
//topView.topNameBtn.Text = A31MusicModel.Current.Name;
switch (A31MusicModel.Current.A31PlayStatus.loop)
{
case "0"://列表循环
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
break;
case "1"://单曲顺环
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
break;
case "2"://随机播放
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.collection)
{
playView.collectIconBtn.IsSelected = true;
}
else
{
playView.collectIconBtn.IsSelected = false;
}
//if (A31MusicModel.Current.A31PlayStatus.IsMute)
//{
// // btnMute.IsSelected = true;//静音图标
// playView.volSeekBar.Progress = 0;
//}
//else
//{
// // btnMute.IsSelected = false;//静音图标
// if (1000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds)
// {
// //声音进度条;
// playView.volSeekBar.Progress = int.Parse(A31MusicModel.Current.A31PlayStatus.vol);
// //显示当前音量值;
// playView.volValueBtn.Text = A31MusicModel.Current.A31PlayStatus.vol + "%";
// }
//}
if (1000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds)
{
//音量进度条;
playView.volSeekBar.Progress = int.Parse(A31MusicModel.Current.A31PlayStatus.vol);
//显示当前音量值;
playView.volValueBtn.Text = A31MusicModel.Current.A31PlayStatus.vol + "%";
}
//更新播放器音量给系统音量
Volume.MusicVolume = playView.volSeekBar.Progress;
//当前播放音乐时间
int playSecond = int.Parse(A31MusicModel.Current.A31PlayStatus.curpos) / 1000 + (int)(DateTime.Now - A31MusicModel.Current.LastDateTime).TotalSeconds;
int playMusicMinute = playSecond / 60;
//秒钟
int playMusicSecond = playSecond % 60;
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")
{
playView.playBtn.IsSelected = true;
//如果在播放,时间就不断变化
playView.startTimeBtn.Text = playTime;
if (totalSecond == 0)
{
//歌曲进度条
playView.diyArcSeekBar.Progress = 0;
}
else
{
//歌曲进度条
playView.diyArcSeekBar.Progress = (int)(playSecond * 100.0 / totalSecond);//+1
}
}
else
{
playView.playBtn.IsSelected = false;
//停止播放
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());
//更新源的界面
showSourcePage();
}
catch (Exception e)
{
var ee = e.Message;
}
});
System.Threading.Thread.Sleep(1000 * 1);
}
})
{ IsBackground = true };
timerThread.Start();
}
///
/// 更新不同音乐源界面图标状态
///
void showSourcePage()
{
playView.loveBtn.Alpha = 1;
playView.loveBtn.Enable = true;
playView.playlistBtn.Alpha = 1;
playView.playlistBtn.Enable = true;
playView.prevBtn.Alpha = 1;
playView.prevBtn.Enable = true;
playView.nextBtn.Alpha = 1;
playView.nextBtn.Enable = true;
playView.playOrderBtn.Alpha = 1;
playView.playOrderBtn.Enable = true;
playView.diyArcSeekBar.IsClickable = true;
switch (A31MusicModel.Current.A31PlayStatus.Source)
{
case "QPLAY"://QQ音乐
playView.loveBtn.Alpha = 0.5f;
playView.loveBtn.Enable = false;
break;
case "AIRPLAY"://酷狗音乐
playView.loveBtn.Alpha = 0.5f;
playView.loveBtn.Enable = false;
playView.diyArcSeekBar.IsClickable = false;
break;
case "SONGLIST-NETWORK"://本地音乐
break;
case "SONGLIST-LOCAL"://USB
break;
case "RADIO-NETWORK"://在线电台
playView.playlistBtn.Alpha = 1;
playView.playlistBtn.Enable = true;
playView.prevBtn.Alpha = 0.5f;
playView.prevBtn.Enable = false;
playView.nextBtn.Alpha = 0.5f;
playView.nextBtn.Enable = false;
playView.playOrderBtn.Alpha = 0.5f;
playView.playOrderBtn.Enable = false;
break;
case "BLUETOOTH"://蓝牙
case "LINE-IN"://线路输入
playView.loveBtn.Alpha = 0.5f;
playView.loveBtn.Enable = false;
playView.playlistBtn.Alpha = 0.5f;
playView.playlistBtn.Enable = false;
playView.prevBtn.Alpha = 0.5f;
playView.prevBtn.Enable = false;
playView.nextBtn.Alpha = 0.5f;
playView.nextBtn.Enable = false;
playView.playOrderBtn.Alpha = 0.5f;
playView.playOrderBtn.Enable = false;
break;
default:
playView.diyArcSeekBar.IsClickable = false;
playView.loveBtn.Alpha = 0.5f;
playView.loveBtn.Enable = false;
playView.playlistBtn.Alpha = 0.5f;
playView.playlistBtn.Enable = false;
playView.prevBtn.Alpha = 0.5f;
playView.prevBtn.Enable = false;
playView.nextBtn.Alpha = 0.5f;
playView.nextBtn.Enable = false;
playView.playOrderBtn.Alpha = 0.5f;
playView.playOrderBtn.Enable = false;
break;
}
}
///
/// 加载播放音乐列表View
///
///
void PlayListView(FrameLayout frameLayout, VerticalRefreshLayout verticalScrolViewLayout, string playListName)
{
verticalScrolViewLayout.RemoveAll();
UI2.FuntionControlView.Music.UpdateThread.playMusuc(verticalScrolViewLayout,"播放列表", playListName, A31MusicModel.Current.CurrentPlayMusicInfoList,A31MusicModel.Current,frameLayout);
}
///
/// 定时更新当前播放音乐
///
void UpdateSelectedMusic(FrameLayout frameLayout, VerticalRefreshLayout middViewLayout)
{
UI2.FuntionControlView.Music.UpdateThread.updateThread(frameLayout, middViewLayout, A31MusicModel.Current);
}
///
/// 读取播放音乐列表
///
///
void GetMusicList(Action 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();
return;
}
if (A31MusicModel.Current.A31PlayStatus.Source == "AIRPLAY")
{
A31MusicModel.Current.CurrentPlayMusicInfoList = new List();
return;
}
var playString = SendMethod.GetCurrentPlayList(A31MusicModel.Current);
A31MusicModel.Current.CurrentPlayMusicInfoList = new List();
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("&", "&");
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(metadata);
musicInfo.Album = qqSong.album;
musicInfo.Title = qqSong.title;
musicInfo.Artist = qqSong.creator;
}
else
{
metadata = metadata.Replace("", "").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.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);
});
}
});
}
}
}