electron-autotheme
Version:
Trigger a function at sunset/sunrise (e.g. for auto theme change)
104 lines • 7.8 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AutoTheme = void 0;
const SunCalc = __importStar(require("suncalc"));
const cron = __importStar(require("cron"));
const ipinfo_1 = __importDefault(require("ipinfo"));
class AutoTheme {
constructor(func, store) {
this.newAutoTheme(func);
if (store)
this.store = store;
}
async getLocation() {
if (this.store && this.store.get("electron-autotheme.location")) {
const date = new Date(this.store.get("electron-autotheme.date"));
if (date &&
date.getTime() + 1000 * 60 * 60 * 48 > new Date().getTime())
return this.store.get("electron-autotheme.location");
}
try {
const loc = (await (0, ipinfo_1.default)()).loc.split(",");
this.location = {
latitude: parseFloat(loc[0]),
longitude: parseFloat(loc[1])
};
if (this.store) {
this.store.set("electron-autotheme.location", this.location);
this.store.set("electron-autotheme.date", new Date());
}
return this.location;
}
catch (e) {
console.error(e);
return null;
}
}
getSunriseSunset(latitude = this.location.latitude, longitude = this.location.longitude, date = new Date()) {
const times = SunCalc.getTimes(date, latitude, longitude);
return {
sunrise: times.sunrise,
sunset: times.sunset
};
}
async newAutoTheme(func) {
var _a;
const location = await this.getLocation();
if (!location) {
console.error("Could not get location");
setTimeout(() => this.newAutoTheme(func), 1000 * 60);
func(false);
return;
}
const now = new Date(), { sunrise, sunset } = this.getSunriseSunset();
const useDark = now < sunrise || now >= sunset, cronDate = useDark
? this.getSunriseSunset(location.latitude, location.longitude, new Date(now.getTime() + 1000 * 60 * 60 * 24)).sunrise
: sunset;
(_a = this.currentCronJob) === null || _a === void 0 ? void 0 : _a.stop();
this.useDark = useDark;
func(useDark);
const cronJob = new cron.CronJob(cronDate, () => {
const now = new Date(), useDark = now < sunrise || now >= sunset;
func(useDark);
this.useDark = useDark;
this.newAutoTheme(func);
});
cronJob.start();
this.currentCronJob = cronJob;
}
useDarkMode() {
return this.useDark;
}
stop() {
var _a;
(_a = this.currentCronJob) === null || _a === void 0 ? void 0 : _a.stop();
}
}
exports.AutoTheme = AutoTheme;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFDbkMsMkNBQTZCO0FBRTdCLG9EQUE0QjtBQVE1QixNQUFhLFNBQVM7SUFNbEIsWUFBWSxJQUFnQyxFQUFFLEtBQTBCO1FBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEIsSUFBSSxLQUFLO1lBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO1lBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUNULElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQ3BELENBQUM7WUFHRixJQUNJLElBQUk7Z0JBQ0osSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRTtnQkFFM0QsT0FBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUN0RTtRQUVELElBQUk7WUFDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxnQkFBTSxHQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTVDLElBQUksQ0FBQyxRQUFRLEdBQUc7Z0JBQ1osUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENB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