using System;
|
using System.Collections.Generic;
|
using Shared;
|
using Shared.IO;
|
using System.Net;
|
using HDL_ON.Entity;
|
using HDL_ON.UI.UI2.FuntionControlView.Music;
|
|
namespace HDL_ON.UI.Music
|
{
|
public class MusicMain : FrameLayout
|
{
|
private static MusicMain s_Current = null;
|
public static MusicMain Current
|
{
|
get
|
{
|
if (s_Current == null)
|
{
|
s_Current = new MusicMain();
|
}
|
return s_Current;
|
}
|
|
}
|
/// <summary>
|
/// MusicMain对象构造函数
|
/// </summary>
|
public MusicMain()
|
{
|
Tag = "MusicMain";
|
}
|
/// <summary>
|
/// 重写RemoveFromParent方法
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
base.RemoveFromParent();
|
ClearA31Threads();
|
//进来没有音乐被收藏过,退出有音乐被收藏过
|
//A31MusicModel.ReadMusicStates();
|
}
|
/// <summary>
|
/// 创建线程列表
|
/// </summary>
|
static List<System.Threading.Thread> threadLists = new List<System.Threading.Thread>();
|
/// <summary>
|
/// 移除线程
|
/// </summary>
|
static void ClearA31Threads()
|
{
|
|
var threads = threadLists.FindAll((obj) => { return obj.Name == "A31"; });
|
foreach (var thread in threads)
|
{
|
try
|
{
|
threadLists.Remove(thread);
|
if (thread.IsAlive)
|
{
|
///强制线程抛异常
|
thread.Abort();
|
}
|
}
|
catch (Exception e)
|
{
|
MainPage.Log("clearA31Threads error : " + e.Message);
|
}
|
}
|
}
|
/// <summary>
|
/// 显示加载界面
|
/// </summary>
|
public static Loading loading = new Loading();
|
/// <summary>
|
/// 定义全局对象
|
/// </summary>
|
VerticalRefreshLayout verticalRefresh;
|
|
public void Show()
|
{
|
|
#region 界面布局
|
this.BackgroundColor = MusicColor.ViewColor;
|
var topView = new TopView();
|
this.AddChidren(topView.TopFLayoutView());
|
topView.topNameBtn.TextID = StringId.a31Music;
|
topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
RemoveFromParent();
|
};
|
|
verticalRefresh = new VerticalRefreshLayout
|
{
|
Y = topView.fLayout.Bottom,
|
Height = Application.GetRealHeight(H_W.H - H_W.T_Height),
|
Name = "verticalRefresh",
|
};
|
this.AddChidren(verticalRefresh);
|
#endregion
|
|
verticalRefresh.BeginHeaderRefreshingAction += () =>
|
{
|
|
////发送读取音乐播放器状态线程
|
SeachMusic();
|
verticalRefresh.EndHeaderRefreshing();
|
};
|
this.AddChidren(loading);
|
SeachMusic();
|
|
}
|
/// <summary>
|
/// 刷新播放器列表
|
/// </summary>
|
void SeachMusic()
|
{
|
|
Application.RunOnMainThread(() =>
|
{
|
verticalRefresh.RemoveAll();
|
A31MusicModel.A31MusicModelList.Clear();
|
var musicDeviceList= FunctionList.List.GetMusicList();
|
for (int i = 0; i < musicDeviceList.Count; i++)
|
{
|
var function = musicDeviceList[i];
|
var music = A31MusicModel.A31MusicModelList.Find((obj) =>
|
(obj.functionMusic.deviceId == function.deviceId && function.spk == SPK.MusicStandard) || (
|
obj.functionMusic.deviceId == function.deviceId && function.spk == SPK.AvMusic)
|
);
|
if (music == null)
|
{
|
A31MusicModel.A31MusicModelList.Add(new A31MusicModel { functionMusic = function });
|
}
|
else
|
{
|
music.functionMusic = function;
|
}
|
}
|
|
for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
|
{
|
|
var a31player = A31MusicModel.A31MusicModelList[i];
|
//if (a31player.functionMusic.online == false)
|
//{
|
// //不在线不显示
|
// continue;
|
//}
|
|
Application.RunOnMainThread(() =>
|
{
|
MusicListView(a31player);
|
});
|
}
|
///进来读一次音乐播放器状态
|
for (int i = 0; i < A31MusicModel.A31MusicModelList.Count; i++)
|
{
|
|
var a31player = A31MusicModel.A31MusicModelList[i];
|
if (a31player.functionMusic.online == false)
|
{
|
//不在线不读取
|
continue;
|
}
|
//发送读取音乐播放器状态线程
|
System.Threading.Tasks.Task.Run(() =>
|
{
|
try
|
{
|
|
SendMethod.Current.RefreshDeviceStatus(new List<string> { a31player.functionMusic.deviceId });
|
System.Threading.Thread.Sleep(500);
|
}
|
catch { }
|
|
});
|
}
|
|
});
|
|
}
|
/// <summary>
|
/// 显示音乐列表的方法
|
/// </summary>
|
void MusicListView(A31MusicModel player)
|
{
|
/// <summary>
|
/// 为了音乐刷新状态定义全局对象
|
/// </summary>
|
MusicView musicView = new MusicView();
|
musicView.ViewAddChidren(verticalRefresh);
|
musicView.muiscFl.Tag = player.functionMusic;//多个音乐播放器更新状态要用到
|
musicView.singerBtn.Text = player.functionMusic.GetAttrState(KeyProperty.song_name);
|
musicView.songNameBtn.Text = player.functionMusic.GetAttrState(KeyProperty.song_name);
|
musicView.musicNameBtn.Text = player.functionMusic.name;
|
musicView.collectIconBtn.Visible = false;//先暂时隐藏收藏功能
|
///收藏事件
|
musicView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
musicView.collectIconBtn.IsSelected = !musicView.collectIconBtn.IsSelected;
|
if (musicView.collectIconBtn.IsSelected)
|
{
|
player.functionMusic.collect = true;
|
}
|
else
|
{
|
player.functionMusic.collect = false;
|
}
|
};
|
|
|
///进入音乐主页事件
|
EventHandler<MouseEventArgs> clickPlayView = (sender, e) =>
|
{
|
|
A31MusicModel.Current = player;
|
var a31PlayMusicPage = new A31PlayMusicPage();
|
MainPage.BasePageView.AddChidren(a31PlayMusicPage);
|
a31PlayMusicPage.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
};
|
musicView.musicIfonFl.MouseUpEventHandler += clickPlayView;
|
musicView.clickBtn.MouseUpEventHandler += clickPlayView;//
|
musicView.singerBtn.MouseUpEventHandler += clickPlayView;
|
musicView.songNameBtn.MouseUpEventHandler += clickPlayView;//
|
musicView.musicNameBtn.MouseUpEventHandler += clickPlayView;
|
musicView.regionBtn.MouseUpEventHandler += clickPlayView;//
|
|
///上一曲点击事件
|
musicView.prevBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
musicView.prevBtn.IsSelected = true;
|
player.functionMusic.SetAttrState(KeyProperty.song_step, ValueProperty.up);
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
dic.Add(KeyProperty.song_step, ValueProperty.up);
|
SendMethod.Current.SendControlCommand(player.functionMusic, dic);
|
};
|
musicView.prevBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
musicView.prevBtn.IsSelected = false;
|
};
|
///暂停/播放点击事件
|
musicView.playBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
string status = ValueProperty.off;
|
if (musicView.playBtn.IsSelected)
|
{
|
musicView.playBtn.IsSelected = false;
|
status = ValueProperty.off;
|
}
|
else
|
{
|
musicView.playBtn.IsSelected = true;
|
status = ValueProperty.on;
|
}
|
player.functionMusic.SetAttrState(KeyProperty.on_off, status);
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
dic.Add(KeyProperty.on_off, status);
|
SendMethod.Current.SendControlCommand(player.functionMusic, dic);
|
};
|
///下一曲点击事件
|
musicView.nextBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
musicView.nextBtn.IsSelected = true;
|
player.functionMusic.SetAttrState(KeyProperty.song_step, ValueProperty.down);
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
dic.Add(KeyProperty.song_step, ValueProperty.down);
|
SendMethod.Current.SendControlCommand(player.functionMusic, dic);
|
};
|
musicView.nextBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
musicView.nextBtn.IsSelected = false;
|
};
|
//更新状态线程
|
var musicThread = new System.Threading.Thread(() =>
|
{
|
while (true)
|
{
|
if (!player.functionMusic.online)
|
{
|
///不在线不读状态
|
continue;
|
}
|
//SendMethod.ReadStatus(player);
|
SendMethod.Current.GetDeviceStatus(ref player, new List<string> { player.functionMusic.deviceId }, player.functionMusic.sid);
|
System.Threading.Thread.Sleep(1000);
|
Application.RunOnMainThread(() =>
|
{
|
musicView.singerBtn.Text = player.functionMusic.GetAttrState(KeyProperty.song_name);
|
musicView.songNameBtn.Text = player.functionMusic.GetAttrState(KeyProperty.song_name);
|
musicView.musicNameBtn.Text = player.functionMusic.name;
|
if (player.functionMusic.GetAttrState(KeyProperty.on_off) == ValueProperty.on)
|
{
|
musicView.playBtn.IsSelected = true;
|
}
|
else
|
{
|
musicView.playBtn.IsSelected = false;
|
}
|
musicView.regionBtn.Text = player.functionMusic.GetRoomListName();
|
|
if (player.functionMusic.collect)
|
{
|
musicView.collectIconBtn.IsSelected = true;
|
}
|
else
|
{
|
musicView.collectIconBtn.IsSelected = false;
|
}
|
});
|
}
|
})
|
{ IsBackground = true, Name = "A31" };
|
musicThread.Start();
|
threadLists.Add(musicThread);
|
}
|
|
/// <summary>
|
///指定刷新界面
|
/// </summary>
|
/// <param name="strView">判断字符</param>
|
public void RefreshView(AlinkStatusData alinkStatusData)
|
{
|
if (alinkStatusData == null || alinkStatusData.status.Count == 0)
|
{
|
return;
|
}
|
Application.RunOnMainThread(() =>
|
{
|
try
|
{
|
for (int a =0; a < MainPage.BasePageView.ChildrenCount; a++)
|
{
|
var view = MainPage.BasePageView.GetChildren(a);
|
if (view.GetType() == typeof(MusicMain))
|
{
|
var musicMain = view as MusicMain;
|
if (musicMain != null)
|
{
|
for (int b = 0; b < musicMain.ChildrenCount; b++)
|
{
|
var view1 = musicMain.GetChildren(b);
|
if (view1.GetType() == typeof(VerticalRefreshLayout))
|
{
|
var vv = view1 as VerticalRefreshLayout;
|
if (vv != null && vv.Name == "verticalRefresh")
|
{
|
for (int c = 0; c < vv.ChildrenCount; c++)
|
{
|
var viewfl = vv.GetChildren(c);
|
if (viewfl.GetType() == typeof(FrameLayout))
|
{
|
var fl = viewfl as FrameLayout;
|
if ((fl.Tag as Function).sid!= alinkStatusData.sid) {
|
//不是当前音乐不会更新状态
|
continue;
|
}
|
if (fl != null && fl.Name == "parentfl")
|
{
|
for (int i = 0; i < fl.ChildrenCount; i++)
|
{
|
var viewfl1 = fl.GetChildren(i);
|
if (viewfl1.GetType() == typeof(FrameLayout))
|
{
|
var fl1 = viewfl1 as FrameLayout;
|
if (fl1 != null && fl1.Name == "musicparentfl")
|
{
|
for (int j = 0; j < fl1.ChildrenCount; j++)
|
{
|
|
if (fl1.GetChildren(j).GetType() == typeof(Button))
|
{
|
var btn = fl1.GetChildren(j) as Button;
|
if (btn == null ||btn.Name==null)
|
{
|
continue;
|
}
|
switch (btn.Name)
|
{
|
case "song":
|
{
|
var s = alinkStatusData.status.Find((o) => o.key == KeyProperty.song_name);
|
if (s != null)
|
{
|
btn.Text = s.value;
|
}
|
}
|
break;
|
case "playstatus":
|
{
|
|
var s = alinkStatusData.status.Find((o) => o.key == KeyProperty.on_off);
|
if (s != null)
|
{
|
if (s.value == ValueProperty.on)
|
{
|
btn.IsSelected = true;
|
}
|
else
|
{
|
btn.IsSelected = false;
|
}
|
}
|
}
|
break;
|
}
|
|
}
|
}
|
}
|
}
|
|
}
|
}
|
}
|
|
}
|
}
|
|
}
|
|
}
|
}
|
|
}
|
}
|
|
}
|
catch { }
|
});
|
}
|
|
|
}
|
|
}
|