fitbit-weather
Version:
This library permits to retrieve weather data from the device
92 lines (77 loc) • 2.24 kB
JavaScript
import { peerSocket } from 'messaging';
import { readFileSync, writeFileSync } from 'fs';
export { Conditions } from './common';
var weather = undefined;
var WEATHER_DATA_FILE = "276e3d15-ffae-4a07-bda5-f1851e68cc77"; // should be a unique name
var promises = {};
var requests = [];
var readWeatherFile = function readWeatherFile() {
try {
weather = readFileSync(WEATHER_DATA_FILE, 'cbor');
} catch (n) {
weather = { now: 0 };
}
};
var writeWeatherFile = function writeWeatherFile() {
try {
writeFileSync(WEATHER_DATA_FILE, weather, 'cbor');
} catch (n) {}
};
var sendRequest = function sendRequest(r) {
if (peerSocket.readyState === peerSocket.OPEN) {
peerSocket.send(r);
} else {
requests.push(r);
}
};
peerSocket.addEventListener('message', function (evt) {
var _evt$data = evt.data,
weather_message_id = _evt$data.weather_message_id,
data = _evt$data.data,
error = _evt$data.error;
if (weather_message_id) {
var promise = promises[weather_message_id];
if (error) {
promise.reject(error);
} else {
weather = data;
weather.timestamp = Date.now();
writeWeatherFile();
promise.resolve(weather);
}
delete promises[weather_message_id];
}
});
peerSocket.addEventListener('open', function (evt) {
setTimeout(function () {
requests.forEach(function (r) {
return sendRequest(r);
});
requests.length = 0;
}, 500);
});
peerSocket.addEventListener('error', function (err) {
console.log("Connection error: " + err.message);
// I don't know what to do in this case yet... Notify every promises object ?
});
export var fetch = function fetch() {
var maximumAge = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (weather === undefined) {
readWeatherFile();
}
return new Promise(function (resolve, reject) {
var now = Date.now();
if (weather && now - weather.timestamp < maximumAge) {
resolve(weather);
} else {
promises[now] = { resolve: resolve, reject: reject };
sendRequest({ weather_message_id: now });
}
});
};
export var get = function get() {
if (weather === undefined) {
readWeatherFile();
}
return weather;
};