From: Jan Michel <jan@mueschelsoft.de> Date: Mon, 20 Apr 2015 21:18:14 +0000 (+0200) Subject: added rooms to presenter X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=140eaa8b12253bf984d7741c363dde46dfbfdb15;p=labtools.git added rooms to presenter --- diff --git a/presenter/.gitignore b/presenter/.gitignore new file mode 100644 index 0000000..435e7d1 --- /dev/null +++ b/presenter/.gitignore @@ -0,0 +1 @@ +.kateproject.d/ diff --git a/presenter/.kateproject b/presenter/.kateproject new file mode 100644 index 0000000..4bc5cd7 --- /dev/null +++ b/presenter/.kateproject @@ -0,0 +1,4 @@ +{ + "name": "Presenter" +, "files": [ { "git": 1 } ] +} diff --git a/presenter/currentstate b/presenter/currentstate new file mode 120000 index 0000000..17fb8d9 --- /dev/null +++ b/presenter/currentstate @@ -0,0 +1 @@ +/dev/shm/currentstate \ No newline at end of file diff --git a/presenter/getPic.pl b/presenter/getPic.pl index 53f1c28..bf1d77b 100755 --- a/presenter/getPic.pl +++ b/presenter/getPic.pl @@ -1,11 +1,28 @@ #!/usr/bin/perl use CGI::Carp qw(warningsToBrowser fatalsToBrowser); +use CGI; print "Content-type: text/html\n\n"; -open FILE, "<", "presenter"; -my @data = <FILE>; -close FILE; -my $f = $data[0]; +my $cgi = new CGI(); + + +my $room = $cgi->param('room'); +if (!($room =~ /^[a-zA-Z0-9]+$/) || !(-d "store/$room")) { + print "Invalid room"; + return 1; +} + +my $old = $cgi->param('old'); +my $timer = 0; +my $f; +do { + open FILE, "<", "store/$room/currentstate"; + my @data = <FILE>; + close FILE; + $f = $data[0]; + chomp($f); + sleep(1) if($f eq $old); + }while($timer++ < 30 && $f eq $old); print $f; \ No newline at end of file diff --git a/presenter/getfiles.pl b/presenter/getfiles.pl index c917f1f..5010e7e 100755 --- a/presenter/getfiles.pl +++ b/presenter/getfiles.pl @@ -1,11 +1,24 @@ #!/usr/bin/perl use CGI::Carp qw(warningsToBrowser fatalsToBrowser); +use CGI; print "Content-type: text/html\n\n"; -my @files = qx(cd store; ls -1 * | sort); + +my $cgi = new CGI(); + + +my $room = $cgi->param('room'); +if (!($room =~ /^[a-zA-Z0-9]+$/) || !(-d "store/$room")) { + print "Invalid room"; + return 1; +} + +my $cmd = "cd store;cd $room; ls -1 -v"; +my @files = qx($cmd); print "<select id=\"filelist\" size=\"20\">\n"; foreach my $f (@files) { chomp($f); + next if $f eq "currentstate"; print "<option value='$f'>$f\n"; } print "</select>"; diff --git a/presenter/index.pl b/presenter/index.pl index 4994e3d..ff8d763 100755 --- a/presenter/index.pl +++ b/presenter/index.pl @@ -3,14 +3,7 @@ use CGI::Carp qw(warningsToBrowser fatalsToBrowser); print "Content-type: text/html\n\n"; -use Data::Dumper; -use warnings; -use strict; -use utf8; -binmode(STDIN, ":utf8"); -binmode(STDOUT, ":utf8"); -use URI::Escape qw(uri_unescape uri_escape); print <<HDOC; <!DOCTYPE html> @@ -21,27 +14,20 @@ print <<HDOC; <script src="scripts.js" type="text/javascript"></script> <meta charset="UTF-8"/> </head> +<body class="title"> +<h1>Remote Presenter</h1> +<select id="roomlist" size="20"> HDOC -print '<body class="'.$ENV{'QUERY_STRING'}.'">'; -print <<HDOC; -<div id="content">Remote Presenter<br><-- Click to show or just watch!</div> -<div id="control"> -<form method="post" action="uploadFiles.pl" enctype="multipart/form-data"> -<input type="file" name="upfile"><input type="submit" name="button" value="Upload"> -</form> -<button type="button" onClick="updatefiles();">Update</button> +my @files = qx(cd store; ls -1 -v ); -<hr>Files -<div id="files"> </div> -<button type="button" onClick="window.open('store/'+document.getElementById('filelist').value)">Show Me!</button><button type="button" onClick="present(document.getElementById('filelist').value)">Show All!</button> -</div> -</body></html> -HDOC - -print ""; - - - - - +foreach my $f (@files) { + chomp($f); + print "<option value='$f'>$f\n"; + } +print <<HDOC; +</select><br> +<button type="button" onClick="window.location='showroom.pl?'+document.getElementById('roomlist').value">Enter Room</button> +</body> +</html> +HDOC \ No newline at end of file diff --git a/presenter/presenter b/presenter/presenter deleted file mode 120000 index 2be2ab5..0000000 --- a/presenter/presenter +++ /dev/null @@ -1 +0,0 @@ -/dev/shm/presenter \ No newline at end of file diff --git a/presenter/scripts.js b/presenter/scripts.js index ef481e7..938548a 100644 --- a/presenter/scripts.js +++ b/presenter/scripts.js @@ -1,5 +1,5 @@ -var currentPic = ''; +var currentPic = ' '; function getData(command,dId,callback) { @@ -27,12 +27,13 @@ function getData(command,dId,callback) { function updatefiles() { - getData("getfiles.pl","files"); + room = document.getElementById("showroom").getAttribute("room"); + getData("getfiles.pl?room="+room,"files"); } function present(f) { if(f != "") { - getData("showPic.pl?"+f); + getData("showPic.pl?img="+f+"&room="+document.getElementById("showroom").getAttribute("room")); } else { alert("Select a file to show!"); @@ -40,14 +41,15 @@ function present(f) { } function updatepresentation(t) { + room = document.getElementById("showroom").getAttribute("room"); + t = t.trim(); if(currentPic != t) { currentPic = t; - document.getElementById("content").innerHTML = '<img src="store/'+t+'">'; + document.getElementById("content").innerHTML = '<img src="store/'+room+'/'+t+'">'; } - setTimeout('getData("getPic.pl",null,updatepresentation)',1000); + setTimeout('getData("getPic.pl?old='+t+'&room='+room+'",null,updatepresentation)',1000); } setTimeout('updatefiles();',500); - -setTimeout('getData("getPic.pl",null,updatepresentation)',1000); +setTimeout('updatepresentation(" ");',200); diff --git a/presenter/showPic.pl b/presenter/showPic.pl index fcfd74d..87d0fbd 100755 --- a/presenter/showPic.pl +++ b/presenter/showPic.pl @@ -1,11 +1,24 @@ #!/usr/bin/perl use CGI::Carp qw(warningsToBrowser fatalsToBrowser); +use CGI; print "Content-type: text/html\n\n"; +my $cgi = new CGI(); -my $t = $ENV{'QUERY_STRING'}; -$t =~ s-/--; -system("echo $t>presenter"); +my $room = $cgi->param("room"); +if (!($room =~ /^[a-zA-Z0-9]+$/) || !(-d "store/$room")) { + print "Invalid room"; + return 1; +} + + +my $t = $cgi->param("img"); +if($t =~ /[\"\$\(\)\/]/ || !(-e "store/$room/$t")) { + print "Invalid selection"; + return 1; +} + +system("echo $t>store/$room/currentstate"); 1; \ No newline at end of file diff --git a/presenter/showroom.pl b/presenter/showroom.pl new file mode 100755 index 0000000..e63b0c3 --- /dev/null +++ b/presenter/showroom.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl +use CGI::Carp qw(warningsToBrowser fatalsToBrowser); + +print "Content-type: text/html\n\n"; + +use Data::Dumper; +use warnings; +use strict; +use utf8; +binmode(STDIN, ":utf8"); +binmode(STDOUT, ":utf8"); + +use URI::Escape qw(uri_unescape uri_escape); + +my $room = $ENV{'QUERY_STRING'}; +$room =~ s![\(\)/]+!!g; + + +print <<HDOC; +<!DOCTYPE html> +<html lang="en"> +<head> + <title>Remote Presenter</title> + <link rel="stylesheet" type="text/css" href="style.css"> + <script src="scripts.js" type="text/javascript"></script> + <meta charset="UTF-8"/> +</head> +<body id="showroom" room="$room"> +HDOC +print <<HDOC; +<div id="content">Remote Presenter<br><-- Click to show or just watch!</div> +<div id="control"> +Select a file and press upload. +<form method="post" action="uploadFiles.pl" enctype="multipart/form-data"> +<input type="hidden" name="room" value="$room"> +<input type="file" name="upfile"><input type="submit" name="button" value="Upload"> +</form> +<hr> +<button type="button" onClick="updatefiles();">Update file list</button> +<div id="files"> </div> +<button type="button" onClick="window.open('store/$room/'+document.getElementById('filelist').value)">Show Me!</button> +<button type="button" onClick="present(document.getElementById('filelist').value)">Show All!</button> + +</body></html> +HDOC + + + + + + diff --git a/presenter/store/.empty b/presenter/store/.empty new file mode 100644 index 0000000..e69de29 diff --git a/presenter/style.css b/presenter/style.css index c50d40a..9d42381 100644 --- a/presenter/style.css +++ b/presenter/style.css @@ -20,7 +20,18 @@ body { padding-left:20px; } - +body.title { + background:#f0f0ea; + padding:0; +} + +h1 { + color: #889; + width:100%; + padding-left:20px; + border-bottom:1px solid #aaa; + } + #control { height:100%; width:220px; @@ -47,23 +58,14 @@ body { #content img { height:100%; - /*width:100%;*/ max-width:100%; object-fit:contain; margin:0; padding:0; } - -div.but { - border:1px solid #aaa; - background:#fff; - width:100px; - margin:5px; - text-align:center; - display:inline-block; - cursor:hand; - color:#889; - } +#roomlist { + width:200px; +} diff --git a/presenter/uploadFiles.pl b/presenter/uploadFiles.pl index 4207153..abf8caf 100755 --- a/presenter/uploadFiles.pl +++ b/presenter/uploadFiles.pl @@ -9,13 +9,20 @@ print "Content-type: text/html\n\n"; my $upfile = $cgi->param('upfile'); +my $room = $cgi->param('room'); +if (!($room =~ /^[a-zA-Z0-9]+$/) || !(-d "store/$room")) { + print "Invalid room"; + return 1; +} + + my $basename = GetBasename($upfile); $basename =~ s-/--; my $fh = $cgi->upload('upfile'); -if (! open(OUTFILE, ">store/$basename") ) { +if (! open(OUTFILE, ">store/$room/$basename") ) { print "Can't open outfile for writing - $!"; exit(-1); } @@ -32,8 +39,8 @@ close(OUTFILE); if($basename =~ /.pdf$/) { my $b = $basename; $b =~ s/.pdf//; - system("cd store;../convert.sh $basename $b"); - system("rm store/$basename"); + system("cd store/$room;../../convert.sh $basename $b"); + system("rm store/$room/$basename"); }