diff --git a/agkyra/agkyra/gui/menu.html b/agkyra/agkyra/gui/menu.html
index 7ba6e4f50e46a70ec5870b37a55a64c05eb61a50..bcba22bbcafb643bebd7e71c2038a9330d92d8dd 100644
--- a/agkyra/agkyra/gui/menu.html
+++ b/agkyra/agkyra/gui/menu.html
@@ -42,7 +42,7 @@ menu.append(new gui.MenuItem({type: 'separator'}));
pause_item = new gui.MenuItem({
// pause menu item
icon: 'images/play_pause.png',
- label: '',
+ label: 'NOT READY',
type: 'normal',
click: function() {
if (paused) {post_start(socket);} else {post_pause(socket);}
@@ -51,84 +51,43 @@ pause_item = new gui.MenuItem({
pause_item.enabled = false;
menu.append(pause_item);
-// Update progress
-window.setInterval(function() {
- var status = globals['status'];
- var new_progress = progress_item.label;
- var new_pause = pause_item.label;
- var menu_modified = false;
- if (status['paused'] !== null) {
- switch(pause_item.label) {
- case pause_syncing: if (status['paused']) {
- // Update to "Paused - start syncing"
- paused = true;
- new_pause = start_syncing;
- menu_modified = true;
- } // else continue syncing
- new_progress = status['progress'] + '%' + ' synced';
- break;
- case start_syncing: if (status['paused']) return;
- // else update to "Syncing - pause syncing"
- paused = false;
- new_pause = pause_syncing;
- new_progress = status['progress'] + '%' + ' synced';
- menu_modified = true;
- break;
- default:
- if (status['paused']) {new_pause = start_syncing; paused=true;}
- else {new_pause = pause_syncing; paused=false;}
- new_progress = status['progress'] + '%' + ' synced';
- pause_item.enabled = true;
- menu_modified = true;
- }
- }
- if (new_pause != pause_item.label) {
- pause_item.label = new_pause;
- menu_modified = true;
- }
- if (new_progress != progress_item.label) {
- progress_item.label = new_progress;
- menu_modified = true;
- }
- if (menu_modified) {
- if (paused) progress_item.label += ' - paused';
- tray.menu = menu;
- }
- get_status(socket);
-}, 1500);
-
// Menu actions contents
-menu.append(new gui.MenuItem({
+var local_folder_menu = new gui.MenuItem({
label: 'Open local folder',
icon: 'images/folder.png',
+ enabled: false,
click: function () {
var dir = globals['settings']['directory'];
console.log('Open ' + dir);
gui.Shell.showItemInFolder(dir);
}
-}));
+})
+menu.append(local_folder_menu);
-menu.append(new gui.MenuItem({
+var pithos_page_menu = new gui.MenuItem({
label: 'Launch Pithos+ page',
icon: 'images/pithos.png',
+ enabled: false,
click: function () {
var pithos_ui = globals['settings']['pithos_ui'];
console.log('Visit ' + pithos_ui);
gui.Shell.openExternal(pithos_ui);
}
-}));
+});
+menu.append(pithos_page_menu);
// Settings and About
menu.append(new gui.MenuItem({type: 'separator'}));
-menu.append(new gui.MenuItem({
+var settings_menu = new gui.MenuItem({
label: 'Settings',
icon: 'images/settings.png',
+ enabled: false,
click: function () {
export_settings(globals.settings);
if (windows['settings']) windows['settings'].close();
windows['settings'] = gui.Window.open("settings.html", {
toolbar: false, focus: true,
- width: 841, height: 520,
+ width: 841, height: 520
});
windows['settings'].on('closed', function() {
new_settings = import_settings();
@@ -137,7 +96,8 @@ menu.append(new gui.MenuItem({
get_settings(socket);
});
},
-}));
+});
+menu.append(settings_menu);
menu.append(new gui.MenuItem({
label: 'About',
@@ -159,6 +119,72 @@ menu.append(new gui.MenuItem({
click: function() {post_shutdown(socket);}
}));
+
+// Update progress
+var client_ready = false;
+window.setInterval(function() {
+ if (!client_ready) {
+ if (globals.authenticated) {
+ settings_menu.enabled = true;
+ client_ready = true;
+ } else return;
+ }
+
+ if (client_ready) {
+ if (!pithos_page_menu.enabled) {
+ // GET pithos page with tokenless operations
+ }
+ if (!local_folder_menu.enabled) {
+ if (globals.settings.directory) {
+ local_folder_menu.enabled = true;
+ }
+ }
+ }
+
+ var status = globals['status'];
+ var new_progress = progress_item.label;
+ var new_pause = pause_item.label;
+ var menu_modified = false;
+ if (status['paused'] !== null) {
+ switch(pause_item.label) {
+ case pause_syncing: if (status['paused']) {
+ // Update to "Paused - start syncing"
+ paused = true;
+ new_pause = start_syncing;
+ menu_modified = true;
+ } // else continue syncing
+ new_progress = status['progress'] + '%' + ' synced';
+ break;
+ case start_syncing: if (status['paused']) return;
+ // else update to "Syncing - pause syncing"
+ paused = false;
+ new_pause = pause_syncing;
+ new_progress = status['progress'] + '%' + ' synced';
+ menu_modified = true;
+ break;
+ default:
+ if (status['paused']) {new_pause = start_syncing; paused=true;}
+ else {new_pause = pause_syncing; paused=false;}
+ new_progress = status['progress'] + '%' + ' synced';
+ pause_item.enabled = true;
+ menu_modified = true;
+ }
+ }
+ if (new_pause != pause_item.label) {
+ pause_item.label = new_pause;
+ menu_modified = true;
+ }
+ if (new_progress != progress_item.label) {
+ progress_item.label = new_progress;
+ menu_modified = true;
+ }
+ if (menu_modified) {
+ if (paused) progress_item.label += ' - paused';
+ tray.menu = menu;
+ }
+ get_status(socket);
+}, 1500);
+
tray.menu = menu;
</script>
diff --git a/agkyra/agkyra/gui/protocol.js b/agkyra/agkyra/gui/protocol.js
index 44f79a25ee36993c2c7dafd63a513e66152aac23..87b56e8877c023255210ecf6d45d85009fd3e0e1 100644
--- a/agkyra/agkyra/gui/protocol.js
+++ b/agkyra/agkyra/gui/protocol.js
@@ -19,7 +19,8 @@ var globals = {
'pithos_ui': null,
'exclude': null
},
- 'status': {"progress": null, "paused": null}
+ 'status': {"progress": null, "paused": null},
+ 'authenticated': false
}
// Protocol: requests ::: responses
@@ -71,6 +72,7 @@ socket.onmessage = function(e) {
if (r['ACCEPTED'] === 202) {
get_settings(this);
get_status(this);
+ globals.authenticated = true;
} else {
console.log('Helper: ' + JSON.stringify(r));
closeWindows();
diff --git a/agkyra/agkyra/gui/settings.html b/agkyra/agkyra/gui/settings.html
index adf0661b388360d5984a8dcf5dcaff6c552af405..597573468df557b723c91a9fae55d615ae5b298d 100644
--- a/agkyra/agkyra/gui/settings.html
+++ b/agkyra/agkyra/gui/settings.html
@@ -18,9 +18,11 @@
if (container) $('#container').val(container);
var directory = get_setting('directory');
if (directory) $('#directory').html(directory);
- exclude = get_setting('exclude');
- if (exclude) $('#exclude').val(
- fs.readFileSync(exclude, encoding='utf-8'));
+ var exclude = get_setting('exclude');
+ if (exclude) try {
+ $('#exclude').val(
+ fs.readFileSync(exclude, encoding='utf-8'));
+ } catch (err) {console.log(err);}
var pithos_ui = get_setting('pithos_ui');
if (pithos_ui) {
$('#get_creds').show();
diff --git a/agkyra/agkyra/protocol.py b/agkyra/agkyra/protocol.py
index 9cde1f73c644f90ba29797497ead0195130266db..d5700aaab085d94accda18c77ad9b7d94b3f379c 100644
--- a/agkyra/agkyra/protocol.py
+++ b/agkyra/agkyra/protocol.py
@@ -72,6 +72,7 @@ class WebSocketProtocol(WebSocket):
cnf = AgkyraConfig()
def _load_settings(self):
+ LOG.debug('Start loading settings')
sync = self.cnf.get('global', 'default_sync')
cloud = self.cnf.get_sync(sync, 'cloud')
@@ -94,7 +95,10 @@ class WebSocketProtocol(WebSocket):
for option in ('container', 'directory', 'exclude'):
self.settings[option] = self.cnf.get_sync(sync, option)
+ LOG.debug('Finished loading settings')
+
def _dump_settings(self):
+ LOG.debug('Saving settings')
sync = self.cnf.get('global', 'default_sync')
cloud = self.cnf.get_sync(sync, 'cloud')
@@ -113,6 +117,9 @@ class WebSocketProtocol(WebSocket):
for option in ('directory', 'container', 'exclude'):
self.cnf.set_sync(sync, option, self.settings[option])
+ self.cnf.write()
+ LOG.debug('Settings saved')
+
# Syncer-related methods
def get_status(self):
from random import randint
@@ -121,7 +128,6 @@ class WebSocketProtocol(WebSocket):
return self.status
def get_settings(self):
- self._load_settings()
return self.settings
def set_settings(self, new_settings):
@@ -137,7 +143,6 @@ class WebSocketProtocol(WebSocket):
# WebSocket connection methods
def opened(self):
LOG.debug('Helper: connection established')
- self._load_settings()
def closed(self, *args):
LOG.debug('Helper: connection closed')
@@ -149,7 +154,6 @@ class WebSocketProtocol(WebSocket):
# Protocol handling methods
def _post(self, r):
"""Handle POST requests"""
- LOG.debug('CALLED with %s' % r)
if self.accepted:
action = r['path']
if action == 'shutdown':
@@ -161,6 +165,7 @@ class WebSocketProtocol(WebSocket):
}[action]()
self.send_json({'OK': 200, 'action': 'post %s' % action})
elif r['gui_id'] == self.gui_id:
+ self._load_settings()
self.accepted = True
self.send_json({'ACCEPTED': 202, 'action': 'post gui_id'})
else:
@@ -170,16 +175,16 @@ class WebSocketProtocol(WebSocket):
def _put(self, r):
"""Handle PUT requests"""
- if not self.accepted:
- action = r['path']
- self.send_json({'UNAUTHORIZED': 401, 'action': 'put %s' % action})
- self.terminate()
- else:
+ if self.accepted:
LOG.debug('put %s' % r)
action = r.pop('path')
self.set_settings(r)
r.update({'CREATED': 201, 'action': 'put %s' % action})
self.send_json(r)
+ else:
+ action = r['path']
+ self.send_json({'UNAUTHORIZED': 401, 'action': 'put %s' % action})
+ self.terminate()
def _get(self, r):
"""Handle GET requests"""