diff --git a/index.js b/index.js index fe1c7ad070..5b692ca4c9 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,9 @@ var path = require('path'); var app = require('app'); var BrowserWindow = require('browser-window'); +var dirname = __dirname; +console.log(dirname); + var freeport = function (callback) { var server = net.createServer(); var port = 0; @@ -47,7 +50,7 @@ var start = function (callback) { console.log('MongoDB: ' + mongoPort); console.log('webPort: ' + webPort); child_process.exec('kill $(ps aux -e | grep PURPOSE=KITEMATIC | awk \'{print $2}\') && rm ' + path.join(dataPath, 'mongod.lock'), function (error, stdout, stderr) { - var mongoChild = child_process.spawn(path.join(__dirname, 'resources', 'mongod'), ['--bind_ip', '127.0.0.1', '--dbpath', dataPath, '--port', mongoPort, '--unixSocketPrefix', dataPath], { + var mongoChild = child_process.spawn(path.join(dirname, 'resources', 'mongod'), ['--bind_ip', '127.0.0.1', '--dbpath', dataPath, '--port', mongoPort, '--unixSocketPrefix', dataPath], { env: { PURPOSE: 'KITEMATIC' } @@ -71,11 +74,11 @@ var start = function (callback) { user_env.BIND_IP = '127.0.0.1'; user_env.DB_PATH = dataPath; user_env.MONGO_URL = 'mongodb://localhost:' + mongoPort + '/meteor'; - user_env.METEOR_SETTINGS = fs.readFileSync(path.join(__dirname, 'resources', 'settings.json'), 'utf8'); - user_env.DIR = __dirname; + user_env.METEOR_SETTINGS = fs.readFileSync(path.join(dirname, 'resources', 'settings.json'), 'utf8'); + user_env.DIR = dirname; user_env.NODE_ENV = 'production'; - user_env.NODE_PATH = path.join(__dirname, 'node_modules'); - var nodeChild = child_process.spawn(path.join(__dirname, 'resources', 'node'), [path.join(__dirname, 'bundle', 'main.js')], { + user_env.NODE_PATH = path.join(dirname, 'node_modules'); + var nodeChild = child_process.spawn(path.join(dirname, 'resources', 'node'), [path.join(dirname, 'bundle', 'main.js')], { env: user_env }); diff --git a/meteor/client/lib/boot2docker.js b/meteor/client/lib/boot2docker.js index a98369e0fc..71f842296a 100644 --- a/meteor/client/lib/boot2docker.js +++ b/meteor/client/lib/boot2docker.js @@ -7,7 +7,7 @@ Boot2Docker = {}; Boot2Docker.REQUIRED_IP = '192.168.60.103'; Boot2Docker.command = function () { - return path.join(Util.getBinDir(), 'boot2docker-1.2.0') + ' --vm="kitematic-vm"'; + return path.join(Util.getBinDir().replace(' ', '\\ '), 'boot2docker-1.2.0') + ' --vm="kitematic-vm"'; }; Boot2Docker.exec = function (command, callback) { diff --git a/meteor/client/lib/imageutil.js b/meteor/client/lib/imageutil.js index c4dbf3401d..f37e7422c8 100644 --- a/meteor/client/lib/imageutil.js +++ b/meteor/client/lib/imageutil.js @@ -125,11 +125,11 @@ ImageUtil.rebuild = function (imageId) { }); ImageUtil.rebuildHelper(image, function (err) { if (err) { console.error(err); } - }); - _.each(apps, function (app) { - app = Apps.findOne(app._id); - AppUtil.run(app, function (err) { - if (err) { console.error(err); } + _.each(apps, function (app) { + app = Apps.findOne(app._id); + AppUtil.run(app, function (err) { + if (err) { console.error(err); } + }); }); }); } else { diff --git a/meteor/client/lib/installer.js b/meteor/client/lib/installer.js index a87111b3e3..e5f4041502 100644 --- a/meteor/client/lib/installer.js +++ b/meteor/client/lib/installer.js @@ -76,7 +76,7 @@ Installer.steps = [ Boot2Docker.exists(function (err, exists) { if (err) { callback(err); return; } if (!exists) { - var vmFilesPath = path.join(Util.getHomePath(), 'VirtualBox\ VMs', 'kitematic-vm'); + var vmFilesPath = path.join(Util.getHomePath(), 'VirtualBox VMs', 'kitematic-vm'); if (fs.existsSync(vmFilesPath)) { Util.deleteFolder(vmFilesPath); } @@ -131,6 +131,7 @@ Installer.steps = [ }, pastMessage: 'Started the Kitematic VM', message: 'Starting the Kitematic VM', + subMessage: '(This may take a few minutes)', futureMessage: 'Start the Kitematic VM' }, @@ -164,6 +165,7 @@ Installer.steps = [ ]; Installer.run = function (callback) { + Session.set('installing', true); var currentStep = 0; Session.set('currentInstallStep', currentStep); Session.set('numberOfInstallSteps', this.steps.length); @@ -191,6 +193,7 @@ Installer.run = function (callback) { callback(err); } else { // Setup Finished + Session.set('installing', false); console.log('Setup finished.'); callback(); } diff --git a/meteor/client/lib/router.js b/meteor/client/lib/router.js index 4136ad153a..7a24265013 100755 --- a/meteor/client/lib/router.js +++ b/meteor/client/lib/router.js @@ -42,7 +42,10 @@ Router.map(function () { this.route('setup_intro', { path: '/setup/intro', - controller: 'SetupController' + controller: 'SetupController', + onBeforeAction: function () { + Session.set('installing', true); + } }); this.route('setup_install', { diff --git a/meteor/client/lib/sync.js b/meteor/client/lib/sync.js index 00157febf9..44e053f8d8 100644 --- a/meteor/client/lib/sync.js +++ b/meteor/client/lib/sync.js @@ -73,7 +73,7 @@ Sync.addAppWatcher = function (app) { if (err.indexOf('The archive file is missing on some hosts') !== -1) { results = archiveErrorPattern.exec(err); location = results[1].replace(' ', '\\ '); - var fullLocation = path.join(Util.getHomePath(), 'Library/Application\\ Support/Unison', location); + var fullLocation = path.join(Util.getHomePath(), 'Library/Application Support/Unison', location); var cmd = '/bin/rm -rf ' + fullLocation; exec(cmd, function () {}); } diff --git a/meteor/client/lib/util.js b/meteor/client/lib/util.js index 35caad21a1..33eb5a626f 100755 --- a/meteor/client/lib/util.js +++ b/meteor/client/lib/util.js @@ -17,7 +17,7 @@ Util.getBinDir = function () { }; Util.getResourceDir = function () { - return path.join(Util.getHomePath(), 'Library/Application\ Support/Kitematic/Resources'); + return path.join(Util.getHomePath(), 'Library/Application Support/Kitematic/Resources'); }; Util.KITE_PATH = path.join(Util.getHomePath(), 'Kitematic'); diff --git a/meteor/client/main.js b/meteor/client/main.js index 0e5c44ce7c..33b0a1c216 100755 --- a/meteor/client/main.js +++ b/meteor/client/main.js @@ -63,7 +63,7 @@ Handlebars.registerHelper('timeSince', function (date) { return moment(date).fromNow(); }); -Handlebars.registerHelper('isUpdating', function (date) { +Handlebars.registerHelper('isUpdating', function () { return Session.get('isUpdating'); }); @@ -145,7 +145,7 @@ Meteor.setInterval(function () { }, 5000); Meteor.setInterval(function () { - if (Installer.isUpToDate()) { + if (!Session.get('installing')) { Sync.resolveWatchers(function () {}); if (!Session.get('boot2dockerOff')) { fixBoot2DockerVM(function (err) { diff --git a/meteor/client/views/dashboard/settings/dashboard-settings.html b/meteor/client/views/dashboard/settings/dashboard-settings.html index 67cc58fb9e..6af4cccf75 100644 --- a/meteor/client/views/dashboard/settings/dashboard-settings.html +++ b/meteor/client/views/dashboard/settings/dashboard-settings.html @@ -52,4 +52,13 @@ {{/if}} +
+
+

Repair Kitematic

+

You can repair Kitematic installation if the app stops working properly.

+
+
+ Repair Kitematic +
+
diff --git a/meteor/client/views/dashboard/settings/dashboard-settings.js b/meteor/client/views/dashboard/settings/dashboard-settings.js index 2028f2edd6..dc811bc175 100644 --- a/meteor/client/views/dashboard/settings/dashboard-settings.js +++ b/meteor/client/views/dashboard/settings/dashboard-settings.js @@ -1,3 +1,6 @@ +var remote = require('remote'); +var dialog = remote.require('dialog'); + Template.dashboard_settings.events({ 'click .btn-start-boot2docker': function (e) { var $btn = $(e.currentTarget); @@ -36,6 +39,17 @@ Template.dashboard_settings.events({ tracking: false } }); + }, + 'click .btn-repair': function () { + dialog.showMessageBox({ + message: 'Repairing Kitematic will clear your current Docker VM and the state of the app. Please make sure your work is backed up. Do you wish to continue?', + buttons: ['Repair', 'Cancel'] + }, function (index) { + if (index !== 0) { + return; + } + Router.go('setup_intro'); + }); } }); diff --git a/meteor/client/views/dashboard/setup/setup-finish.js b/meteor/client/views/dashboard/setup/setup-finish.js index 05dce0cccd..ee0b1c0d41 100644 --- a/meteor/client/views/dashboard/setup/setup-finish.js +++ b/meteor/client/views/dashboard/setup/setup-finish.js @@ -1,6 +1,6 @@ Template.setup_finish.events({ 'click .finish-button': function (e) { - var enableDiagnostics = $('.install-diagonistics input').attr('checked') ? true : false; + var enableDiagnostics = $('.install-diagonistics input').prop('checked'); var status = enableDiagnostics ? 'on' : 'off'; ga('send', 'event', 'link', 'click', 'turn ' + status + ' usage analytics'); Installs.insert({version: Installer.CURRENT_VERSION}); diff --git a/meteor/client/views/dashboard/setup/setup-install.html b/meteor/client/views/dashboard/setup/setup-install.html index 9f16050b26..6f837f7c42 100644 --- a/meteor/client/views/dashboard/setup/setup-install.html +++ b/meteor/client/views/dashboard/setup/setup-install.html @@ -52,12 +52,5 @@ {{/each}} -
- {{#if installComplete}} - - Start Using Kitematic - - {{/if}} -
diff --git a/meteor/client/views/dashboard/setup/setup-install.js b/meteor/client/views/dashboard/setup/setup-install.js index b4026b8351..59ac37286c 100644 --- a/meteor/client/views/dashboard/setup/setup-install.js +++ b/meteor/client/views/dashboard/setup/setup-install.js @@ -1,18 +1,3 @@ -var installStarted = false; -Template.setup_install.rendered = function() { - if(!installStarted) { - installStarted = true; - Installer.run(function (err) { - if (err) { - console.log('Setup failed.'); - console.log(err); - } else { - Router.go('setup_finish'); - } - }); - } -}; - Template.setup_install.steps = function () { return Installer.steps.map(function (step, index) { step.index = index; @@ -27,9 +12,6 @@ Template.setup_install.helpers({ currentInstallStepProgress: function () { return Session.get('currentInstallStepProgress'); }, - installComplete: function () { - return Session.get('currentInstallStep') === Installer.steps.length; - }, failedStep: function () { return Session.get('failedStep'); }, diff --git a/meteor/client/views/dashboard/setup/setup-intro.js b/meteor/client/views/dashboard/setup/setup-intro.js index 035945b7ec..3b5963be1e 100644 --- a/meteor/client/views/dashboard/setup/setup-intro.js +++ b/meteor/client/views/dashboard/setup/setup-intro.js @@ -1,9 +1,16 @@ Template.setup_intro.events({ 'click .continue-button': function (e) { Router.go('setup_install'); + Installer.run(function (err) { + if (err) { + console.log('Setup failed.'); + console.log(err); + } else { + Router.go('setup_finish'); + } + }); e.preventDefault(); e.stopPropagation(); return false; } }); - diff --git a/package.json b/package.json index 350f38645d..38edfc153f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Kitematic", "main": "index.js", - "version": "0.2.2", + "version": "0.2.3", "dependencies": { "async": "^0.9.0", "chokidar": "git+https://github.com/usekite/chokidar.git",