Commit e91e1765057e16ec3f948bb291b019ba17d3ae4d

Authored by Fernando Brito
1 parent 37f3e79f
Exists in master and in 1 other branch devel

Refatoração video e video-legenda, async e log

* Adiciona async
* Log melhorado
* Refatoração grande em video e video-legenda
endpoints/video.js
1 var parameters = require('../helpers/parameters'); 1 var parameters = require('../helpers/parameters');
2 var properties = require('../helpers/properties'); 2 var properties = require('../helpers/properties');
3 -var requests = require('../helpers/requests'); 3 +var files = require('../helpers/files');
  4 +var core = require('../helpers/core');
4 5
5 -var exec = require('child_process').exec, child;  
6 -var querystring = require('querystring');  
7 var uuid = require('node-uuid'); 6 var uuid = require('node-uuid');
8 var mkdirp = require('mkdirp'); 7 var mkdirp = require('mkdirp');
9 -var http = require('http');  
10 -var url = require('url');  
11 -var fs = require('fs'); 8 +var async = require('async');
12 9
13 function init(req, res) { 10 function init(req, res) {
  11 + res.set("Content-Type", "application/json");
14 12
15 - var id = uuid.v4();  
16 -  
17 - /* Verifica se os paramêtros [posicao, tamanho, transparencia] possuem algum valor */ 13 + /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */
18 if ((req.body.posicao === '') || (req.body.tamanho === '') || (req.body.transparencia === '')) { 14 if ((req.body.posicao === '') || (req.body.tamanho === '') || (req.body.transparencia === '')) {
19 res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); 15 res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio'));
20 return; 16 return;
@@ -25,115 +21,85 @@ function init(req, res) { @@ -25,115 +21,85 @@ function init(req, res) {
25 res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); 21 res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos'));
26 return; 22 return;
27 } 23 }
  24 +
  25 + process(req, res);
  26 +};
28 27
29 - /* Checa se o arquivo de vídeo submetivo possui uma extensão válida */  
30 - if (req.files.video !== undefined) {  
31 - if (parameters.checkVideo(req.files.video.name) === false) {  
32 - res.send(500, parameters.errorMessage('Vídeo enviado com extensão inválida'));  
33 - return;  
34 - }  
35 -  
36 - var video = {  
37 - 'name': req.files.video.name,  
38 - 'path': req.files.video.path  
39 - }  
40 -  
41 - processVideo(id, video, req, res);  
42 -  
43 - } else if (req.body.video_url !== undefined) {  
44 - http.get(req.body.video_url, function(response) {  
45 -  
46 - // Salva o arquivo em disco  
47 - response.pipe(fs.createWriteStream(id));  
48 -  
49 - var video = {  
50 - 'name': req.body.video_url.substring(req.body.video_url.lastIndexOf('/') + 1),  
51 - 'path': id  
52 - }  
53 -  
54 - processVideo(id, video, req, res);  
55 -  
56 - }).on('error', function(e) {  
57 - error = 'Problema ao carregar video_url: ' + e.message;  
58 -  
59 - res.send(500, parameters.errorMessage(error));  
60 - }); 28 +function process(req, res) {
  29 + var id = uuid.v4();
  30 + var folder = properties.uploads_folder + id;
  31 + var locals = {};
  32 +
  33 + async.series([
  34 + // Cria a pasta apropriada
  35 + function(callback) {
  36 + console.log("== Criando pasta " + folder);
61 37
62 - } else {  
63 - res.send(500, parameters.errorMessage('Video deve ser enviado como parâmetro "video" ou como "video_url"'));  
64 - return;  
65 - }  
66 -}; 38 + mkdirp(folder, function(err) {
  39 + var error;
67 40
  41 + if (err) { error = "Erro na criação da pasta com o id: " + id + "; " + err; }
68 42
69 -function processVideo(id, video, req, res) {  
70 - /* Cria uma pasta cujo o nome é o ID atual */  
71 - mkdirp(properties.uploads_folder + id, function(error) {  
72 -  
73 - if (error) { console.log(error); res.send(500, parameters.errorMessage('Erro na criação da pasta com o ID: ' + id)); return; }  
74 -  
75 - /* Move o vídeo submetido para a pasta com o seu ID correspondente */  
76 - fs.rename(video.path, properties.uploads_folder + id + '/' + video.name, function(error) {  
77 - if (error) { console.log(error); res.send(500, parameters.errorMessage('Erro ao mover o vídeo submetido')); return; }  
78 - });  
79 -  
80 - /* Cria a linha de comando */  
81 - var command_line = 'vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' uploads/' + id + '/' +  
82 - video.name + ' 1 ' + parameters.getPosition(req.body.posicao) + ' ' + parameters.getSize(req.body.tamanho) + ' ' +  
83 - parameters.getTransparency(req.body.transparencia) + ' ' + id + ' > /tmp/core_log 2>&1';  
84 -  
85 - console.log(command_line);  
86 -  
87 - /* Executa a linha de comando */  
88 - child = exec(command_line, function(err, stdout, stderr) {  
89 - // [stdout] = vlibras-core output  
90 - // console.log('Err: ' + err);  
91 - // console.log('STDOUT: ' + stdout);  
92 - // console.log('STDERR: ' + stderr);  
93 - });  
94 -  
95 - if (req.body.callback === undefined) {  
96 - /* Listener que dispara quando a requisição ao core finaliza */  
97 - child.on('close', function(code, signal){  
98 - if (code !== 0) {  
99 - console.log('Erro código: ' + code); res.send(500, { 'error': 'Erro no Core', 'code': code }); return;  
100 - }  
101 -  
102 - res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.flv' }); 43 + callback(error);
103 }); 44 });
  45 + },
  46 +
  47 + // Baixa e move os arquivos para a pasta correta
  48 + function(callback) {
  49 + console.log("== Baixando os arquivos");
  50 +
  51 + downloadAndMoveFiles(folder, req, locals, callback);
  52 + },
  53 +
  54 + // Chama o core
  55 + function(callback) {
  56 + console.log("== Chamando o core");
  57 +
  58 + // Faz a chamada ao core
  59 + try {
  60 + callCore(id, locals.video, locals.subtitle, req, res);
  61 + callback();
  62 + } catch (err) {
  63 + callback(err);
  64 + }
  65 + }
  66 + ], function(err) {
  67 + // Se tiver erro
  68 + if (err) {
  69 + res.send(500, parameters.errorMessage(err));
104 70
105 - child.on('error', function(code, signal){  
106 - res.send(500, parameters.errorMessage('Erro na chamada ao core'));  
107 - });  
108 - } else { 71 + return;
  72 + }
  73 + });
  74 +}
109 75
110 - child.on('close', function(code, signal){  
111 - if (code !== 0) {  
112 - var path = url.parse(req.body.callback);  
113 - var data = querystring.stringify( { 'error': 'Erro no Core', 'code': code } );  
114 76
115 - requests.postRequest(path, data); 77 +function downloadAndMoveFiles(folder, req, locals, callback) {
  78 + async.parallel([
  79 + // Download video
  80 + function(callback) {
  81 + files.downloadAndMoveVideo(folder, req, locals, callback);
  82 + }
  83 + ], function(err) {
  84 + console.log("=== Video baixado");
116 85
117 - return;  
118 - } 86 + // Callback chamado depois de todas as tarefas
  87 + // Se tiver erro, vai passar para cima
  88 + callback(err);
  89 + });
  90 +}
119 91
120 - var path = url.parse(req.body.callback);  
121 - var data = querystring.stringify({ 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.flv' });  
122 92
123 - requests.postRequest(path, data);  
124 - }); 93 +function callCore(id, video, subtitle, req, res) {
125 94
126 - /* Listener que dispara quando a requisição ao core da erro */  
127 - child.on('error', function(code, signal){  
128 - var path = url.parse(req.body.callback);  
129 - var data = querystring.stringify( { 'error': 'Erro na chamada ao core', 'code': code, 'id': id } ); 95 + /* Cria a linha de comando */
  96 + var command_line = 'vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' ' +
  97 + video.path + ' 1 ' + parameters.getPosition(req.body.posicao) + ' ' + parameters.getSize(req.body.tamanho) + ' ' +
  98 + parameters.getTransparency(req.body.transparencia) + ' ' + id + ' > /tmp/core_log 2>&1';
130 99
131 - requests.postRequest(path, data);  
132 - }); 100 + console.log("=== Core: " + command_line);
133 101
134 - res.send(200, JSON.stringify({ 'id': id }));  
135 - }  
136 - });  
137 -} 102 + core.call(id, command_line, req, res);
  103 +};
138 104
139 module.exports.init = init; 105 module.exports.init = init;
endpoints/video_legenda.js
1 var parameters = require('../helpers/parameters'); 1 var parameters = require('../helpers/parameters');
2 var properties = require('../helpers/properties'); 2 var properties = require('../helpers/properties');
3 -var requests = require('../helpers/requests'); 3 +var files = require('../helpers/files');
  4 +var core = require('../helpers/core');
4 5
5 -var exec = require('child_process').exec, child;  
6 -var querystring = require('querystring');  
7 var uuid = require('node-uuid'); 6 var uuid = require('node-uuid');
8 var mkdirp = require('mkdirp'); 7 var mkdirp = require('mkdirp');
9 -var http = require('http');  
10 -var url = require('url');  
11 -var fs = require('fs'); 8 +var async = require('async');
12 9
13 function init(req, res) { 10 function init(req, res) {
14 -  
15 - var id = uuid.v4(); 11 + res.set("Content-Type", "application/json");
16 12
17 /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ 13 /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */
18 if ((req.body.linguagem === '') || (req.body.posicao === '') || (req.body.tamanho === '') || (req.body.transparencia === '')) { 14 if ((req.body.linguagem === '') || (req.body.posicao === '') || (req.body.tamanho === '') || (req.body.transparencia === '')) {
@@ -25,92 +21,91 @@ function init(req, res) { @@ -25,92 +21,91 @@ function init(req, res) {
25 res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); 21 res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos'));
26 return; 22 return;
27 } 23 }
28 -  
29 - /* Checa se o arquivo de vídeo submetivo possui uma extensão válida */  
30 - if (parameters.checkVideo(req.files.video.name) === false) {  
31 - res.send(500, parameters.errorMessage('Vídeo com Extensão Inválida'));  
32 - return;  
33 - }  
34 -  
35 - /* Checa se o arquivo de legenda submetivo possui uma extensão válida */  
36 - if (parameters.checkSubtitle(req.files.legenda.name) === false) {  
37 - res.send(500, parameters.errorMessage('Legenda com Extensão Inválida'));  
38 - return;  
39 - } 24 +
  25 + process(req, res);
  26 +};
40 27
41 - /* Cria uma pasta cujo o nome é o ID atual */  
42 - mkdirp(properties.uploads_folder + id, function(error) { 28 +function process(req, res) {
  29 + var id = uuid.v4();
  30 + var folder = properties.uploads_folder + id;
  31 + var locals = {};
43 32
44 - if (error) { console.log(error); return; }  
45 -  
46 - /* Move o vídeo submetido para a pasta com o seu ID correspondente */  
47 - fs.rename(req.files.video.path, properties.uploads_folder + id + '/' + req.files.video.name, function(error) {  
48 - if (error) { console.log(error); res.send(500, parameters.errorMessage('Erro ao mover o vídeo submetido')); return; }  
49 - });  
50 -  
51 - /* Move a legenda submetido para a pasta com o seu ID correspondente */  
52 - fs.rename(req.files.legenda.path, properties.uploads_folder + id + '/' + req.files.legenda.name, function(error) {  
53 - if (error) { console.log(error); res.send(500, parameters.errorMessage('Erro ao mover a legenda submetido')); return; }  
54 - });  
55 -  
56 - /* Cria a linha de comando */  
57 - var command_line = 'vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' uploads/' + id + '/' +  
58 - req.files.video.name + ' uploads/' + id + '/' + req.files.legenda.name + ' ' + parameters.getLanguage(req.body.linguagem) +  
59 - ' ' + parameters.getPosition(req.body.posicao) + ' ' + parameters.getSize(req.body.tamanho) + ' ' +  
60 - parameters.getTransparency(req.body.transparencia) + ' ' + id + ' > /tmp/core_log 2>&1';  
61 -  
62 - console.log(command_line);  
63 -  
64 - /* Executa a linha de comando */  
65 - child = exec(command_line, function(err, stdout, stderr) {  
66 - // [stdout] = vlibras-core output  
67 - // console.log('Err: ' + err);  
68 - // console.log('STDOUT: ' + stdout);  
69 - // console.log('STDERR: ' + stderr);  
70 - });  
71 -  
72 - if (req.body.callback === undefined) {  
73 - /* Listener que dispara quando a requisição ao core finaliza */  
74 - child.on('close', function(code, signal){  
75 - if (code !== 0) {  
76 - console.log('Erro código: ' + code); res.send(500, { 'error': 'Erro no Core', 'code': code }); return;  
77 - }  
78 -  
79 - res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.flv' });  
80 - }); 33 + async.series([
  34 + // Cria a pasta apropriada
  35 + function(callback) {
  36 + console.log("== Criando pasta " + folder);
  37 +
  38 + mkdirp(folder, function(err) {
  39 + var error;
  40 +
  41 + if (err) { error = "Erro na criação da pasta com o id: " + id + "; " + err; }
81 42
82 - child.on('error', function(code, signal){  
83 - res.send(500, parameters.errorMessage('Erro na chamada ao core')); 43 + callback(error);
84 }); 44 });
85 - } else { 45 + },
  46 +
  47 + // Baixa e move os arquivos para a pasta correta
  48 + function(callback) {
  49 + console.log("== Baixando os arquivos");
  50 +
  51 + downloadAndMoveFiles(folder, req, locals, callback);
  52 + },
  53 +
  54 + // Chama o core
  55 + function(callback) {
  56 + console.log("== Chamando o core");
  57 +
  58 + // Faz a chamada ao core
  59 + try {
  60 + callCore(id, locals.video, locals.subtitle, req, res);
  61 + callback();
  62 + } catch (err) {
  63 + callback(err);
  64 + }
  65 + }
  66 + ], function(err) {
  67 + // Se tiver erro
  68 + if (err) {
  69 + res.send(500, parameters.errorMessage(err));
86 70
87 - child.on('close', function(code, signal){  
88 - if (code !== 0) {  
89 - var path = url.parse(req.body.callback);  
90 - var data = querystring.stringify( { 'error': 'Erro no Core', 'code': code } ); 71 + return;
  72 + }
  73 + });
  74 +}
91 75
92 - requests.postRequest(path, data);  
93 76
94 - return;  
95 - } 77 +function downloadAndMoveFiles(folder, req, locals, callback) {
  78 + async.parallel([
  79 + // Download video
  80 + function(callback) {
  81 + files.downloadAndMoveVideo(folder, req, locals, callback);
  82 + },
96 83
97 - var path = url.parse(req.body.callback);  
98 - var data = querystring.stringify({ 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.flv' }); 84 + // Download subtitle
  85 + function(callback) {
  86 + files.downloadAndMoveSubtitle(folder, req, locals, callback);
  87 + }
  88 + ], function(err) {
  89 + console.log("=== Legenda e video baixados");
99 90
100 - requests.postRequest(path, data);  
101 - }); 91 + // Callback chamado depois de todas as tarefas
  92 + // Se tiver erro, vai passar para cima
  93 + callback(err);
  94 + });
  95 +}
102 96
103 - /* Listener que dispara quando a requisição ao core da erro */  
104 - child.on('error', function(code, signal){  
105 - var path = url.parse(req.body.callback);  
106 - var data = querystring.stringify( { 'error': 'Erro na chamada ao core', 'code': code, 'id': id } );  
107 97
108 - requests.postRequest(path, data);  
109 - }); 98 +function callCore(id, video, subtitle, req, res) {
110 99
111 - res.send(200, JSON.stringify({ 'id': id }));  
112 - }  
113 - }); 100 + /* Cria a linha de comando */
  101 + var command_line = 'vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' ' +
  102 + video.path + ' ' + subtitle.path + ' ' + parameters.getLanguage(req.body.linguagem) +
  103 + ' ' + parameters.getPosition(req.body.posicao) + ' ' + parameters.getSize(req.body.tamanho) + ' ' +
  104 + parameters.getTransparency(req.body.transparencia) + ' ' + id + ' > /tmp/core_log 2>&1';
  105 +
  106 + console.log("=== Core: " + command_line);
  107 +
  108 + core.call(id, command_line, req, res);
114 }; 109 };
115 110
116 module.exports.init = init; 111 module.exports.init = init;
helpers/core.js 0 → 100644
@@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
  1 +var requests = require('../helpers/requests');
  2 +
  3 +var url = require('url');
  4 +var http = require('http');
  5 +var querystring = require('querystring');
  6 +var exec = require('child_process').exec, child;
  7 +
  8 +function call(id, command_line, req, res) {
  9 + /* Executa a linha de comando */
  10 + child = exec(command_line, function(err, stdout, stderr) {
  11 + // [stdout] = vlibras-core output
  12 + // console.log('Err: ' + err);
  13 + // console.log('STDOUT: ' + stdout);
  14 + // console.log('STDERR: ' + stderr);
  15 + });
  16 +
  17 + // Se o callback não foi definido
  18 + if (req.body.callback === undefined) {
  19 +
  20 + // Se a chamada foi feita com sucesso
  21 + child.on('close', function(code, signal) {
  22 +
  23 + // Se o core executou com erro
  24 + if (code !== 0) {
  25 + throw "Erro no retorno do core. Código: " + code;
  26 + }
  27 +
  28 + // Se o core executou normal
  29 + res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.flv' });
  30 + });
  31 +
  32 + // Se a chamada deu erro
  33 + child.on('error', function(code, signal) {
  34 + throw "Erro na chamada ao core";
  35 + });
  36 +
  37 +
  38 + // Se o callback foi definido
  39 + } else {
  40 +
  41 + // Se a chamada foi feita com sucesso
  42 + child.on('close', function(code, signal) {
  43 +
  44 + // Endereço do callback
  45 + var path = url.parse(req.body.callback);
  46 +
  47 + // Se o core executou com erro
  48 + if (code === 0) {
  49 + var data = querystring.stringify({ 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.mp4' });
  50 + } else {
  51 + var data = querystring.stringify({ 'error': 'Erro no Core', 'code': code });
  52 + }
  53 +
  54 + // Chama o callback
  55 + requests.postRequest(path, data);
  56 + });
  57 +
  58 + // Se a chamada deu erro
  59 + child.on('error', function(code, signal) {
  60 + var path = url.parse(req.body.callback);
  61 + var data = querystring.stringify( { 'error': 'Erro na chamada ao core', 'code': code, 'id': id } );
  62 +
  63 + requests.postRequest(path, data);
  64 + });
  65 +
  66 + // Retorno da primeira requisição
  67 + res.send(200, JSON.stringify({ 'id': id }));
  68 + }
  69 +}
  70 +
  71 +module.exports.call = call;
0 \ No newline at end of file 72 \ No newline at end of file
helpers/files.js 0 → 100644
@@ -0,0 +1,141 @@ @@ -0,0 +1,141 @@
  1 +var fs = require('fs');
  2 +var http = require('http');
  3 +
  4 +/*
  5 +* Função que processa o vídeo (seja baixando, seja pegando o vídeo enviado)
  6 +* Deve retornar um objeto contendo o nome e o caminho
  7 +*/
  8 +function downloadAndMoveVideo(folder, req, locals, callback) {
  9 +
  10 + // Se enviou o arquivo na requisição
  11 + if (req.files.video !== undefined) {
  12 +
  13 + // Se a validação falhar
  14 + if (parameters.checkVideo(req.files.video.name) === false) {
  15 + var error = 'Vídeo enviado com extensão inválida';
  16 + return callback(error);
  17 + }
  18 +
  19 + /* Move o vídeo submetido para a pasta com o seu ID correspondente */
  20 + try {
  21 + fs.renameSync(req.files.video.path, folder + '/' + req.files.video.name);
  22 + } catch (err) {
  23 + callback("Erro ao mover o vídeo submetido: " + err);
  24 + }
  25 +
  26 + // Se não, retorna o vídeo enviado
  27 + locals.video = {
  28 + 'path': folder + '/' + req.files.video.name
  29 + }
  30 +
  31 + return callback();
  32 +
  33 + // Se o arquivo não foi enviado, mas um video_url foi
  34 + } else if (req.body.video_url !== undefined) {
  35 +
  36 + // Requisição para baixar o vídeo
  37 + http.get(req.body.video_url, function(response) {
  38 +
  39 + // Se o vídeo não foi baixado com sucesso
  40 + if (response.statusCode !== 200) {
  41 + var error = 'Problema ao carregar video_url: status ' + response.statusCode;
  42 + return callback(error);
  43 + }
  44 +
  45 + // Nome do arquivo
  46 + var filename = req.body.video_url.substring(req.body.video_url.lastIndexOf('/') + 1);
  47 + var path = folder + '/' + filename;
  48 +
  49 + // Salva o arquivo em disco
  50 + response.pipe(fs.createWriteStream(path));
  51 +
  52 + // Retorna o vídeo baixado
  53 + locals.video = {
  54 + 'path': path
  55 + }
  56 +
  57 + return callback();
  58 +
  59 + // Se deu erro na requisição de baixar o vídeo
  60 + }).on('error', function(e) {
  61 + var error = 'Problema ao carregar video_url: ' + e.message;
  62 + return callback(error);
  63 + });
  64 +
  65 + // Se nem o vídeo foi enviado e nem o video_url foi preenchido
  66 + } else {
  67 + var error = "Video deve ser enviado como parâmetro 'video' ou como 'video_url'";
  68 + return callback(error);
  69 + }
  70 +}
  71 +
  72 +/*
  73 +* Função que processa a legenda (seja baixando, seja pegando o vídeo enviado)
  74 +* Deve retornar um objeto contendo o nome e o caminho
  75 +*/
  76 +function downloadAndMoveSubtitle(folder, req, locals, callback) {
  77 +
  78 + // Se enviou o arquivo na requisição
  79 + if (req.files.legenda !== undefined) {
  80 +
  81 + // Se a validação falhar
  82 + if (parameters.checkSubtitle(req.files.legenda.name) === false) {
  83 + var error = 'Legenda enviado com extensão inválida';
  84 + return callback(error);
  85 + }
  86 +
  87 + /* Move o vídeo submetido para a pasta com o seu ID correspondente */
  88 + try {
  89 + fs.renameSync(req.files.legenda.path, folder + '/' + req.files.legenda.name);
  90 + } catch (err) {
  91 + callback("Erro ao mover a legenda submetida: " + err);
  92 + }
  93 +
  94 + // Se não, retorna o vídeo enviado
  95 + locals.subtitle = {
  96 + 'path': folder + '/' + req.files.legenda.name
  97 + }
  98 +
  99 + return callback();
  100 +
  101 + // Se o arquivo não foi enviado, mas um legenda_url foi
  102 + } else if (req.body.legenda_url !== undefined) {
  103 +
  104 + // Requisição para baixar a legenda
  105 + http.get(req.body.legenda_url, function(response) {
  106 +
  107 + // Se a legenda não foi baixado com sucesso
  108 + if (response.statusCode !== 200) {
  109 + var error = 'Problema ao carregar legenda_url: status ' + response.statusCode;
  110 + return callback(error);
  111 + }
  112 +
  113 + // Nome do arquivo
  114 + var filename = req.body.legenda_url.substring(req.body.legenda_url.lastIndexOf('/') + 1);
  115 + var path = folder + '/' + filename;
  116 +
  117 + // Salva o arquivo em disco
  118 + response.pipe(fs.createWriteStream(path));
  119 +
  120 + // Retorna o vídeo baixado
  121 + locals.subtitle = {
  122 + 'path': path
  123 + }
  124 +
  125 + return callback();
  126 +
  127 + // Se deu erro na requisição de baixar a legenda
  128 + }).on('error', function(e) {
  129 + var error = 'Problema ao carregar legenda_url: ' + e.message;
  130 + return callback(error);
  131 + });
  132 +
  133 + // Se nem a legenda foi enviada e nem a legenda_url foi preenchida
  134 + } else {
  135 + var error = "Legenda deve ser enviada como parâmetro 'legenda' ou como 'legenda_url'";
  136 + return callback(error);
  137 + }
  138 +}
  139 +
  140 +module.exports.downloadAndMoveVideo = downloadAndMoveVideo;
  141 +module.exports.downloadAndMoveSubtitle = downloadAndMoveSubtitle;
0 \ No newline at end of file 142 \ No newline at end of file
helpers/parameters.js
@@ -172,7 +172,7 @@ function check_type(file, accepted_file_types) { @@ -172,7 +172,7 @@ function check_type(file, accepted_file_types) {
172 }; 172 };
173 173
174 function errorMessage(message) { 174 function errorMessage(message) {
175 - return { 'error': message } 175 + return JSON.stringify({ 'error': message })
176 }; 176 };
177 177
178 module.exports.getServiceType = getServiceType; 178 module.exports.getServiceType = getServiceType;
helpers/requests.js
@@ -14,20 +14,21 @@ function postRequest(path, data) { @@ -14,20 +14,21 @@ function postRequest(path, data) {
14 14
15 var requesting = http.request(options, function(res) { 15 var requesting = http.request(options, function(res) {
16 /* Debugging */ 16 /* Debugging */
17 - /*  
18 - console.log('Callback response status: ' + res.statusCode);  
19 - console.log('Callback response headers: ' + JSON.stringify(res.headers)); 17 +
  18 + console.log('== Chamando callback: ' + path.hostname)
  19 + console.log('=== Response status: ' + res.statusCode);
  20 + console.log('=== Response headers: ' + JSON.stringify(res.headers));
20 21
21 res.setEncoding('utf8'); 22 res.setEncoding('utf8');
22 23
23 res.on('data', function (chunk) { 24 res.on('data', function (chunk) {
24 - console.log('Callback response body: ' + chunk); 25 + console.log('=== Response body: ' + chunk);
25 }); 26 });
26 - */ 27 +
27 }); 28 });
28 29
29 requesting.on('error', function (e) { 30 requesting.on('error', function (e) {
30 - console.log("The callback URL can not be reachable"); 31 + console.log("=== Não foi possível chamar a URL de callback");
31 }); 32 });
32 33
33 requesting.write(data); 34 requesting.write(data);
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 "author": "LAViD", 10 "author": "LAViD",
11 "license": "ISC", 11 "license": "ISC",
12 "dependencies": { 12 "dependencies": {
  13 + "async": "^0.9.0",
13 "express": "~3.5.1", 14 "express": "~3.5.1",
14 "mkdirp": "^0.5.0", 15 "mkdirp": "^0.5.0",
15 "node-uuid": "^1.4.1" 16 "node-uuid": "^1.4.1"
@@ -7,8 +7,9 @@ var ep_video = require('./endpoints/video'); @@ -7,8 +7,9 @@ var ep_video = require('./endpoints/video');
7 var ep_legenda = require('./endpoints/legenda'); 7 var ep_legenda = require('./endpoints/legenda');
8 var ep_video_legenda = require('./endpoints/video_legenda'); 8 var ep_video_legenda = require('./endpoints/video_legenda');
9 9
10 -var path = require('path');  
11 var express = require('express'); 10 var express = require('express');
  11 +var path = require('path');
  12 +var util = require('util');
12 var app = express(); 13 var app = express();
13 14
14 app.use(express.static(path.join(__dirname, '/videos'))); 15 app.use(express.static(path.join(__dirname, '/videos')));
@@ -18,7 +19,11 @@ app.get('/', function(req, res){ @@ -18,7 +19,11 @@ app.get('/', function(req, res){
18 res.send(200, { 'status': 'server is running!' } ); 19 res.send(200, { 'status': 'server is running!' } );
19 }); 20 });
20 21
21 -app.post('/api', function(req, res){ 22 +app.post('/api', function(req, res) {
  23 + console.log("\n\n\n=============================================");
  24 + console.log("[" + new Date().toISOString() + "] Requisição do IP: " + req.ip);
  25 + console.log("== Parametros: " + util.inspect(req.body));
  26 +
22 /* Verifica se o paramêtro [servico] possui algum valor */ 27 /* Verifica se o paramêtro [servico] possui algum valor */
23 if (req.body.servico !== '') { 28 if (req.body.servico !== '') {
24 /* Verifica qual é o Tipo de Serviço fornecido */ 29 /* Verifica qual é o Tipo de Serviço fornecido */