var fs = require('fs'); var http = require('http'); /* * Função que processa o vídeo (seja baixando, seja pegando o vídeo enviado) * Deve retornar um objeto contendo o nome e o caminho */ function downloadAndMoveVideo(folder, req, locals, callback) { // Se enviou o arquivo na requisição if (req.files.video !== undefined) { // Se a validação falhar if (parameters.checkVideo(req.files.video.name) === false) { var error = 'Vídeo enviado com extensão inválida'; return callback(error); } /* Move o vídeo submetido para a pasta com o seu ID correspondente */ try { fs.renameSync(req.files.video.path, folder + '/' + req.files.video.name); } catch (err) { callback("Erro ao mover o vídeo submetido: " + err); } // Se não, retorna o vídeo enviado locals.video = { 'path': folder + '/' + req.files.video.name } return callback(); // Se o arquivo não foi enviado, mas um video_url foi } else if (req.body.video_url !== undefined) { // Requisição para baixar o vídeo http.get(req.body.video_url, function(response) { // Se o vídeo não foi baixado com sucesso if (response.statusCode !== 200) { var error = 'Problema ao carregar video_url: status ' + response.statusCode; return callback(error); } // Nome do arquivo var filename = req.body.video_url.substring(req.body.video_url.lastIndexOf('/') + 1); var path = folder + '/' + filename; // Salva o arquivo em disco response.pipe(fs.createWriteStream(path)); // Retorna o vídeo baixado locals.video = { 'path': path } return callback(); // Se deu erro na requisição de baixar o vídeo }).on('error', function(e) { var error = 'Problema ao carregar video_url: ' + e.message; return callback(error); }); // Se nem o vídeo foi enviado e nem o video_url foi preenchido } else { var error = "Video deve ser enviado como parâmetro 'video' ou como 'video_url'"; return callback(error); } } /* * Função que processa a legenda (seja baixando, seja pegando o vídeo enviado) * Deve retornar um objeto contendo o nome e o caminho */ function downloadAndMoveSubtitle(folder, req, locals, callback) { // Se enviou o arquivo na requisição if (req.files.legenda !== undefined) { // Se a validação falhar if (parameters.checkSubtitle(req.files.legenda.name) === false) { var error = 'Legenda enviado com extensão inválida'; return callback(error); } /* Move o vídeo submetido para a pasta com o seu ID correspondente */ try { fs.renameSync(req.files.legenda.path, folder + '/' + req.files.legenda.name); } catch (err) { callback("Erro ao mover a legenda submetida: " + err); } // Se não, retorna o vídeo enviado locals.subtitle = { 'path': folder + '/' + req.files.legenda.name } return callback(); // Se o arquivo não foi enviado, mas um legenda_url foi } else if (req.body.legenda_url !== undefined) { // Requisição para baixar a legenda http.get(req.body.legenda_url, function(response) { // Se a legenda não foi baixado com sucesso if (response.statusCode !== 200) { var error = 'Problema ao carregar legenda_url: status ' + response.statusCode; return callback(error); } // Nome do arquivo var filename = req.body.legenda_url.substring(req.body.legenda_url.lastIndexOf('/') + 1); var path = folder + '/' + filename; // Salva o arquivo em disco response.pipe(fs.createWriteStream(path)); // Retorna o vídeo baixado locals.subtitle = { 'path': path } return callback(); // Se deu erro na requisição de baixar a legenda }).on('error', function(e) { var error = 'Problema ao carregar legenda_url: ' + e.message; return callback(error); }); // Se nem a legenda foi enviada e nem a legenda_url foi preenchida } else { var error = "Legenda deve ser enviada como parâmetro 'legenda' ou como 'legenda_url'"; return callback(error); } } module.exports.downloadAndMoveVideo = downloadAndMoveVideo; module.exports.downloadAndMoveSubtitle = downloadAndMoveSubtitle;