Skip to content

Commit

Permalink
Add ability to pass command line args to electron
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin committed Apr 23, 2018
1 parent 19cef85 commit 2eb9727
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 32 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Expand Up @@ -56,7 +56,7 @@ script:
- set -e
- ./setup.sh
- yarn lint
- npm install electron spectron ava
- npm install electron spectron ava optimist tmp
- xvfb-run node_modules/.bin/ava --timeout=60s tests/electron_tests
- prove -Isrc/perl5 -r -j3 tests/perl_tests;
- utils/jb_run.js -p 9000 & sleep 2
Expand Down
19 changes: 4 additions & 15 deletions browser/main.js
Expand Up @@ -4,34 +4,23 @@ const BrowserWindow = electron.BrowserWindow;
const Menu = electron.Menu;

var menu = require('./menu');
var argv = require('optimist').argv;

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow;



// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
let mainWindow;
app.on('ready', function() {
// Create the browser window.
mainWindow = new BrowserWindow({
center: true,
title: 'JBrowseDesktop',
width: 1024,
height: 768
});
var queryString = Object.keys(argv).map(key => key + '=' + argv[key]).join('&');

// and load the index.html of the app.
mainWindow.loadURL('file://' + require('path').resolve(__dirname, '..', 'index.html'));
// Emitted when the window is closed.
mainWindow.loadURL('file://' + require('path').resolve(__dirname, '../index.html?'+queryString));
Menu.setApplicationMenu(Menu.buildFromTemplate(menu));

mainWindow.on('closed', function () {
// Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element.
mainWindow = null;
});
});
Expand Down
24 changes: 11 additions & 13 deletions src/JBrowse/Browser.js
Expand Up @@ -485,9 +485,8 @@ fatalError: function( error ) {
loadSessions: function() {
var fs = electronRequire('fs');
var app = electronRequire('electron').remote.app;

var path = app.getPath('userData') + "/sessions.json";
var obj = JSON.parse( fs.readFileSync( path, 'utf8' ) );
console.log(this.config);
var obj = JSON.parse( fs.readFileSync( this.config.electronData + '/sessions.json', 'utf8' ) );
var table = dojo.create( 'table', { id: 'previousSessionsTable', style: { overflow: 'hidden', width: '90%' } }, dojo.byId('previousSessions') );
var thisB = this;

Expand Down Expand Up @@ -1074,8 +1073,7 @@ renderDatasetSelect: function( parent ) {

saveSessionDir: function( directory ) {
var fs = electronRequire('fs');
var app = electronRequire('electron').remote.app;
var path = app.getPath('userData')+"/sessions.json";
var path = this.config.electronData + '/sessions.json';
var obj = [];

try {
Expand All @@ -1084,7 +1082,7 @@ saveSessionDir: function( directory ) {
catch(e) {}

var dir = Util.replacePath( directory );
if( array.every(obj, function(elt) { return elt.session!=dir; }) )
if( array.every(obj, function(elt) { return elt.session != dir; }) )
obj.push({ session: dir });

fs.writeFileSync(path, JSON.stringify( obj, null, 2 ), 'utf8');
Expand Down Expand Up @@ -1208,14 +1206,14 @@ openFastaElectron: function() {
refSeqOrder: results.refSeqOrder
};

// fix dix to be user data if we are accessing a url for fasta
var dir = app.getPath('userData')+"/"+confs[0].label;
// fix dir to be user data if we are accessing a url for fasta
var dir = this.config.electronData + '/' + confs[0].label;


try {
fs.existsSync(dir) || fs.mkdirSync(dir);
fs.writeFileSync( dir + "/trackList.json", JSON.stringify(trackList, null, 2));
fs.closeSync( fs.openSync( dir+"/tracks.conf", 'w' ) );
fs.closeSync( fs.openSync( dir + "/tracks.conf", 'w' ) );
this.saveSessionDir( dir );
window.location = window.location.href.split('?')[0] + "?data=" + Util.replacePath( dir );
} catch(e) { alert(e); }
Expand All @@ -1241,7 +1239,7 @@ openFastaElectron: function() {
refSeqOrder: results.refSeqOrder
};
try {
var dir = app.getPath('userData')+"/"+confs[0].label;
var dir = thisB.config.electronData + '/' + confs[0].label;
fs.existsSync(dir) || fs.mkdirSync(dir);
fs.writeFileSync(dir + "/trackList.json", JSON.stringify(trackList, null, 2));
fs.closeSync(fs.openSync( dir+"/tracks.conf", 'w' ));
Expand Down Expand Up @@ -1279,10 +1277,10 @@ openFastaElectron: function() {
refSeqOrder: results.refSeqOrder
};
try {
var dir = app.getPath('userData')+"/"+confs[0].label;
var dir = thisB.config.electronData + '/' + confs[0].label;
fs.existsSync(dir) || fs.mkdirSync(dir);
fs.writeFileSync(dir + "/trackList.json", JSON.stringify(trackList, null, 2));
fs.closeSync(fs.openSync( dir+"/tracks.conf", 'w' ));
fs.writeFileSync(dir + '/trackList.json', JSON.stringify(trackList, null, 2));
fs.closeSync(fs.openSync( dir + '/tracks.conf', 'w' ));
thisB.saveSessionDir( dir );
window.location = window.location.href.split('?')[0] + "?data=" + Util.replacePath( dir );
} catch(e) { alert(e); }
Expand Down
5 changes: 4 additions & 1 deletion src/JBrowse/main.js
Expand Up @@ -2,6 +2,7 @@ import 'babel-polyfill'

require([
'JBrowse/Browser',
'JBrowse/Util',
'JBrowse/QueryParamConfigMapper',
'dojo/io-query',
'dojo/json',
Expand All @@ -13,6 +14,7 @@ require([
],
function (
Browser,
Util,
QueryParamConfigMapper,
ioQuery,
JSON,
Expand Down Expand Up @@ -60,7 +62,8 @@ function (

return browser.makeCurrentViewURL({ nav: 1, tracklist: 1, overview: 1 });
},
updateBrowserURL: true
updateBrowserURL: true,
electronData: queryParams.electronData || (Util.isElectron() && electronRequire('electron').remote.app.getPath('userData'))
};

//if there is ?addFeatures in the query params,
Expand Down
12 changes: 10 additions & 2 deletions tests/electron_tests/spec.js
Expand Up @@ -2,12 +2,14 @@ import test from 'ava';
import {Application} from 'spectron';
import electronPath from 'electron';
import path from 'path';

import os from 'os';
var tmp = require('tmp');
var tmpobj = tmp.dirSync();

test.beforeEach(async t => {
t.context.app = new Application({
path: electronPath,
args: [path.join(__dirname, '../..')],
args: [path.join(__dirname, '../..'), '--electronData', tmpobj.name],
env: {SPECTRON: '1'},
requireName: 'electronRequire'
});
Expand Down Expand Up @@ -51,5 +53,11 @@ test('shows window', async t => {
await app.client.waitUntilWindowLoaded()
text = await app.client.getText("#previousSessionsTable");
t.true(text != null);
await app.client.click("#previousSessionsTable");
var tracklabel = app.client.element( "//label[contains(@class,'tracklist-label')]/span[contains(.,'FASTA')]");
await tracklabel.click();
var trackPath = "//div[contains(@class,'track-label')][contains(.,'FASTA')]";
var track = app.client.element(trackPath);
console.log(track);
});

0 comments on commit 2eb9727

Please sign in to comment.