groovebasin/lib/plugins/upload.js
2013-09-18 18:34:05 -04:00

97 lines
2.9 KiB
JavaScript

var mkdirp = require('mkdirp');
var fs = require('fs');
var path = require('path');
var request = require('superagent');
var url = require('url');
var temp = require('temp');
var mv = require('mv');
var futils = require('../futils');
var getSuggestedPath = futils.getSuggestedPath;
var safePath = futils.safePath;
var express = require('express');
var multipart = express.multipart({
keepExtensions: true
});
module.exports = Upload;
function Upload(gb) {
this.is_enabled = false;
console.error("TODO: fix upload plugin (upload disabled)");
return;
bus.on('app', bind$(this, 'setUpRoutes'));
bus.on('save_state', bind$(this, 'saveState'));
bus.on('restore_state', bind$(this, 'restoreState'));
bus.on('socket_connect', bind$(this, 'onSocketConnection'));
}
Upload.prototype.restoreState = function(state){
var ref$;
this.want_to_queue = (ref$ = state.want_to_queue) != null ? ref$ : [];
this.is_enabled = true;
// TODO set this.music_directory based on config
// this.music_directory = ??
if (!this.music_directory) {
this.is_enabled = false;
console.warn("No music directory set. Upload disabled.");
return;
}
};
Upload.prototype.saveState = function(state){
state.want_to_queue = this.want_to_queue;
state.status.upload_enabled = this.is_enabled;
};
Upload.prototype.onSocketConnection = function(socket){
var this$ = this;
socket.on('ImportTrackUrl', function(url_string){
var parsed_url, remote_filename, temp_file, cleanUp, cleanAndLogIfErr, req, ws;
parsed_url = url.parse(url_string);
remote_filename = path.basename(parsed_url.pathname);
temp_file = temp.path();
cleanUp = function(){
fs.unlink(temp_file);
};
cleanAndLogIfErr = function(err){
if (err) {
console.error("Unable to import by URL.", err.stack, "URL:", url_string);
}
cleanUp();
};
req = request.get(url_string);
ws = fs.createWriteStream(temp_file);
req.pipe(ws);
ws.on('close', function(){
this$.importFile(temp_file, remote_filename, cleanAndLogIfErr);
});
ws.on('error', cleanAndLogIfErr);
req.on('error', cleanAndLogIfErr);
});
};
Upload.prototype.importFile = function(temp_file, remote_filename, cb){
var this$ = this;
if (cb == null) cb = function(){};
// TODO implement this
};
Upload.prototype.setUpRoutes = function(app){
var this$ = this;
app.post('/upload', [this.checkEnabledMiddleware, multipart], function(request, response){
var name, ref$, file;
function logIfErr(err){
if (err) {
console.error("Unable to import by uploading. Error: " + err);
}
}
for (name in (ref$ = request.files)) {
file = ref$[name];
this$.importFile(file.path, file.name, logIfErr);
}
response.statusCode = 200;
response.setHeader('content-type', 'application/json');
response.end(JSON.stringify({
success: true
}));
});
};
function bind$(obj, key){
return function(){ return obj[key].apply(obj, arguments) };
}