From 6dd635ddf3d0928bb0a283a21f342ff05e8e61ba Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 7 Jun 2017 00:04:28 +0900
Subject: [PATCH] Fix bug

---
 src/web/app/common/mixins/index.js    |  4 +--
 src/web/app/common/mixins/stream.js   |  8 ++---
 src/web/app/desktop/script.js         | 43 +++++++++++++++++++++++++--
 src/web/app/desktop/scripts/stream.js | 40 -------------------------
 src/web/app/init.js                   |  8 +++--
 5 files changed, 51 insertions(+), 52 deletions(-)
 delete mode 100644 src/web/app/desktop/scripts/stream.js

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);
 		}