diff --git a/lib/gui/os/notification.js b/lib/gui/os/notification.js new file mode 100644 index 00000000..646da143 --- /dev/null +++ b/lib/gui/os/notification.js @@ -0,0 +1,48 @@ +/* + * Copyright 2017 resin.io + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const electron = require('electron'); + +/** + * @summary Send a notification + * @function + * @public + * + * @description + * This function makes use of Electron's notification desktop + * integration feature. See: + * http://electron.atom.io/docs/v0.37.5/tutorial/desktop-environment-integration/ + * + * @param {String} title - notification title + * @param {String} body - notification body + * @returns {Object} HTML5 notification instance + * + * @example + * notification.send('Hello', 'Foo Bar Bar'); + */ +exports.send = (title, body) => { + + // `app.dock` is only defined in OS X + if (electron.remote.app.dock) { + electron.remote.app.dock.bounce(); + } + + return new Notification(title, { + body + }); +}; diff --git a/lib/gui/os/notification/notification.js b/lib/gui/os/notification/notification.js deleted file mode 100644 index f46252d1..00000000 --- a/lib/gui/os/notification/notification.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2016 resin.io - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -/** - * The purpose of this module is to provide an easy way - * to send desktop notifications. - * - * @module Etcher.OS.Notification - */ - -const angular = require('angular'); -const MODULE_NAME = 'Etcher.OS.Notification'; -const OSNotification = angular.module(MODULE_NAME, []); -OSNotification.service('OSNotificationService', require('./services/notification')); - -module.exports = MODULE_NAME; diff --git a/lib/gui/os/notification/services/notification.js b/lib/gui/os/notification/services/notification.js deleted file mode 100644 index 1686f7fa..00000000 --- a/lib/gui/os/notification/services/notification.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2016 resin.io - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -const electron = require('electron'); - -module.exports = function() { - - /** - * @summary Send a notification - * @function - * @public - * - * @description - * This function makes use of Electron's notification desktop - * integration feature. See: - * http://electron.atom.io/docs/v0.37.5/tutorial/desktop-environment-integration/ - * - * @param {String} title - notification title - * @param {String} body - notification body - * @returns {Object} HTML5 notification object - * - * @example - * const notification = OSNotificationService.send('Hello', 'Foo Bar Bar'); - * notification.onclick = () => { - * console.log('The notification has been clicked'); - * }; - */ - this.send = (title, body) => { - - // `app.dock` is only defined in OS X - if (electron.remote.app.dock) { - electron.remote.app.dock.bounce(); - } - - return new Notification(title, { - body - }); - }; - -}; diff --git a/lib/gui/pages/main/controllers/flash.js b/lib/gui/pages/main/controllers/flash.js index 5cb4af17..b2290cb6 100644 --- a/lib/gui/pages/main/controllers/flash.js +++ b/lib/gui/pages/main/controllers/flash.js @@ -20,14 +20,14 @@ const messages = require('../../../../shared/messages'); const settings = require('../../../models/settings'); const flashState = require('../../../models/flash-state'); const utils = require('../../../../shared/utils'); +const notification = require('../../../os/notification'); module.exports = function( $state, DriveScannerService, ImageWriterService, FlashErrorModalService, - ErrorService, - OSNotificationService + ErrorService ) { /** @@ -61,12 +61,12 @@ module.exports = function( ImageWriterService.flash(image.path, drive).then(() => { if (!flashState.wasLastFlashCancelled()) { - OSNotificationService.send('Success!', messages.info.flashComplete()); + notification.send('Success!', messages.info.flashComplete()); $state.go('success'); } }) .catch((error) => { - OSNotificationService.send('Oops!', messages.error.flashFailure()); + notification.send('Oops!', messages.error.flashFailure()); // TODO: All these error codes to messages translations // should go away if the writer emitted user friendly diff --git a/lib/gui/pages/main/main.js b/lib/gui/pages/main/main.js index 4158f306..59545261 100644 --- a/lib/gui/pages/main/main.js +++ b/lib/gui/pages/main/main.js @@ -39,7 +39,6 @@ const MainPage = angular.module(MODULE_NAME, [ require('../../components/flash-error-modal/flash-error-modal'), require('../../components/progress-button/progress-button'), - require('../../os/notification/notification'), require('../../os/dialog/dialog'), require('../../os/open-external/open-external'), require('../../os/dropzone/dropzone'),