From 3cb738c9da3cdcde207c3f9458b62cca86a04285 Mon Sep 17 00:00:00 2001 From: odango_san Date: Sat, 10 Dec 2016 14:37:58 +0900 Subject: [PATCH] add notification sound play --- package.json | 150 +++++++++++++++--------------- src/assets/audio/notification.mp3 | Bin 0 -> 10378 bytes src/renderer/html/index.html | 7 ++ src/renderer/ts/Application.ts | 48 ++++++---- typings.json | 3 +- 5 files changed, 116 insertions(+), 92 deletions(-) create mode 100644 src/assets/audio/notification.mp3 diff --git a/package.json b/package.json index 3ec835c..d9ae412 100644 --- a/package.json +++ b/package.json @@ -1,76 +1,76 @@ { - "name": "liveport", - "version": "1.1.1", - "description": "livestream support tool", - "main": "build/main.js", - "scripts": { - "watch": "webpack-dashboard -- webpack -d --watch", - "start": "webpack-dashboard -- webpack-dev-server -d --hot --inline", - "build": "electron-packager . live_gen --platform=win32 --arch=x64 --version=1.4.6 --out ./release" - }, - "author": "https://github.com/odangosan", - "license": "ISC", - "devDependencies": { - "@types/electron": "^1.4.25", - "@types/express": "^4.0.33", - "@types/iconv-lite": "0.0.1", - "@types/material-design-lite": "^1.1.14", - "@types/materialize-css": "^0.97.32", - "@types/node": "^6.0.46", - "@types/request": "0.0.33", - "@types/request-promise": "^4.1.33", - "@types/socket.io": "^1.4.27", - "@types/socket.io-client": "^1.4.28", - "@types/webspeechapi": "0.0.27", - "autoprefixer": "^6.5.3", - "copy-webpack-plugin": "^4.0.0", - "css-loader": "^0.25.0", - "electron": "^1.4.5", - "electron-connect": "^0.6.0", - "electron-packager": "^8.2.0", - "event-stream": "^3.3.4", - "exports-loader": "^0.6.3", - "file-loader": "^0.9.0", - "font-awesome": "^4.7.0", - "github": "^7.0.0", - "gulp": "^3.9.1", - "gulp-rename": "^1.2.2", - "gulp-typescript": "^3.1.2", - "gulp-useref": "^3.1.2", - "gulp-util": "^3.0.7", - "gulp-webpack": "^1.5.0", - "gulp-zip": "^3.2.0", - "iconv-lite": "^0.4.13", - "imports-loader": "^0.6.5", - "jquery": "^3.1.1", - "json-loader": "^0.5.4", - "less": "^2.7.1", - "less-loader": "^2.2.3", - "material-design-icons": "^3.0.1", - "material-design-lite": "^1.2.1", - "open": "0.0.5", - "postcss-import": "^8.2.0", - "postcss-loader": "^1.1.1", - "request": "^2.78.0", - "request-promise": "^4.1.1", - "resolve-url-loader": "^1.6.0", - "run-sequence": "^1.2.2", - "script-loader": "^0.7.0", - "socket.io-client": "^1.5.1", - "style-loader": "^0.13.1", - "ts-loader": "^1.0.0", - "typescript": "^2.0.8", - "typings": "^1.5.0", - "url-loader": "^0.5.7", - "vue": "^2.0.5", - "vue-typed": "^2.0.1", - "webpack": "^1.13.3", - "webpack-dashboard": "^0.2.0", - "webpack-dev-server": "^1.16.2", - "webpack-merge": "^0.15.0" - }, - "dependencies": { - "express": "^4.14.0", - "socket.io": "^1.5.1" - } -} \ No newline at end of file + "name": "liveport", + "version": "1.2.0", + "description": "livestream support tool", + "main": "build/main.js", + "scripts": { + "watch": "webpack-dashboard -- webpack -d --watch", + "start": "webpack-dashboard -- webpack-dev-server -d --hot --inline", + "build": "electron-packager . live_gen --platform=win32 --arch=x64 --version=1.4.6 --out ./release" + }, + "author": "https://github.com/odangosan", + "license": "ISC", + "devDependencies": { + "@types/electron": "^1.4.25", + "@types/express": "^4.0.33", + "@types/iconv-lite": "0.0.1", + "@types/material-design-lite": "^1.1.14", + "@types/materialize-css": "^0.97.32", + "@types/node": "^6.0.46", + "@types/request": "0.0.33", + "@types/request-promise": "^4.1.33", + "@types/socket.io": "^1.4.27", + "@types/socket.io-client": "^1.4.28", + "@types/webspeechapi": "0.0.27", + "autoprefixer": "^6.5.3", + "copy-webpack-plugin": "^4.0.0", + "css-loader": "^0.25.0", + "electron": "^1.4.5", + "electron-connect": "^0.6.0", + "electron-packager": "^8.2.0", + "event-stream": "^3.3.4", + "exports-loader": "^0.6.3", + "file-loader": "^0.9.0", + "font-awesome": "^4.7.0", + "github": "^7.0.0", + "gulp": "^3.9.1", + "gulp-rename": "^1.2.2", + "gulp-typescript": "^3.1.2", + "gulp-useref": "^3.1.2", + "gulp-util": "^3.0.7", + "gulp-webpack": "^1.5.0", + "gulp-zip": "^3.2.0", + "iconv-lite": "^0.4.13", + "imports-loader": "^0.6.5", + "jquery": "^3.1.1", + "json-loader": "^0.5.4", + "less": "^2.7.1", + "less-loader": "^2.2.3", + "material-design-icons": "^3.0.1", + "material-design-lite": "^1.2.1", + "open": "0.0.5", + "postcss-import": "^8.2.0", + "postcss-loader": "^1.1.1", + "request": "^2.78.0", + "request-promise": "^4.1.1", + "resolve-url-loader": "^1.6.0", + "run-sequence": "^1.2.2", + "script-loader": "^0.7.0", + "socket.io-client": "^1.5.1", + "style-loader": "^0.13.1", + "ts-loader": "^1.0.0", + "typescript": "^2.0.8", + "typings": "^1.5.0", + "url-loader": "^0.5.7", + "vue": "^2.0.5", + "vue-typed": "^2.0.1", + "webpack": "^1.13.3", + "webpack-dashboard": "^0.2.0", + "webpack-dev-server": "^1.16.2", + "webpack-merge": "^0.15.0" + }, + "dependencies": { + "express": "^4.14.0", + "socket.io": "^1.5.1" + } +} diff --git a/src/assets/audio/notification.mp3 b/src/assets/audio/notification.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..76f5b0bbed923aa1887652b6c2224d4475593b83 GIT binary patch literal 10378 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 LXW#gr-~GP;j<1fI literal 0 HcmV?d00001 diff --git a/src/renderer/html/index.html b/src/renderer/html/index.html index 648cd2b..5c1b1d8 100644 --- a/src/renderer/html/index.html +++ b/src/renderer/html/index.html @@ -89,6 +89,13 @@ + + + +
diff --git a/src/renderer/ts/Application.ts b/src/renderer/ts/Application.ts index 5129228..b347cc9 100644 --- a/src/renderer/ts/Application.ts +++ b/src/renderer/ts/Application.ts @@ -15,6 +15,7 @@ const ApplicatonName = require("../../../package.json").name const VERSION = require("../../../package.json").version import * as $ from "jquery" const SETTINGS = "settings"; + @Component({}) export default class Application extends Vue { pManager: ProvideManager; @@ -93,20 +94,24 @@ export default class Application extends Vue { clearTimeout(this.provideTimerID); if (!this.processing) return; this.provideTimerLimitCountDown = this.provideTimeLimit; - if (this.thread.bookmark != this.thread.allNum()) { - let target = this.thread.messages[this.thread.bookmark]; - let tmpLetter = LETTER.split("$1"); - let letter = tmpLetter.length > 1 ? - tmpLetter[0] + target.num + tmpLetter[1] - : target.num.toString(); - this.pManager.provide(letter + ":", target.text, this.pManager.reading, this.startProvide, this.provideTimeLimit); - this.thread.next(); - if (this.autoScroll) - this.scrollTo(this.thread.bookmark); - } else { - this.haltProvide(); + let provide = () => { + if (this.thread.bookmark != this.thread.allNum()) { + let target = this.thread.messages[this.thread.bookmark]; + let tmpLetter = LETTER.split("$1"); + let letter = tmpLetter.length > 1 ? + tmpLetter[0] + target.num + tmpLetter[1] + : target.num.toString(); + this.pManager.provide(letter + ":", target.text, this.pManager.reading, this.startProvide, this.provideTimeLimit); + this.thread.next(); + if (this.autoScroll) + this.scrollTo(this.thread.bookmark); + } else { + this.haltProvide(); + } + this.setProvideTimer(); } - this.setProvideTimer(); + if (this.playingNotificationSound) this.notificationSound(provide); + else provide(); } stopProvide() { clearTimeout(this.provideTimerID); @@ -123,7 +128,7 @@ export default class Application extends Vue { } else { this.provideTimerID = window.setTimeout(() => { this.provideTimerLimitCountDown--; - this.setProvideTimer();; + this.setProvideTimer(); }, 1000); } } @@ -209,7 +214,7 @@ export default class Application extends Vue { } dummyTextTemp: string = ""; - + insertDummyText() { this.dummyText = this.dummyTextTemp; if (!this.processing) @@ -252,7 +257,7 @@ export default class Application extends Vue { this.pManager.provide(letter, body, this.pManager.reading, null, this.provideTimeLimit); } - autoScroll: boolean = false; cnangeAutoScroll() { + autoScroll: boolean = false; cnangeAutoScroll() { this.autoScroll = !this.autoScroll; } scrollTo(value: number, duration?: number) { @@ -302,6 +307,7 @@ export default class Application extends Vue { + this.pManager.vParam.rate + this.pManager.vParam.pitch + this.pManager.vParam.use + + this.playingNotificationSound + this.reload + this.provideTimeLimit + this.pManager.reading + this.path + this.pManager.voice; } @@ -320,6 +326,7 @@ export default class Application extends Vue { this.loadUrlSource(); this.setTitle(this.thread.title); }; + this.playingNotificationSound = Boolean(settings.playingNotificationSound); this.autoScroll = Boolean(settings.autoScroll); this.pManager.vParam.volume = Number(settings.volume); this.pManager.vParam.rate = Number(settings.rate); @@ -360,6 +367,7 @@ export default class Application extends Vue { reading: this.pManager.reading, path: this.path, voice: this.pManager.voice, + playingNotificationSound: this.playingNotificationSound, dummyText: this.dummyText })); }; @@ -396,6 +404,14 @@ export default class Application extends Vue { } } + playingNotificationSound: boolean = false; + notificationSound(callback: () => void) { + let defaultNotificationSound = "../../assets/audio/notification.mp3"; + let audio = new Audio(defaultNotificationSound); + audio.onended = callback; + audio.play(); + } + clearDataSource() { for (var a in localStorage) { if (a.startsWith("http")) diff --git a/typings.json b/typings.json index 035c127..e9961f9 100644 --- a/typings.json +++ b/typings.json @@ -3,5 +3,6 @@ "dependencies": { "vue": "npm:vue/types/index.d.ts" }, - "globalDependencies": {} + "globalDependencies": {}, + "globalDevDependencies": {} }