@@ -46,7 +46,7 @@ function buildCheckbox (key, label) {
4646// they natively work as soon as the menu opens. They don't work like that on Windows 
4747// or other OSes and must be registered globally. They still collide with global 
4848// accelerator. Please see ../utils/setup-global-shortcut.js for more info. 
49- function  buildMenu  ( ctx )  { 
49+ function  buildMenu  ( ctx ,   peerCount )  { 
5050  return  Menu . buildFromTemplate ( [ 
5151    ...[ 
5252      [ 'ipfsIsStarting' ,  'yellow' ] , 
@@ -63,6 +63,11 @@ function buildMenu (ctx) {
6363      enabled : false , 
6464      icon : path . resolve ( path . join ( __dirname ,  `../assets/icons/status/${ color }  ) ) 
6565    } ) ) , 
66+     { 
67+       id : 'peerCount' , 
68+       label : peerCount . toString ( )  +  ' '  +  i18n . t ( 'peerCount' ) , 
69+       enabled : false 
70+     } , 
6671    { 
6772      id : 'restartIpfs' , 
6873      label : i18n . t ( 'restart' ) , 
@@ -253,7 +258,8 @@ module.exports = function (ctx) {
253258  const  state  =  { 
254259    status : null , 
255260    gcRunning : false , 
256-     isUpdating : false 
261+     isUpdating : false , 
262+     peerCount : 0 
257263  } 
258264
259265  // macOS tray drop files 
@@ -271,15 +277,30 @@ module.exports = function (ctx) {
271277    } ) 
272278  } 
273279
280+   const  pollPeers  =  ( )  =>  { 
281+     // If the daemon is running, send a request to retrieve the number 
282+     // of connected peers. Emit 'peersPolled' event upon retrieval. 
283+     if  ( state . status  ===  STATUS . STARTING_FINISHED  &&  ctx . getIpfsd )  { 
284+       ctx . getIpfsd ( ) . then ( ( daemon )  =>  { 
285+         daemon . api . swarm . peers ( ) . then ( ( value )  =>  { 
286+           if  ( value . length )  { 
287+             ipcMain . emit ( 'peersPolled' ,  value . length ) 
288+           } 
289+         } ) 
290+       } ) 
291+     }  else  { 
292+       ipcMain . emit ( 'peersPolled' ,  0 ) 
293+     } 
294+   } 
295+ 
274296  const  setupMenu  =  ( )  =>  { 
275-     menu  =  buildMenu ( ctx ) 
297+     menu  =  buildMenu ( ctx ,   state . peerCount ) 
276298
277299    tray . setContextMenu ( menu ) 
278-     tray . setToolTip ( 'IPFS Desktop' ) 
300+     tray . setToolTip ( state . peerCount . toString ( )   +   ' '   +   i18n . t ( 'peerCount' ) ) 
279301
280302    menu . on ( 'menu-will-show' ,  ( )  =>  {  ipcMain . emit ( 'menubar-will-open' )  } ) 
281303    menu . on ( 'menu-will-close' ,  ( )  =>  {  ipcMain . emit ( 'menubar-will-close' )  } ) 
282- 
283304    updateMenu ( ) 
284305  } 
285306
@@ -292,6 +313,7 @@ module.exports = function (ctx) {
292313    menu . getMenuItemById ( 'ipfsIsStopping' ) . visible  =  status  ===  STATUS . STOPPING_STARTED  &&  ! gcRunning  &&  ! isUpdating 
293314    menu . getMenuItemById ( 'ipfsIsNotRunning' ) . visible  =  status  ===  STATUS . STOPPING_FINISHED  &&  ! gcRunning  &&  ! isUpdating 
294315    menu . getMenuItemById ( 'ipfsHasErrored' ) . visible  =  errored  &&  ! gcRunning  &&  ! isUpdating 
316+     menu . getMenuItemById ( 'peerCount' ) . visible  =  status  ===  STATUS . STARTING_FINISHED 
295317    menu . getMenuItemById ( 'runningWithGC' ) . visible  =  gcRunning 
296318    menu . getMenuItemById ( 'runningWhileCheckingForUpdate' ) . visible  =  isUpdating 
297319
@@ -365,10 +387,21 @@ module.exports = function (ctx) {
365387    updateMenu ( ) 
366388  } ) 
367389
390+   ipcMain . on ( 'peersPolled' ,  peerCount  =>  { 
391+     state . peerCount  =  peerCount 
392+     menu  =  buildMenu ( ctx ,  state . peerCount ) 
393+     menu . on ( 'menu-will-show' ,  ( )  =>  {  ipcMain . emit ( 'menubar-will-open' )  } ) 
394+     menu . on ( 'menu-will-close' ,  ( )  =>  {  ipcMain . emit ( 'menubar-will-close' )  } ) 
395+     tray . setContextMenu ( menu ) 
396+     tray . setToolTip ( state . peerCount . toString ( )  +  ' '  +  i18n . t ( 'peerCount' ) ) 
397+     updateMenu ( ) 
398+   } ) 
399+ 
368400  ipcMain . on ( 'configUpdated' ,  ( )  =>  {  updateMenu ( )  } ) 
369401  ipcMain . on ( 'languageUpdated' ,  ( )  =>  {  setupMenu ( )  } ) 
370402
371403  setupMenu ( ) 
404+   setInterval ( pollPeers ,  60000 ) 
372405
373406  ctx . tray  =  tray 
374407  logger . info ( '[tray] started' ) 
0 commit comments