Commit 99b5098c2cb1555fe13e5ffa48bd1b15a481b3e8

Authored by Adabriand Furtado
1 parent b2719bc3
Exists in master

Adicionado suporte ao Safari.

@@ -4,6 +4,7 @@ import json @@ -4,6 +4,7 @@ import json
4 import os 4 import os
5 import subprocess 5 import subprocess
6 import pyutil 6 import pyutil
  7 +import shutil
7 8
8 getcwd=os.path.dirname(os.path.abspath(__file__)) 9 getcwd=os.path.dirname(os.path.abspath(__file__))
9 bpy_script_action=os.path.join(getcwd, "bpy_checkout.py") 10 bpy_script_action=os.path.join(getcwd, "bpy_checkout.py")
@@ -55,7 +56,7 @@ def check_action(blend_file="", action_name="", action_fake_is_valid=True, min_f @@ -55,7 +56,7 @@ def check_action(blend_file="", action_name="", action_fake_is_valid=True, min_f
55 pyutil.log("Blend file not exists", 4) 56 pyutil.log("Blend file not exists", 4)
56 return 3 57 return 3
57 58
58 -def render_video(upload_dir="", blend_file="", sign_name="", convert_to_webm=True, rm_original_video=True, hide_output=False): 59 +def render_video(upload_dir="", blend_file="", sign_name="", convert_to_webm=True, rm_original_video=True, hide_output=False, convert_to_mp4_web_format=True):
59 if (file_exists(blend_file)): 60 if (file_exists(blend_file)):
60 if not ((isinstance(upload_dir, str) and isinstance(blend_file, str)) or 61 if not ((isinstance(upload_dir, str) and isinstance(blend_file, str)) or
61 (isinstance(upload_dir, unicode) and isinstance(blend_file, unicode)) or 62 (isinstance(upload_dir, unicode) and isinstance(blend_file, unicode)) or
@@ -63,21 +64,27 @@ def render_video(upload_dir="", blend_file="", sign_name="", convert_to_webm=Tru @@ -63,21 +64,27 @@ def render_video(upload_dir="", blend_file="", sign_name="", convert_to_webm=Tru
63 pyutil.log("Args to render_video no match types", 4) 64 pyutil.log("Args to render_video no match types", 4)
64 return 1 65 return 1
65 try: 66 try:
66 - json_object= json.JSONEncoder().encode( 67 + json_object = json.JSONEncoder().encode(
67 { 68 {
68 "upload_dir": upload_dir, 69 "upload_dir": upload_dir,
69 "sign_name": sign_name 70 "sign_name": sign_name
70 } 71 }
71 ) 72 )
72 if (hide_output): 73 if (hide_output):
73 - dev_null=open(os.devnull, 'w')  
74 - result_code=subprocess.call(['blender', '-b', blend_file, '-noaudio', '-P', bpy_script_render, "--", json_object], stdout=dev_null, stderr=dev_null) 74 + dev_null = open(os.devnull, 'w')
  75 + result_code = subprocess.call(['blender', '-b', blend_file, '-noaudio', '-P', bpy_script_render, "--", json_object], stdout=dev_null, stderr=dev_null)
75 else: 76 else:
76 result_code=subprocess.call(['blender', '-b', blend_file, '-noaudio', '-P', bpy_script_render, "--", json_object]) 77 result_code=subprocess.call(['blender', '-b', blend_file, '-noaudio', '-P', bpy_script_render, "--", json_object])
77 if (convert_to_webm): 78 if (convert_to_webm):
78 - video_mp4=os.path.join(upload_dir, sign_name + ".mp4")  
79 - video_webm=os.path.join(upload_dir, sign_name + ".webm") 79 + video_mp4 = os.path.join(upload_dir, sign_name + ".mp4")
  80 + video_webm = os.path.join(upload_dir, sign_name + ".webm")
80 subprocess.call(["avconv", "-loglevel", "0", "-y", "-i", video_mp4, "-r", "24", "-vcodec", "libvpx", video_webm]) 81 subprocess.call(["avconv", "-loglevel", "0", "-y", "-i", video_mp4, "-r", "24", "-vcodec", "libvpx", video_webm])
  82 + if (convert_to_mp4_web_format):
  83 + video_mp4 = os.path.join(upload_dir, sign_name + ".mp4")
  84 + video_mp4_tmp = os.path.join(upload_dir, sign_name + "-tmp.mp4")
  85 + shutil.copy(video_mp4, video_mp4_tmp)
  86 + subprocess.call(["avconv", "-loglevel", "0", "-y", "-i", video_mp4_tmp, "-r", "24", "-vcodec", "libx264", video_mp4])
  87 + video_mp4 = video_mp4_tmp
81 if (rm_original_video): 88 if (rm_original_video):
82 subprocess.call(["rm", video_mp4]) 89 subprocess.call(["rm", video_mp4])
83 if (result_code == 4): 90 if (result_code == 4):
view/js/corretor.js
@@ -148,10 +148,10 @@ @@ -148,10 +148,10 @@
148 148
149 function _createAnswer(task, status) { 149 function _createAnswer(task, status) {
150 var answer = {}; 150 var answer = {};
151 - var last_answer = task.info.last_answer;  
152 - var hasLastAnswer = typeof last_answer != 'undefined'; 151 + var lastAnswer = task.info.last_answer;
  152 + var hasLastAnswer = typeof lastAnswer != 'undefined';
153 if (hasLastAnswer) { 153 if (hasLastAnswer) {
154 - answer = last_answer; 154 + answer = lastAnswer;
155 } else { 155 } else {
156 answer = { 156 answer = {
157 'number_of_fixes' : 0, 157 'number_of_fixes' : 0,
@@ -194,9 +194,9 @@ @@ -194,9 +194,9 @@
194 194
195 function _finishTask(task, deferred, answer) { 195 function _finishTask(task, deferred, answer) {
196 _enableLoading(); 196 _enableLoading();
197 - var last_answer = task.info.last_answer;  
198 - var hasLastAnswer = typeof last_answer != 'undefined';  
199 - var toSubmitUploadSessionId = hasLastAnswer ? last_answer.upload_session_id 197 + var lastAnswer = task.info.last_answer;
  198 + var hasLastAnswer = typeof lastAnswer != 'undefined';
  199 + var toSubmitUploadSessionId = hasLastAnswer ? lastAnswer.upload_session_id
200 : uploadSessionId; 200 : uploadSessionId;
201 $.ajax({ 201 $.ajax({
202 type : 'POST', 202 type : 'POST',
@@ -243,31 +243,35 @@ @@ -243,31 +243,35 @@
243 243
244 function _loadTaskInfo(task, deferred) { 244 function _loadTaskInfo(task, deferred) {
245 currentTaskId = task.id; 245 currentTaskId = task.id;
246 - var sign_name = task.info.sign_name;  
247 - var blend_link = videosUrl + sign_name + '_AVATAR.blend';  
248 - var avatar_vid_link = videosUrl + sign_name + '_AVATAR.webm';  
249 - var ref_vid_link = videosUrl + sign_name + '_REF.webm';  
250 - $('.sign-label').text(sign_name); 246 + var signName = task.info.sign_name;
  247 + var blendLink = videosUrl + signName + '_AVATAR.blend';
  248 + var baseAvatarVidUrl = videosUrl + signName + '_AVATAR';
  249 + var avatarVidUrl = baseAvatarVidUrl + '.webm';
  250 + var baseRefVidUrl = videosUrl + signName + '_REF';
  251 + var refVidUrl = baseRefVidUrl + '.webm';
  252 +
  253 + $('.sign-label').text(signName);
251 $('#submission-date').text( 254 $('#submission-date').text(
252 moment(task.info.submission_date).format('DD/MM/YYYY')); 255 moment(task.info.submission_date).format('DD/MM/YYYY'));
253 - $('#ref-video').attr('src', ref_vid_link);  
254 - $('#ref-video-link').attr('href', ref_vid_link); 256 + $('#ref-video').html(videoHelper.getSource(baseRefVidUrl));
  257 + $('#ref-video-link').attr('href', refVidUrl);
255 258
256 - var last_answer = task.info.last_answer;  
257 - var hasLastAnswer = typeof last_answer != 'undefined'; 259 + var lastAnswer = task.info.last_answer;
  260 + var hasLastAnswer = typeof lastAnswer != 'undefined';
258 if (hasLastAnswer 261 if (hasLastAnswer
259 - && typeof last_answer.upload_session_id != 'undefined') {  
260 - blend_link = uploadsUrl + last_answer.upload_session_id + '/'  
261 - + sign_name + '.blend';  
262 - avatar_vid_link = uploadsUrl + last_answer.upload_session_id + '/'  
263 - + sign_name + '.webm'; 262 + && typeof lastAnswer.upload_session_id != 'undefined') {
  263 + blendLink = uploadsUrl + lastAnswer.upload_session_id + '/'
  264 + + signName + '.blend';
  265 + baseAvatarVidUrl = uploadsUrl + lastAnswer.upload_session_id + '/'
  266 + + signName;
  267 + avatarVidUrl = baseAvatarVidUrl + '.webm';
264 $('#last-edit-date').text( 268 $('#last-edit-date').text(
265 - moment(last_answer.last_edit_date).format('DD/MM/YYYY'));  
266 - $('#number-of-fixes').text(last_answer.number_of_fixes); 269 + moment(lastAnswer.last_edit_date).format('DD/MM/YYYY'));
  270 + $('#number-of-fixes').text(lastAnswer.number_of_fixes);
267 _showApprovalGUI(task, deferred); 271 _showApprovalGUI(task, deferred);
268 } 272 }
269 - $('#blend-link').attr('href', blend_link);  
270 - $('#avatar-video').attr('src', avatar_vid_link); 273 + $('#blend-link').attr('href', blendLink);
  274 + $('#avatar-video').html(videoHelper.getSource(baseAvatarVidUrl));
271 } 275 }
272 276
273 function _loadMainComponents() { 277 function _loadMainComponents() {
view/js/helpers/video-helper.js 0 → 100644
@@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
  1 +(function(videoHelper, $, undefined) {
  2 +
  3 + function _getSource(videoBaseUrl) {
  4 + return '<source src="' + videoBaseUrl + '.webm" type="video/webm">'
  5 + + '<source src="' + videoBaseUrl
  6 + + '.mp4" type="video/mp4">Sem suporte a vídeos';
  7 + }
  8 +
  9 + function _controlVideo(elId, toPlay) {
  10 + if ($(elId).length === 0)
  11 + return;
  12 + if (toPlay) {
  13 + $(elId).get(0).play();
  14 + } else {
  15 + $(elId).get(0).pause();
  16 + }
  17 + }
  18 +
  19 + videoHelper.play = function(elId) {
  20 + _controlVideo(elId, true);
  21 + };
  22 +
  23 + videoHelper.pause = function(elId) {
  24 + _controlVideo(elId, false);
  25 + };
  26 +
  27 + videoHelper.getSource = function(videoBaseUrl) {
  28 + return _getSource(videoBaseUrl);
  29 + };
  30 +
  31 +}(window.videoHelper = window.videoHelper || {}, jQuery));
view/templates/index.html
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 <script src="{{ server }}/js/external-libs/js.cookie.js"></script> 7 <script src="{{ server }}/js/external-libs/js.cookie.js"></script>
8 <script src="{{ server }}/js/helpers/pybossa-api-helper.js"></script> 8 <script src="{{ server }}/js/helpers/pybossa-api-helper.js"></script>
9 <script src="{{ server }}/js/helpers/load-html-helper.js"></script> 9 <script src="{{ server }}/js/helpers/load-html-helper.js"></script>
  10 +<script src="{{ server }}/js/helpers/video-helper.js"></script>
10 <script src="{{ server }}/js/ranking.js"></script> 11 <script src="{{ server }}/js/ranking.js"></script>
11 <script src="{{ server }}/js/corretor.js"></script> 12 <script src="{{ server }}/js/corretor.js"></script>
12 13
@@ -69,10 +70,9 @@ @@ -69,10 +70,9 @@
69 ANIMAÇÃO ATUAL "<span class="sign-label"></span>": 70 ANIMAÇÃO ATUAL "<span class="sign-label"></span>":
70 </h6> 71 </h6>
71 </div> 72 </div>
72 - <div class="row video-container">  
73 - <video id="avatar-video" src="" preload="metadata" 73 + <div class="row video-container">
  74 + <video id="avatar-video" preload="metadata"
74 class="video-body" autoplay loop controls> 75 class="video-body" autoplay loop controls>
75 - <source type="video/webm">  
76 </video> 76 </video>
77 </div> 77 </div>
78 <div class="row link-container"> 78 <div class="row link-container">
@@ -111,9 +111,8 @@ @@ -111,9 +111,8 @@
111 </h6> 111 </h6>
112 </div> 112 </div>
113 <div class="row video-container"> 113 <div class="row video-container">
114 - <video id="ref-video" src="" preload="metadata" class="video-body" 114 + <video id="ref-video" preload="metadata" class="video-body"
115 autoplay loop controls> 115 autoplay loop controls>
116 - <source type="video/webm">  
117 </video> 116 </video>
118 </div> 117 </div>
119 <div class="row link-container"> 118 <div class="row link-container">