summaryrefslogtreecommitdiff
path: root/js/live/vdr_status.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/live/vdr_status.js')
-rw-r--r--js/live/vdr_status.js168
1 files changed, 168 insertions, 0 deletions
diff --git a/js/live/vdr_status.js b/js/live/vdr_status.js
new file mode 100644
index 0000000..d16f2a3
--- /dev/null
+++ b/js/live/vdr_status.js
@@ -0,0 +1,168 @@
+/*
+ * Javascript functions for the status update box.
+ * This file needs mootools.js to be included on the pages.
+ */
+
+var LiveVdrInfo = Ajax.extend({
+
+ options: {
+ autoCancel: true
+ },
+
+ initialize: function(url, boxId)
+ {
+ this.parent(url, null);
+ this.addEvent('onComplete', this.showInfo);
+ this.addEvent('onFailure', this.reportError);
+
+ this.boxId = boxId;
+ this.reload = true;
+ this.timer = null;
+ },
+
+ request: function(update)
+ {
+ this.parent({update: update ? "1" : "0"});
+ },
+
+ showInfo: function(text, xmldoc)
+ {
+ try {
+ var infoType = xmldoc.getElementsByTagName('type').item(0);
+
+ var channel = $(this.boxId + '_channel_buttons');
+ var playback = $(this.boxId + '_recording_buttons');
+
+ if (infoType.firstChild.nodeValue != "channel") {
+ channel.style.display = 'none';
+ playback.style.display = 'block';
+ this.setTextContent('pause', infoType.firstChild.nodeValue);
+ this.setTextContent('play', infoType.firstChild.nodeValue);
+ this.setTextContent('rwd', infoType.firstChild.nodeValue);
+ this.setTextContent('ffw', infoType.firstChild.nodeValue);
+ this.setTextContent('stop', infoType.firstChild.nodeValue);
+ }
+ else {
+ playback.style.display = 'none';
+ channel.style.display = 'block';
+ }
+
+ var epgInfo = xmldoc.getElementsByTagName('epginfo').item(0);
+
+ for (var i = 0; i < epgInfo.childNodes.length; i++) {
+ var node = epgInfo.childNodes.item(i);
+ if (node.nodeType == 1) {
+ var textContent = "";
+ if (node.firstChild != null)
+ textContent = node.firstChild.nodeValue;
+ this.setTextContent(node.nodeName, textContent);
+ }
+ }
+
+ /* check if we still need to update the status */
+ var upd = xmldoc.getElementsByTagName('update').item(0);
+ var rel = (upd.firstChild.nodeValue == "1");
+
+ if (rel != this.reload) {
+ this.reload = rel;
+ var img = $('statusReloadBtn');
+ if (img != null) {
+ // change image according to state.
+ img.src = this.reload ? 'stop_update.png' : 'reload.png';
+ }
+ }
+ if (this.reload)
+ this.timer = this.request.delay(1000, this, true);
+ }
+ catch (e) {
+ this.reportError(null);
+ }
+ },
+
+ reportError: function(transport)
+ {
+ this.setTextContent('caption', 'ERROR');
+ var message;
+ if (transport != null) {
+ message = $("__infobox_request_err").firstChild.nodeValue;
+ }
+ else {
+ message = $("__infobox_update_err").firstChild.nodeValue;
+ }
+ this.setTextContent('name', message);
+ },
+
+ setTextContent: function(nodeName, textContent)
+ {
+ var docNode = $(this.boxId + '_' + nodeName);
+ if (docNode != null) {
+ switch (nodeName) {
+ case "caption":
+ case "timenow":
+ case "name":
+ case "duration":
+ {
+ if (docNode.innerHTML != textContent)
+ docNode.innerHTML = textContent;
+ break;
+ }
+ case "elapsed":
+ {
+ var width = textContent + "px";
+ if (docNode.style.width != width)
+ docNode.style.width = width;
+ break;
+ }
+ case "nextchan":
+ case "prevchan":
+ {
+ if (textContent != "") {
+ docNode.href = "javascript:LiveSimpleAjaxRequest('switch_channel.xml', 'param', '" + textContent + "');";
+ docNode.style.visibility = "visible";
+ }
+ else {
+ docNode.style.visibility = "hidden";
+ }
+ break;
+ }
+ case "pause":
+ case "play":
+ case "rwd":
+ case "ffw":
+ case "stop":
+ {
+ if (textContent != "") {
+ docNode.href = "javascript:LiveSimpleAjaxRequest('" + nodeName + "_recording.xml', 'param', '" + textContent + "');";
+ docNode.style.visibility = "visible";
+ }
+ else {
+ docNode.style.visibility = "hidden";
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ },
+
+ toggleUpdate: function()
+ {
+ if (this.reload) {
+ if (this.timer != null) {
+ this.timer = $clear(this.timer);
+ }
+ }
+ this.request(!this.reload);
+ },
+
+ pageFinished: function()
+ {
+ if (this.reload) {
+ if (this.timer != null) {
+ this.timer = $clear(this.timer);
+ }
+ }
+ this.cancel();
+ }
+});