Merge branch 'localPlay' of Karl/SpotifyDisk-node into master
This commit is contained in:
commit
a0443cf292
37
bin/local.js
Normal file
37
bin/local.js
Normal file
@ -0,0 +1,37 @@
|
||||
var player = require('play-sound')(opts = {})
|
||||
const { exec } = require("child_process");
|
||||
var fs = require('fs')
|
||||
|
||||
var userDetails = JSON.parse(fs.readFileSync('./data/userDetails.json', 'utf8'));
|
||||
|
||||
|
||||
async function playLocal(album) {
|
||||
const localPlayList = album.split(":")
|
||||
const audio = player.play(`${userDetails.musicPath}/${localPlayList[1]}-${localPlayList[2]}/${localPlayList[1]}-${localPlayList[2]}.m3u`, { mplayer: ['-playlist'] }, function (err) {
|
||||
if (err && !err.killed) throw err
|
||||
})
|
||||
}
|
||||
|
||||
// async function stopLocal() {
|
||||
// audio.kill()
|
||||
// }
|
||||
|
||||
async function stopLocal() {
|
||||
return new Promise(function (resolve, reject) {
|
||||
exec(`sudo killall mplayer`, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
resolve(false)
|
||||
return;
|
||||
} if (stderr) {
|
||||
resolve(false)
|
||||
return;
|
||||
}
|
||||
resolve(true)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
playLocal,
|
||||
stopLocal
|
||||
}
|
14
bin/radio.js
Normal file
14
bin/radio.js
Normal file
@ -0,0 +1,14 @@
|
||||
var player = require('play-sound')(opts = {})
|
||||
// const { exec } = require("child_process");
|
||||
|
||||
async function playRadio(album) {
|
||||
const localPlayList = album.split(":")
|
||||
const stream = localPlayList[1] + ':' + localPlayList[2]
|
||||
const audio = player.play(stream, { mplayer: ['-playlist'] }, function (err) {
|
||||
if (err && !err.killed) throw err
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
playRadio
|
||||
}
|
@ -26,6 +26,11 @@ var questions = [{
|
||||
type: 'input',
|
||||
name: 'path',
|
||||
message: 'Where is your floppy drive mounted?'
|
||||
},
|
||||
{
|
||||
type: 'input',
|
||||
name: 'musicPath',
|
||||
message: 'What path is your music store?'
|
||||
}
|
||||
];
|
||||
|
||||
|
85
package-lock.json
generated
85
package-lock.json
generated
@ -338,6 +338,19 @@
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"braces": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||
"requires": {
|
||||
"fill-range": "^7.0.1"
|
||||
}
|
||||
},
|
||||
"byline": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
|
||||
"integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE="
|
||||
},
|
||||
"bytes": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
|
||||
@ -892,6 +905,11 @@
|
||||
"unpipe": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"find-exec": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/find-exec/-/find-exec-1.0.1.tgz",
|
||||
"integrity": "sha512-4o6QkGkpg3xK5s/47rdK9LDZRsE4JR1mrXnaAOXBngG6UKeIDJXfwtNCAkljgyy6VRh75D3FFaB0tii9vDEtIA=="
|
||||
},
|
||||
"forever-agent": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
||||
@ -941,6 +959,16 @@
|
||||
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
|
||||
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
|
||||
},
|
||||
"fs-extra": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
|
||||
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
}
|
||||
},
|
||||
"fs-minipass": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
|
||||
@ -1000,6 +1028,32 @@
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"glob-parent": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
|
||||
"integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
|
||||
"requires": {
|
||||
"is-glob": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"globby": {
|
||||
"version": "11.0.0",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz",
|
||||
"integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==",
|
||||
"requires": {
|
||||
"array-union": "^2.1.0",
|
||||
"dir-glob": "^3.0.1",
|
||||
"fast-glob": "^3.1.1",
|
||||
"ignore": "^5.1.4",
|
||||
"merge2": "^1.3.0",
|
||||
"slash": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"graceful-readlink": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
|
||||
@ -1066,6 +1120,11 @@
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
}
|
||||
},
|
||||
"ignore": {
|
||||
"version": "5.1.4",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
|
||||
"integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A=="
|
||||
},
|
||||
"ignore-walk": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
|
||||
@ -1622,6 +1681,19 @@
|
||||
"mimic-fn": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"optionator": {
|
||||
"version": "0.8.3",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
|
||||
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
|
||||
"requires": {
|
||||
"deep-is": "~0.1.3",
|
||||
"fast-levenshtein": "~2.0.6",
|
||||
"levn": "~0.3.0",
|
||||
"prelude-ls": "~1.1.2",
|
||||
"type-check": "~0.3.2",
|
||||
"word-wrap": "~1.2.3"
|
||||
}
|
||||
},
|
||||
"os-homedir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
|
||||
@ -1641,6 +1713,11 @@
|
||||
"os-tmpdir": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"p-is-promise": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz",
|
||||
"integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ=="
|
||||
},
|
||||
"parseurl": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||
@ -1735,6 +1812,14 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"play-sound": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/play-sound/-/play-sound-1.1.3.tgz",
|
||||
"integrity": "sha512-lqEzgtNAdfg2VUXItOtu5bTyWcqeFmnJmgvc8iHEeEOBEJdurqiGYfmCOzIpSBcwrs7XeSpvHv+Rw9dzRPc4aw==",
|
||||
"requires": {
|
||||
"find-exec": "1.0.1"
|
||||
}
|
||||
},
|
||||
"prebuild-install": {
|
||||
"version": "5.3.3",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz",
|
||||
|
@ -22,6 +22,7 @@
|
||||
"path": "^0.12.7",
|
||||
"path-exists": "^4.0.0",
|
||||
"pkg": "^4.4.4",
|
||||
"play-sound": "^1.1.3",
|
||||
"pug": "2.0.0-beta11",
|
||||
"request": "^2.88.2",
|
||||
"request-promise-native": "^1.0.8",
|
||||
|
127
player.js
127
player.js
@ -2,6 +2,8 @@ var SpotifyWebApi = require('spotify-web-api-node');
|
||||
var _ = require('lodash')
|
||||
var fs = require('fs')
|
||||
var rpn = require('request-promise-native')
|
||||
var localPlayFunctions = require('./bin/local')
|
||||
var radioPlayFunctions = require('./bin/radio')
|
||||
|
||||
var myArgs = process.argv.slice(2);
|
||||
|
||||
@ -99,41 +101,51 @@ async function playFile() {
|
||||
const album = fs.readFileSync(`${userDetails.path}/diskplayer.contents`, 'utf8');
|
||||
await writePlayerData(album)
|
||||
|
||||
let response;
|
||||
let body;
|
||||
try {
|
||||
if (lastPlayer.includes(album)) {
|
||||
body = {}
|
||||
} else {
|
||||
body = {
|
||||
"context_uri": album,
|
||||
"offset": {
|
||||
"position": 0
|
||||
},
|
||||
"position_ms": 0
|
||||
if (album.includes('local:')) {
|
||||
console.log('local')
|
||||
await localPlayFunctions.playLocal(album)
|
||||
} else if (album.includes('radio:')) {
|
||||
console.log('radio')
|
||||
await radioPlayFunctions.playRadio(album)
|
||||
} else {
|
||||
console.log('spotify')
|
||||
let response;
|
||||
let body;
|
||||
try {
|
||||
if (lastPlayer.includes(album)) {
|
||||
body = {}
|
||||
} else {
|
||||
body = {
|
||||
"context_uri": album,
|
||||
"offset": {
|
||||
"position": 0
|
||||
},
|
||||
"position_ms": 0
|
||||
}
|
||||
}
|
||||
response = await rpn({
|
||||
method: 'PUT',
|
||||
url: ' https://api.spotify.com/v1/me/player/play',
|
||||
qs: {
|
||||
device_id: DiskPlayerId
|
||||
},
|
||||
simple: false,
|
||||
body,
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${spotify._credentials.accessToken}`
|
||||
},
|
||||
});
|
||||
} catch (e) {
|
||||
throw Error(`Request error: ${e}`);
|
||||
}
|
||||
response = await rpn({
|
||||
method: 'PUT',
|
||||
url: ' https://api.spotify.com/v1/me/player/play',
|
||||
qs: {
|
||||
device_id: DiskPlayerId
|
||||
},
|
||||
simple: false,
|
||||
body,
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${spotify._credentials.accessToken}`
|
||||
},
|
||||
});
|
||||
} catch (e) {
|
||||
throw Error(`Request error: ${e}`);
|
||||
this.response = response;
|
||||
this.response.body = response.body
|
||||
}
|
||||
this.response = response;
|
||||
this.response.body = response.body
|
||||
|
||||
}
|
||||
|
||||
async function playURL() {
|
||||
@ -221,30 +233,37 @@ async function playPlaylist() {
|
||||
async function pausePlayer() {
|
||||
await initialize()
|
||||
await refreshToken()
|
||||
const DiskPlayerId = await getDevice()
|
||||
try {
|
||||
const DiskPlayerId = await getDevice()
|
||||
try {
|
||||
response = await rpn({
|
||||
method: 'PUT',
|
||||
url: ' https://api.spotify.com/v1/me/player/pause',
|
||||
qs: {
|
||||
device_id: DiskPlayerId
|
||||
},
|
||||
simple: false,
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${spotify._credentials.accessToken}`
|
||||
},
|
||||
});
|
||||
} catch (e) {
|
||||
throw Error(`Request error: ${e}`);
|
||||
}
|
||||
this.response = response;
|
||||
this.response.body = response.body
|
||||
} catch (error) {
|
||||
console.log('SpotifyNotRunning')
|
||||
localPlayFunctions.stopLocal()
|
||||
|
||||
}
|
||||
|
||||
let response;
|
||||
try {
|
||||
response = await rpn({
|
||||
method: 'PUT',
|
||||
url: ' https://api.spotify.com/v1/me/player/pause',
|
||||
qs: {
|
||||
device_id: DiskPlayerId
|
||||
},
|
||||
simple: false,
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${spotify._credentials.accessToken}`
|
||||
},
|
||||
});
|
||||
} catch (e) {
|
||||
throw Error(`Request error: ${e}`);
|
||||
}
|
||||
this.response = response;
|
||||
this.response.body = response.body
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -25,6 +25,10 @@ async function buildPage() {
|
||||
sid = `spotify:album:${id}`
|
||||
} else if (i.includes("/playlist/")) {
|
||||
sid = `spotify:playlist:${id}`
|
||||
} else if (i.includes(".m3u")) {
|
||||
sid = `radio:${id}`
|
||||
} else if (i.includes("local:")) {
|
||||
sid = `${id}`
|
||||
} else {
|
||||
console.log('failed')
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
var net = require('net');
|
||||
const { exec } = require("child_process");
|
||||
var path = require('path');
|
||||
// var localPlayerFunctioins = require('./bin/local')
|
||||
|
||||
async function playStuff() {
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user