| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | using MediaBrowser.Model.Connect;using MediaBrowser.Model.Extensions;using MediaBrowser.Model.System;using System;using System.Collections.Generic;namespace MediaBrowser.Model.ApiClient{    public class ServerInfo    {        public List<ServerUserInfo> Users { get; set; }                public String Name { get; set; }        public String Id { get; set; }        public String LocalAddress { get; set; }        public String RemoteAddress { get; set; }        public String ManualAddress { get; set; }        public String UserId { get; set; }        public String AccessToken { get; set; }        public List<WakeOnLanInfo> WakeOnLanInfos { get; set; }        public DateTime DateLastAccessed { get; set; }        public DateTime DateLastLocalConnection { get; set; }        public String ExchangeToken { get; set; }        public UserLinkType? UserLinkType { get; set; }        public ConnectionMode? LastConnectionMode { get; set; }        public ServerInfo()        {            WakeOnLanInfos = new List<WakeOnLanInfo>();            Users = new List<ServerUserInfo>();        }        public void ImportInfo(PublicSystemInfo systemInfo)        {            Name = systemInfo.ServerName;            Id = systemInfo.Id;            if (!string.IsNullOrEmpty(systemInfo.LocalAddress))            {                LocalAddress = systemInfo.LocalAddress;            }            if (!string.IsNullOrEmpty(systemInfo.WanAddress))            {                RemoteAddress = systemInfo.WanAddress;            }            var fullSystemInfo = systemInfo as SystemInfo;            if (fullSystemInfo != null)            {                WakeOnLanInfos = new List<WakeOnLanInfo>();                if (!string.IsNullOrEmpty(fullSystemInfo.MacAddress))                {                    WakeOnLanInfos.Add(new WakeOnLanInfo                    {                        MacAddress = fullSystemInfo.MacAddress                    });                }            }        }        public string GetAddress(ConnectionMode mode)        {            switch (mode)            {                case ConnectionMode.Local:                    return LocalAddress;                case ConnectionMode.Manual:                    return ManualAddress;                case ConnectionMode.Remote:                    return RemoteAddress;                default:                    throw new ArgumentException("Unexpected ConnectionMode");            }        }        public void AddOrUpdate(ServerUserInfo user)        {            if (user == null)            {                throw new ArgumentNullException("user");            }            // Clone the existing list of users            var list = new List<ServerUserInfo>();            foreach (ServerUserInfo serverUserInfo in Users)            {                list.Add(serverUserInfo);            }            var index = FindIndex(list, user.Id);            if (index != -1)            {                var existing = list[index];                // Merge the data                existing.IsSignedInOffline = user.IsSignedInOffline;            }            else            {                list.Add(user);            }            Users = list;        }        private int FindIndex(List<ServerUserInfo> users, string id)        {            var index = 0;            foreach (var user in users)            {                if (StringHelper.EqualsIgnoreCase(id, user.Id))                {                    return index;                }                index++;            }            return -1;        }    }}
 |