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
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.define('cloudprint', function() {
'use strict';
/** Namespace which contains a method to parse cloud destinations directly. */
function CloudDestinationParser() {};
/**
* Enumeration of cloud destination field names.
* @enum {string}
* @private
*/
CloudDestinationParser.Field_ = {
LAST_ACCESS: 'accessTime',
CAPABILITIES: 'capabilities',
CONNECTION_STATUS: 'connectionStatus',
DISPLAY_NAME: 'displayName',
ID: 'id',
IS_TOS_ACCEPTED: 'isTosAccepted',
TAGS: 'tags',
TYPE: 'type'
};
/**
* Special tag that denotes whether the destination has been recently used.
* @type {string}
* @const
* @private
*/
CloudDestinationParser.RECENT_TAG_ = '^recent';
/**
* Special tag that denotes whether the destination is owned by the user.
* @type {string}
* @const
* @private
*/
CloudDestinationParser.OWNED_TAG_ = '^own';
/**
* Enumeration of cloud destination types that are supported by print preview.
* @enum {string}
* @private
*/
CloudDestinationParser.CloudType_ = {
ANDROID: 'ANDROID_CHROME_SNAPSHOT',
DOCS: 'DOCS',
IOS: 'IOS_CHROME_SNAPSHOT'
};
/**
* Parses a destination from JSON from a Google Cloud Print search or printer
* response.
* @param {!Object} json Object that represents a Google Cloud Print search or
* printer response.
* @param {!print_preview.Destination.Origin} origin The origin of the
* response.
* @return {!print_preview.Destination} Parsed destination.
*/
CloudDestinationParser.parse = function(json, origin) {
if (!json.hasOwnProperty(CloudDestinationParser.Field_.ID) ||
!json.hasOwnProperty(CloudDestinationParser.Field_.TYPE) ||
!json.hasOwnProperty(CloudDestinationParser.Field_.DISPLAY_NAME)) {
throw Error('Cloud destination does not have an ID or a display name');
}
var id = json[CloudDestinationParser.Field_.ID];
var tags = json[CloudDestinationParser.Field_.TAGS] || [];
var connectionStatus =
json[CloudDestinationParser.Field_.CONNECTION_STATUS] ||
print_preview.Destination.ConnectionStatus.UNKNOWN;
var optionalParams = {
tags: tags,
isOwned: arrayContains(tags, CloudDestinationParser.OWNED_TAG_),
lastAccessTime: parseInt(
json[CloudDestinationParser.Field_.LAST_ACCESS], 10) || Date.now(),
isTosAccepted: (id == print_preview.Destination.GooglePromotedId.FEDEX) ?
json[CloudDestinationParser.Field_.IS_TOS_ACCEPTED] : null,
cloudID: id
};
var cloudDest = new print_preview.Destination(
id,
CloudDestinationParser.parseType_(
json[CloudDestinationParser.Field_.TYPE]),
origin,
json[CloudDestinationParser.Field_.DISPLAY_NAME],
arrayContains(tags, CloudDestinationParser.RECENT_TAG_) /*isRecent*/,
connectionStatus,
optionalParams);
if (json.hasOwnProperty(CloudDestinationParser.Field_.CAPABILITIES)) {
cloudDest.capabilities = /*@type {!print_preview.Cdd}*/ (
json[CloudDestinationParser.Field_.CAPABILITIES]);
}
return cloudDest;
};
/**
* Parses the destination type.
* @param {string} typeStr Destination type given by the Google Cloud Print
* server.
* @return {!print_preview.Destination.Type} Destination type.
* @private
*/
CloudDestinationParser.parseType_ = function(typeStr) {
if (typeStr == CloudDestinationParser.CloudType_.ANDROID ||
typeStr == CloudDestinationParser.CloudType_.IOS) {
return print_preview.Destination.Type.MOBILE;
} else if (typeStr == CloudDestinationParser.CloudType_.DOCS) {
return print_preview.Destination.Type.GOOGLE_PROMOTED;
} else {
return print_preview.Destination.Type.GOOGLE;
}
};
// Export
return {
CloudDestinationParser: CloudDestinationParser
};
});
|