Skip to content
Snippets Groups Projects
Select Git revision
  • bf78d909f4073fad92fe4671e07f49715e1772b5
  • master default protected
  • v1.2.12
  • ctc2019
  • v1.1.11
  • v1.1.10
  • v1.1.8
  • v1.1.4
  • v1.0.9
  • v1.0.3
  • v1.0.2
11 results

show.m

Blame
  • 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