summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rooms.clj2
-rw-r--r--src/site.clj14
-rw-r--r--static/js/fullscreen.js50
-rw-r--r--template/fullscreen.st20
4 files changed, 83 insertions, 3 deletions
diff --git a/src/rooms.clj b/src/rooms.clj
index 8f54640..7997e97 100644
--- a/src/rooms.clj
+++ b/src/rooms.clj
@@ -127,7 +127,7 @@
(create-and-add-room! key)
(throw (Exception. (str "Unable to create room " key))))))
-(defn- fetch-or-create-bot-id! [nick]
+(defn fetch-or-create-bot-id! [nick]
(:user_id
(or (fetch-nick nick)
(first
diff --git a/src/site.clj b/src/site.clj
index 4cde45d..567c3af 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -1085,6 +1085,13 @@ order by count desc limit ? offset ?")
(not has-access) [200 "UNKNOWN_ROOM"]
:else (do-upload session image (lookup-room room-key)))))
+(defn upload-photo [session params]
+ (let [room-key (params :room)
+ nick "~photobot"
+ user-id (rooms/fetch-or-create-bot-id! nick)
+ image (params :image)]
+ (do-upload {:is_admin true :nick nick :user_id user-id} image (lookup-room room-key))))
+
;; N.B. -- Upload responses aren't JSON-evaluated
(defn do-upload-avatar [session image]
(let [filename (format-filename (:filename image) (session :nick))
@@ -1106,8 +1113,10 @@ order by count desc limit ? offset ?")
(do-upload-avatar session image)))))
(defn serve-meme [session meme]
- (if-let [st (fetch-template meme session)]
- (.toString st)
+ (if-let [st (fetch-template meme session)]
+ (let [now (System/currentTimeMillis)]
+ (.setAttribute st "timestamp" now)
+ (.toString st))
(unknown-page)))
(defn hall-of-fame [session]
@@ -1227,6 +1236,7 @@ order by count desc limit ? offset ?")
(defroutes multipart
(POST "/upload/message" (upload session params))
+ (POST "/upload/photo" (upload-photo session params))
(POST "/upload/avatar" (upload-avatar session params)))
;; Add jpeg to list
diff --git a/static/js/fullscreen.js b/static/js/fullscreen.js
new file mode 100644
index 0000000..2cce5a1
--- /dev/null
+++ b/static/js/fullscreen.js
@@ -0,0 +1,50 @@
+function initFullscreen(){
+ Room = "dumpfm";
+ refresh()
+ ImageCache = []
+ SeenImages = {}
+}
+
+function scanMessagesForImages(messages){
+ for(var m=0; m<messages.length; m++) {
+ var images = getImagesAsArray(messages[m].content)
+ for (var i = 0; i<images.length; i++){
+ NextImage = new Image()
+ NextImage.onload = displayImage
+ NextImage.src = images[i]
+ }
+ }
+}
+
+function displayImage(){
+ $("#big-image").html('<img src="'+this.src+'">')
+}
+
+function refresh() {
+ var onSuccess = function(json) {
+ try {
+ if (json.messages && json.messages.length)
+ scanMessagesForImages(json.messages);
+ Timestamp = json.timestamp;
+ } catch(e) {
+
+ }
+
+ setTimeout(refresh, 1000);
+ };
+
+ var onError = function(resp, textStatus, errorThrown) {
+ setTimeout(refresh, 1000);
+ };
+
+ $.ajax({
+ type: 'GET',
+ timeout: 5000,
+ url: '/refresh',
+ data: { 'room': Room, 'since': Timestamp },
+ cache: false,
+ dataType: 'json',
+ success: onSuccess,
+ error: onError
+ });
+} \ No newline at end of file
diff --git a/template/fullscreen.st b/template/fullscreen.st
new file mode 100644
index 0000000..906cbe6
--- /dev/null
+++ b/template/fullscreen.st
@@ -0,0 +1,20 @@
+<html>
+<head>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
+<script src="$domain$/static/js/pichat.js"></script>
+<script src="$domain$/static/js/fullscreen.js"></script>
+<style>
+html, body, div, img { margin: 0; padding: 0; border: 0; overflow: hidden; }
+#controls { display: none; }
+#big-image img { width: 100%; height: 100%; }
+</style>
+</head>
+<body>
+<div id="big-image"></div>
+<div id="controls"></div>
+<script>
+Timestamp = $timestamp$;
+initFullscreen()
+</script>
+</body>
+</html> \ No newline at end of file