@@ -10,6 +10,9 @@ var fs = require('fs');
1010var  promisify  =  require ( './app/helpers' ) . promisify ; 
1111var  git  =  require ( './app/git-tool' ) ; 
1212var  server  =  require ( './app/server' ) ; 
13+ const  store  =  require ( 'data-store' ) ( 'marlin-config' ) ; 
14+ const  pio   =  require ( './app/pio-inst' ) ; 
15+ const  gitExe  =  'git' ; 
1316
1417var  mainWindow  =  null ; 
1518var  getFolder = ( ) => new  Promise ( ( done , fail ) => 
@@ -24,6 +27,7 @@ var getFolder=()=>new Promise((done,fail)=>
2427    } ) 
2528  ) 
2629app . on ( 'window-all-closed' ,  ( )  =>  { 
30+   console . log ( 'window-all-closed' ) ; 
2731  app . quit ( ) 
2832} ) 
2933function  showNotify ( text ) { 
@@ -39,18 +43,49 @@ ipcMain.on('search-text', (event, arg) => {
3943  var  wc  =  mainWindow  &&  mainWindow . webContents ; 
4044  arg . length  &&  wc . findInPage ( arg )  ||  wc . stopFindInPage ( 'clearSelection' ) ; 
4145} ) 
46+ ipcMain . on ( 'starter-pio' ,  function ( ev )  { 
47+   pio . install ( ) 
48+   . then ( result  =>  ev . sender . send ( 'starter-pio' ,  result ) ) 
49+   . catch ( e  =>  dialog . showErrorBox ( 'Error' ,  e ) ) 
50+ } ) 
4251
4352app . on ( 'ready' ,  function ( )  { 
44-     promisify ( which ) ( 'git' ) 
45-     . then ( function ( ) { 
46-       var  is = { '-G' :0 } 
47-       . filter ( ( v , key , o , p , i ) => ( p = process . argv , i = p . indexOf ( key ) , ! v && i >= 0 && i + 1 < p . length && ( o [ key ] = p [ i + 1 ] ) , i >= 0 ) ) ; 
48-       var  chain  =  ( )  =>  getFolder ( ) . then ( dir  => 
53+     var  status  =  new  BrowserWindow ( { width : 400 ,  height : 400 ,  maximizable : false } ) 
54+     status . setMenu ( null ) ; 
55+     var  folders  =  store . get ( 'folders' )  ||  [ ] ; 
56+     var  opts  =  { '-G' : 0 } ; 
57+     Object . keys ( opts ) . reduce ( ( v ,  key )  =>  ( v . i  =  v . p . indexOf ( key ) ,  v . i  >=  0  &&  ( opts [ key ]  =  v . p [ v . i  +  1 ] ) ,  v ) ,  { p : process . argv } ) ; 
58+ 
59+     Promise . all ( [ 
60+       promisify ( which ) ( gitExe ) . then ( a  =>  1 ) . catch ( a  =>  0 ) , 
61+       promisify ( which ) ( 'pio' ) . then ( a  =>  1 ) . catch ( a  =>  0 ) , 
62+       promisify ( fs . readFile ) ( path . join ( __dirname ,  'views' ,  'start.html' ) ) , 
63+     ] ) 
64+     . then ( p  =>  { 
65+       var  statusFile  =  'data:text/html;charset=UTF-8,'  +  encodeURIComponent ( p [ 2 ] . toString ( ) ) ; 
66+       status . loadURL ( statusFile ) ; 
67+       status . show ( ) 
68+       ipcMain . on ( 'starter-init' ,  ev  =>  { 
69+         ev . sender . send ( 'starter-init' ,  { 
70+             git : p [ 0 ] , 
71+             pio : p [ 1 ] , 
72+             folders : folders , 
73+         } ) 
74+       } ) 
75+       return  ( new  Promise ( function ( resolve ,  reject )  { 
76+         ipcMain . on ( 'starter-folder' ,  function ( ev ,  num )  { 
77+           resolve ( num  ==  'new'  ? ''  : folders [ num ] ) ; 
78+         } ) 
79+       } ) ) 
80+     } ) 
81+     . then ( folder  =>  promisify ( which ) ( gitExe ) . then ( a  =>  folder ) ) 
82+     . then ( function ( folder )  { 
83+       const  check  =  dir  => 
4984          promisify ( fs . access ) ( dir ,  fs . constants . W_OK ) 
5085          . then ( a  =>  dir ) 
5186          . catch ( e  =>  ( dialog . showErrorBox ( 'Access' , 'The application hasn\'t access to this folder,\nselect a folder from my Documents or Desktop' ) , chain ( ) ) ) 
52-          ) ; 
53-       return  is [ '-G' ]  ||  chain ( ) ; 
87+       const   chain   =   ( )   =>   getFolder ( ) . then ( check ) ; 
88+       return  folder   &&   check ( folder )   ||   opts [ '-G' ]  ||  chain ( ) ; 
5489    } ) 
5590    . then ( dir  =>  git . root ( dir ) 
5691        . catch ( e  =>  { 
@@ -63,6 +98,13 @@ app.on('ready', function() {
6398            . catch ( e  =>  git . root ( dir ) ) ; 
6499        } ) 
65100    ) 
101+     . then ( folder  =>  { 
102+       var  i  =  folders . indexOf ( folder ) ; 
103+       i  >=  0  &&  folders . splice ( i ,  1 ) ; 
104+       folders . unshift ( folder ) ; 
105+       store . set ( 'folders' ,  folders ) ; 
106+       return  folder ; 
107+     } ) 
66108    . then ( ( ) => server . main ( 1 ) ) 
67109    . then ( function ( url ) { 
68110      mainWindow  =  new  BrowserWindow ( { 
@@ -74,12 +116,17 @@ app.on('ready', function() {
74116          } , 
75117      } ) ; 
76118      mainWindow . loadURL ( url ) ; 
119+       status . close ( ) ; 
77120      mainWindow . webContents . on ( 'found-in-page' ,  function  ( event ,  result )  { 
78121        var  count  =  0 ; 
79122        if  ( result  &&  result . finalUpdate ) 
80123          count  =  result . matches ; 
81124        event . sender . send ( 'search-found' ,  count ) ; 
82125      } ) ; 
126+       mainWindow . on ( 'close' ,  function ( )  { 
127+       console . log ( 'quit()' ) 
128+         app . quit ( ) ; 
129+       } ) 
83130    } ) 
84131    . catch ( e  =>  { 
85132      console . error ( e . message ) ; 
0 commit comments