using MediaBrowser.Model.Connect; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.System; using System; using System.Collections.Generic; using System.Linq; namespace MediaBrowser.Model.ApiClient { public class ServerInfo { public List 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 WakeOnLanInfos { get; set; } public DateTime DateLastAccessed { get; set; } public String ExchangeToken { get; set; } public UserLinkType? UserLinkType { get; set; } public ConnectionMode? LastConnectionMode { get; set; } public ServerInfo() { WakeOnLanInfos = new List(); Users = new List(); } 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(); 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"); } var list = Users.ToList(); 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 users, string id) { var index = 0; foreach (var user in users) { if (StringHelper.EqualsIgnoreCase(id, user.Id)) { return index; } index++; } return -1; } } }