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>&lt;-- 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">&nbsp;</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>&lt;-- 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"> &nbsp; </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");
   }