diff --git a/README.md b/README.md index ae8b9b8..55db76e 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The Gitter Desktop client is written using [NW.js](http://nwjs.io/), but the onl 1. clone this repo: `git clone git@github.com:gitterHQ/desktop.git && cd desktop` 2. install all dependencies: `npm install` -3. generate your own [app oAuth credentials](https://developer.gitter.im/apps) where the redirect url is `app://gitter/oauth.html` +3. generate your own [app oAuth credentials](https://developer.gitter.im/apps) where the redirect url is `chrome-extension://gitter/oauth.html` 4. start the app with your credentials: * linux/osx: `OAUTH_KEY=yourkey OAUTH_SECRET=yoursecret npm start` * windows cmd: `set OAUTH_KEY=yourkey && set OAUTH_SECRET=yoursecret && npm start` diff --git a/linux/gitter.desktop b/linux/gitter.desktop index 7bd2abd..ed1ae5a 100644 --- a/linux/gitter.desktop +++ b/linux/gitter.desktop @@ -6,3 +6,4 @@ Icon=/opt/Gitter/{{arch}}/logo.png Terminal=false Type=Application Categories=Utility; +StartupWMClass=gitter-desktop diff --git a/nwapp/components/context-menu.js b/nwapp/components/context-menu.js index 7f88877..240b050 100644 --- a/nwapp/components/context-menu.js +++ b/nwapp/components/context-menu.js @@ -1,24 +1,23 @@ 'use strict'; -var gui = window.require('nw.gui'); -var menu = new gui.Menu(); +var menu = new nw.Menu(); function Menu(cutLabel, copyLabel, pasteLabel) { - var cut = new gui.MenuItem({ + var cut = new nw.MenuItem({ label: cutLabel || "Cut", click: function() { document.execCommand("cut"); } }); - var copy = new gui.MenuItem({ + var copy = new nw.MenuItem({ label: copyLabel || "Copy", click: function() { document.execCommand("copy"); } }); - var paste = new gui.MenuItem({ + var paste = new nw.MenuItem({ label: pasteLabel || "Paste", click: function() { document.execCommand("paste"); @@ -35,4 +34,3 @@ function Menu(cutLabel, copyLabel, pasteLabel) { module.exports = new Menu(); - diff --git a/nwapp/components/menu-items.js b/nwapp/components/menu-items.js index f841a9c..41f978e 100644 --- a/nwapp/components/menu-items.js +++ b/nwapp/components/menu-items.js @@ -1,6 +1,5 @@ 'use strict'; -var gui = window.require('nw.gui'); var pkg = require('../package.json'); var settings = require('../utils/settings'); var events = require('../utils/custom-events'); diff --git a/nwapp/components/menu.js b/nwapp/components/menu.js index 7afd660..2ff7a6e 100644 --- a/nwapp/components/menu.js +++ b/nwapp/components/menu.js @@ -1,27 +1,26 @@ 'use strict'; var events = require('../utils/custom-events'); -var gui = window.require('nw.gui'); var CLIENT = require('../utils/client-type'); // recursively assembles menus and sub-menus function assembleMenu(items, parent) { var fold; - parent = parent ? parent : new gui.Menu(); + parent = parent ? parent : new nw.Menu(); items.forEach(function (item) { // means that we have a submenu if (item.content && item.content.length > 0) { - var submenu = new gui.Menu(); + var submenu = new nw.Menu(); fold = assembleMenu(item.content, submenu); } else { - fold = new gui.MenuItem(item); + fold = new nw.MenuItem(item); } if (fold.type === 'contextmenu') { item.submenu = fold; - fold = new gui.MenuItem(item); + fold = new nw.MenuItem(item); } if (item.index && CLIENT === 'osx') { @@ -36,7 +35,7 @@ function assembleMenu(items, parent) { function CustomMenu(spec) { - this.menu = new gui.Menu({ type: 'menubar' }); + this.menu = new nw.Menu({ type: 'menubar' }); this.items = spec.items || []; this.filter = spec.filter; this.label = spec.label; @@ -72,9 +71,9 @@ CustomMenu.prototype.build = function () { assembleMenu(filteredItems, this.menu.items[0].submenu); break; default: - var sub = new gui.Menu(); + var sub = new nw.Menu(); assembleMenu(filteredItems, sub); - this.menu.append(new gui.MenuItem({ + this.menu.append(new nw.MenuItem({ label: this.label, submenu: sub })); diff --git a/nwapp/components/tray-menu.js b/nwapp/components/tray-menu.js index 6596d30..5618729 100644 --- a/nwapp/components/tray-menu.js +++ b/nwapp/components/tray-menu.js @@ -1,6 +1,5 @@ 'use strict'; -var gui = window.require('nw.gui'); var log = require('loglevel'); var Gitter = require('gitter-realtime-client'); var settings = require('../utils/settings'); @@ -8,7 +7,7 @@ var events = require('../utils/custom-events'); var quitApp = require('../utils/quit-app'); function TrayMenu() { - this.menu = new gui.Menu(); + this.menu = new nw.Menu(); this.unsetRooms(); events.on('user:signedOut', function () { @@ -58,9 +57,9 @@ TrayMenu.prototype.clear = function () { TrayMenu.prototype.addDefaults = function () { if (settings.token) { - this.menu.append(new gui.MenuItem({ label: 'Sign Out', click: events.emit.bind(events, 'traymenu:signout') })); + this.menu.append(new nw.MenuItem({ label: 'Sign Out', click: events.emit.bind(events, 'traymenu:signout') })); } - this.menu.append(new gui.MenuItem({ label: 'Exit Gitter', click: quitApp })); + this.menu.append(new nw.MenuItem({ label: 'Exit Gitter', click: quitApp })); }; TrayMenu.prototype.build = function () { @@ -91,11 +90,11 @@ TrayMenu.prototype.addSection = function (spec) { this.menu.append(this.toLabel(spec.label)); spec.collection.slice(0, 5).forEach(appendRoom); - this.menu.append(new gui.MenuItem({ type: 'separator' })); + this.menu.append(new nw.MenuItem({ type: 'separator' })); }; TrayMenu.prototype.toMenuItem = function (room) { - return new gui.MenuItem({ + return new nw.MenuItem({ label: room.get('name'), click: function () { events.emit('traymenu:clicked', room.get('url')); @@ -104,7 +103,7 @@ TrayMenu.prototype.toMenuItem = function (room) { }; TrayMenu.prototype.toLabel = function (name) { - return new gui.MenuItem({ + return new nw.MenuItem({ label: name.toUpperCase(), enabled: false }); diff --git a/nwapp/components/tray.js b/nwapp/components/tray.js index 0963eb9..3eb30a3 100644 --- a/nwapp/components/tray.js +++ b/nwapp/components/tray.js @@ -1,6 +1,5 @@ 'use strict'; -var gui = window.require('nw.gui'); var settings = require('../utils/settings'); var events = require('../utils/custom-events'); @@ -8,7 +7,7 @@ var CLIENT_TYPE = require('../utils/client-type'); var icon = require('../icons.json')[CLIENT_TYPE]; function CustomTray() { - this.tray = new gui.Tray({ + this.tray = new nw.Tray({ icon: icon.disconnected, alticon: icon.selected, iconsAreTemplates: false diff --git a/nwapp/index.js b/nwapp/index.js index d2ab688..f4a4945 100644 --- a/nwapp/index.js +++ b/nwapp/index.js @@ -7,13 +7,12 @@ log.setLevel('debug'); var CLIENT = require('./utils/client-type'); var manifest = require('./package.json'); -var gui = require('nw.gui'); var pkg = require('./package.json'); var Gitter = require('gitter-realtime-client'); var os = require('os'); var path = require('path'); -var argv = require('yargs')(gui.App.argv).argv; +var argv = require('yargs')(nw.App.argv).argv; var Promise = require('bluebird'); var semver = require('semver'); var autoUpdate = require('./utils/auto-update'); @@ -176,7 +175,7 @@ function setupTray(win) { // initialises and adds listeners to the top level components of the UI function initGUI() { log.trace('initGUI()'); - win = gui.Window.get(); + win = nw.Window.get(); // Set up tray(OSX)/menu bar(Windows) if(settings.showInMacMenuBar) { @@ -192,7 +191,7 @@ function initGUI() { } }); - gui.App.on('reopen', reopen); // When someone clicks on the dock icon, show window again. + nw.App.on('reopen', reopen); // When someone clicks on the dock icon, show window again. win.on('close', function (evt) { log.trace('win:close'); @@ -286,10 +285,10 @@ function initApp() { function showAuth() { if (loginView) return; - // whitelists app:// protocol used for the oAuth callback - gui.App.addOriginAccessWhitelistEntry('https://gitter.im/', 'app', 'gitter', true); + // whitelists chrome-extension:// protocol used for the oAuth callback + nw.App.addOriginAccessWhitelistEntry('https://gitter.im/', 'app', 'gitter', true); - loginView = new LoginView(gui.Window); + loginView = new LoginView(nw.Window); loginView.on('accessTokenReceived', function(accessToken) { log.trace('authWindow:loaded'); @@ -330,11 +329,10 @@ function signout() { function showLoggedInWindow(exec) { log.trace('showLoggedInWindow()'); - mainWindow = gui.Window.get( - window.open('loggedin.html', { - focus: true - }) - ); + var win = nw.Window.get(); + win.get('loggedin.html', { + focus: true + }); mainWindow.setMinimumSize(400, 200); @@ -402,7 +400,7 @@ function showLoggedInWindow(exec) { }); mainWindow.on('new-win-policy', function (frame, url, policy) { - gui.Shell.openExternal(url); + nw.Shell.openExternal(url); policy.ignore(); }); } diff --git a/nwapp/lib/login-view.js b/nwapp/lib/login-view.js index 322182c..c59167f 100644 --- a/nwapp/lib/login-view.js +++ b/nwapp/lib/login-view.js @@ -20,7 +20,7 @@ var clientSecret = process.env.OAUTH_SECRET || oauthJson[os].secret || ''; var baseSite = 'https://gitter.im/'; var authorizePath = 'login/oauth/authorize'; var accessTokenPath = 'login/oauth/token'; -var redirectUri = 'app://gitter/oauth.html'; +var redirectUri = 'chrome-extension://gitter/oauth.html'; var LoginView = function(rootWindow) { @@ -42,7 +42,7 @@ var LoginView = function(rootWindow) { width: 1024, height: 640 }); - var mb = new gui.Menu({ + var mb = new nw.Menu({ type: 'menubar' }); if(os === 'osx') { @@ -50,7 +50,7 @@ var LoginView = function(rootWindow) { hideEdit: false }); } - gui.Window.get().menu = mb; + nw.Window.get().menu = mb; this.oauthWindow.on('document-end', function() { // gitter login page finished loading visible bits diff --git a/nwapp/loggedin.js b/nwapp/loggedin.js index 8349d87..e4ea4d6 100644 --- a/nwapp/loggedin.js +++ b/nwapp/loggedin.js @@ -1,5 +1,4 @@ -var gui = require('nw.gui'); -var win = gui.Window.get(); +var win = nw.Window.get(); var frame = win.window.document.getElementById('mainframe'); var settings = require('./utils/settings'); var version = require('./package.json').version; diff --git a/nwapp/oauth.html b/nwapp/oauth.html index 181e3fa..81e6638 100644 --- a/nwapp/oauth.html +++ b/nwapp/oauth.html @@ -2,8 +2,7 @@