OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 /** | |
6 * @fileoverview | |
7 * The deserialized form of the chromoting host as returned by Apiary. | |
8 */ | |
9 | |
10 'use strict'; | |
11 | |
12 /** @suppress {duplicate} */ | |
13 var remoting = remoting || {}; | |
14 | |
15 (function() { | |
16 | |
17 'use strict'; | |
18 | |
19 /** | |
20 * @param {!string} hostId | |
21 * | |
22 * TODO(kelvinp):Make fields private and expose them via getters. | |
23 * @constructor | |
24 */ | |
25 remoting.Host = function(hostId) { | |
26 /** @const {string} */ | |
27 this.hostId = hostId; | |
28 /** @type {string} */ | |
29 this.hostName = ''; | |
30 /** @type {string} */ | |
31 this.status = ''; | |
32 /** @type {string} */ | |
33 this.jabberId = ''; | |
34 /** @type {string} */ | |
35 this.publicKey = ''; | |
36 /** @type {string} */ | |
37 this.hostVersion = ''; | |
38 /** @type {Array<string>} */ | |
39 this.tokenUrlPatterns = []; | |
40 /** @type {string} */ | |
41 this.updatedTime = ''; | |
42 /** @type {string} */ | |
43 this.hostOfflineReason = ''; | |
44 /** @type {remoting.Host.Options} */ | |
45 this.options = new remoting.Host.Options(hostId); | |
46 }; | |
47 | |
48 /** | |
49 * @constructor | |
50 * @param {!string} hostId | |
51 * @struct | |
52 */ | |
53 remoting.Host.Options = function(hostId) { | |
54 /** @private @const */ | |
55 this.hostId_ = hostId; | |
56 /** @type {boolean} */ | |
57 this.shrinkToFit = true; | |
58 /** @type {boolean} */ | |
59 this.resizeToClient = true; | |
60 /** @type {string} */ | |
61 this.remapKeys = ''; | |
62 /** @type {number} */ | |
63 this.desktopScale = 1; | |
64 /** @type {remoting.PairingInfo} */ | |
65 this.pairingInfo = {clientId: '', sharedSecret: ''}; | |
66 }; | |
67 | |
68 remoting.Host.Options.prototype.save = function() { | |
69 // TODO(kelvinp): Migrate pairingInfo to use this class as well and get rid of | |
70 // remoting.HostSettings. | |
71 remoting.HostSettings.save(this.hostId_, this); | |
72 }; | |
73 | |
74 | |
75 /** @return {Promise} A promise that resolves when the settings are loaded. */ | |
76 remoting.Host.Options.prototype.load = function() { | |
77 var that = this; | |
78 return base.Promise.as(remoting.HostSettings.load, [this.hostId_]).then( | |
79 /** | |
80 * @param {Object.<string|boolean|number>} options | |
81 */ | |
82 function(options) { | |
83 // Must be defaulted to true so that app-remoting can resize the host | |
84 // upon launching. | |
85 // TODO(kelvinp): Uses a separate host options for app-remoting that | |
86 // hardcodes resizeToClient to true. | |
87 that.resizeToClient = | |
88 base.getBooleanAttr(options, 'resizeToClient', true); | |
89 that.shrinkToFit = base.getBooleanAttr(options, 'shrinkToFit', true); | |
90 that.desktopScale = base.getNumberAttr(options, 'desktopScale', 1); | |
91 that.remapKeys = base.getStringAttr(options, 'remapKeys', ''); | |
92 that.pairingInfo = | |
93 /** @type {remoting.PairingInfo} */ ( | |
94 base.getObjectAttr(options, 'pairingInfo', that.pairingInfo)); | |
95 }); | |
96 }; | |
97 | |
98 /** | |
99 * Determine whether a host needs to be manually updated. This is the case if | |
100 * the host's major version number is more than 1 lower than that of the web- | |
101 * app (a difference of 1 is tolerated due to the different update mechanisms) | |
102 * and if the host is on-line (off-line hosts are not expected to auto-update). | |
103 * | |
104 * @param {remoting.Host} host The host information from the directory. | |
105 * @param {string|number} webappVersion The version number of the web-app, in | |
106 * either dotted-decimal notation notation, or directly represented by the | |
107 * major version. | |
108 * @return {boolean} True if the host is on-line but out-of-date. | |
109 */ | |
110 remoting.Host.needsUpdate = function(host, webappVersion) { | |
111 if (host.status != 'ONLINE') { | |
112 return false; | |
113 } | |
114 var hostMajorVersion = parseInt(host.hostVersion, 10); | |
115 if (isNaN(hostMajorVersion)) { | |
116 // Host versions 26 and higher include the version number in heartbeats, | |
117 // so if it's missing then the host is at most version 25. | |
118 hostMajorVersion = 25; | |
119 } | |
120 return (parseInt(webappVersion, 10) - hostMajorVersion) > 1; | |
121 }; | |
122 | |
123 })(); | |
OLD | NEW |