diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index d09a769a3b..da255351e4 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -437,6 +437,7 @@ _sfx:
notification: "通知"
chat: "チャット"
chatBg: "チャット(バックグラウンド)"
+ antenna: "アンテナ受信"
_ago:
unknown: "謎"
diff --git a/src/client/app.vue b/src/client/app.vue
index 34e2dbf7fb..7f97b6cf47 100644
--- a/src/client/app.vue
+++ b/src/client/app.vue
@@ -565,9 +565,7 @@ export default Vue.extend({
});
}
- const audio = new Audio(`/assets/sounds/${this.$store.state.device.sfxNotification}.mp3`);
- audio.volume = this.$store.state.device.sfxVolume;
- audio.play();
+ this.$root.sound('notification');
},
onMousedown(e) {
diff --git a/src/client/assets/sounds/syuilo/popo.mp3 b/src/client/assets/sounds/syuilo/popo.mp3
new file mode 100644
index 0000000000..a2a1605bbb
Binary files /dev/null and b/src/client/assets/sounds/syuilo/popo.mp3 differ
diff --git a/src/client/assets/sounds/syuilo/triple.mp3 b/src/client/assets/sounds/syuilo/triple.mp3
new file mode 100644
index 0000000000..54ab974d46
Binary files /dev/null and b/src/client/assets/sounds/syuilo/triple.mp3 differ
diff --git a/src/client/components/timeline.vue b/src/client/components/timeline.vue
index 6befd7c2a7..234ed6b07c 100644
--- a/src/client/components/timeline.vue
+++ b/src/client/components/timeline.vue
@@ -53,11 +53,7 @@ export default Vue.extend({
(this.$refs.tl as any).prepend(note);
if (this.sound) {
- const audio = new Audio(note.userId === this.$store.state.i.id
- ? `/assets/sounds/${this.$store.state.device.sfxNoteMy}.mp3`
- : `/assets/sounds/${this.$store.state.device.sfxNote}.mp3`);
- audio.volume = this.$store.state.device.sfxVolume;
- audio.play();
+ this.$root.sound(note.userId === this.$store.state.i.id ? 'noteMy' : 'note');
}
};
diff --git a/src/client/init.ts b/src/client/init.ts
index 69f071ddcf..d333a1289f 100644
--- a/src/client/init.ts
+++ b/src/client/init.ts
@@ -189,6 +189,13 @@ os.init(async () => {
if (cb) vm.$once('closed', cb);
(vm as any).focus();
},
+ sound(type: string) {
+ const sound = this.$store.state.device['sfx' + type.substr(0, 1).toUpperCase() + type.substr(1)];
+ if (sound == null) return;
+ const audio = new Audio(`/assets/sounds/${sound}.mp3`);
+ audio.volume = this.$store.state.device.sfxVolume;
+ audio.play();
+ }
},
router: router,
render: createEl => createEl(App)
@@ -198,4 +205,96 @@ os.init(async () => {
// マウント
app.$mount('#app');
+
+ if (app.$store.getters.isSignedIn) {
+ const main = os.stream.useSharedConnection('main');
+
+ // 自分の情報が更新されたとき
+ main.on('meUpdated', i => {
+ app.$store.dispatch('mergeMe', i);
+ });
+
+ main.on('readAllNotifications', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadNotification: false
+ });
+ });
+
+ main.on('unreadNotification', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadNotification: true
+ });
+ });
+
+ main.on('unreadMention', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadMentions: true
+ });
+ });
+
+ main.on('readAllUnreadMentions', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadMentions: false
+ });
+ });
+
+ main.on('unreadSpecifiedNote', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadSpecifiedNotes: true
+ });
+ });
+
+ main.on('readAllUnreadSpecifiedNotes', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadSpecifiedNotes: false
+ });
+ });
+
+ main.on('readAllMessagingMessages', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadMessagingMessage: false
+ });
+ });
+
+ main.on('unreadMessagingMessage', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadMessagingMessage: true
+ });
+
+ app.sound('chatBg');
+ });
+
+ main.on('readAllAntennas', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadAntenna: false
+ });
+ });
+
+ main.on('unreadAntenna', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadAntenna: true
+ });
+
+ app.sound('antenna');
+ });
+
+ main.on('readAllAnnouncements', () => {
+ app.$store.dispatch('mergeMe', {
+ hasUnreadAnnouncement: false
+ });
+ });
+
+ main.on('clientSettingUpdated', x => {
+ app.$store.commit('settings/set', {
+ key: x.key,
+ value: x.value
+ });
+ });
+
+ // トークンが再生成されたとき
+ // このままではMisskeyが利用できないので強制的にサインアウトさせる
+ main.on('myTokenRegenerated', () => {
+ os.signout();
+ });
+ }
});
diff --git a/src/client/mios.ts b/src/client/mios.ts
index e0eb99769e..a29dcd8550 100644
--- a/src/client/mios.ts
+++ b/src/client/mios.ts
@@ -3,7 +3,7 @@ import Vue from 'vue';
import { EventEmitter } from 'eventemitter3';
import initStore from './store';
-import { apiUrl, version, locale } from './config';
+import { apiUrl, version } from './config';
import Progress from './scripts/loading';
import Stream from './scripts/stream';
@@ -142,98 +142,6 @@ export default class MiOS extends EventEmitter {
@autobind
private initStream() {
this.stream = new Stream(this);
-
- if (this.store.getters.isSignedIn) {
- const main = this.stream.useSharedConnection('main');
-
- // 自分の情報が更新されたとき
- main.on('meUpdated', i => {
- this.store.dispatch('mergeMe', i);
- });
-
- main.on('readAllNotifications', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadNotification: false
- });
- });
-
- main.on('unreadNotification', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadNotification: true
- });
- });
-
- main.on('unreadMention', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadMentions: true
- });
- });
-
- main.on('readAllUnreadMentions', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadMentions: false
- });
- });
-
- main.on('unreadSpecifiedNote', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadSpecifiedNotes: true
- });
- });
-
- main.on('readAllUnreadSpecifiedNotes', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadSpecifiedNotes: false
- });
- });
-
- main.on('readAllMessagingMessages', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadMessagingMessage: false
- });
- });
-
- main.on('unreadMessagingMessage', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadMessagingMessage: true
- });
-
- const audio = new Audio(`/assets/sounds/${this.store.state.device.sfxChatBg}.mp3`);
- audio.volume = this.store.state.device.sfxVolume;
- audio.play();
- });
-
- main.on('readAllAntennas', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadAntenna: false
- });
- });
-
- main.on('unreadAntenna', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadAntenna: true
- });
- });
-
- main.on('readAllAnnouncements', () => {
- this.store.dispatch('mergeMe', {
- hasUnreadAnnouncement: false
- });
- });
-
- main.on('clientSettingUpdated', x => {
- this.store.commit('settings/set', {
- key: x.key,
- value: x.value
- });
- });
-
- // トークンが再生成されたとき
- // このままではMisskeyが利用できないので強制的にサインアウトさせる
- main.on('myTokenRegenerated', () => {
- this.signout();
- });
- }
}
/**
diff --git a/src/client/pages/messaging-room.vue b/src/client/pages/messaging-room.vue
index aa0c4c93b8..7f7e77fc14 100644
--- a/src/client/pages/messaging-room.vue
+++ b/src/client/pages/messaging-room.vue
@@ -184,10 +184,7 @@ export default Vue.extend({
},
onMessage(message) {
- // サウンドを再生する
- const audio = new Audio(`/assets/sounds/${this.$store.state.device.sfxChat}.mp3`);
- audio.volume = this.$store.state.device.sfxVolume;
- audio.play();
+ this.$root.sound('chat');
const isBottom = this.isBottom();
diff --git a/src/client/pages/preferences/index.vue b/src/client/pages/preferences/index.vue
index 9d57ddad58..34dcbd8254 100644
--- a/src/client/pages/preferences/index.vue
+++ b/src/client/pages/preferences/index.vue
@@ -37,6 +37,11 @@
+
+ {{ $t('_sfx.antenna') }}
+
+
+
@@ -97,6 +102,8 @@ const sounds = [
'syuilo/pope1',
'syuilo/pope2',
'syuilo/waon',
+ 'syuilo/popo',
+ 'syuilo/triple',
'aisha/1',
'aisha/2',
'aisha/3',
@@ -196,6 +203,11 @@ export default Vue.extend({
get() { return this.$store.state.device.sfxChatBg; },
set(value) { this.$store.commit('device/set', { key: 'sfxChatBg', value }); }
},
+
+ sfxAntenna: {
+ get() { return this.$store.state.device.sfxAntenna; },
+ set(value) { this.$store.commit('device/set', { key: 'sfxAntenna', value }); }
+ },
},
watch: {
diff --git a/src/client/store.ts b/src/client/store.ts
index 1a26bc82d1..3064cfdec7 100644
--- a/src/client/store.ts
+++ b/src/client/store.ts
@@ -47,6 +47,7 @@ const defaultDeviceSettings = {
sfxNotification: 'syuilo/pope2',
sfxChat: 'syuilo/pope1',
sfxChatBg: 'syuilo/waon',
+ sfxAntenna: 'syuilo/triple',
userData: {},
};