summaryrefslogtreecommitdiff
path: root/vdr-smarttvweb/web/Server.js
diff options
context:
space:
mode:
authorthlo <smarttv640@gmail.com>2013-02-23 10:31:30 +0100
committerthlo <t.lohmar@gmx.de>2013-02-23 10:31:30 +0100
commit65255cd25a87509c0a75c4e09ebd33977e54ed9c (patch)
treeb2d30b11d6cdf7f0a8471da637dfb26b54fe9569 /vdr-smarttvweb/web/Server.js
parent3b053722baf9e94469e8a602237ce1c2014b32fc (diff)
downloadvdr-plugin-smarttvweb-65255cd25a87509c0a75c4e09ebd33977e54ed9c.tar.gz
vdr-plugin-smarttvweb-65255cd25a87509c0a75c4e09ebd33977e54ed9c.tar.bz2
Support for multiple interfaces. Improved Channel Group Separator handling. Updated Web GUI to use the enclosure RSS element. Bugfixes.
Diffstat (limited to 'vdr-smarttvweb/web/Server.js')
-rwxr-xr-xvdr-smarttvweb/web/Server.js244
1 files changed, 151 insertions, 93 deletions
diff --git a/vdr-smarttvweb/web/Server.js b/vdr-smarttvweb/web/Server.js
index 14385df..1ab6d0a 100755
--- a/vdr-smarttvweb/web/Server.js
+++ b/vdr-smarttvweb/web/Server.js
@@ -1,5 +1,4 @@
-var Server =
-{
+var Server = {
dataReceivedCallback : null,
errorCallback : null,
doSort : false,
@@ -10,7 +9,7 @@ var Server =
Server.init = function()
{
- var success = true;
+ var success = true;
if (this.XHRObj) {
this.XHRObj.destroy();
@@ -23,100 +22,159 @@ Server.init = function()
Server.setSort = function (val) {
this.doSort = val;
};
-
+//---------------------------------------------
Server.fetchVideoList = function(url) {
- if (this.XHRObj == null) {
- this.XHRObj = new XMLHttpRequest();
- }
-
- if (this.XHRObj) {
- this.XHRObj.onreadystatechange = function()
- {
- // var splashElement = document.getElementById("splashStatus");
-
- if (Server.XHRObj.readyState == 4) {
- Server.createVideoList();
- }
- };
-
- this.XHRObj.open("GET", url, true);
- this.XHRObj.send(null);
- }
- else {
- console.log("Failed to create XHR");
- if (this.errorCallback != null) {
- this.errorCallback("ServerError");
- }
- }
-};
+ $.ajax({
+ url: url,
+ type : "GET",
+ success : function(data, status, XHR ) {
+// Main.log("Server.fetchVideoList Success Response - status= " + status + " mime= " + XHR.responseType + " data= "+ data);
-Server.createVideoList = function() {
- console.log ("creating Video list now");
- console.log ("status= " + this.XHRObj.status);
-
- if (this.XHRObj.status != 200) {
- if (this.errorCallback != null) {
- this.errorCallback(this.XHRObj.responseText);
- }
- }
- else {
- var xmlResponse = this.XHRObj.responseXML;
- if (xmlResponse == null) {
- if (this.errorCallback != null) {
- this.errorCallback("XmlError");
+ $(data).find("item").each(function () {
+ var title = $(this).find('title').text();
+// var link = $(this).find('link').text();
+ var link = $(this).find('enclosure').attr('url');
+ var guid = $(this).find('guid').text();
+ var programme = $(this).find('programme').text();
+ var description = $(this).find('description').text();
+ var startVal = parseInt($(this).find('start').text());
+ var durVal = parseInt($(this).find('duration').text());
+ var fps = parseFloat($(this).find('fps').text());
+ var ispes = $(this).find('ispes').text();
+ var isnew = $(this).find('isnew').text();
+// Main.log("Server.fetchVideoList: title= " + title + " start= " + startVal + " dur= " + durVal + " fps= " + fps);
+
+/* if (Main.state == Main.eLIVE) {
+ Epg.guidTitle[guid] = title;
+ }
+*/
+ var title_list = title.split("~");
+ Data.addItem( title_list, {link : link, prog: programme, desc: description, guid : guid, start: startVal,
+ dur: durVal, ispes : ispes, isnew : isnew, fps : fps});
+
+ }); // each
+
+ Data.completed(Server.doSort);
+
+ if (Server.dataReceivedCallback) {
+ Server.dataReceivedCallback();
}
- return;
- }
- var xmlElement = xmlResponse.documentElement;
-
- if (!xmlElement) {
- console.log("Failed to get valid XML");
- return;
- }
- else
- {
- var items = xmlElement.getElementsByTagName("item");
- if (items.length == 0) {
- console.log("Something wrong. Response does not contain any item");
- this.errorCallback("Empty Response");
- };
-
- for (var index = 0; index < items.length; index++) {
-
- var titleElement = items[index].getElementsByTagName("title")[0];
- var progElement = items[index].getElementsByTagName("programme")[0];
- var descriptionElement = items[index].getElementsByTagName("description")[0];
- var linkElement = items[index].getElementsByTagName("link")[0];
- var startVal =0;
- var durVal =0;
- try {
- startVal = parseInt(items[index].getElementsByTagName("start")[0].firstChild.data);
- durVal = parseInt(items[index].getElementsByTagName("duration")[0].firstChild.data);
- }
- catch (e) {
- this.errorCallback("XML Parsing Error: " + e);
- console.log("ERROR: "+e);
- }
-
- var desc = descriptionElement.firstChild.data;
-
- if (titleElement && linkElement) {
- var title_list = titleElement.firstChild.data.split("~");
- Data.addItem( title_list, {link : linkElement.firstChild.data,
- prog: progElement.firstChild.data,
- desc: desc,
- start: startVal,
- dur: durVal});
- }
-
+
+ },
+ error : function (jqXHR, status, error) {
+// Main.logToServer("Server.fetchVideoList Error Response - status= " + status + " error= "+ error);
+// Display.showPopup("Error with XML File: " + status);
+ Server.retries ++;
+ },
+ parsererror : function () {
+ // Main.logToServer("Server.fetchVideoList parserError " );
+ // Display.showPopup("Error in XML File");
+ Server.retries ++;
+ if (Server.errorCallback != null) {
+ Server.errorCallback("XmlError");
}
- Data.completed(this.doSort);
- if (this.dataReceivedCallback)
- {
- this.dataReceivedCallback(); /* Notify all data is received and stored */
- }
- }
- }
+ }
+ });
+};
+
+
+//---------------------------------------------
+
+Server.updateVdrStatus = function (){
+ Main.log ("get VDR Status");
+ $.ajax({
+ url: Config.serverUrl + "/vdrstatus.xml",
+ type : "GET",
+ success : function(data, status, XHR){
+ var free = $(data).find('free').text() / 1024.0;
+ var used = $(data).find('used').text() / 1024.0;
+ var percent = $(data).find('percent').text();
+
+ var unit = "GB";
+ var free_str = free.toFixed(2);
+ if (free_str.length > 6) {
+ free = free / 1024.0;
+ free_str = free.toFixed(2);
+ unit = "TB";
+ }
+ $("#logoDisk").text("Free: " +free_str + unit);
+ $("#selectDisk").text("Free: " +free_str + unit);
+ },
+ error: function(jqXHR, status, error){
+ Main.log("VdrStatus: Error");
+ }
+ });
+}
+
+
+Server.getResume = function (guid) {
+// Main.log ("***** getResume *****");
+ $.ajax({
+ url: Config.serverUrl + "/getResume.xml",
+ type : "POST",
+ data : "filename:" + guid +"\n",
+ success : function(data, status, XHR ) {
+ Main.log("**** Resome Success Response - status= " + status + " mime= " + XHR.responseType + " data= "+ data);
+
+ var resume_str = $(data).find("resume").text();
+ if (resume_str != "") {
+ var resume_val = parseFloat(resume_str);
+ Main.log("resume val= " + resume_val );
+ Main.logToServer("resume val= " + resume_val );
+ Player.resumePos = resume_val;
+ Player.playVideo( resume_val);
+ }
+ else {
+ Display.hide();
+ Display.showProgress();
+ Player.playVideo(-1);
+ }
+
+ },
+ error : function (jqXHR, status, error) {
+ Main.log("**** Resome Error Response - status= " + status + " error= "+ error);
+ Display.hide();
+ Display.showProgress();
+ Player.playVideo(-1);
+ }
+ });
+};
+
+Server.saveResume = function() {
+ var msg = "";
+ msg += "filename:" + Data.getCurrentItem().childs[Main.selectedVideo].payload.guid + "\n";
+ msg += "resume:"+ (Player.curPlayTime/1000) + "\n" ;
+
+ $.post(Config.serverUrl + "/setResume.xml", msg, function(data, textStatus, XHR) {
+ Main.logToServer("SaveResume Status= " + XHR.status );
+ }, "text");
+
+};
+
+Server.deleteRecording = function(guid) {
+ Main.log("Server.deleteRecording guid=" + guid);
+ Main.logToServer("Server.deleteRecording guid=" + guid);
+ Notify.handlerShowNotify("Deleting...", false);
+
+ $.ajax({
+ url: Config.serverUrl + "/deleteRecording.xml?id=" +guid,
+ type : "POST",
+ success : function(data, status, XHR ) {
+ Notify.showNotify("Deleted", true);
+ Data.deleteElm(Main.selectedVideo);
+ if (Main.selectedVideo >= Data.getVideoCount())
+ Main.selectedVideo = Data.getVideoCount() -1;
+ Server.updateVdrStatus();
+ Display.setVideoList(Main.selectedVideo, (Main.selectedVideo - Display.currentWindow));
+ Main.logToServer("Server.deleteRecording: Success" );
+ },
+ error : function (XHR, status, error) {
+ Main.logToServer("Server.deleteRecording: Error" );
+
+ // show popup
+ Notify.showNotify("Error", true);
+ }
+ });
};