diff --git a/app/html/css/styles.css b/app/html/css/styles.css index 9ead916..06e8175 100644 --- a/app/html/css/styles.css +++ b/app/html/css/styles.css @@ -186,3 +186,18 @@ button { small { font-size:.7em; } + #holder { + border: 4px dashed #ccc; + margin: 0 auto; + height: 100px; + color: #ccc; + font-size: 40px; + line-height: 100px; + text-align: center; + -webkit-user-select: none; + } + #holder.hover { + border: 4px dashed #999; + color: #eee; + } + diff --git a/app/html/index.html b/app/html/index.html index b32c823..48fd755 100644 --- a/app/html/index.html +++ b/app/html/index.html @@ -31,6 +31,9 @@
+
+ Drag your app here to run it +
diff --git a/app/html/js/handlers.js b/app/html/js/handlers.js index 4fe1c82..f674e5a 100644 --- a/app/html/js/handlers.js +++ b/app/html/js/handlers.js @@ -6,10 +6,14 @@ var __process__ = {}; if(typeof(require) === 'function') { var ipc = require('ipc'); + var path = require('path'); + var os = require('os'); ipc.on('files', function(files) { + console.log('--files',files); __process__.files = files; }); ipc.on('preview', function(files) { + console.log('--preview',files); handlers.renderPreview(files); }); ipc.on('update-import-success', function(args) { @@ -32,7 +36,11 @@ if(typeof(require) === 'function') { } }); ipc.on('update-photos-success', function(args) { - var response = JSON.parse(args['stdout']); + if(os.platform() == 'win32'){ + var response = JSON.parse(args['stdout'].replace(/\\/g, '\\\\')); + }else{ + var response = JSON.parse(args['stdout']); + } handlers.setSuccessTitle(); handlers.removeProgressIcons(); handlers.updateStatus(response); @@ -40,10 +48,42 @@ if(typeof(require) === 'function') { function Broadcast() { this.send = function(name, message) { + console.log(message); + console.log(name); + console.log('broadcast ',message); ipc.send(name, message); }; } -} + + window.onload = function () { + var broadcast = new Broadcast(); + window.ondragover = function (e){ e.preventDefault(); return false }; + window.ondragover = function (e){ e.preventDefault(); return false }; + var holder = document.getElementById('holder'); + if(holder != null){ + holder.ondragover = function () { this.className = 'hover'; return false; }; + holder.ondragleave = function () { this.className = ''; return false; }; + holder.ondrop = function (e) { + e.preventDefault(); + files = [] + for (var i = 0; i < e.dataTransfer.files.length; ++i) { + console.log(e.dataTransfer.files[i].path); + files.push(e.dataTransfer.files[i].path); + } + console.log('files=',e.dataTransfer); + msg = {}; + //msg['files'] = ['f1','f2','f3']; + msg['files'] = e.dataTransfer.files; + console.log('handlers:',msg['files'].length); + //broadcast.send('load-update-photos', msg); + broadcast.send('load-update-photos', files); + return false; + }; + } + }; + +}; + function Handlers() { var self = this; @@ -161,7 +201,9 @@ function Handlers() { html = ''; for(var i=0; i'; + console.log("preview:",fileUrl(files[i])); + html += '
'; + console.log('html',html); } else { html += '
'; } @@ -200,6 +242,22 @@ function Handlers() { el.style.display = 'block'; } }; + + function fileUrl(str) { + if (typeof str !== 'string') { + throw new Error('Expected a string'); + } + + var pathName = path.resolve(str).replace(/\\/g, '/'); + + // Windows drive letter must be prefixed with a slash + if (pathName[0] !== '/') { + pathName = '/' + pathName; + } + + return encodeURI('file://' + pathName); +}; + } var handlers = new Handlers(); window.addEventListener('click', handlers.dispatch); diff --git a/app/index.js b/app/index.js index 787921b..6e74642 100644 --- a/app/index.js +++ b/app/index.js @@ -16,3 +16,4 @@ ipc.on('update-photos', broadcast.updatePhotos); ipc.on('launch-finder', broadcast.launchFinder); ipc.on('launch-url', broadcast.launchUrl); ipc.on('program-quit', broadcast.programQuit); +ipc.on('load-update-photos', toolbarUi.onDropFiles); \ No newline at end of file diff --git a/app/modules/broadcast.js b/app/modules/broadcast.js index 3f8ff72..9a95a22 100644 --- a/app/modules/broadcast.js +++ b/app/modules/broadcast.js @@ -1,5 +1,5 @@ var exports = module.exports = {}; - +var path = require('path'); var exec = require('child_process').exec, config = require('./config.js'); @@ -24,7 +24,7 @@ exports.importPhotos = function(event, args) { args['source'] = args['source'].normalize(); args['destination'] = args['destination'].normalize(); - update_command = __dirname + '/../../dist/elodie/elodie import --source="' + args['source'] + '" --destination="' + args['destination'] + '"'; + update_command = path.normalize(__dirname + '/../../elodie.py') + ' import --source="' + args['source'] + '" --destination="' + args['destination'] + '"'; //update_command = __dirname + '/../../elodie.py import --source="' + args['source'] + '" --destination="' + args['destination'] + '"'; console.log(update_command); @@ -73,8 +73,9 @@ exports.updatePhotos = function(event, args) { return files } files = normalize(args['files']) - - update_command = __dirname + '/../../dist/elodie/elodie update' + elodie_path = path.normalize(__dirname + '/../../elodie.py'); + console.log(elodie_path); + update_command = elodie_path +' update' //update_command = __dirname + '/../../elodie.py update' if(args['location'].length > 0) { update_command += ' --location="' + args['location'] + '"'; diff --git a/app/modules/config.js b/app/modules/config.js index c4150b7..3af2eb3 100644 --- a/app/modules/config.js +++ b/app/modules/config.js @@ -3,11 +3,11 @@ var fs = require('fs'), defaultConfigFile = (function() { var f = __dirname; for(var i=0; i<2; i++) { - f = f.substr(0, f.lastIndexOf('/')); + f = f.substr(0, f.lastIndexOf('\\')); } - return f + '/config.ini-sample'; + return f + '\\config.ini-sample'; })(), - configFile = (process.env.HOME || process.env.USERPROFILE) + '/.elodie/config.ini', + configFile = (process.env.HOME || process.env.USERPROFILE) + '\\.elodie\\config.ini', hasConfig, setConfig; diff --git a/app/modules/toolbar-ui.js b/app/modules/toolbar-ui.js index f32852b..f6b4af9 100644 --- a/app/modules/toolbar-ui.js +++ b/app/modules/toolbar-ui.js @@ -9,7 +9,7 @@ var menubar = require('menubar'), exports.app = app = menubar( { preloadWindow: true, - dir: __dirname.substr(0, __dirname.lastIndexOf('/')) + '/html', + dir: __dirname.substr(0, __dirname.lastIndexOf('\\')) + '\\html', index: 'index.html', pages: { 'blank': 'blank.html', @@ -18,7 +18,9 @@ exports.app = app = menubar( }, width: 400, height: 500, - 'window-position': 'trayCenter' + 'window-position': 'trayCenter', + 'frame': true, + 'always-on-top': true } ); @@ -59,6 +61,21 @@ exports.ready = function() { }); }; +exports.onDropFiles = function(event, args) { + console.log(args); + console.log('onDropFiles',args); + var files = args; + console.log('Hello',typeof(args)); + loadUrl = app.getOption('pages')['location']; + app.showWindow(); + + app.window.webContents.on('did-finish-load', function() { + app.window.webContents.send('files', files); + app.window.webContents.send('preview', files); + }); +}; + + exports.createWindow = function() { console.log('create-window') }; @@ -76,7 +93,7 @@ exports.show = function() { this.window.loadUrl('file://' + this.getOption('dir') + '/' + loadUrl); loadUrl = null; - //app.window.openDevTools(); + app.window.openDevTools(); }; exports.afterShow = function() { diff --git a/elodie/constants.py b/elodie/constants.py index bc878d1..99c4a1b 100644 --- a/elodie/constants.py +++ b/elodie/constants.py @@ -5,7 +5,7 @@ Settings used by Elodie. from os import path #: If True, debug messages will be printed. -debug = True +debug = False #: Directory in which to store Elodie settings. application_directory = '{}/.elodie'.format(path.expanduser('~'))