text: module.exports = {
    hasTray,
    init,
    setWindowFocus
  }
  
  const { app, Tray, Menu } = require('electron')
  
  const config = require('../config')
  const windows = require('./windows')
  
  let tray
  
  function init () {
    if (process.platform === 'linux') {
      initLinux()
    }
    if (process.platform === 'win32') {
      initWin32()
    }
    // Mac apps generally do not have menu bar icons
  }
  
  /**
   * Returns true if there a tray icon is active.
   */
  function hasTray () {
    return !!tray
  }
  
  function setWindowFocus (flag) {
    if (!tray) return
    updateTrayMenu()
  }
  
  function initLinux () {
    checkLinuxTraySupport(err => {
      if (!err) createTray()
    })
  }
  
  function initWin32 () {
    createTray()
  }
  
  /**
   * Check for libappindicator support before creating tray icon.
   */
  function checkLinuxTraySupport (cb) {
    const cp = require('child_process')
  
    // Check that libappindicator libraries are installed in system.
    cp.exec('ldconfig -p | grep libappindicator', (err, stdout) => {
      if (err) return cb(err)
      cb(null)
    })
  }
  
  function createTray () {
    tray = new Tray(getIconPath())
  
    // On Windows, left click opens the app, right click opens the context menu.
    // On Linux, any click (left or right) opens the context menu.
    tray.on('click', () => windows.main.show())
  
    // Show the tray context menu, and keep the available commands up to date
    updateTrayMenu()
  }
  
  function updateTrayMenu () {
    const contextMenu = Menu.buildFromTemplate(getMenuTemplate())
    tray.setContextMenu(contextMenu)
  }
  
  function getMenuTemplate () {
    return [
      getToggleItem(),
      {
        label: 'Quit',
        click: () => app.quit()
      }
    ]
  
    function getToggleItem () {
      if (windows.main.win.isVisible()) {
        return {
          label: 'Hide to tray',
          click: () => windows.main.hide()
        }
      } else {
        return {
          label: 'Show WebTorrent',
          click: () => windows.main.show()
        }
      }
    }
  }
  
  function getIconPath () {
    return process.platform === 'win32'
      ? config.APP_ICON + '.ico'
      : config.APP_ICON + '.png'
  }
  