From e838811ade64a23c7cca8c3d4a283d6a4ae1ae9d Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 20 Dec 2017 00:40:58 -0800 Subject: [PATCH] allow entering a direct stream url to add music to huegasm --- .../add-url-sound-modal/component.js | 37 +++++++++ .../add-url-sound-modal/template.hbs | 16 ++++ .../pods/components/music-tab/component.js | 19 ++++- .../components/music-tab/mixins/helpers.js | 14 ++-- .../pods/components/music-tab/template.hbs | 16 ++-- web/yarn.lock | 76 +++++++++---------- 6 files changed, 125 insertions(+), 53 deletions(-) create mode 100644 web/app/pods/components/music-tab/add-url-sound-modal/component.js create mode 100644 web/app/pods/components/music-tab/add-url-sound-modal/template.hbs diff --git a/web/app/pods/components/music-tab/add-url-sound-modal/component.js b/web/app/pods/components/music-tab/add-url-sound-modal/component.js new file mode 100644 index 0000000..5304ec4 --- /dev/null +++ b/web/app/pods/components/music-tab/add-url-sound-modal/component.js @@ -0,0 +1,37 @@ +import Ember from 'ember'; + +const { Component, observer, computed, isEmpty, isNone, run: { later }, $ } = Ember; + +export default Component.extend({ + url: null, + + onIsShowingModalChange: observer('isShowingModal', function() { + if (this.get('isShowingModal')) { + this.set('url', null); + later(function() { + $('md-input-container input').focus(); + }, 500); + } + }), + + saveDisabled: computed('url', function() { + return isNone(this.get('url')) || isEmpty(this.get('url').trim()); + }), + + didInsertElement: function() { + $(document).keypress(event => { + if (!this.get('saveDisabled') && event.which === 13) { + this.send('add'); + } + }); + }, + + actions: { + close() { + this.sendAction(); + }, + add() { + this.sendAction('action', this.get('url')); + } + } +}); diff --git a/web/app/pods/components/music-tab/add-url-sound-modal/template.hbs b/web/app/pods/components/music-tab/add-url-sound-modal/template.hbs new file mode 100644 index 0000000..882dce2 --- /dev/null +++ b/web/app/pods/components/music-tab/add-url-sound-modal/template.hbs @@ -0,0 +1,16 @@ +{{#if isShowingModal}} + {{#paper-dialog fullscreen=fullscreen onClose=(action "close") origin=dialogOrigin clickOutsideToClose=true}} + {{#paper-dialog-content}} +

Enter a direct audio stream URL.

+

ex. http://uk6.internet-radio.com:8213/;stream

+ + {{paper-input label="URL" class="full-width" icon="search" value=url onChange=(action (mut url))}} + {{/paper-dialog-content}} + + {{#paper-dialog-actions class="layout-row"}} + + {{paper-button onClick=(action "close") label="Close"}} + {{paper-button class="pull-right" onClick=(action "add") disabled=saveDisabled primary=true label="Add Music"}} + {{/paper-dialog-actions}} + {{/paper-dialog}} +{{/if}} \ No newline at end of file diff --git a/web/app/pods/components/music-tab/component.js b/web/app/pods/components/music-tab/component.js index 3822519..29da761 100644 --- a/web/app/pods/components/music-tab/component.js +++ b/web/app/pods/components/music-tab/component.js @@ -490,6 +490,9 @@ export default Component.extend(helperMixin, visualizerMixin, { toggleIsShowingAddSoundCloudModal() { this.toggleProperty('isShowingAddSoundCloudModal'); }, + toggleIsShowingAddUrlModal() { + this.toggleProperty('isShowingAddUrlModal'); + }, slideTogglePlayerBottom() { let elem = this.$('#player-bottom'); @@ -755,9 +758,21 @@ export default Component.extend(helperMixin, visualizerMixin, { } } }, - addLocalAudio: function() { + addLocalAudio() { $('#file-input').click(); }, + handleNewURL(url) { + if (url) { + this.get('playQueue').pushObject({ + fileName: url, + url, + title: url, + local: true + }); + } + + this.set('isShowingAddUrlModal', false); + }, shuffleChanged(value) { this.changePlayerControl('shuffle', isNone(value) ? !this.get('shuffle') : value); }, @@ -816,7 +831,7 @@ export default Component.extend(helperMixin, visualizerMixin, { url: URL.createObjectURL(this), artist: tags.artist, title: tags.title, - picture: picture, + picture, local: true }); diff --git a/web/app/pods/components/music-tab/mixins/helpers.js b/web/app/pods/components/music-tab/mixins/helpers.js index a82c143..3a3932e 100644 --- a/web/app/pods/components/music-tab/mixins/helpers.js +++ b/web/app/pods/components/music-tab/mixins/helpers.js @@ -113,6 +113,7 @@ export default Mixin.create({ draggingOverPlayListArea: false, dragLeaveTimeoutHandle: null, isShowingAddSoundCloudModal: false, + isShowingUrlModal: false, flashingTransitions: false, @@ -296,7 +297,8 @@ export default Mixin.create({ }), timeTotalTxt: computed('timeTotal', function() { - return this.formatTime(this.get('timeTotal')); + let timeTotal = this.get('timeTotal'); + return this.formatTime(timeTotal === Infinity ? null : timeTotal); }), onPlayQueueChange: observer('playQueue.length', function() { @@ -330,9 +332,7 @@ export default Mixin.create({ // can't really save local music if (option === 'playQueue') { - value = value.filter(song => { - return !song.url.startsWith('blob:'); - }); + value = value.filter(song => !song.url.startsWith('blob:')); } else if (option === 'blackoutMode') { let options = { on: true }; @@ -458,7 +458,11 @@ export default Mixin.create({ }, formatTime(time) { - return this.pad(Math.floor(time / 60), 2) + ':' + this.pad(time % 60, 2); + if (time !== null) { + return this.pad(Math.floor(time / 60), 2) + ':' + this.pad(time % 60, 2); + } + + return time; }, pad(num, size) { diff --git a/web/app/pods/components/music-tab/template.hbs b/web/app/pods/components/music-tab/template.hbs index fad5413..d0cfe12 100644 --- a/web/app/pods/components/music-tab/template.hbs +++ b/web/app/pods/components/music-tab/template.hbs @@ -24,7 +24,9 @@ {{action "volumeMutedChanged"}}>{{paper-icon icon=volumeIcon class=volumeMutedClass}}{{range-slider start=volume min=0 max=100 connect=filledConnect on-change=(action "volumeChanged") id="volume-bar" class="hidden-xs"}} -
{{timeElapsedTxt}} / {{timeTotalTxt}}
+
+ {{timeElapsedTxt}} {{#unless (eq timeTotalTxt null)}}/ {{timeTotalTxt}}{{/unless}} +
{{#paper-menu as |menu|}} {{#menu.trigger}} @@ -65,12 +67,15 @@ {{/paper-button}} {{/menu.trigger}} {{#menu.content width=3 as |content|}} - {{#content.menu-item onClick="addLocalAudio" }} - {{paper-icon "attachment" class=shuffleClass}} Local File - {{/content.menu-item}} {{#content.menu-item onClick="toggleIsShowingAddSoundCloudModal" }} {{paper-icon "cloud" class=shuffleClass}} SoundCloud {{/content.menu-item}} + {{#content.menu-item onClick="addLocalAudio" }} + {{paper-icon "folder" class=shuffleClass}} Local File + {{/content.menu-item}} + {{#content.menu-item onClick="toggleIsShowingAddUrlModal" }} + {{paper-icon "link" class=shuffleClass}} Stream URL + {{/content.menu-item}} {{/menu.content}} {{/paper-menu}} @@ -210,4 +215,5 @@ -{{music-tab/add-soundcloud-sound-modal action="handleNewSoundCloudURL" isShowingModal=isShowingAddSoundCloudModal}} \ No newline at end of file +{{music-tab/add-soundcloud-sound-modal action="handleNewSoundCloudURL" isShowingModal=isShowingAddSoundCloudModal}} +{{music-tab/add-url-sound-modal action="handleNewURL" isShowingModal=isShowingAddUrlModal}} \ No newline at end of file diff --git a/web/yarn.lock b/web/yarn.lock index bfd00ff..4472d54 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2,20 +2,20 @@ # yarn lockfile v1 -"@ember/test-helpers@^0.7.1": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-0.7.3.tgz#49bdaeda12e1016d064f5c8857e0b31cd109e031" +"@ember/test-helpers@^0.7.9": + version "0.7.9" + resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-0.7.9.tgz#97d06e077a70028ca8e7a11ede7e8725e1a53167" dependencies: broccoli-funnel "^2.0.1" - ember-cli-babel "^6.8.1" + ember-cli-babel "^6.10.0" "@glimmer/di@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.2.0.tgz#73bfd4a6ee4148a80bf092e8a5d29bcac9d4ce7e" "@glimmer/resolver@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@glimmer/resolver/-/resolver-0.4.1.tgz#cd9644572c556e7e799de1cf8eff2b999cf5b878" + version "0.4.2" + resolved "https://registry.yarnpkg.com/@glimmer/resolver/-/resolver-0.4.2.tgz#60c9b492e90bc3956ac82b3134649bd337e1651c" dependencies: "@glimmer/di" "^0.2.0" @@ -71,8 +71,8 @@ ajv@^4.9.1: json-stable-stringify "^1.0.1" ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -353,11 +353,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" autoprefixer@^7.0.0: - version "7.2.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.2.tgz#082293b964be00602efacc59aa4aa7df5158bb6e" + version "7.2.3" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.3.tgz#c2841e38b7940c2d0a9bbffd72c75f33637854f8" dependencies: browserslist "^2.10.0" - caniuse-lite "^1.0.30000780" + caniuse-lite "^1.0.30000783" normalize-range "^0.1.2" num2fraction "^1.2.2" postcss "^6.0.14" @@ -598,9 +598,9 @@ babel-plugin-debug-macros@^0.1.10, babel-plugin-debug-macros@^0.1.11: dependencies: semver "^5.3.0" -babel-plugin-ember-modules-api-polyfill@^2.0.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.2.1.tgz#e63f90cc3c71cc6b3b69fb51b4f60312d6cf734c" +babel-plugin-ember-modules-api-polyfill@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.3.0.tgz#0c01f359658cfb9c797f705af6b09f6220205ae0" dependencies: ember-rfc176-data "^0.3.0" @@ -1585,9 +1585,9 @@ can-symlink@^1.0.0: dependencies: tmp "0.0.28" -caniuse-lite@^1.0.30000780: - version "1.0.30000782" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000782.tgz#5b82b8c385f25348745c471ca51320afb1b7f254" +caniuse-lite@^1.0.30000780, caniuse-lite@^1.0.30000783: + version "1.0.30000783" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000783.tgz#9b5499fb1b503d2345d12aa6b8612852f4276ffd" capture-exit@^1.1.0: version "1.2.0" @@ -2229,8 +2229,8 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" electron-to-chromium@^1.3.28: - version "1.3.28" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz#8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee" + version "1.3.29" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.29.tgz#7a58236b95468c3e7660091348522d65d7736b36" ember-basic-dropdown@^0.33.1: version "0.33.10" @@ -2268,12 +2268,12 @@ ember-cli-babel@^5.1.5, ember-cli-babel@^5.1.6, ember-cli-babel@^5.1.7, ember-cl resolve "^1.1.2" ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.10.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.10.0.tgz#81424acd1d97fb13658168121eeb2007d6edee84" + version "6.11.0" + resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.11.0.tgz#79cb184bac3c05bfe181ddc306bac100ab1f9493" dependencies: amd-name-resolver "0.0.7" babel-plugin-debug-macros "^0.1.11" - babel-plugin-ember-modules-api-polyfill "^2.0.1" + babel-plugin-ember-modules-api-polyfill "^2.3.0" babel-plugin-transform-es2015-modules-amd "^6.24.0" babel-polyfill "^6.16.0" babel-preset-env "^1.5.1" @@ -2474,11 +2474,11 @@ ember-cli-preprocess-registry@^3.1.0: silent-error "^1.0.0" ember-cli-qunit@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ember-cli-qunit/-/ember-cli-qunit-4.1.1.tgz#307a157e9f36a0d32621ae247effb891ff951fc7" + version "4.2.1" + resolved "https://registry.yarnpkg.com/ember-cli-qunit/-/ember-cli-qunit-4.2.1.tgz#89580e6eb157ee98b9eefbd48fba9bb75ea64544" dependencies: ember-cli-babel "^6.8.1" - ember-qunit "^3.1.0" + ember-qunit "^3.2.2" ember-cli-release@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -2792,11 +2792,11 @@ ember-power-select@^1.8.5: ember-text-measurer "^0.4.0" ember-truth-helpers "^2.0.0" -ember-qunit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-3.1.0.tgz#4995a6207ab66b5d0cf807d0459d48f55f9eee5f" +ember-qunit@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-3.2.2.tgz#96c8818ecfa3894580a3dc805f7e7f1e82e07c4a" dependencies: - "@ember/test-helpers" "^0.7.1" + "@ember/test-helpers" "^0.7.9" broccoli-funnel "^2.0.1" broccoli-merge-trees "^2.0.0" common-tags "^1.4.0" @@ -4154,8 +4154,8 @@ is-integer@^1.0.4: is-finite "^1.0.0" is-my-json-valid@^2.12.4: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" + version "2.17.1" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" @@ -4211,10 +4211,8 @@ is-property@^1.0.0: resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" @@ -5201,8 +5199,8 @@ moment-timezone@^0.3.0: moment ">= 2.6.0" "moment@>= 2.6.0": - version "2.19.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.4.tgz#17e5e2c6ead8819c8ecfad83a0acccb312e94682" + version "2.20.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" morgan@^1.8.1: version "1.9.0" @@ -7133,10 +7131,6 @@ try-resolve@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912" -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - tryor@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b"