/* * Principle: One monitor for each channel * Nur max 20 * Oder einer: * Search once through all entries and look for the lowest expiry. * Set a timer to update the entry * check, whether the entry is "on screen" * */ var Epg = { timeoutObj : null, isActive : false, guidErrors : {}, guidTitle : {}, curGuid : "", lastGuid :"", sameGuidCount : 0, globalCount :0 }; Epg.stopUpdates = function () { if (this.isActive == false ) return; window.clearTimeout(this.timeoutObj); this.isActive = false; this.curGui = ""; }; Epg.startEpgUpdating = function() { Main.log(""); Main.log("**** Epg.startEpgUpdating ****"); if (this.isActive == true) return; /* if (this.globalCount == 30) { Main.log ("stopping"); return; } */ this.globalCount ++; if (Main.state != Main.eLIVE) { Main.logToServer("ERROR in Epg.startEpgUpdating: I am NOT in state Main.eLive...!!"); return; } this.isActive = true; var res = Data.findEpgUpdateTime(); var now = Display.GetUtcTime(); // var now = (new MyDate()).getTimeSec(); var delay = Math.round(res.min - now) *1000; this.curGuid = res.guid; if (this.lastGuid == res.guid) { // lastGuid is only changed, when the last response was successful // number of repetitive errors are checked in the error response procedure this.sameGuidCount ++; // Main.logToServer("WARNING in Epg.startEpgUpdating: again same Guid guid= " + res.guid + "(" +Epg.guidTitle[res.guid] +") (sameGuidCount= " +this.sameGuidCount+"). OrgDelay= " + (delay/1000.0) + "sec. Delaying..."); delay = 1000; if (this.sameGuidCount > 60) { Epg.insertFakeEntry(res.guid); Main.logToServer("WARNING in EPG.updateEPG: insertFakeEntry for guid= " + res.guid + " (" + Epg.guidTitle[res.guid] +")"); Main.log("WARNING in EPG.updateEPG: insertFakeEntry for guid= " + res.guid + " (" + Epg.guidTitle[res.guid] +")"); Epg.isActive = false; Epg.startEpgUpdating(); // Main.logToServer("ERROR in EPG.updateEPG: 10x same guid !!! - Please file a bug report! - Bitte eine Fehlermeldung posten"); // Display.showPopup("EPG.updateEPG: 10x same guid !!!
Please file a bug report!
Bitte eine Fehlermeldung posten"); return; } } else { Main.log("Epg.startEpgUpdating: Next update for GUID= " + res.guid + " with Min= " + res.min + " delay= " + (delay/1000.0) + "sec"); this.sameGuidCount = 0; } if (delay <0) { delay = 300; //bit delay in msec } if (!(res.guid in this.guidErrors)) { this.guidErrors[res.guid] = 0; }; /* Main.log("Iter over this.guidErrors"); for (var prop in this.guidErrors) { Main.log(" " +prop + " == " + this.guidErrors[prop]); } Main.log("Iter Done"); */ if (this.guidErrors[res.guid] == 0) { Main.log("Epg.startEpgUpdating: next Update for guid= " + res.guid + " (" +Epg.guidTitle[res.guid] +") guidErrors= "+this.guidErrors[res.guid]+ " in " + (delay/1000.0) +"sec"); Main.logToServer("Epg.startEpgUpdating: next Update for guid= " + res.guid + " (" +Epg.guidTitle[res.guid]+ ") guidErrors= "+this.guidErrors[res.guid]+ " in " + (delay/1000.0) +"sec"); // Main.logToServer("Epg.startEpgUpdating: next Update for guid= " + res.guid + " in " + (delay/1000.0) +"sec"); } this.timeoutObj = window.setTimeout(function() { Epg.updateEpg(res.guid); }, delay); }; Epg.updateEpg = function (guid) { var url = Config.serverUrl + "/epg.xml?id=" + guid; if (Epg.guidErrors[guid] >2) { // Main.logToServer("WARNING in Epg.updateEpg: guid= " + guid + " uses mode=nodesc" ); url = url +"&mode=nodesc"; } Main.log("Epg.updateEpg: Prep for guid= " + guid + " with ErrorCount= " + Epg.guidErrors[guid] +" and url= " + url); $.ajax({ type: "GET", async: true, url: url, success: Epg.parseResponse, error: Epg.handleError }); }; Epg.handleError = function (XHR, textStatus, errorThrown) { Epg.guidErrors[Epg.curGuid] += 1; // Main.log("EPG.updateEPG Error ("+XHR.status +": " +XHR.responseText+")EPG.curGuid= "+Epg.curGuid +" Epg.guidErrors[Epg.curGuid]= " +Epg.guidErrors[Epg.curGuid]); // Main.logToServer("EPG.updateEPG Error Response("+ XHR.status + ") EPG.curGuid= "+Epg.curGuid +" Epg.guidErrors[Epg.curGuid]= " +Epg.guidErrors[Epg.curGuid]); Epg.isActive = false; // Main.log("--------------------------------------------"); if (Epg.guidErrors[Epg.curGuid] < 6) { Epg.startEpgUpdating(); } else { Epg.insertFakeEntry(Epg.curGuid); Main.logToServer("ERROR in EPG.updateEPG: insertingFakeEntry for guid= " + Epg.curGuid + " (" + Epg.guidTitle[Epg.curGuid] +") with Epg.guidErrors= " +Epg.guidErrors[Epg.curGuid]); Epg.startEpgUpdating(); // Display.showPopup("EPG.updateEPG: stop updating !!!
Please file a bug report!
Bitte eine Fehlermeldung posten"); } return; }; Epg.insertFakeEntry = function (guid) { // Main.logToServer("Epg.insertFakeEntry for guid= " + guid + " (" + Epg.guidErrors[guid] +")"); var now = Display.GetUtcTime(); // var now = (new MyDate()).getTimeSec() ; entry={}; entry.prog = "Unknown"; entry.desc = "Empty"; entry.start = now; entry.dur = 120; Data.updateEpg(guid, entry); }; Epg.parseResponse = function (message,text, XHR) { $(message).find("programme").each(function(){ var guid = $(this).find("guid").text(); if (guid != Epg.curGuid) { Main.logToServer("ERROR in Epg.parseResponse : Guid (="+ guid + ") != Epg.curGuid (=" + Epg.curGuid+ ") " ); } Epg.guidErrors[Epg.curGuid] = 0; entry={}; entry.prog = $(this).find("title").text(); entry.desc = $(this).find("desc").text(); entry.start = parseInt($(this).find("start").text()); entry.eventid= parseInt($(this).find("eventid").text()); entry.dur = (parseInt($(this).find("end").text()) - parseInt($(this).find("start").text())); Main.log("Epg.parseResponse : Guid= "+ guid + " title= " + entry.prog+ " start= " +entry.start + " dur= " + entry.dur); // Main.logToServer("Epg.parseResponse : Guid= "+ guid + " title= " + entry.prog+ " start= " +entry.start + " dur= " + entry.dur); Data.updateEpg(guid, entry); //trigger Display refresh if (Data.getCurrentItem().childs[Main.selectedVideo].payload.guid == guid) { // the updated record is either playing or in Menu if (Player.state != Player.STOPPED) { Main.logToServer("Updating Progress Bar"); Display.updateOlForLive (entry.start, entry.dur, Display.GetUtcTime()); // Updates the progress bar // Display.updateOlForLive (entry.start, entry.dur, (new MyDate()).getTimeSec() ); // Updates the progress bar } else { Main.logToServer("Updating Right Half"); Display.handleDescription(Main.selectedVideo); } } Epg.lastGuid = guid; Epg.isActive = false; // Main.log("--------------------------------------------"); Epg.startEpgUpdating(); }); }; Epg.getCurrentEvent4Rec = function (guid) { var url = Config.serverUrl + "/epg.xml?id=" + guid; Main.log("Epg.getCurrentEpg: guid= " + guid + " and url= " + url); $.ajax({ type: "GET", async: true, url: url, success: function(data, status, XHR ) { $(message).find("programme").each(function(){ var guid = $(this).find("guid").text(); if (guid != Epg.curGuid) { Main.logToServer("ERROR in Epg.parseResponse : Guid (="+ guid + ") != Epg.curGuid (=" + Epg.curGuid+ ") " ); } entry={}; entry.prog = $(this).find("title").text(); entry.desc = $(this).find("desc").text(); entry.start = parseInt($(this).find("start").text()); entry.eventid= parseInt($(this).find("eventid").text()); entry.dur = (parseInt($(this).find("end").text()) - parseInt($(this).find("start").text())); Main.log("Epg.getCurrentEpg : Guid= "+ guid + " title= " + entry.prog+ " start= " +entry.start + " dur= " + entry.dur); // thlo: here I should invoke the rec command // then I should switch to recording playback (new state?). }); }, error: function (jqXHR, status, error) { } }); };