index.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. var express = require('express');
  2. var router = express.Router();
  3. var bodyParser = require('body-parser');
  4. var expressValidator = require('express-validator');
  5. router.use(bodyParser.urlencoded({extended: true}));
  6. router.use(bodyParser.json());
  7. router.use(expressValidator());
  8. var child_process = require('child_process');
  9. var Player = require('player');
  10. var player = new Player();
  11. /* GET home page. */
  12. router.get('/', function(req, res, next) {
  13. var playlist;
  14. if(player.list.length) {
  15. playlist = '<ul>';
  16. for(var i=0; i < player.list.length; i++) {
  17. playlist +=
  18. '<li>' +
  19. player.list[i].replace(/^\.\/downloads\//, '') .replace(/\.mp3$/, '') +
  20. '</li>';
  21. }
  22. playlist += '</ul>';
  23. } else {
  24. playlist = '<p>No songs in playlist.</p>';
  25. }
  26. res.render('index', { playlist: playlist });
  27. });
  28. router.get('/youtube', function(req, res, next) {
  29. res.render('youtube');
  30. });
  31. router.use(expressValidator({
  32. customValidators: {
  33. dlSuccess: function(video) {
  34. // Test if the requested video is available.
  35. var youtube_dl = child_process.spawnSync('/usr/bin/youtube-dl', ['-s', video]);
  36. console.log(youtube_dl.stderr.toString());
  37. if (youtube_dl.stderr.toString()) {
  38. return false;
  39. }
  40. return true;
  41. }
  42. }
  43. }
  44. ));
  45. router.post('/youtube', function(req, res) {
  46. var video = req.body.video;
  47. req.checkBody('video', 'URL is not valid.').dlSuccess();
  48. var errors = req.validationErrors();
  49. if(errors){
  50. res.render('youtube', {
  51. errors:errors
  52. });
  53. } else {
  54. var youtube_dl = child_process.spawn('/usr/bin/youtube-dl', ['-x', '--audio-format', 'mp3', '-o', 'downloads/%(title)s.%(ext)s', video]);
  55. youtube_dl.on('close', (code) => {
  56. console.log("Done getting " + video);
  57. var error;
  58. youtube_dl.stderr.on('data', (data) => {
  59. error = data;
  60. console.log(`Error getting video: ${data}`);
  61. // TODO give error to user when they return to /
  62. });
  63. if(!error) {
  64. var youtube_dl_get_title = child_process.spawnSync('/usr/bin/youtube-dl', ['--get-title', video]);
  65. player.add('./downloads/' + youtube_dl_get_title.stdout.toString().replace('\n', '') + ".mp3");
  66. }
  67. res.redirect('/');
  68. }
  69. });
  70. router.get('/file', function(req, res, next) {
  71. res.render('file');
  72. });
  73. module.exports = router;