Select Git revision
show.m 4.39 KiB
function show(obj,im)
host = 'http://localhost';
base_port = 3000;
imD = obj.imageData;
if isfield(imD,'imageData')
imD=imD.imageData;
end
fignum = obj.figNumber;
if ( fignum <= 0 )
warning('Figure number must be positive!');
return;
end
if isstr(im)
flist=dir(im);
if isempty(flist)
fprintf(2,'leversc.show :: could not find LEVER file %s\n',im);
return;
end
im=fullfile(flist(1).folder,flist(1).name);
im=strrep(im,'*','/');
end
port = base_port + fignum;
chksrv = obj.check_server(host);
if ( isempty(chksrv) )
leverpath = '';
if ( ~isempty(which('ljsPath')) )
leverpath = ljsPath();
end
if isstr(im)
launch_electron(port,fignum,fullfile(pwd(),'.lever'), leverpath,im);
return
else
launch_electron(port,fignum,fullfile(pwd(),'.lever'), leverpath,[]);
end
% Poll for app for 5 seconds
for i=1:10
if ( ~isempty(obj.check_server(host)) )
break;
end
pause(0.5);
end
elseif isstr(im)
% electron app is running - need new instance
strDB=im;
strDB=strrep(strDB,'/','*');
strDB=strrep(strDB,'\','*');
url = [obj.host ':' num2str(obj.port) '/strDB/' strDB];
webwrite(url,'');
return
end
chksrv = obj.check_server(host);
if ( isempty(chksrv) )
msg=['Can''t find server: ' host ':' num2str(port)];
warning(msg);
return;
end
sendProvider = http.io.LBinProvider(im,imD);
req = matlab.net.http.RequestMessage('post', [], sendProvider);
url = [host ':' num2str(port) '/loadfig'];
resp = req.send(url);
end
function launch_electron(port,fignum,workdir, leverpath,strDB)
if ( ispc() )
launch_electron_windows(port,fignum, workdir, leverpath,strDB);
elseif ( ismac() )
launch_electron_mac(port,fignum, workdir, leverpath,strDB);
elseif ( isunix() )
launch_electron_posix(port,fignum, workdir, leverpath,strDB);
else
error('Unsupported operating system!');
end
end
function launch_electron_mac(port,fignum,workdir, leverpath,strDB)
if ( ~isempty(leverpath) )
% mac matlab does not have /usr/local/bin on path
% that is typically where nodejs goes
% add it to path
% if this fails, check and fix that node is on the path that matlab
% finds in path1
path1 = getenv('PATH');
path1 = [path1 ':/usr/local/bin'];
setenv('PATH', path1);
elec_path = fullfile(leverpath,'node_modules','.bin','electron');
elec_cmd = [elec_path ' ' fullfile(leverpath,'elever','main.js')];
else
% run from installed app leverjs
elec_cmd = ['open -a leverjs -n --args --root=' pwd() ' '];
end
if exist('strDB','var') && ~isempty(strDB)
elec_cmd = [elec_cmd ' --leverFile=' strDB ' '];
end
cmd = [elec_cmd ' --port=' num2str(port) ' --title="figure ' num2str(fignum) '"' ' &'];
system(cmd);
end
function launch_electron_posix(port,fignum,workdir, leverpath,strDB)
elec_cmd = 'leverjs';
px = getenv('PATH');
if ( ~isempty(leverpath) )
% first try NVM
nvm_path = getenv('NVM_DIR');
if ~isempty(nvm_path)
[ret,elec_path] = system('source ~/.nvm/nvm.sh;which electron');
elec_path = replace(elec_path,newline,'');
nodePath = fileparts(elec_path);
px = [px ':' nodePath];
else
elec_path = fullfile(leverpath,'node_modules','.bin','electron');
end
elec_cmd = [elec_path ' ' fullfile(leverpath,'elever','main.js')];
else
[status,~] = system(['which ' elec_cmd]);
if ( status ~= 0 )
error(['Cannot find ' elec_cmd ' please add to system path!']);
end
end
if exist('strDB','var') && ~isempty(strDB)
elec_cmd = [elec_cmd ' --leverFile=' strDB ' '];
end
cmd = [elec_cmd ' --port=' num2str(port) ' --title="figure ' num2str(fignum) '"' ' &']
system(cmd,'PATH',px);
end
function launch_electron_windows(port,fignum,workdir, leverpath, strDB)
elec_cmd = 'leverjs.exe';
if ( ~isempty(leverpath) )
elec_path = fullfile(leverpath,'node_modules','.bin','electron.cmd');
elec_cmd = [elec_path ' ' fullfile(leverpath,'elever','main.js')];
else
[status,~] = system(['where ' elec_cmd]);
if ( status ~= 0 )
error(['Cannot find ' elec_cmd ' please add to system path!']);
end
end
if exist('strDB','var') && ~isempty(strDB)
elec_cmd = [elec_cmd ' --leverFile=' strDB ' '];
end
cmd = [elec_cmd ' --port=' num2str(port) ' --title="figure ' num2str(fignum) '"' ' &'];
status = system(cmd);
end