aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model/ApiClient/ServerCredentials.cs
blob: 19f68445e2842dcbfea73eee9efe657ff1a6e268 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using MediaBrowser.Model.Extensions;
using System;
using System.Collections.Generic;

namespace MediaBrowser.Model.ApiClient
{
    public class ServerCredentials
    {
        public List<ServerInfo> Servers { get; set; }

        public string ConnectUserId { get; set; }
        public string ConnectAccessToken { get; set; }

        public ServerCredentials()
        {
            Servers = new List<ServerInfo>();
        }

        public void AddOrUpdateServer(ServerInfo server)
        {
            if (server == null)
            {
                throw new ArgumentNullException("server");
            }

            // Clone the existing list of servers
            var list = new List<ServerInfo>();
            foreach (ServerInfo serverInfo in Servers)
            {
                list.Add(serverInfo);
            }

            var index = FindIndex(list, server.Id);

            if (index != -1)
            {
                var existing = list[index];

                // Take the most recent DateLastAccessed
                if (server.DateLastAccessed > existing.DateLastAccessed)
                {
                    existing.DateLastAccessed = server.DateLastAccessed;
                }
                
                existing.UserLinkType = server.UserLinkType;

                if (!string.IsNullOrEmpty(server.AccessToken))
                {
                    existing.AccessToken = server.AccessToken;
                    existing.UserId = server.UserId;
                }
                if (!string.IsNullOrEmpty(server.ExchangeToken))
                {
                    existing.ExchangeToken = server.ExchangeToken;
                }
                if (!string.IsNullOrEmpty(server.RemoteAddress))
                {
                    existing.RemoteAddress = server.RemoteAddress;
                }
                if (!string.IsNullOrEmpty(server.ConnectServerId))
                {
                    existing.ConnectServerId = server.ConnectServerId;
                }
                if (!string.IsNullOrEmpty(server.LocalAddress))
                {
                    existing.LocalAddress = server.LocalAddress;
                }
                if (!string.IsNullOrEmpty(server.ManualAddress))
                {
                    existing.LocalAddress = server.ManualAddress;
                }
                if (!string.IsNullOrEmpty(server.Name))
                {
                    existing.Name = server.Name;
                }
                if (server.WakeOnLanInfos != null && server.WakeOnLanInfos.Count > 0)
                {
                    existing.WakeOnLanInfos = new List<WakeOnLanInfo>();
                    foreach (WakeOnLanInfo info in server.WakeOnLanInfos)
                    {
                        existing.WakeOnLanInfos.Add(info);
                    }
                }
                if (server.LastConnectionMode.HasValue)
                {
                    existing.LastConnectionMode = server.LastConnectionMode;
                }
                foreach (ServerUserInfo user in server.Users)
                {
                    existing.AddOrUpdate(user);
                }
            }
            else
            {
                list.Add(server);
            }

            Servers = list;
        }

        private int FindIndex(List<ServerInfo> servers, string id)
        {
            var index = 0;

            foreach (ServerInfo server in servers)
            {
                if (StringHelper.EqualsIgnoreCase(id, server.Id))
                {
                    return index;
                }

                index++;
            }

            return -1;
        }

        public ServerInfo GetServer(string id)
        {
            foreach (ServerInfo server in Servers)
            {
                if (StringHelper.EqualsIgnoreCase(id, server.Id))
                {
                    return server;
                }
            }

            return null;
        }
    }
}