mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			128 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |