allow entering a direct stream url to add music to huegasm

This commit is contained in:
Egor 2017-12-20 00:40:58 -08:00
parent 2b386df205
commit e838811ade
6 changed files with 125 additions and 53 deletions

View file

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

View file

@ -0,0 +1,16 @@
{{#if isShowingModal}}
{{#paper-dialog fullscreen=fullscreen onClose=(action "close") origin=dialogOrigin clickOutsideToClose=true}}
{{#paper-dialog-content}}
<p>Enter a direct audio stream URL.</p>
<p>ex. http://uk6.internet-radio.com:8213/;stream</p>
{{paper-input label="URL" class="full-width" icon="search" value=url onChange=(action (mut url))}}
{{/paper-dialog-content}}
{{#paper-dialog-actions class="layout-row"}}
<span class="flex"></span>
{{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}}

View file

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

View file

@ -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) {

View file

@ -24,7 +24,9 @@
{{action "volumeMutedChanged"}}>{{paper-icon icon=volumeIcon class=volumeMutedClass}}</span><!--
-->{{range-slider start=volume min=0 max=100 connect=filledConnect on-change=(action "volumeChanged") id="volume-bar" class="hidden-xs"}}
<div id="player-time-controls">{{timeElapsedTxt}} / {{timeTotalTxt}}</div>
<div id="player-time-controls">
{{timeElapsedTxt}} {{#unless (eq timeTotalTxt null)}}/ {{timeTotalTxt}}{{/unless}}
</div>
{{#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}}
@ -211,3 +216,4 @@
</div>
{{music-tab/add-soundcloud-sound-modal action="handleNewSoundCloudURL" isShowingModal=isShowingAddSoundCloudModal}}
{{music-tab/add-url-sound-modal action="handleNewURL" isShowingModal=isShowingAddUrlModal}}

View file

@ -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"