mac
2024-07-25 3f6685c77beeb12baf840733fb890860f4c26e7c
HDL_ON/UI/UI2/FuntionControlView/Music/A31MusicModel.cs
@@ -13,86 +13,18 @@
        static readonly string a31MusiceModeListFilePath = "A31MusiceModeListFilePath";
        static A31MusicModel()
        {
            Refresh();
            //Refresh();
        }
        static List<System.Threading.Thread> updataMusicStatesListThread = new List<System.Threading.Thread>();
        /// <summary>
        /// 读取音乐状态
        /// </summary>
        public static void ReadMusicStates()
        {
            RemoveListThread();
            if (GetCollection)
            {
                for (int i = 0; i < A31MusicModelList.Count; i++)
                {
                    var a31player = A31MusicModelList[i];
                    var musicThread = new System.Threading.Thread(() =>
                    {
                        while (true)
                        {
                            System.Threading.Thread.Sleep(1000);
                            if (!a31player.IsOnLine)
                            {
                                continue;
                            }
                            SendMethod.ReadStatus(a31player);
                        }
                    })
                    { IsBackground = true, Name = "A31" };
                    musicThread.Start();
                    updataMusicStatesListThread.Add(musicThread);
                }
            }
        }
        /// <summary>
        /// 音乐功能
        /// </summary>
        public Function functionMusic = new Function();
        /// <summary>
        /// 移除之前的线程
        /// </summary>
        public static void RemoveListThread()
        {
            for (int i = 0; i < updataMusicStatesListThread.Count;)
            {
                try
                {
                    var thread = updataMusicStatesListThread[i];
                    if (thread.IsAlive)
                    {
                        thread.Abort();
                    }
                    updataMusicStatesListThread.Remove(thread);
                }
                catch (Exception e)
                {
                    MainPage.Log("clearA31Threads error : " + e.Message);
                }
                finally
                {
                    MainPage.Log("clearA31Threads over");
                }
            }
        }
        /// <summary>
        /// 音乐列表里是否有音乐被收藏过
        /// </summary>
        static bool GetCollection
        {
            get
            {
                for (int i = 0; i < A31MusicModelList.Count; i++)
                {
                    if (A31MusicModelList[i].functionMusic.collect)
                    {
                        return true; //查询是否有音乐被收藏过
                    }
                }
                return false;
            }
        }
        /// <summary>
        ///保存当前音乐列表
        /// </summary>
@@ -120,105 +52,48 @@
            A31MusicModelList.RemoveAll((obj) => obj == null);
        }
        /// <summary>
        /// 音乐播放器名称
        /// </summary>
        public string Name = string.Empty;
        /// <summary>
        /// 上一次更新的时间
        /// 记录数据反馈的时间(因为有时间网络差数据不回复,导致刷新当前播放音乐时间不正确)
        /// 记录数据反馈的时间(因为有时候网络差数据不回复,导致刷新当前播放音乐时间不正确)
        /// ((当前时间)DateTime.Now - (记录时间)LastDateTimeLastDateTime).TotalSeconds=误差时间(秒)
        /// </summary>
        public DateTime LastDateTime;
        /// <summary>
        /// IP地址
        /// 记录滑动音量条时间<用来处理音量跳动>
        /// </summary>
        public string IPAddress = "192.168.1.100";
        public static DateTime ProgressDateTime = DateTime.MinValue;
        /// <summary>
        /// 端口
        /// </summary>
        public int Port = 49153;
        /// <summary>
        /// 是否是播放器列表最后一个(true)
        /// </summary>
        public bool IsEnd = false;
        public int A31DeviceType;
        //public string a31Source = "wifi";
        //public string a31Source = string.Empty;
        /// <summary>
        /// 音乐播放器ID
        /// </summary>
        public string UniqueDeviceName = string.Empty;
        /// <summary>
        /// 当前播放状态
        /// </summary>
        public A31PlayStatus A31PlayStatus = new A31PlayStatus();
        public MusicInfo CurrentMusic = new MusicInfo();
        /// <summary>
        ///当前播放的列表信息
        /// </summary>
        public List<Songs> CurrentPlayMusicInfoList = new List<Songs>();
        /// <summary>
        /// 是否允许显示
        /// </summary>
        public bool IsCanShow = true;
        /// <summary>
        /// 是否在线,如果在线就允许读取信息
        /// 当前播放歌曲列表
        /// </summary>
        public bool IsOnLine = true;
        /// <summary>
        /// 列表
        /// </summary>
        public List<PalyListInfo> palyListInfos = new List<PalyListInfo>();
        public List<SongList> CurrentPlayMusicInfoList = new List<SongList>();
        /// <summary>
        ///  喜爱音乐列表
        /// </summary>
        public List<Songs> LoveMusicInfoList = new List<Songs>();
        public List<SongInfo> LoveMusicInfoList = new List<SongInfo>();
        /// <summary>
        /// DLNA所有列表
        /// 所有【音乐列表】
        /// </summary>
        public List<Songs> dlnaMusicInfoLists = new List<Songs>();
        public List<SongList> AllMusicLists = new List<SongList>();
        /// <summary>
        ///  电台所有列表
        /// 所有【音乐源】的列表
        /// </summary>
        public List<Songs> CnRadioInfoList = new List<Songs>();
        /// <summary>
        ///  vTuner电台所有列表
        /// </summary>
        public List<Songs> vTunerList = new List<Songs>();
        /// <summary>
        ///  喜爱电台列表
        /// </summary>
        public List<Songs> LoveRadioInfoList = new List<Songs>();
        /// <summary>
        /// Pandora电台所有列表
        /// </summary>
        public List<Songs> PanRadioInfoList = new List<Songs>();
        /// <summary>
        /// usb列表
        /// </summary>
        public List<Songs> USBList = new List<Songs>();
        /// <summary>
        /// Tidal喜爱列表
        /// </summary>
        public List<Songs> TidalLikelist = new List<Songs>();
        public List<GroupList> AllSourceGroupList = new List<GroupList>();
        /// <summary>
        ///创建音乐文件列表
        /// </summary>
