diff --git a/modules/ConnectionHandler.py b/modules/ConnectionHandler.py
index d28ad8f..4a9645e 100644
--- a/modules/ConnectionHandler.py
+++ b/modules/ConnectionHandler.py
@@ -10,6 +10,8 @@
from Error404Plug import Error404Plug
from SendContentPlug import SendContentPlug
from GenerateContentPlug import GenerateContentPlug
+from JSONRPCPlug import JSONRPCPlug
+
from MusicDB import MusicDB
@@ -38,6 +40,7 @@ class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
'': RedirectPlug,
'control': ControlWebPlug,
'xmlrpc': ControlXMLRPCPlug,
+ 'json': JSONRPCPlug,
'content': SendContentPlug,
'static': SendContentPlug,
'dynamic': GenerateContentPlug,
diff --git a/modules/MP3Stream.py b/modules/MP3Stream.py
index b2a1e75..3248511 100644
--- a/modules/MP3Stream.py
+++ b/modules/MP3Stream.py
@@ -1,6 +1,6 @@
from MusicDB import MusicDB
-class MP3Stream:
+class MP3Stream:
def __init__(self, request, name="Unknown Stream"):
#self.music = MusicList()
self.clients = []
diff --git a/modules/RPC.py b/modules/RPC.py
index e9c584a..3008310 100644
--- a/modules/RPC.py
+++ b/modules/RPC.py
@@ -1,11 +1,13 @@
from MusicDB import MusicDB
import xmlrpclib
+import json
class RPC:
ofunc = None
def __init__(self):
self.streamlist = MusicDB.instance.streamlist
+ self.respond = self.json_respond
def call(self, method, params, ofunc):
self.ofunc = ofunc
@@ -13,7 +15,7 @@ def call(self, method, params, ofunc):
func = getattr(self, "call_%s" % method, self.invalidcall)
func(params)
- def respond(self, args):
+ def xmlrpc_respond(self, args):
m = xmlrpclib.Marshaller("US-ASCII", 1)
self.ofunc("")
@@ -23,14 +25,9 @@ def respond(self, args):
elif type(args) == type([]):
m.dump_array(args, self.ofunc)
self.ofunc("")
-
- def call_control(self, params):
- print "CONTROL"
- hash = {
- "result": str(int(params[0]["p1"]) + int(params[0]["p2"]))
- }
- self.respond(hash)
+ def json_respond(self, args):
+ self.ofunc(json.write(args))
def call_search(self, params):
results = []
@@ -68,8 +65,24 @@ def call_enqueue(self, params):
stream = self.streamlist[params["stream"]]
stream.enqueue(params["list"]);
self.respond("ok")
-
+
+ def call_loadstream(self, params):
+ print "Loadstream called"
+ params = params[0]
+ print params
+ stream = self.streamlist[params["stream"]]
+
+ streaminfo = {
+ 'song': stream.song,
+ 'name': stream.name,
+ 'clients': len(stream.clients),
+ 'queue': stream.queue,
+ }
+
+ self.respond(streaminfo)
+
def invalidcall(self, params):
print "Invalid call"
print "Params: ", params
+ self.respond("INVALID CALL")
diff --git a/pimp.py b/pimp.py
index 4932569..4a49d2f 100755
--- a/pimp.py
+++ b/pimp.py
@@ -4,6 +4,7 @@
import urllib
sys.path.append("./modules")
+sys.path.append("./extra")
# stuff I wrote
from template import Template
diff --git a/static/ajam.js b/static/ajam.js
index d6df4af..dd591d1 100644
--- a/static/ajam.js
+++ b/static/ajam.js
@@ -4,7 +4,7 @@ function callrpc(method, args, callback, url) {
return
}
if (!url)
- url = "/xmlrpc/control";
+ url = "/json/control";
var xmlrpc = new XMLHttpRequest();
@@ -36,26 +36,25 @@ function callrpc(method, args, callback, url) {
return
}
-
debug("Type: " + type)
if (type == "text/xml") {
+ debug("xml processing");
if (doc.childNodes[0].tagName != "methodResponse") {
debug("UNEXPECTED NON-XMLRPC RESPONSE FROM SERVER");
return;
}
var hash = rpcparam2hash(doc.childNodes[0]);
xmlrpc.mycallback(hash)
- } else if (type == "application/xhtml+xml") {
- //Object.dpDump(xmlrpc)
- xmlrpc.mycallback(xmlrpc)
- } else if (type == "text/html") {
- xmlrpc.mycallback(xmlrpc)
+ } else if (type = "text/json") {
+ debug("JSON processing")
+ var params;
+ eval("params = " + xmlrpc.responseText);
+ xmlrpc.mycallback(params)
} else if (type = "text/plain") {
xmlrpc.mycallback(xmlrpc.responseText)
} else {
debug("UNEXPECTED NON XML/HTML/PLAIN RESPONSE FROM SERVER");
}
-
}
}
@@ -187,3 +186,18 @@ function delete_children(element, recursive) {
}
}
+var debugcnt = 0
+function debug(val) {
+ debugcnt++;
+ var list = document.getElementById("debug");
+ var foo = mkelement("div");
+ var text = mktext(debugcnt + ": " + val);
+ foo.style.fontWeight="bold";
+ foo.appendChild(text);
+ list.appendChild(foo);
+}
+
+function cleardebug() {
+ delete_children(document.getElementById("debug"))
+}
+
diff --git a/static/newpimp.js b/static/newpimp.js
index f912b93..efe82d8 100644
--- a/static/newpimp.js
+++ b/static/newpimp.js
@@ -53,13 +53,13 @@ function call_updatestreams() {
}
function liststreams_callback(params) {
- var idx = 0
+ var idx = 0;
var i;
-
- var updates = []
- for (i in params[0]) {
- updatestream(i, params[0][i], idx)
+ var updates = [];
+
+ for (i in params) {
+ updatestream(i, params[i], idx)
updates.push("stream:" + i)
idx++;
}
@@ -70,16 +70,13 @@ function liststreams_callback(params) {
var el = table.childNodes[i];
if (el.id) {
var found = 0
- //debug(table.childNodes[i].tagName + ": " + table.childNodes[i].id)
for (var x = 0; x < updates.length && !found; x++) {
- if (updates[x] == el.id) {
+ if (updates[x] == el.id)
found = 1;
- }
}
- if (!found) {
+ if (!found)
table.removeChild(el);
- }
}
}
@@ -213,23 +210,6 @@ function searchclick_callback(params) {
showsearchresults(params[0]);
}
-
-function cleardebug() {
- // Delete children
- //document.getElementById("debug").innerHTML = "";
- delete_children(document.getElementById("debug"))
-}
-
-function debug(val) {
- var list = document.getElementById("debug");
- var foo = mkelement("div");
- var text = mktext(val);
- foo.style.fontWeight="bold";
- foo.appendChild(text)
- list.appendChild(foo)
- //list.style.display="none";
-}
-
function stream_drilldown() {
// Show the searchbar now that we've selected a stream
//document.getElementById("searchbar").style.display="block";
@@ -238,10 +218,7 @@ function stream_drilldown() {
debug("Drilling into " + this.id.substr(7));
/* Ask pimp to generate us a stream entry page */
- //callrpc("load_stream", {"stream":this.id}, loadstream, "/dynamic/streaminfo?"+this.id);
-
- loader = loadstream
- document.getElementById("loaderframe").src="http://kenya.csh.rit.edu:8003/"
+ callrpc("load_stream", {"stream":this.id}, loadstream);
}
function populate_stream_pane(streamname) {
@@ -451,16 +428,13 @@ function enqueue_callback() {
}
function loadstream() {
- var ifr = document.getElementById("loaderframe")
-
- //Object.dpDump(ifr)
- //for (a in ifr) {
- //debug("ifr: " + a + " => " + ifr[a])
- //}
- var p = document.getElementById("container")
- delete_children(p)
- //p.appendChild(doc.responseXML.childNodes[0])
- p.appendChild(ifr.contentDocument.childNodes[0])
+ /* Ask the server about the stream */
+ callrpc("loadstream", {'stream': pimp["currentstream"]}, loadstream_callback)
+}
+
+function loadstream_callback(params) {
+ debug("LOADSTREAM")
+ Object.dpDump(params)
}
function pageload() {
diff --git a/templates/layout.html b/templates/layout.html
index 3e1171a..5e52899 100644
--- a/templates/layout.html
+++ b/templates/layout.html
@@ -43,8 +43,6 @@
Pimp 4.0
-
-