Index: lams_central/src/java/org/lamsfoundation/lams/webservice/GetRecordingServlet.java =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_central/src/java/org/lamsfoundation/lams/webservice/GetRecordingServlet.java (.../GetRecordingServlet.java) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/GetRecordingServlet.java (.../GetRecordingServlet.java) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -28,12 +28,13 @@ import java.util.HashMap; import javax.servlet.ServletException; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; -import org.lamsfoundation.lams.util.ExternalServerUtil; +import org.lamsfoundation.lams.util.HttpUrlConnectionUtil; import org.lamsfoundation.lams.util.WebUtil; /** @@ -51,15 +52,28 @@ try { String urlStr = WebUtil.readStrParam(request, "urlStr"); - //HashMap params = (HashMap)request.getAttribute("params"); String filename = WebUtil.readStrParam(request, "filename"); String dir = WebUtil.readStrParam(request, "dir"); - InputStream is = ExternalServerUtil.getResponseInputStreamFromExternalServer(urlStr, new HashMap()); - File file = ExternalServerUtil.writeFileAndDir(is, filename, dir); + String absoluteFilePath = dir + filename; - logger.debug("file copy complete"); + File newPath = new File(dir); + newPath.mkdirs(); + File newFile = new File(absoluteFilePath); + newFile.createNewFile(); + + // get the stream from the external server + int success = HttpUrlConnectionUtil.writeResponseToFile(urlStr, dir, filename, new Cookie[0]); + + // if success + if(success == 1){ + // add the filename to the list + logger.debug("file copy complete"); + }else{ + logger.debug("file copy failed"); + } + } catch (Exception e) { logger.error(e.getMessage()); } Fisheye: Tag 01f1d853607cc14f73aa2429275084f4890f92b7 refers to a dead (removed) revision in file `lams_central/web/fckeditor/editor/plugins/videorecorder/AC_OETags.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 01f1d853607cc14f73aa2429275084f4890f92b7 refers to a dead (removed) revision in file `lams_central/web/fckeditor/editor/plugins/videorecorder/VideoRecorderFCKEditor.html'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_central/web/fckeditor/editor/plugins/videorecorder/VideoRecorderFCKEditor.jsp =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_central/web/fckeditor/editor/plugins/videorecorder/VideoRecorderFCKEditor.jsp (.../VideoRecorderFCKEditor.jsp) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_central/web/fckeditor/editor/plugins/videorecorder/VideoRecorderFCKEditor.jsp (.../VideoRecorderFCKEditor.jsp) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -21,7 +21,7 @@ - + @@ -67,7 +67,7 @@ function getLanguageXML(){ var languageCollection = new Array('videorecorder_video_player', 'videorecorder_video_recorder', - 'videorecorder_web_application_not_available', 'videorecorder_net_connection_not_connected', + 'videorecorder_web_application_not_available', 'videorecorder_net_connection_not_connected', 'videorecorder_buffering', 'videorecorder_net_connection_closed', 'videorecorder_playing', 'videorecorder_ready', 'videorecorder_recording', 'videorecorder_paused', 'videorecorder_waiting', 'videorecorder_description', 'videorecorder_title', 'videorecorder_new_recording_details', 'videorecorder_recording_complete_authoring', @@ -147,7 +147,7 @@ var MMdoctitle = document.title; AC_FL_RunContent( - "src", "playerProductInstall", + "src", "/includes/flash/playerProductInstall", "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"", "width", "361", "height", "331", Index: lams_central/web/fckeditor/editor/plugins/videorecorder/VideoRecorderFCKEditor.swf =================================================================== diff -u -r8f9b7f1797cfacadcfa92406622f188b26cc2674 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/24-heart-gold.png =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/24-heart-red.png =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/24-heart-silver.png =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/deleteIcon.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/downArrow.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/exportIcon.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/okIcon.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/pauseIcon.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/playIcon.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/playerVolume.png =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/recordIcon.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/assets/images/upArrow.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Fisheye: Tag 01f1d853607cc14f73aa2429275084f4890f92b7 refers to a dead (removed) revision in file `lams_central/web/fckeditor/editor/plugins/videorecorder/assets/styles/main.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 01f1d853607cc14f73aa2429275084f4890f92b7 refers to a dead (removed) revision in file `lams_central/web/fckeditor/editor/plugins/videorecorder/history/history.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 01f1d853607cc14f73aa2429275084f4890f92b7 refers to a dead (removed) revision in file `lams_central/web/fckeditor/editor/plugins/videorecorder/history/history.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 01f1d853607cc14f73aa2429275084f4890f92b7 refers to a dead (removed) revision in file `lams_central/web/fckeditor/editor/plugins/videorecorder/history/historyFrame.html'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_central/web/fckeditor/editor/plugins/videorecorder/playerProductInstall.swf =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/fckeditor/editor/plugins/videorecorder/screenshot.png =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_central/web/images/ajax-loader-big.gif =================================================================== diff -u Binary files differ Index: lams_central/web/images/ajax-loader-big.swf =================================================================== diff -u Binary files differ Index: lams_central/web/images/ajax-loader-snake.gif =================================================================== diff -u Binary files differ Index: lams_central/web/images/ajax-loader.gif =================================================================== diff -u Binary files differ Index: lams_flash/src/central/flex/VideoRecorder/src/AddCommentPopUp.mxml =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/central/flex/VideoRecorder/src/AddCommentPopUp.mxml (.../AddCommentPopUp.mxml) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_flash/src/central/flex/VideoRecorder/src/AddCommentPopUp.mxml (.../AddCommentPopUp.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -24,7 +24,7 @@ ]]> - + Index: lams_flash/src/central/flex/VideoRecorder/src/GetRecordingDetailsPopUp.mxml =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/central/flex/VideoRecorder/src/GetRecordingDetailsPopUp.mxml (.../GetRecordingDetailsPopUp.mxml) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_flash/src/central/flex/VideoRecorder/src/GetRecordingDetailsPopUp.mxml (.../GetRecordingDetailsPopUp.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -36,8 +36,8 @@ - - + + Index: lams_flash/src/central/flex/VideoRecorder/src/HTTPServices.as =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/central/flex/VideoRecorder/src/HTTPServices.as (.../HTTPServices.as) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_flash/src/central/flex/VideoRecorder/src/HTTPServices.as (.../HTTPServices.as) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -1,5 +1,9 @@ // creates an httpservice and gets video recordings private function getRecordingsFromServer(sortBy:String, sortDirection:String):void{ + // show an overlay over the video listings + LamsAjaxOverlayManager.showOverlay(videoList); + + // create and set the service var videoRecorderActions:HTTPService = new HTTPService(); videoRecorderActions.url = serverUrl; videoRecorderActions.method = "POST"; @@ -9,8 +13,10 @@ videoRecorderActions.request.toolContentId = toolContentId; videoRecorderActions.request.userId = userId; + // if we are in teacher mode or are allowing recording visibility, get all recordings if(allowLearnerVideoVisibility || mode == "teacher") videoRecorderActions.request.getAll = true; + // otherwise, get only the users own recordings else videoRecorderActions.request.getAll = false; @@ -27,15 +33,23 @@ private function getRecordingsSuccessHandler(e:ResultEvent):void { // update the rating from the servlet's returned xml videoRecordings = e.result.recording; + + // hide the overlay + LamsAjaxOverlayManager.hideOverlay(videoList); } // fault handler for get recordings private function getRecordingsFaultHandler(e:FaultEvent):void { + // hide the overlay + LamsAjaxOverlayManager.hideOverlay(videoList); + + // show an alert with the error Alert.show(e.toString()); } // creates an httpservice and saves a video recording private function saveRecordingToServer(userId:int, title:String, description:String, filename:String, rating:Number, toolSessionId:int, recordingId:int):void{ + // create and set the service var videoRecorderActions:HTTPService = new HTTPService(); videoRecorderActions.url = serverUrl; videoRecorderActions.method = "POST"; @@ -76,6 +90,10 @@ // creates an httpservice and saves a comment private function saveCommentToServer(toolSessionId:int, recordingId:int, userId:int, commentId:int, comment:String):void{ + // show an overlay over the recording information + LamsAjaxOverlayManager.showOverlay(videoInformation); + + // create and set the service var videoRecorderActions:HTTPService = new HTTPService(); videoRecorderActions.url = serverUrl; videoRecorderActions.method = "POST"; @@ -102,16 +120,27 @@ getRecordingsFromServer(sortButtonGroup.sortBy, sortButtonGroup.sortDirection); // scroll the video information box to the position of the "Comments:" label - videoInformation.verticalScrollPosition = videoInformation.commentsLabel.y; + videoInformation.verticalScrollPosition = videoInformation.addCommentButton.y; + + // hide the overlay + LamsAjaxOverlayManager.hideOverlay(videoInformation); } // fault handler for save recording private function saveCommentFaultHandler(e:FaultEvent):void { + // hide the overlay + LamsAjaxOverlayManager.hideOverlay(videoInformation); + + // print the error Alert.show(e.toString()); } // creates an httpservice and saves a rating private function saveRatingToServer(toolSessionId:int, ratingId:int, userId:int, rating:Number, recordingId:int):void{ + // show an overlay over the recording information + LamsAjaxOverlayManager.showOverlay(videoInformation); + + // create and set the service var videoRecorderActions:HTTPService = new HTTPService(); videoRecorderActions.url = serverUrl; videoRecorderActions.method = "POST"; @@ -142,13 +171,20 @@ // fix the tooltip ratingClicked.toolTip = dictionary.getLabelAndConcatenate("videorecorder.tooltip.already.rated", [" ", String(e.result.userRating)]); - + + // hide the overlay + LamsAjaxOverlayManager.hideOverlay(videoInformation); + // update the video recordings - getRecordingsFromServer(sortButtonGroup.sortBy, sortButtonGroup.sortDirection); + getRecordingsFromServer(sortButtonGroup.sortBy, sortButtonGroup.sortDirection); } // fault handler for save rating private function saveRatingFaultHandler(e:FaultEvent):void { + // hide the overlay + LamsAjaxOverlayManager.hideOverlay(videoInformation); + + // show the error Alert.show(e.toString()); } Index: lams_flash/src/central/flex/VideoRecorder/src/VideoProfile.mxml =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/central/flex/VideoRecorder/src/VideoProfile.mxml (.../VideoProfile.mxml) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_flash/src/central/flex/VideoRecorder/src/VideoProfile.mxml (.../VideoProfile.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -1,48 +1,76 @@ - + - + - - - - + + + + + + + + + + + + + + + + - - + Index: lams_flash/src/central/flex/VideoRecorder/src/VideoRecorder.mxml =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/central/flex/VideoRecorder/src/VideoRecorder.mxml (.../VideoRecorder.mxml) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_flash/src/central/flex/VideoRecorder/src/VideoRecorder.mxml (.../VideoRecorder.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -3,12 +3,15 @@ - - - + + - + - + Index: lams_flash/src/central/flex/VideoRecorderFCKEditor/src/GetRecordingDetailsPopUp.mxml =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/central/flex/VideoRecorderFCKEditor/src/GetRecordingDetailsPopUp.mxml (.../GetRecordingDetailsPopUp.mxml) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_flash/src/central/flex/VideoRecorderFCKEditor/src/GetRecordingDetailsPopUp.mxml (.../GetRecordingDetailsPopUp.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -1,26 +1,34 @@ - + - - + + - + Index: lams_flash/src/central/flex/VideoRecorderFCKEditor/src/VideoControlBar.mxml =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/central/flex/VideoRecorderFCKEditor/src/VideoControlBar.mxml (.../VideoControlBar.mxml) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_flash/src/central/flex/VideoRecorderFCKEditor/src/VideoControlBar.mxml (.../VideoControlBar.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -1,8 +1,9 @@ - + - - + \ No newline at end of file Index: lams_flash/src/central/flex/VideoRecorderFCKEditor/src/VideoRecorderFCKEditor.mxml =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/central/flex/VideoRecorderFCKEditor/src/VideoRecorderFCKEditor.mxml (.../VideoRecorderFCKEditor.mxml) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_flash/src/central/flex/VideoRecorderFCKEditor/src/VideoRecorderFCKEditor.mxml (.../VideoRecorderFCKEditor.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -54,11 +54,11 @@ private static var toolServletLocation:String = "tool/lavidr10/videoRecorderActions.do"; private static var saveToLamsServletLocation:String = "GetRecording"; - // embeds - [Embed(source="./assets/images/playIcon.swf")] [Bindable] private var playIcon:Class; - [Embed(source="./assets/images/pauseIcon.swf")] [Bindable] private var pauseIcon:Class; - [Embed(source="./assets/images/recordIcon.swf")] [Bindable] private var recordIcon:Class; - [Embed(source="./assets/images/okIcon.swf")] [Bindable] private var saveIcon:Class; + // icon embeds + [Embed(source="../../../../../../lams_central/web/images/icons/control_play.png")] [Bindable] private var playIcon:Class; + [Embed(source="../../../../../../lams_central/web/images/icons/control_pause.png")] [Bindable] private var pauseIcon:Class; + [Embed(source="../../../../../../lams_central/web/images/icons/control_record.png")] [Bindable] private var recordIcon:Class; + [Embed(source="../../../../../../lams_central/web/images/icons/accept.png")] [Bindable] private var saveIcon:Class; // called first of all, before any components are initialized private function onPreinitialize(event:Event):void{ @@ -108,7 +108,7 @@ // init buttons states videoControlBar.playButton.enabled = false; - videoControlBar.seekSlider.enabled = false; + videoControlBar.seekSlider.enable(false); videoControlBar.saveAndCloseButton.enabled = false; // add listeners @@ -148,7 +148,6 @@ case "playerModeOffline":{ var nc:NetConnection = new NetConnection(); nc.connect(null); - videoDisplay.bufferTime = 0; videoDisplay.setNetConnection(nc); videoDisplay.makeReadyVideo(filename); break; @@ -166,7 +165,6 @@ mic = VideoDisplayUtil.setupMic(); videoDisplay.attachCamera(cam); videoDisplay.attachMic(mic); - videoDisplay.bufferTime = 2; createConnection(); break; } @@ -183,7 +181,6 @@ mic = VideoDisplayUtil.setupMic(); videoDisplay.attachCamera(cam); videoDisplay.attachMic(mic); - videoDisplay.bufferTime = 2; createConnection(); break; @@ -216,13 +213,14 @@ videoDisplay.addEventListener(VideoDisplayEvent.COMPLETE, onComplete); videoDisplay.addEventListener(VideoDisplayEvent.STARTPUBLISH, onStartPublish); videoDisplay.addEventListener(VideoDisplayEvent.STOPPUBLISH, onStopPublish); + videoDisplay.addEventListener(VideoDisplayEvent.PAUSESEEK, onPauseSeek); + videoDisplay.addEventListener(VideoDisplayEvent.READYSEEK, onReadySeek); videoControlBar.playButton.addEventListener(MouseEvent.CLICK, playClick); - videoControlBar.seekSlider.addEventListener(SliderEvent.CHANGE, seekSliderChange); - videoControlBar.seekSlider.addEventListener(SliderEvent.THUMB_PRESS, seekSliderClick); - videoControlBar.seekSlider.addEventListener(SliderEvent.THUMB_RELEASE, seekSliderClick); - videoControlBar.seekSlider.dataTipFormatFunction = VideoDisplayUtil.secondsToString; + videoControlBar.seekSlider.addEventListener(SliderEvent.THUMB_PRESS, onSeekPress); + videoControlBar.seekSlider.addEventListener(SliderEvent.THUMB_RELEASE, onSeekRelease); + switch(mode){ case "recorderModeFCK":{ videoControlBar.recordButton.addEventListener(MouseEvent.CLICK, recordClick); @@ -356,10 +354,7 @@ videoDisplay.makeReadyVideo(filename); // update tooltip - videoControlBar.recordButton.toolTip = dictionary.getLabel("videorecorder.tooltip.start.recording.next"); - - // change the panel status - videoDisplayPanel.status = dictionary.getLabel("videorecorder.ready"); + videoControlBar.recordButton.toolTip = dictionary.getLabel("videorecorder.tooltip.start.recording.again"); } } @@ -391,10 +386,10 @@ trace("securityErrorHandler: " + event); } - // ugly onBW callback - NetConnection.prototype.onBWDone = function(infoObject) { + // bw detection handler + public function onBWDone(infoObject:Object):void { // print its properties - VideoDisplayUtil.printInfoObject("onBWDone", infoObject) + trace(VideoDisplayUtil.printInfoObject(infoObject, "onBWDone")); } // play button click handler @@ -447,18 +442,15 @@ // onMetaData callback, called from videoDisplay private function onMetaData(event:VideoDisplayEvent):void{ videoDisplayPanel.status = dictionary.getLabel("videorecorder.buffering"); - videoControlBar.seekSlider.minimum = 0; - videoControlBar.seekSlider.maximum = event.metadata.duration; - - playTimer = new Timer(10); - playTimer.addEventListener(TimerEvent.TIMER, updateSeekSlider); - playTimer.start(); + videoControlBar.seekSlider.setMiniMaxValues(0, event.metadata.duration); + videoControlBar.seekSlider.setValue(0); + videoControlBar.seekSlider.startTimerLabel(); } // onReady callback, called from videoDisplay private function onReady(event:VideoDisplayEvent):void{ videoControlBar.playButton.enabled = true; - videoControlBar.seekSlider.enabled = true; + videoControlBar.seekSlider.enable(true); videoControlBar.playButton.setStyle("icon", playIcon); videoControlBar.playButton.toolTip = dictionary.getLabel("videorecorder.tooltip.play"); videoDisplayPanel.status = dictionary.getLabel("videorecorder.ready"); @@ -494,17 +486,18 @@ videoControlBar.playButton.enabled = false; videoControlBar.playButton.toolTip = dictionary.getLabelAndConcatenate("videorecorder.tooltip.play", [" (", dictionary.getLabel("videorecorder.disabled"), ")"]); - videoControlBar.seekSlider.enabled = false; - videoControlBar.seekSlider.minimum = 0; - videoControlBar.seekSlider.maximum = 0; - videoControlBar.seekSlider.value = videoControlBar.seekSlider.minimum; + // reset the seek slider timer + videoControlBar.seekSlider.resetTimerLabel(); + videoControlBar.seekSlider.setMiniMaxValues(0, 0); + videoControlBar.seekSlider.setValue(0); + videoControlBar.seekSlider.enable(false); videoControlBar.recordButton.toolTip = dictionary.getLabel("videorecorder.tooltip.stop.recording"); videoDisplayPanel.status = dictionary.getLabel("videorecorder.recording"); recTimer = new Timer(250); - recTimer.addEventListener(TimerEvent.TIMER, updateTimerLabelForRecording); + recTimer.addEventListener(TimerEvent.TIMER, videoControlBar.seekSlider.updateTimerLabelForRecording); recTimer.start(); } @@ -541,49 +534,33 @@ recTimer.stop(); } - // update method called from a timer (launched when metadata is received) - private function updateSeekSlider(event:TimerEvent):void{ - // if the video isn't actually playing yet - if(videoDisplay.playMode == videoDisplay.INIT_MODE || videoDisplay. playMode == videoDisplay.READY_MODE){ - videoControlBar.seekSlider.value = 0; - videoControlBar.timerLabel.text = "0:00" + " / " + VideoDisplayUtil.secondsToString(String(videoDisplay.duration)); - } - // otherwise, if it is playing - else if(videoDisplay.playMode == videoDisplay.PLAY_MODE || videoDisplay.playMode == videoDisplay.PAUSE_MODE){ - videoControlBar.seekSlider.value = videoDisplay.time; - videoControlBar.timerLabel.text = VideoDisplayUtil.secondsToString(String(videoDisplay.time)) + " / " + VideoDisplayUtil.secondsToString(String(videoDisplay.duration)); - } + // onSeekPress callback, called from seekSlider + private function onSeekPress(event:SliderEvent):void{ + } - // updates timerLabel when recording - private function updateTimerLabelForRecording(event:TimerEvent):void{ - var timer:Timer = Timer(event.currentTarget); - videoControlBar.timerLabel.text = VideoDisplayUtil.secondsToString(String(timer.currentCount * timer.delay / 1000)); + // onSeekRelease callback, called from seekSlider + private function onSeekRelease(event:SliderEvent):void{ + videoDisplayPanel.status = dictionary.getLabel("videorecorder.buffering"); + videoControlBar.playButton.setStyle("icon", playIcon); + videoControlBar.playButton.enabled = false; + videoControlBar.playButton.toolTip = dictionary.getLabelAndConcatenate("videorecorder.tooltip.play", [" (", dictionary.getLabel("videorecorder.disabled"), ")"]); + videoControlBar.seekSlider.enable(false); } - // seek slider click handler - private function seekSliderClick(event:SliderEvent):void { - // if seekslider is enabled - - if(videoControlBar.seekSlider.enabled){ - // if the mouse is pressed - if(event.type == SliderEvent.THUMB_PRESS){ - // stop the timer so that the bar seekSlider can manually be controlled - playTimer.stop(); - } - // if the mouse is released - else if(event.type == SliderEvent.THUMB_RELEASE){ - // start the timer again and allow it to regain control of the seekSlider - playTimer.start(); - } - } + // onPauseSeek callback, called from seekSlider + private function onPauseSeek(event:VideoDisplayEvent):void{ + } - // seeks to the given place in the movie - private function seekSliderChange(event:SliderEvent):void { - videoDisplay.seek(event.value); + // onReadySeek callback, called from videoDisplay + private function onReadySeek(event:VideoDisplayEvent):void{ + videoControlBar.playButton.enabled = true; + videoControlBar.playButton.toolTip = dictionary.getLabel("videorecorder.tooltip.resume"); + videoControlBar.seekSlider.enable(true); + videoDisplayPanel.status = dictionary.getLabel("videorecorder.ready"); } - + ]]> Index: lams_flash/src/common/flex/org/lamsfoundation/lams/common/managers/LamsAjaxOverlayManager.as =================================================================== diff -u --- lams_flash/src/common/flex/org/lamsfoundation/lams/common/managers/LamsAjaxOverlayManager.as (revision 0) +++ lams_flash/src/common/flex/org/lamsfoundation/lams/common/managers/LamsAjaxOverlayManager.as (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -0,0 +1,93 @@ +package org.lamsfoundation.lams.common.managers +{ + import mx.collections.ArrayCollection; + import mx.containers.Canvas; + import mx.controls.Image; + import mx.core.Application; + import mx.core.UIComponent; + + public class LamsAjaxOverlayManager + { + private static var overlays:ArrayCollection = new ArrayCollection(); + + [Embed(source="../../../../../../../../../lams_central/web/images/ajax-loader-big.swf")] + [Bindable] + private static var ajaxIcon:Class; + + public function LamsAjaxOverlayManager() + { + + } + + public static function showOverlay(obj:UIComponent):void{ + var overlaySet:Object = isInOverlays(obj); + + if(overlaySet != null && overlaySet.overlay.visible == true) + return; + + if(!overlaySet){ + overlaySet = createNewOverlaySet(obj); + overlays.addItem(overlaySet); + } + + overlaySet.object.enabled = false; + overlaySet.overlay.visible = true; + } + + public static function hideOverlay(obj:UIComponent):void{ + var overlaySet:Object = isInOverlays(obj); + if(overlaySet){ + overlaySet.object.enabled = true; + overlaySet.overlay.visible = false; + + overlaySet.object = null; + } + } + + private static function createNewOverlaySet(obj:Object):Object{ + var newOverlaySet:Object = new Object(); + newOverlaySet.object = obj; + + var newOverlayCanvas:Canvas = getUnusedOverlay(); + + if(!newOverlayCanvas) + newOverlayCanvas = new Canvas(); + + newOverlayCanvas.x = obj.x; + newOverlayCanvas.y = obj.y; + newOverlayCanvas.height = obj.height; + newOverlayCanvas.width = obj.width; + + Application.application.addChild(newOverlayCanvas); + + var ajaxImage:Image = new Image(); + ajaxImage.source = ajaxIcon; + ajaxImage.setStyle("horizontalCenter", 0); + ajaxImage.setStyle("verticalCenter", 0); + + newOverlayCanvas.addChild(ajaxImage); + + newOverlaySet.overlay = newOverlayCanvas; + + return newOverlaySet; + } + + private static function isInOverlays(obj:UIComponent):Object{ + for each(var overlay:Object in overlays){ + if(overlay.object == obj) + return overlay; + } + + return null; + } + + private static function getUnusedOverlay():Canvas{ + for each(var overlay:Object in overlays){ + if(overlay.object == null) + return overlay.canvas; + } + + return null + } + } +} \ No newline at end of file Index: lams_flash/src/common/flex/org/lamsfoundation/lams/common/ui/components/SeekSlider.mxml =================================================================== diff -u -r9b0b6e0f74c421abb1221ef8a8b381f7b9e07278 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/common/flex/org/lamsfoundation/lams/common/ui/components/SeekSlider.mxml (.../SeekSlider.mxml) (revision 9b0b6e0f74c421abb1221ef8a8b381f7b9e07278) +++ lams_flash/src/common/flex/org/lamsfoundation/lams/common/ui/components/SeekSlider.mxml (.../SeekSlider.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -136,5 +136,5 @@ - + Index: lams_flash/src/common/flex/org/lamsfoundation/lams/common/ui/components/VideoDisplay.mxml =================================================================== diff -u -r9b0b6e0f74c421abb1221ef8a8b381f7b9e07278 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_flash/src/common/flex/org/lamsfoundation/lams/common/ui/components/VideoDisplay.mxml (.../VideoDisplay.mxml) (revision 9b0b6e0f74c421abb1221ef8a8b381f7b9e07278) +++ lams_flash/src/common/flex/org/lamsfoundation/lams/common/ui/components/VideoDisplay.mxml (.../VideoDisplay.mxml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -179,7 +179,8 @@ // called from metadata callback private function checkReady(event:TimerEvent):void{ - if(playMode == INIT_MODE && _isBufferFull){ + // if we are in init and the buffer is full or the movie is completely loaded + if(playMode == INIT_MODE && (_isBufferFull || _ns.bytesLoaded == _ns.bytesTotal)){ setReady(event); } } @@ -205,7 +206,7 @@ // called from metadata callback private function checkReadySeek(event:TimerEvent):void{ - if(playMode == PAUSE_MODE && _isBufferFull){ + if(playMode == PAUSE_MODE && (_isBufferFull || _ns.bytesLoaded == _ns.bytesTotal)){ setReadySeek(event); } } @@ -611,7 +612,7 @@ } case "NetStream.Play.Complete":{ // alert - //Alert.show("NetStream.Play.Complete"); + // Alert.show("NetStream.Play.Complete from red5 callback"); makeReadyAgain(); dispatchEvent(new VideoDisplayEvent(VideoDisplayEvent.COMPLETE)); break; @@ -623,6 +624,7 @@ // checks end of the stream (called every second from the timer) private function checkEndStream(event:TimerEvent):void{ if(_ns.time >= metadata.duration){ + // Alert.show("NetStream.Play.Complete from checkStream"); makeReadyAgain(); dispatchEvent(new VideoDisplayEvent(VideoDisplayEvent.COMPLETE)); } Index: lams_tool_videorecorder/build.xml =================================================================== diff -u -r3d081de4a45da632ee6029251318fac795d41813 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_tool_videorecorder/build.xml (.../build.xml) (revision 3d081de4a45da632ee6029251318fac795d41813) +++ lams_tool_videorecorder/build.xml (.../build.xml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -480,7 +480,7 @@ - Index: lams_tool_videorecorder/conf/hibernate/mappings/org/lamsfoundation/lams/tool/videoRecorder/model/VideoRecorder.hbm.xml =================================================================== diff -u -r049932651d9d1c08ed1681df0a044d7f519a4215 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_tool_videorecorder/conf/hibernate/mappings/org/lamsfoundation/lams/tool/videoRecorder/model/VideoRecorder.hbm.xml (.../VideoRecorder.hbm.xml) (revision 049932651d9d1c08ed1681df0a044d7f519a4215) +++ lams_tool_videorecorder/conf/hibernate/mappings/org/lamsfoundation/lams/tool/videoRecorder/model/VideoRecorder.hbm.xml (.../VideoRecorder.hbm.xml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -69,6 +69,24 @@ /> + + + + + + + + { + + private String sortBy; + private String sortDirection; + + public VideoRecorderCommentComparator(String sortBy, String sortDirection){ + this.sortBy = sortBy; + this.sortDirection = sortDirection; + } + + public int compare(VideoRecorderCommentDTO dto1, VideoRecorderCommentDTO dto2) { + if(sortBy.compareTo("date") == 0){ + Date date1 = dto1.getCreateDate(); + Date date2 = dto2.getCreateDate(); + + int difference = date1.compareTo(date2); + + if(Math.abs(difference) == 0) + return 1; + + if(sortDirection.compareTo("ascending") == 0){ + int result = difference / Math.abs(difference); + return result; + } + else if(sortDirection.compareTo("descending") == 0){ + int result = -difference / Math.abs(difference); + return result; + } + + } + + return 0; + } +} \ No newline at end of file Index: lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/util/VideoRecorderRecordingComparator.java =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/util/VideoRecorderRecordingComparator.java (.../VideoRecorderRecordingComparator.java) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/util/VideoRecorderRecordingComparator.java (.../VideoRecorderRecordingComparator.java) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -32,22 +32,25 @@ if(user2 == null) return 1; - Long userId1 = user1.getUid(); - Long userId2 = user2.getUid(); + String userName1 = user1.getFirstName() + " " + user1.getLastName(); + String userName2 = user2.getFirstName() + " " + user2.getLastName(); + userName1 = userName1.toLowerCase(); + userName2 = userName2.toLowerCase(); - if(userId1 > userId2) { - if(sortDirection == "ascending") - return -1; - else - return 1; - } else if(userId1 == userId2) { - return 0; - } else { - if(sortDirection == "ascending") - return 1; - else - return -1; + int difference = userName1.compareTo(userName2); + + if(Math.abs(difference) == 0) + return 1; + + if(sortDirection.compareTo("ascending") == 0){ + + int result = difference / Math.abs(difference); + return result; } + else if(sortDirection.compareTo("descending") == 0){ + int result = -difference / Math.abs(difference); + return result; + } } else if(sortBy.compareTo("date") == 0){ VideoRecorderUser user1 = dto1.getCreateBy(); @@ -87,8 +90,8 @@ if(user2 == null) return 1; - String title1 = dto1.getTitle(); - String title2 = dto2.getTitle(); + String title1 = dto1.getTitle().toLowerCase(); + String title2 = dto2.getTitle().toLowerCase(); int difference = title1.compareTo(title2); Index: lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/videoRecorderApplicationContext.xml =================================================================== diff -u -r647644862f7a21c589db91a4e21bba36970ce236 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/videoRecorderApplicationContext.xml (.../videoRecorderApplicationContext.xml) (revision 647644862f7a21c589db91a4e21bba36970ce236) +++ lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/videoRecorderApplicationContext.xml (.../videoRecorderApplicationContext.xml) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -59,7 +59,7 @@ - + Index: lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/web/servlets/ExportServlet.java =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/web/servlets/ExportServlet.java (.../ExportServlet.java) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/web/servlets/ExportServlet.java (.../ExportServlet.java) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -64,6 +64,7 @@ import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.ExternalServerUtil; +import org.lamsfoundation.lams.util.HttpUrlConnectionUtil; import org.lamsfoundation.lams.web.servlet.AbstractExportPortfolioServlet; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -336,14 +337,17 @@ VideoRecorderRecordingDTO vr = (VideoRecorderRecordingDTO) iter.next(); // get the stream from the external server - InputStream is = ExternalServerUtil.getResponseInputStreamFromExternalServer(VIDEORECORDER_RECORDINGS_FOLDER_SRC + vr.getFilename(), new HashMap()); + int success = HttpUrlConnectionUtil.writeResponseToFile(VIDEORECORDER_RECORDINGS_FOLDER_SRC, VIDEORECORDER_RECORDINGS_FOLDER_DEST, vr.getFilename(), new Cookie[0]); - // write the flv file locally - File file = ExternalServerUtil.writeFile(is, VIDEORECORDER_RECORDINGS_FOLDER_DEST + vr.getFilename()); - - // add the filename to the list - fileArray[1].add(vr.getFilename()); - } + // if success + if(success == 1){ + // add the filename to the list + fileArray[1].add(vr.getFilename()); + logger.debug("file copy complete"); + }else{ + logger.debug("file copy failed"); + } + } } catch (Exception e) { logger.error("Could not find files on Red5 server", e); } Index: lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/web/servlets/VideoRecorderAction.java =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/web/servlets/VideoRecorderAction.java (.../VideoRecorderAction.java) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/web/servlets/VideoRecorderAction.java (.../VideoRecorderAction.java) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -57,6 +57,7 @@ import org.lamsfoundation.lams.tool.videoRecorder.service.IVideoRecorderService; import org.lamsfoundation.lams.tool.videoRecorder.service.VideoRecorderService; import org.lamsfoundation.lams.tool.videoRecorder.service.VideoRecorderServiceProxy; +import org.lamsfoundation.lams.tool.videoRecorder.util.VideoRecorderCommentComparator; import org.lamsfoundation.lams.tool.videoRecorder.util.VideoRecorderRecordingComparator; import org.lamsfoundation.lams.tool.videoRecorder.dto.VideoRecorderCommentDTO; import org.lamsfoundation.lams.tool.videoRecorder.dto.VideoRecorderRatingDTO; @@ -470,6 +471,7 @@ for(VideoRecorderRecordingDTO videoRecorderRecordingDTO: videoRecorderRecordingDTOs){ VideoRecorderUser user = videoRecorderRecordingDTO.getCreateBy(); Set comments = videoRecorderRecordingDTO.getComments(); + Set ratings = videoRecorderRecordingDTO.getRatings(); xmlOutput += ""; @@ -508,7 +510,11 @@ private String buildVideoCommentsXML(Set comments){ String xmlOutput = ""; - for(VideoRecorderCommentDTO comment: comments){ + VideoRecorderCommentDTO[] commentArray = (VideoRecorderCommentDTO[])comments.toArray(new VideoRecorderCommentDTO[comments.size()]); + + //for(VideoRecorderCommentDTO comment: comments){ + for(int i = commentArray.length - 1; i >= 0; i--){ + VideoRecorderCommentDTO comment = commentArray[i]; xmlOutput += ""; xmlOutput += "" + comment.getCreateBy().getFirstName() + " " + comment.getCreateBy().getLastName() + ""; xmlOutput += "" + comment.getCreateDate().toLocaleString() + ""; Index: lams_tool_videorecorder/web/includes/flash/VideoRecorder.swf =================================================================== diff -u -r8f9b7f1797cfacadcfa92406622f188b26cc2674 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_tool_videorecorder/web/includes/flash/VideoRecorderFCKEditor.swf =================================================================== diff -u -r8f9b7f1797cfacadcfa92406622f188b26cc2674 -r01f1d853607cc14f73aa2429275084f4890f92b7 Binary files differ Index: lams_tool_videorecorder/web/pages/authoring/basic.jsp =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r01f1d853607cc14f73aa2429275084f4890f92b7 --- lams_tool_videorecorder/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 42aa5319fbd33938828764c43dd0ab1ca80e2416) +++ lams_tool_videorecorder/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 01f1d853607cc14f73aa2429275084f4890f92b7) @@ -9,7 +9,7 @@ - +