Main loop, update location, dynamic wallpaper change
This commit is contained in:
@@ -11,10 +11,13 @@ const St = imports.gi.St;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
const Settings = imports.ui.settings;
|
const Settings = imports.ui.settings;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const Lang = imports.lang;
|
||||||
const { find_program_in_path } = imports.gi.GLib;
|
const { find_program_in_path } = imports.gi.GLib;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
|
|
||||||
let suntimes = require('./scripts/suntimes')
|
let suntimes = require('./scripts/suntimes')
|
||||||
|
let location = require('./scripts/location')
|
||||||
|
|
||||||
|
|
||||||
/******************** Constants ********************/
|
/******************** Constants ********************/
|
||||||
@@ -22,6 +25,7 @@ let suntimes = require('./scripts/suntimes')
|
|||||||
const UUID = "cinnamon-dynamic-wallpaper@TobiZog";
|
const UUID = "cinnamon-dynamic-wallpaper@TobiZog";
|
||||||
const APPNAME = "Cinnamon Dynamic Wallpaper"
|
const APPNAME = "Cinnamon Dynamic Wallpaper"
|
||||||
const DIRECTORY = imports.ui.extensionSystem.extensionMeta[UUID];
|
const DIRECTORY = imports.ui.extensionSystem.extensionMeta[UUID];
|
||||||
|
const PATH = DIRECTORY.path;
|
||||||
|
|
||||||
|
|
||||||
/******************** Global Variables ********************/
|
/******************** Global Variables ********************/
|
||||||
@@ -29,6 +33,14 @@ const DIRECTORY = imports.ui.extensionSystem.extensionMeta[UUID];
|
|||||||
// The extension object
|
// The extension object
|
||||||
let extension;
|
let extension;
|
||||||
|
|
||||||
|
// Time and date of the last location update
|
||||||
|
let lastLocationUpdate = new Date()
|
||||||
|
|
||||||
|
// The last calculated suntime of the day
|
||||||
|
let lastDayTime = suntimes.DAYPERIOD.NONE
|
||||||
|
|
||||||
|
let looping = true
|
||||||
|
|
||||||
|
|
||||||
/******************** Objects ********************/
|
/******************** Objects ********************/
|
||||||
|
|
||||||
@@ -46,21 +58,23 @@ CinnamonDynamicWallpaperExtension.prototype = {
|
|||||||
_init: function(uuid) {
|
_init: function(uuid) {
|
||||||
this.settings = new Settings.ExtensionSettings(this, uuid);
|
this.settings = new Settings.ExtensionSettings(this, uuid);
|
||||||
|
|
||||||
this.bindSettings("sw_auto_location", "autolocation")
|
this.bindSettings("sw_auto_location", "autolocation", this.updateLocation)
|
||||||
this.bindSettings("sc_location_refresh_time", "locationRefreshTime")
|
this.bindSettings("sc_location_refresh_time", "locationRefreshTime")
|
||||||
this.bindSettings("etr_latitude", "latitude")
|
this.bindSettings("etr_latitude", "latitude", this.updateLocation)
|
||||||
this.bindSettings("etr_longitude", "longitude")
|
this.bindSettings("etr_longitude", "longitude", this.updateLocation)
|
||||||
this.bindSettings("etr_img_morning_twilight", "img_morning_twilight")
|
this.bindSettings("etr_img_morning_twilight", "img_morning_twilight", this.setImageToTime)
|
||||||
this.bindSettings("etr_img_sunrise", "img_sunrise")
|
this.bindSettings("etr_img_sunrise", "img_sunrise", this.setImageToTime)
|
||||||
this.bindSettings("etr_img_morning", "img_morning")
|
this.bindSettings("etr_img_morning", "img_morning", this.setImageToTime)
|
||||||
this.bindSettings("etr_img_noon", "img_noon")
|
this.bindSettings("etr_img_noon", "img_noon", this.setImageToTime)
|
||||||
this.bindSettings("etr_img_afternoon", "img_afternoon")
|
this.bindSettings("etr_img_afternoon", "img_afternoon", this.setImageToTime)
|
||||||
this.bindSettings("etr_img_evening", "img_evening")
|
this.bindSettings("etr_img_evening", "img_evening", this.setImageToTime)
|
||||||
this.bindSettings("etr_img_sunset", "img_sunset")
|
this.bindSettings("etr_img_sunset", "img_sunset", this.setImageToTime)
|
||||||
this.bindSettings("etr_img_night_twilight", "img_night_twilight")
|
this.bindSettings("etr_img_night_twilight", "img_night_twilight", this.setImageToTime)
|
||||||
this.bindSettings("etr_img_night", "img_night")
|
this.bindSettings("etr_img_night", "img_night", this.setImageToTime)
|
||||||
|
|
||||||
// suntimes.calcTimePeriod(52.37227, 9.73815)
|
this.setImageToTime()
|
||||||
|
|
||||||
|
this._loop()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
@@ -125,14 +139,54 @@ CinnamonDynamicWallpaperExtension.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/******************** UI Callbacks ********************/
|
|
||||||
|
|
||||||
|
setImageToTime: function() {
|
||||||
|
let times = suntimes.calcTimePeriod(this.latitude, this.longitude)
|
||||||
|
let now = new Date()
|
||||||
|
|
||||||
on_settings_changed: function () {
|
let timesArray = [
|
||||||
// todo
|
times["morning_twilight"], times["sunrise"], times["morning"],
|
||||||
|
times["noon"], times["afternoon"], times["evening"],
|
||||||
|
times["sunset"], times["night_twilight"], times["night"]
|
||||||
|
]
|
||||||
|
|
||||||
|
let imageSet = [
|
||||||
|
this.img_morning_twilight, this.img_sunrise, this.img_morning,
|
||||||
|
this.img_noon, this.img_afternoon, this.img_evening,
|
||||||
|
this.img_sunset, this.img_night_twilight, this.img_night
|
||||||
|
]
|
||||||
|
|
||||||
|
for(let i = 0; i < timesArray.length; i++) {
|
||||||
|
if(timesArray[i][0] <= now && now <= timesArray[i][1] && i != lastDayTime) {
|
||||||
|
this.changeWallpaper("file://" + PATH + "/res/custom_images/" + imageSet[i])
|
||||||
|
|
||||||
|
lastDayTime = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
updateLocation: function () {
|
||||||
|
if (this.autolocation) {
|
||||||
|
let loc = location.estimateLocation()
|
||||||
|
this.latitude = loc["latitude"]
|
||||||
|
this.longitude = loc["longitude"]
|
||||||
|
} else {
|
||||||
|
this.latitude = this.latitude
|
||||||
|
this.longitude = this.longitude
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh the image information, if it's necessary
|
||||||
|
this.setImageToTime()
|
||||||
|
|
||||||
|
// Update the update information
|
||||||
|
lastLocationUpdate = new Date()
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/******************** UI Callbacks ********************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback for settings-schema
|
* Callback for settings-schema
|
||||||
* Opens the external heic-importer window
|
* Opens the external heic-importer window
|
||||||
@@ -148,6 +202,24 @@ CinnamonDynamicWallpaperExtension.prototype = {
|
|||||||
*/
|
*/
|
||||||
openRepoWebsite: function() {
|
openRepoWebsite: function() {
|
||||||
Util.spawnCommandLine("xdg-open https://github.com/TobiZog/cinnamon-dynamic-wallpaper");
|
Util.spawnCommandLine("xdg-open https://github.com/TobiZog/cinnamon-dynamic-wallpaper");
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main loop
|
||||||
|
*/
|
||||||
|
_loop: function() {
|
||||||
|
if(looping) {
|
||||||
|
this.setImageToTime()
|
||||||
|
|
||||||
|
if (lastLocationUpdate < new Date().getTime() - this.locationRefreshTime * 1000) {
|
||||||
|
this.updateLocation()
|
||||||
|
lastLocationUpdate = new Date()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh every 60 seconds
|
||||||
|
Mainloop.timeout_add_seconds(60, Lang.bind(this, this._loop));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,5 +263,5 @@ function enable() {
|
|||||||
* Lifecycle function on disable
|
* Lifecycle function on disable
|
||||||
*/
|
*/
|
||||||
function disable() {
|
function disable() {
|
||||||
// todo
|
looping = false
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@ class ImageConfigurator:
|
|||||||
|
|
||||||
|
|
||||||
# Write the settings
|
# Write the settings
|
||||||
with open(self.pref_path, "w") as pref_file:
|
with open(PREF_PATH, "w") as pref_file:
|
||||||
json.dump(pref_data, pref_file, separators=(',', ':'), indent=4)
|
json.dump(pref_data, pref_file, separators=(',', ':'), indent=4)
|
||||||
|
|
||||||
|
|
||||||
@@ -210,16 +210,19 @@ class ImageConfigurator:
|
|||||||
def createExtracted(self):
|
def createExtracted(self):
|
||||||
""" Create the extracted images array
|
""" Create the extracted images array
|
||||||
"""
|
"""
|
||||||
if self.image_source == Source.RESSOURCES:
|
try:
|
||||||
self.extracted = os.listdir(RES_DIR + "/custom_images")
|
if self.image_source == Source.RESSOURCES:
|
||||||
elif self.image_source == Source.EXPORT:
|
self.extracted = os.listdir(RES_DIR + "/custom_images")
|
||||||
self.extracted = os.listdir(EXPORT_DIR)
|
elif self.image_source == Source.EXPORT:
|
||||||
|
self.extracted = os.listdir(EXPORT_DIR)
|
||||||
|
|
||||||
self.extracted.sort()
|
self.extracted.sort()
|
||||||
self.ls_preview.clear()
|
self.ls_preview.clear()
|
||||||
|
|
||||||
for option in self.extracted:
|
for option in self.extracted:
|
||||||
self.ls_preview.append([option])
|
self.ls_preview.append([option])
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
self.stack_main.set_visible_child_name("config")
|
self.stack_main.set_visible_child_name("config")
|
||||||
|
|
||||||
|
|||||||
14
cinnamon-dynamic-wallpaper@TobiZog/scripts/location.js
Normal file
14
cinnamon-dynamic-wallpaper@TobiZog/scripts/location.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const Soup = imports.gi.Soup;
|
||||||
|
|
||||||
|
|
||||||
|
function estimateLocation() {
|
||||||
|
let sessionSync = new Soup.SessionSync();
|
||||||
|
let msg = Soup.Message.new('GET', "https://get.geojs.io/v1/ip/geo.json");
|
||||||
|
sessionSync.send_message(msg);
|
||||||
|
|
||||||
|
if (msg.status_code == 200) {
|
||||||
|
return JSON.parse(msg.response_body.data);
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,10 +24,7 @@ const J2000 = 2451545
|
|||||||
|
|
||||||
function fromJulian(j) {
|
function fromJulian(j) {
|
||||||
let ms_date = (j + 0.5 - J1970) * DAYMS
|
let ms_date = (j + 0.5 - J1970) * DAYMS
|
||||||
var utc = new Date();
|
return new Date(ms_date)
|
||||||
var offset = utc.getTimezoneOffset()
|
|
||||||
|
|
||||||
return new Date(ms_date - offset * 60000)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user