diff --git a/db/api.js b/db/api.js old mode 100755 new mode 100644 index e82731c..f4d7b48 --- a/db/api.js +++ b/db/api.js @@ -14,12 +14,31 @@ function create(object, callback) { }); }; -function update(object, status, callback) { - object.update({}, { $set : { 'type' : status }}, function (err, request) { +function update(Request, id, status, callback) { + console.log("== Update requisicao"); + Request.update({'id': id}, {$set : { 'status' : status }}, function (err, result) { + if (err) callback(null); + callback(result); + }); +}; + +function findById(Request, requestId, callback) { + Request.find({ id : requestId }, { _id: 0, __v: 0 }, function(err, result) { + if (err) callback(null); + + callback(result); + }); +}; + +function findByIds(Request, requests, callback) { + console.log(requests); + Request.find({ + 'id': { $in: requests } + }, { _id: 0, __v: 0 }, function(err, request){ if (err) callback(null); callback(request); }); -} +}; function remove(Request, hash, callback) { Request.remove({ id: hash }, function(err, request) { @@ -33,4 +52,5 @@ module.exports.read_all = read_all; module.exports.create = create; module.exports.remove = remove; module.exports.update = update; - +module.exports.findById = findById; +module.exports.findByIds = findByIds; diff --git a/db/config.js b/db/config.js old mode 100755 new mode 100644 index 4982d44..4982d44 --- a/db/config.js +++ b/db/config.js diff --git a/db/schemas/request.js b/db/schemas/request.js old mode 100755 new mode 100644 index af73e92..755a5c4 --- a/db/schemas/request.js +++ b/db/schemas/request.js @@ -3,6 +3,14 @@ function init_schema(mongoose) { id: String, status: String, type: String, + link: String, + institution: String, + author: String, + user: String, + subtitle: String, + manualrevision: String, + reasonofrevision: String, + dictionary: String, created_at: { type: Date }, updated_at: { type: Date } }); @@ -12,4 +20,4 @@ function init_schema(mongoose) { return Request; }; -module.exports.init = init_schema; \ No newline at end of file +module.exports.init = init_schema; diff --git a/db/schemas/request.js.save b/db/schemas/request.js.save new file mode 100644 index 0000000..f254c1a --- /dev/null +++ b/db/schemas/request.js.save @@ -0,0 +1,23 @@ +function init_schema(mongoose) { + var requestSchema = new mongoose.Schema({ + id: String, + status: String, + type: String, + link: String, + institution: String, + author: String, + user: String, + subtitle: String, + manualrevision: String, + + dictionary: String, + created_at: { type: Date }, + updated_at: { type: Date } + }); + + var Request = mongoose.model('Request', requestSchema); + + return Request; +}; + +module.exports.init = init_schema; diff --git a/endpoints/texto.js b/endpoints/texto.js old mode 100755 new mode 100644 index 5d31175..5d31175 --- a/endpoints/texto.js +++ b/endpoints/texto.js diff --git a/endpoints/videornp.js b/endpoints/videornp.js new file mode 100644 index 0000000..c87721d --- /dev/null +++ b/endpoints/videornp.js @@ -0,0 +1,173 @@ +var parameters = require('../helpers/parameters'); +var properties = require('../helpers/properties'); +var files = require('../helpers/files'); +var core = require('../helpers/core'); +var db = require('../db/api'); + +var uuid = require('node-uuid'); +var mkdirp = require('mkdirp'); +var async = require('async'); + +function init(req, res, Request) { + res.set("Content-Type", "application/json"); + + /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ + if (((req.body.legenda_url === '') && (req.body.video_url === '')) || ((typeof req.body.legenda_url === 'undefined') && (typeof req.body.video_url === 'undefined'))) { + res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); + return; + } + + /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ + if ((typeof req.body.revisaomanual === 'undefined') || ((req.body.revisaomanual.toUpperCase() !== "SIM") && (req.body.revisaomanual.toUpperCase() !== "NAO"))) { + res.send(500, parameters.errorMessage('O valor do parâmetro revisaomanual é inválido.')); + return; + } + + if ((typeof req.body.conteudista === 'undefined') || (req.body.conteudista === '')) { + res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); + return; + } + + if ((typeof req.body.instituicao === 'undefined') || (req.body.instituicao === '')) { + res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); + return; + } + + if ((typeof req.body.usuario === 'undefined') || (req.body.usuario === '')) { + res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); + return; + } + + process(req, res, Request); +}; + +function process(req, res, Request) { + var id = uuid.v4(); + var folder = properties.uploads_folder + id; + var locals = {}; + + var request_object = new Request({ + id: id, + type: req.body.servico, + status: 'Submitted', + link: 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.mp4', + user: req.body.usuario, + institution: req.body.instituicao, + author: req.body.conteudista, + manualrevision: req.body.revisaomanual, + reasonofrevision: req.body.motivodarevisao, + subtitle: 'http://150.165.204.30:5000/api/subtitle.srt', + dictionary: '1.0', + created_at: new Date(), + updated_at: new Date(), + }); + + db.create(request_object, function(result) { + if (result !== null) { + res.send(200, { 'id': result.id }); + } else { + res.send(500, { 'error': 'Erro na criação da requisição.'}); + } + }); + + async.series([ + // Cria a pasta apropriada + function(callback) { + console.log("== Criando pasta " + folder); + + mkdirp(folder, function(err) { + var error; + + if (err) { error = "Erro na criação da pasta com o id: " + id + "; " + err; } + + callback(error); + }); + }, + + // Baixa e move os arquivos para a pasta correta + function(callback) { + console.log("== Baixando os arquivos"); + + downloadAndMoveFiles(folder, req, locals, callback); + }, + + // Chama o core + function(callback) { + console.log("== Chamando o core"); + + // Faz a chamada ao core + try { + callCore(id, locals.video, locals.subtitle, req, res, Request, request_object); + callback(); + } catch (err) { + callback(err); + } + } + ], function(err) { + // Se tiver erro + if (err) { + res.send(500, parameters.errorMessage(err)); + + return; + } + }); +} + + +function downloadAndMoveFiles(folder, req, locals, callback) { + async.parallel([ + // Download video + function(callback) { + files.downloadAndMoveVideo(folder, req, locals, callback); + } + ], function(err) { + console.log("=== Video baixado"); + + // Callback chamado depois de todas as tarefas + // Se tiver erro, vai passar para cima + callback(err); + }); +} + + +function callCore(id, video, subtitle, req, res, Request, request_object) { + + /* Cria a linha de comando */ + /* slice(2) é para transformar ./path em path */ + var command_line = 'vlibras_user/vlibras-core/./vlibras 7 ' + video.path.slice(2) + ' ' + id + ' > /tmp/core_log 2>&1'; + + console.log("=== Core: " + command_line); + + console.log("ID: " + request_object.id); + core.call(id, command_line, req, res, Request, request_object); +}; + +function callCoreSubtitle(id, subtitle, req, res, Request, request_object) { + /* Move a legenda submetido para a pasta com o seu ID correspondente */ + fs.rename(req.files.legenda.path, __dirname + '/uploads/' + id + '/' + req.files.legenda.name, function(error) { + if (error) { console.log(error); } + }); + + /* Cria a linha de comando */ + var command_line = 'vlibras_user/vlibras-core/./vlibras 7 ' + ' uploads/' + id + '/' + + req.files.legenda.name + ' opaco ' + id; + + /* Executa a linha de comando */ + child = exec(command_line, function(err, stdout, stderr) { + // [stdout] = vlibras-core output + // console.log(stdout); + }); + + /* Listener que dispara quando a requisição ao core finaliza */ + child.on('close', function(code, signal){ + res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.flv' }); + }); + + /* Listener que dispara quando a requisição ao core da erro */ + child.on('error', function(code, signal){ + res.send(500, parameters.errorMessage('Erro na chamada ao core')); + }); + +}; + +module.exports.init = init; diff --git a/server.js b/server.js old mode 100755 new mode 100644 index 6ee357c..03d1875 --- a/server.js +++ b/server.js @@ -52,6 +52,10 @@ app.post('/api', function(req, res) { ep_video.init(req, res); break; + case 'videornp': + ep_video_rnp.init(req, res, Request); + break; + /* Tipo de Serviço: Só a Legenda */ case 'legenda': ep_legenda.init(req, res); @@ -73,7 +77,7 @@ app.post('/api', function(req, res) { } }); -app.get('/api/requests', function(req, res) { +app.get('/requests', function(req, res) { db.read_all(Request, function(result) { if (result !== null) { res.send(200, result); @@ -83,15 +87,39 @@ app.get('/api/requests', function(req, res) { }); }); -app.post('/glosa', function(req, res) { -// options.args = JSON.stringify(req.body); - PythonShell.run('vlibras_user/vlibras-translate/PortGlosa.py', req.body.texto, function (err, results) { - if (err) { console.log(err); res.send(400); return; } - // results is an array consisting of messages collected during execution - res.send(results); + +app.get('/api/requests/', function(req,res) { + db.findByIds(Request, req.param("id"), function(result) { + console.log(result); + if (result !== null) { + res.send(200, result); + } else { + res.send(500, { 'error': 'Erro na busca.'}); + } + }); +}); + + +app.get('/api/requests/:id', function(req, res) { + db.findById(Request, req.param.id, function(result) { + if (result !== null) { + res.send(200, result); + } else { + res.send(500, { 'error': 'Erro na busca.'}); + } }); }); +app.get('/glosa', function(req, res) { + res.header("Access-Control-Allow-Origin", "*"); + options.args = req.param("texto"); + console.log(options.args); + PythonShell.run('PortGlosa.py', options, function (err, results) { + if (err) { console.log(err); res.send(400); return;} + res.send(200,results[0]); + }); +}); + app.get('/limparfila', function(req, res) { // graceful shutdown diff --git a/vlibras-api b/vlibras-api deleted file mode 120000 index 9b190b6..0000000 --- a/vlibras-api +++ /dev/null @@ -1 +0,0 @@ -vlibras-api \ No newline at end of file diff --git a/vlibras-api b/vlibras-api new file mode 100644 index 0000000..9b190b6 --- /dev/null +++ b/vlibras-api @@ -0,0 +1 @@ +vlibras-api \ No newline at end of file -- libgit2 0.21.2