-
Notifications
You must be signed in to change notification settings - Fork 21
/
FindIphone.js
124 lines (119 loc) · 4.84 KB
/
FindIphone.js
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
'use strict';
var ICloud = require('./icloud');
ICloud.apple_id = require("../pws.json").apple_id
ICloud.password = require("../pws.json").password
var phones = require("./properties.json").iPhone.Phones
var iphoneDevice = function(inpData) {
this.address = inpData.address;
this.uniqueName = inpData.uniqueName;
this.device = inpData.dev;
this.name = inpData.name;
this.deviceDisplayName = inpData.deviceDisplayName;
this.smartType = "iPhone";
this.type = "Apple Iphone";
this.friendlyName = inpData.friendlyName;
this.deviceHandler = "Find Iphone";
this.trigger = function(){
var that = this;
this.device.checkSession(function(err, res, body) {
if (err) {
console.log("FindIphone:trigger:checkSession: NOT reusing session " + err);
that.checkID(that.address);
} else {
console.log("FindIphone:trigger:checkSession: Reusing session");
return callback(err, res, body);
}
});
console.log("FindIphone:trigger: Trying to alert " + this.friendlyName + " " + this.uniqueName + " " + this.address);
this.device.alertDevice(that.address,"Where are you", function(err,retVal){
if (err) {
console.log("FindIphone:trigger:" + that.uniqueName + " id=" + that.address + " ERROR -" + err);
} else {
console.log("FindIphone:trigger:" + that.uniqueName + " id=" + that.address + "Alert sent " + retVal);
}
});
}.bind(this);
this.checkID = function(inpID) {
this.device.getDevices(function(err, devices) {
if (err) return console.error('FindIphone:checkID:ERROR:',err);
if (devices.length === 0) {
return console.log("FindIphone:checkID:No devices found!");
} else {
var devInd=0;
console.log("FindIphone:checkID:Found " + devices.length.toString() + " devices");
var devInd;
var fnd = false;
for (devInd=0;devInd < devices.length;devInd++){
if (inpID==devices[devInd].id) {
fnd = true;
console.log("FindIphone:checkID: matched ID" + devInd.toString() + ": name=" + devices[devInd].name
+ " modelDisplayName=" + devices[devInd].modelDisplayName
+ " deviceDisplayName=" + devices[devInd].deviceDisplayName
+ " batteryLevel=" + devices[devInd].batteryLevel
+ " id=" + devices[devInd].id
);
}
};
if (fnd) {
console.log("FindIphone:checkID: matched ID found ok " + inpID);
} else {
console.log("FindIphone:checkID: matched ID NOT found " + inpID);
}
}
});
}.bind(this);
return this;
}
exports.FindIphone = function(handler){
this.devices = {};
this.handler = handler;
this.handleDiscoverMsg = function(device) {
var uniqueName = device.deviceDisplayName + " - " + device.name
var friendlyName = "Find " + device.name
if (uniqueName in this.devices) {
console.log("FindIphone:handleDiscoverMsg: already in device list! " + uniqueName +
" friendlyName=" + friendlyName
);
} else {
console.log("FindIphone:handleDiscoverMsg: adding device " + uniqueName +
" friendlyName=" + friendlyName
);
this.devices[uniqueName] = new iphoneDevice({address: device.id, name: device.name, deviceDisplayName: device.deviceDisplayName,
uniqueName: uniqueName,
friendlyName: friendlyName,
dev: ICloud});
this.handler.onDevFound(this.devices[uniqueName], "iPhone", friendlyName, uniqueName, this);
//address,uniqueName,friendlyName,rfxRFY
}
//handleAgentEvents.onDevFound = function(device, type, name, uniqueName, agent) {
}.bind(this);
this.discoverDevices = function() {
var that = this;
console.log("FindIphone:discoverDevices:Starting Iphone discovery")
ICloud.getDevices(function(err, devices) {
if (err) return console.error('FindIphone:discoverDevices:ERROR:',err);
if (devices.length === 0) {
return console.log("FindIphone:discoverDevices:No devices found!");
} else {
var devInd=0;
console.log("FindIphone:discoverDevices:Found " + devices.length.toString() + " devices");
for (devInd=0;devInd < devices.length;devInd++){
console.log("FindIphone:discoverDevices: " + devInd.toString() + ": name=" + devices[devInd].name
+ " modelDisplayName=" + devices[devInd].modelDisplayName
+ " deviceDisplayName=" + devices[devInd].deviceDisplayName
+ " batteryLevel=" + devices[devInd].batteryLevel
);
var propInd;
for (propInd=0;propInd<phones.length;propInd++){
if (phones[propInd].name == devices[devInd].name && phones[propInd].deviceDisplayName == devices[devInd].deviceDisplayName ) {
console.log("FindIphone:discoverDevices: Found a match " + devices[devInd].name + " " +
devices[devInd].modelDisplayName + " " + devices[devInd].deviceDisplayName);
that.handleDiscoverMsg(devices[devInd]);
}
}
}
}
});
}.bind(this);
return this;
};