diff --git a/src/web/app/common/mixins/index.js b/src/web/app/common/mixins/index.js index 29cb6c9b6a..9718ee949b 100644 --- a/src/web/app/common/mixins/index.js +++ b/src/web/app/common/mixins/index.js @@ -2,8 +2,8 @@ import activateMe from './i'; import activateApi from './api'; import activateStream from './stream'; -export default me => { +export default (me, stream) => { activateMe(me); activateApi(me); - activateStream(me); + activateStream(stream); }; diff --git a/src/web/app/common/mixins/stream.js b/src/web/app/common/mixins/stream.js index e3b616a1a5..4706042b04 100644 --- a/src/web/app/common/mixins/stream.js +++ b/src/web/app/common/mixins/stream.js @@ -1,9 +1,5 @@ import * as riot from 'riot'; -import Connection from '../scripts/stream'; -export default me => { - const stream = me ? new Connection(me) : null; - riot.mixin('stream', { - stream: stream - }); +export default stream => { + riot.mixin('stream', { stream }); }; diff --git a/src/web/app/desktop/script.js b/src/web/app/desktop/script.js index b3691f7ff2..6beba44ffa 100644 --- a/src/web/app/desktop/script.js +++ b/src/web/app/desktop/script.js @@ -11,11 +11,12 @@ import * as riot from 'riot'; import init from '../init'; import route from './router'; import fuckAdBlock from './scripts/fuck-ad-block'; +import getPostSummary from '../common/scripts/get-post-summary'; /** * init */ -init(me => { +init(async (me, stream) => { /** * Fuck AD Block */ @@ -27,10 +28,48 @@ init(me => { if ('Notification' in window) { // 許可を得ていなかったらリクエスト if (Notification.permission == 'default') { - Notification.requestPermission(); + await Notification.requestPermission(); + } + + if (Notification.permission == 'granted') { + registerNotifications(stream); } } // Start routing route(me); }); + +function registerNotifications(stream) { + stream.on('drive_file_created', file => { + const n = new Notification('ファイルがアップロードされました', { + body: file.name, + icon: file.url + '?thumbnail&size=64' + }); + setTimeout(n.close.bind(n), 5000); + }); + + stream.on('mention', post => { + const n = new Notification(`${post.user.name}さんから:`, { + body: getPostSummary(post), + icon: post.user.avatar_url + '?thumbnail&size=64' + }); + setTimeout(n.close.bind(n), 6000); + }); + + stream.on('reply', post => { + const n = new Notification(`${post.user.name}さんから返信:`, { + body: getPostSummary(post), + icon: post.user.avatar_url + '?thumbnail&size=64' + }); + setTimeout(n.close.bind(n), 6000); + }); + + stream.on('quote', post => { + const n = new Notification(`${post.user.name}さんが引用:`, { + body: getPostSummary(post), + icon: post.user.avatar_url + '?thumbnail&size=64' + }); + setTimeout(n.close.bind(n), 6000); + }); +} diff --git a/src/web/app/desktop/scripts/stream.js b/src/web/app/desktop/scripts/stream.js deleted file mode 100644 index b86be4cbd5..0000000000 --- a/src/web/app/desktop/scripts/stream.js +++ /dev/null @@ -1,40 +0,0 @@ -const stream = require('../../common/scripts/stream'); -const getPostSummary = require('../../common/scripts/get-post-summary'); - -module.exports = me => { - const s = stream(me); - - s.event.on('drive_file_created', file => { - const n = new Notification('ファイルがアップロードされました', { - body: file.name, - icon: file.url + '?thumbnail&size=64' - }); - setTimeout(n.close.bind(n), 5000); - }); - - s.event.on('mention', post => { - const n = new Notification(`${post.user.name}さんから:`, { - body: getPostSummary(post), - icon: post.user.avatar_url + '?thumbnail&size=64' - }); - setTimeout(n.close.bind(n), 6000); - }); - - s.event.on('reply', post => { - const n = new Notification(`${post.user.name}さんから返信:`, { - body: getPostSummary(post), - icon: post.user.avatar_url + '?thumbnail&size=64' - }); - setTimeout(n.close.bind(n), 6000); - }); - - s.event.on('quote', post => { - const n = new Notification(`${post.user.name}さんが引用:`, { - body: getPostSummary(post), - icon: post.user.avatar_url + '?thumbnail&size=64' - }); - setTimeout(n.close.bind(n), 6000); - }); - - return s; -}; diff --git a/src/web/app/init.js b/src/web/app/init.js index 89a87d61cc..17f9a2d09e 100644 --- a/src/web/app/init.js +++ b/src/web/app/init.js @@ -8,6 +8,7 @@ import * as riot from 'riot'; import api from './common/scripts/api'; import signout from './common/scripts/signout'; import checkForUpdate from './common/scripts/check-for-update'; +import Connection from './common/scripts/stream'; import mixin from './common/mixins'; import generateDefaultUserdata from './common/scripts/generate-default-userdata'; import CONFIG from './common/scripts/config'; @@ -94,8 +95,11 @@ export default callback => { }); } + // Init stream connection + const stream = me ? new Connection(me) : null; + // ミックスイン初期化 - mixin(me); + mixin(me, stream); // ローディング画面クリア const ini = document.getElementById('ini'); @@ -107,7 +111,7 @@ export default callback => { document.body.appendChild(app); try { - callback(me); + callback(me, stream); } catch (e) { panic(e); }