diff --git a/record-and-playback/core/lib/recordandplayback/generators/events.rb b/record-and-playback/core/lib/recordandplayback/generators/events.rb index 937ea73b3d8a03db4c8814550c26f7e4528820d6..91309be4d9bbce531914e3c104099f5dee7419db 100755 --- a/record-and-playback/core/lib/recordandplayback/generators/events.rb +++ b/record-and-playback/core/lib/recordandplayback/generators/events.rb @@ -3,6 +3,18 @@ require 'nokogiri' module BigBlueButton module Events + + def self.get_meeting_metadata(events_xml) + doc = Nokogiri::XML(File.open(events_xml)) + metadata = {} + doc.xpath("//metadata").each do |e| + e.keys.each do |k| + metadata[k] = e.attribute(k) + end + end + metadata + end + # Get the timestamp of the first event. def self.first_event_timestamp(events_xml) doc = Nokogiri::XML(File.open(events_xml)) diff --git a/record-and-playback/core/resources/raw/974a4b8c-5bf7-4382-b4cd-eb26af7dfcc2/events.xml b/record-and-playback/core/resources/raw/974a4b8c-5bf7-4382-b4cd-eb26af7dfcc2/events.xml index 3083b04c0d632353237527228355a009bd70e3a7..1ec886c11820f686316ce77543f9d1e621323c20 100755 --- a/record-and-playback/core/resources/raw/974a4b8c-5bf7-4382-b4cd-eb26af7dfcc2/events.xml +++ b/record-and-playback/core/resources/raw/974a4b8c-5bf7-4382-b4cd-eb26af7dfcc2/events.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <recording meeting_id="974a4b8c-5bf7-4382-b4cd-eb26af7dfcc2"> - <metadata> - <title>Business Ecosystem</title> - <subject>TTMG 5001</subject> - <description>How to manage your product's ecosystem</description> - <creator>Richard Alam</creator> - <contributor>Popen3</contributor> - <language>en-US</language> - <identifier>ttmg-5001-2</identifier> - </metadata> + <metadata + title="Business Ecosystem" + subject="TTMG 5001" + description="How to manage your product's ecosystem" + creator="Richard Alam" + contributor="Popen3" + language="en-US" + identifier="ttmg-5001-2" + /> <event timestamp="1305560822952" module="PARTICIPANT" eventname="ParticipantJoinEvent"> <role>MODERATOR</role> <userId>11</userId> diff --git a/record-and-playback/core/resources/raw/metadata.xml b/record-and-playback/core/resources/raw/metadata.xml new file mode 100755 index 0000000000000000000000000000000000000000..a2b26e85950cba84007602a88e6ca9f53921c07f --- /dev/null +++ b/record-and-playback/core/resources/raw/metadata.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<recording meeting_id="974a4b8c-5bf7-4382-b4cd-eb26af7dfcc2"> + <metadata + title="Business Ecosystem" + subject="TTMG 5001" + description="How to manage your product's ecosystem" + creator="Richard Alam" + contributor="Popen3" + language="en-US" + identifier="ttmg-5001-2" + /> +</recording> \ No newline at end of file diff --git a/record-and-playback/core/spec/recordandplayback/events_spec.rb b/record-and-playback/core/spec/recordandplayback/events_spec.rb new file mode 100755 index 0000000000000000000000000000000000000000..7fc8e2911df04728a828d558cabe1e105b9a01d7 --- /dev/null +++ b/record-and-playback/core/spec/recordandplayback/events_spec.rb @@ -0,0 +1,16 @@ +require 'spec_helper' +require 'redis' + +module BigBlueButton + describe Events do + context "#success" do + it "should extract the meeting metadata" do + dir = "resources/raw" + events_xml = "#{dir}/metadata.xml" + metadata = BigBlueButton::Events.get_meeting_metadata(events_xml) + puts metadata + puts metadata['title'] + end + end + end +end \ No newline at end of file diff --git a/record-and-playback/matterhorn/scripts/publish/matterhorn.rb b/record-and-playback/matterhorn/scripts/publish/matterhorn.rb index 1817d4d288713bddd4baa9e49fdd4c5d5464fd3f..53e93695e9850002562fdb124371bd25e260fec2 100755 --- a/record-and-playback/matterhorn/scripts/publish/matterhorn.rb +++ b/record-and-playback/matterhorn/scripts/publish/matterhorn.rb @@ -34,15 +34,12 @@ FileUtils.cp("#{process_dir}/deskshare.flv", target_dir) FileUtils.cp("#{process_dir}/manifest.xml", target_dir) FileUtils.cp("#{process_dir}/dublincore.xml", target_dir) -puts Dir.pwd Dir.chdir(target_dir) do - puts Dir.pwd BigBlueButton::MatterhornProcessor.zip_artifacts("muxed-audio-webcam.flv", "deskshare.flv", "dublincore.xml", "manifest.xml", "#{meeting_id}.zip") end -puts Dir.pwd -cmd = "scp -i #{scp_key} #{target_dir}/#{meeting_id}.zip #{scp_user}@#{scp_server}:#{scp_inbox}" -puts cmd -Open3.popen3(cmd) do | stdin, stdout, stderr| - p $?.exitstatus +command = "scp -i #{scp_key} #{target_dir}/#{meeting_id}.zip #{scp_user}@#{scp_server}:#{scp_inbox}" +BigBlueButton.logger.info(command) +Open3.popen3(command) do | stdin, stdout, stderr| + BigBlueButton.logger.info("scp result=#{$?.exitstatus}") end diff --git a/record-and-playback/simple/playback/playback.js b/record-and-playback/simple/playback/playback.js index 6e2624bf69ec4f8731c47d4fcb3db2dd26894d30..582dc7660b3b7c76c42bbfbf7e080e801792c02f 100755 --- a/record-and-playback/simple/playback/playback.js +++ b/record-and-playback/simple/playback/playback.js @@ -61,7 +61,7 @@ function getUrlParameters() { } }); - var p = 0; + var p = 0; $(xml).find("event").each(function(){ var event = $(this); if (event.attr('eventname') === 'SharePresentationEvent'){ @@ -70,10 +70,10 @@ function getUrlParameters() { time : (event.attr('timestamp') - start) / 1000 }; presentations[p] = sharePresentationEvent; - p++; + p++; } }); - + var i = 0; $(xml).find("event").each(function(){ var event = $(this); @@ -85,7 +85,8 @@ function getUrlParameters() { slideTransitions[i] = transitionEvent; i++; } - }); + + }); } function onTimeUpdate(){ @@ -98,19 +99,19 @@ function getUrlParameters() { return; } - var lastTransition = slideTransitions[slideTransitions.length-1].time; - if (lastTransition < now) { - var slideIndex = parseInt(slideTransitions[slideTransitions.length-1].slide) + 1; - var slideToShow = PRESENTATION + presentationName + '/slide-' + slideIndex + '.png'; - $('#imgSlide').attr('src', slideToShow); - return; - } + var lastTransition = slideTransitions[slideTransitions.length-1].time; + if (lastTransition < now) { + var slideIndex = parseInt(slideTransitions[slideTransitions.length-1].slide) + 1; + var slideToShow = PRESENTATION + presentationName + '/slide-' + slideIndex + '.png'; + $('#imgSlide').attr('src', slideToShow); + return; + } $.each(presentations, function(index, value){ var time = value.time; if (time < now && presentations[index].time < now){ - presentationName = presentations[index].name + presentationName = presentations[index].name } }); @@ -121,7 +122,7 @@ function getUrlParameters() { if ((time < now && slideTransitions[index + 1].time > now)) { var slideIndex = parseInt(value.slide) + 1; - var slideToShow = PRESENTATION + presentationName + '/slide-' + slideIndex + '.png'; + var slideToShow = PRESENTATION + presentationName + '/slide-' + slideIndex + '.png'; $('#imgSlide').attr('src', slideToShow); } }); diff --git a/record-and-playback/simple/scripts/publish/simple.rb b/record-and-playback/simple/scripts/publish/simple.rb index 5589485f486d97f9e125190e04f21f30f6f2b598..146e4968fb2d5b992460e73e1387b6fb5bea3d2b 100755 --- a/record-and-playback/simple/scripts/publish/simple.rb +++ b/record-and-playback/simple/scripts/publish/simple.rb @@ -20,7 +20,7 @@ simple_props = YAML::load(File.open('simple.yml')) recording_dir = bbb_props['recording_dir'] process_dir = "#{recording_dir}/process/simple/#{meeting_id}" publish_dir = simple_props['publish_dir'] -playback_host = simple_prop['playback_host'] +playback_host = simple_props['playback_host'] target_dir = "#{recording_dir}/publish/simple/#{meeting_id}" if FileTest.directory?(target_dir) @@ -40,10 +40,35 @@ FileUtils.cp_r("#{process_dir}/presentation", package_dir) FileUtils.cp_r(package_dir, publish_dir) dir_list = Dir.entries(publish_dir) - ['.', '..'] +recordings = [] dir_list.each do |d| if File::directory?("#{publish_dir}/#{d}") - puts d + rec_time = File.ctime("#{publish_dir}/#{d}") + play_link = "http://#{playback_host}/playback/playback.html?meetingId=#{d}" + + metadata = BigBlueButton::Events.get_meeting_metadata("#{publish_dir}/#{d}/events.xml") + puts metadata + recordings << {:rec_time => rec_time, :link => play_link, :title => metadata['title']} end end - +b = Builder::XmlMarkup.new(:indent => 2) + +html = b.html { + b.head { + b.title "Simple Playback Recordings" + } + b.body { + b.h1 "Simple Playback Recordings" + recordings.each do |r| + b.p { |y| + y << r[:rec_time].to_s + b.a({:href => r[:link]}, r[:title]) + } + end + } + } + +index_html = File.new("#{publish_dir}/index.html","w") +index_html.write(html) +index_html.close \ No newline at end of file