@@ -228,72 +103,31 @@
        /// </summary>
        public static A31MusicModel Current;
        public int _ServerClientType;
        /// <summary>
        /// -1表示从的0表示默认1表示主的
        /// </summary>
        public int ServerClientType
        {
            get
            {
                return _ServerClientType;
            }
            set
            {
                _ServerClientType = value;
                if (value == 0)
                {
                    //name = Name;
                }
            }
        }
        /// <summary>
        /// 记录主播放器IP
        /// </summary>
        public string MainPlayIP = string.Empty;
        public string _MainPlayName = string.Empty;
        /// <summary>
        /// 记录主播放器名称
        /// </summary>
        public string MainPlayName
        {
            get
            {
                return _MainPlayName;
            }
            set
            {
                _MainPlayName = value;
                //if(ServerClientType == 1)
                //{
                //    name = value;
                //}
            }
        }
        /// <summary>
        /// 指定列表名获取音乐列表
        /// </summary>
        /// <returns></returns>
        public List<Songs> GetSongList(string listName)
        public List<SongInfo> GetSongList(string listName)
        {
            var list = palyListInfos.Find((o)=>o.group==listName);
            if (list==null) {
                return new List<Songs>();
            var list = CurrentPlayMusicInfoList.Find((o) => o.group == listName);
            if (list == null)
            {
                return new List<SongInfo>();
            }
            return list.songs;
        }
        /// <summary>
        /// 记录主播放器是否被收藏(秀桡定义的)
        /// </summary>
        public bool MainPlayCollection = false;
        public Slaves Slave = new Slaves();
        /// <summary>
        /// 记录时间
        /// </summary>
        public static DateTime ProgressDateTime = DateTime.Now;
        /// <summary>
        /// 判断是否是json数据
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static bool IsJson(string json)
        {
            try
@@ -332,7 +166,7 @@
        /// <summary>
        ///  列表歌曲信息
        /// </summary>
        public List<Songs> MusicInfoList = new List<Songs>();
        public List<SongInfo> MusicInfoList = new List<SongInfo>();
    }
    [System.Serializable]
    public class TidalMusicInfo : MusicInfo
@@ -361,23 +195,48 @@
        public string version = string.Empty;
        public string uuid = string.Empty;
    }
    [System.Serializable]
    /// <summary>
    /// 支持多个音乐
    /// </summary>
    public class PalyerSongListInfo
    {
        /// <summary>
        /// 音乐sid
        /// </summary>
        public string sid = string.Empty;
        /// <summary>
        /// 音乐源
        /// </summary>
        public string source = string.Empty;
        /// <summary>
        ///  列表信息
        /// </summary>
        public List<SongList> playlist = new List<SongList>();
    }
    [System.Serializable]
    /// <summary>
    /// 列表信息
    /// </summary>
    public class PalyListInfo
    public class SongList
    {
        /// <summary>
        /// 列表名
        /// </summary>
        public string group = string.Empty;
        /// <summary>
        /// 自己定义的(用识别是那个音乐源的列表)
        /// </summary>
        public string source = string.Empty;
        /// <summary>
        ///  列表歌曲信息
        /// </summary>
        public List<Songs> songs = new List<Songs>();
        public List<SongInfo> songs = new List<SongInfo>();
    }
    [System.Serializable]
    public class Songs:MusicInfo
    public class SongInfo : MusicInfo
    {
        /// <summary>
        /// 歌曲名称
@@ -392,14 +251,53 @@
        /// </summary>
        public string time = string.Empty;
        /// <summary>
        /// 歌曲地址
        /// </summary>
        public string url = string.Empty;
        /// <summary>
        /// 类型<自己用>
        /// </summary>
        public string type = string.Empty;
        /// <summary>
        /// 列表名和group组名是一样的
        /// </summary>
        public string listName = string.Empty;
    }
    [System.Serializable]
    /// <summary>
    /// 列表名列表
    /// </summary>
    public class GroupList
    {
        /// <summary>
        ///设备sid
        /// </summary>
        public string sid = string.Empty;
        /// <summary>
        /// 音乐源
        /// </summary>
        public string source = string.Empty;
        /// <summary>
        /// 列表名集合
        /// </summary>
        public List<ListName> groupList = new List<ListName>();
    }
    [System.Serializable]
    /// <summary>
    /// 列表名
    /// </summary>
    public class ListName
    {
        /// <summary>
        /// 组名=列表名
        /// </summary>
        public string group = string.Empty;
    }
}