Vista Sidebarteil
von Anonymous- SNIPPET_TEXT:
-
- // ##############################################
- // kontakt@tiews.info
- // ##############################################
- var g_CallListUrl = '/cgi-bin/webcm?getpage=../html/de/FRITZ!Box_Anrufliste.csv';
- var g_CallListRefreshUrl = '/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:pagename=foncalls'
- var g_LoginSidUrl = '/cgi-bin/webcm?getpage=../html/login_sid.xml';
- var g_LoginUrl = '/cgi-bin/webcm';
- var g_SIDRegex = /name="sid"\s*value="([^\"]*)"/;
- var g_ItemsToDisplay = 6;
- var g_SessionID = null;
- var g_SecurePassword = null;
- var g_FritzboxCalls = null;
- var g_isFirstLoad = true;
- var g_LastRefresh = null;
- var g_ActiveTimeout = null;
- var g_FritzboxIP = '';
- var g_FBPassword = '';
- var g_refreshInterval = 300;
- // Create dummy Gadget-Object to test gadget in IE 7
- if(typeof System == 'undefined')
- System = new SystemObject();
- function SystemObject()
- {
- this.Gadget = new function()
- {
- this.settingsUI = '';
- this.onSettingsClosed = null;
- this.Settings = new function()
- {
- function readString(key)
- {
- if(key == 'FritzboxIP')
- return 'fritz.box';
- else if(key == 'Password')
- return '12345678';
- else if(key == 'Interval')
- return '120';
- }
- function writeString(key, value) {}
- this.readString = readString;
- this.writeString = writeString;
- }
- }
- }
- // ##############################################
- // Init main gadget
- // ##############################################
- function InitMain()
- {
- BackgroundImage.src = 'url(images/back_docked.png)';
- // Settings
- System.Gadget.settingsUI = 'settings.html';
- System.Gadget.onSettingsClosed = function(event)
- {
- if(event.closeAction == event.Action.commit)
- InitMain();
- }
- UnsetTimer();
- LoadSettings();
- // Check whether http object is available
- XmlHttp = GetHttpObject();
- if(!XmlHttp)
- {
- DisplayStatus('Http-Objekt konnte nicht erzeugt werden!', true);
- return;
- }
- CheckLoginMethod();
- }
- // ##############################################
- // CheckLoginMethod / Login / Refresh / Download calllist / Parse calllist
- // ##############################################
- function CheckLoginMethod()
- {
- g_SecurePassword = null;
- if(g_isFirstLoad)
- DisplayStatus('Prüfe Anmeldeverfahren...', false);
- var XmlHttp = GetHttpObject();
- XmlHttp.open('GET', GetPreparedFBLoginSidUrl(), true);
- XmlHttp.onreadystatechange = function()
- {
- if(XmlHttp.readyState != 4)
- return;
- // nur wenn login_sid.xml gefunden wird, dann ist die sichere Anmeldung erforderlich
- if(XmlHttp.status == 200)
- {
- var siddoc = XmlHttp.responseXML;
- // Password-Login erforderlich und SecurePassword muss generiert werden
- if(siddoc.documentElement.selectSingleNode("/SessionInfo/iswriteaccess").text == '0')
- {
- if(g_FBPassword == null || g_FBPassword.length == 0)
- {
- DisplayStatus("Die Fritz!Box verlangt eine Anmeldung mit Passwort, aber es ist kein Passwort in den Einstellungen hinterlegt.", true);
- return;
- }
- else
- {
- var challenge = siddoc.documentElement.selectSingleNode("/SessionInfo/Challenge").text;
- g_SecurePassword = challenge + '-' + hex_md5(challenge + '-' + g_FBPassword);
- }
- }
- // Kein Password-Login erforderlich, SID wird direkt zurückgegeben
- else
- {
- g_SessionID = siddoc.documentElement.selectSingleNode("/SessionInfo/SID").text;
- alert('Keine neue Session nötig: ' + g_SessionID);
- }
- Login();
- }
- }
- XmlHttp.send(null);
- }
- function Login()
- {
- if(g_isFirstLoad)
- DisplayStatus('Anmeldung läuft...', false);
- var XmlHttp = GetHttpObject();
- XmlHttp.open('POST', GetPreparedFBLoginUrl(), true);
- XmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
- XmlHttp.onreadystatechange = function()
- {
- if(XmlHttp.readyState != 4)
- return;
- if(XmlHttp.status == 200)
- {
- var responsetext = XmlHttp.responseText;
- if(responsetext.indexOf('FRITZ!Box Anmeldung') < 0)
- {
- if(g_SecurePassword != null)
- {
- sidresult = g_SIDRegex.exec(responsetext);
- if(sidresult.length > 0)
- {
- g_SessionID = sidresult[1];
- }
- else
- {
- DisplayStatus("SessionID konnte aus Fritz!Box-Seite nicht ermittelt.", true);
- return;
- }
- }
- }
- else
- {
- DisplayStatus("Das Fritz!Box Passwort ist ungültig.", true);
- return;
- }
- }
- else
- {
- DisplayStatus('[An Fritz!Box anmelden] Http-Fehler: ' + XmlHttp.status, true);
- SetTimer();
- return;
- }
- RefreshCallList();
- }
- if(g_SecurePassword != null)
- {XmlHttp.send('sid=0000000000000000&getpage=../html/de/menus/menu2.html&login:command/response=' + g_SecurePassword); }
- else
- { XmlHttp.send('login:command/password=' + g_FBPassword); }
- }
- function Logout()
- {
- if(g_SessionID != null)
- {
- var XmlHttp = GetHttpObject();
- XmlHttp.open('POST', GetPreparedFBLoginUrl(), true);
- XmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
- XmlHttp.onreadystatechange = function()
- {
- if(XmlHttp.readyState != 4)
- return;
- if(XmlHttp.status == 200)
- {
- g_SessionID = null;
- }
- }
- XmlHttp.send('security:command/logout=raushier&sid=' + g_SessionID );
- }
- }
- function RefreshCallList()
- {
- if(g_isFirstLoad)
- DisplayStatus('Anrufliste auf Fritz!Box aktualisieren lassen...', false);
- var XmlHttp = GetHttpObject();
- XmlHttp.open('GET', GetPreparedFBCallListRefreshUrl(), true);
- XmlHttp.onreadystatechange = function()
- {
- if(XmlHttp.readyState != 4)
- return;
- if(XmlHttp.status == 200)
- {
- GetCallList();
- }
- else
- {
- DisplayStatus('[Anrufliste auf Fritz!Box aktualisieren] Http-Fehler: ' + GetHttpObject.status, true);
- SetTimer();
- return;
- }
- }
- XmlHttp.send(null);
- }
- function GetCallList()
- {
- var status = false;
- if(g_isFirstLoad)
- DisplayStatus('Anrufliste wird heruntergeladen...', false);
- var XmlHttp = GetHttpObject();
- XmlHttp.open('GET', GetPreparedFBCallListUrl(), true);
- XmlHttp.onreadystatechange = function()
- {
- if(XmlHttp.readyState != 4)
- return;
- if(XmlHttp.status == 200)
- {
- // responseText will not work, due to wrong encoding of requested calllist
- if(ParseFBCallList(BinaryToString(XmlHttp.responseBody)))
- {
- FillGadgetCallList();
- }
- Logout();
- g_isFirstLoad = false;
- SetTimer();
- }
- else
- { DisplayStatus('[Anrufliste laden] Http-Fehler: ' + XmlHttp.status, true); }
- }
- XmlHttp.send(null);
- }
- function ParseFBCallList(Data)
- {
- var status = false;
- if(g_isFirstLoad)
- DisplayStatus('Anrufliste wird verarbeitet...', false);
- try
- {
- // 2 -> Eingehend in Abwesenheit / 1 -> Eingehend / 3 -> Ausgehend
- // Typ;Datum;Name;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer
- var LineOffset = 2;
- var DataCells = null;
- var ItemsInList = 0;
- g_FritzboxCalls = new Array(g_ItemsToDisplay);
- var CsvLines = Data.split('\n');
- if(CsvLines == null || CsvLines.length < 2 || CsvLines[0].indexOf('sep=;') < 0)
- {
- DisplayStatus('Ungültige Anrufliste. (Falsches/kein Passwort angegeben?)', true);
- }
- else
- {
- for(var i = LineOffset; i < CsvLines.length; i++)
- {
- if(CsvLines[i].search(/;/) != -1)
- {
- g_FritzboxCalls[ItemsInList] = new FritzboxCall();
- try
- {
- DataCells = CsvLines[i].split(";");
- g_FritzboxCalls[ItemsInList].Name = DataCells[2];
- g_FritzboxCalls[ItemsInList].Number = DataCells[3];
- g_FritzboxCalls[ItemsInList].Date = DataCells[1];
- g_FritzboxCalls[ItemsInList].CallType = DataCells[0];
- g_FritzboxCalls[ItemsInList].OwnNumber = DataCells[5];
- g_FritzboxCalls[ItemsInList].ExtensionLine = DataCells[4];
- g_FritzboxCalls[ItemsInList].Duration = DataCells[6];
- }
- catch (e)
- {
- g_FritzboxCalls[ItemsInList].ParseError = e;
- }
- ItemsInList++;
- }
- }
- status = true;
- }
- }
- catch (e)
- {
- DisplayStatus('Fehler beim Bearbeiten der Anrufliste. Error: ' + e, true);
- }
- return status;
- }
- // ##############################################
- // timer
- // ##############################################
- function SetTimer()
- {
- setTimeout("CheckLoginMethod()", g_refreshInterval * 1000);
- }
- function UnsetTimer()
- {
- g_isFirstLoad = true;
- if(g_ActiveTimeout != null)
- {
- clearTimeout(g_ActiveTimeout);
- g_ActiveTimeout = null;
- }
- }
- // ##############################################
- // Display calllist in gadget
- // ##############################################
- function FillGadgetCallList()
- {
- ClearGadgetCallList();
- ListContentDiv.style.visibility = 'visible';
- var calltypeimage = '';
- for(var i = 0; i < g_ItemsToDisplay && i < g_FritzboxCalls.length; i++)
- {
- if(g_FritzboxCalls[i] != null)
- {
- eval('ListItemHeader' + i).innerHTML =g_FritzboxCalls[i].GetDisplayName();
- eval('ListItemText' + i).innerHTML = g_FritzboxCalls[i].Date;
- calltypeimage = GetCallTypeImage(g_FritzboxCalls[i].CallType);
- if(calltypeimage != null && calltypeimage.length > 0)
- eval('ListItemImage' + i).style.background = 'url(' + GetCallTypeImage(g_FritzboxCalls[i].CallType) + ')';
- eval('ListItemImage' + i).style.backgroundRepeat = 'no-repeat';
- eval('ListItemHeader' + i).setAttribute('title', g_FritzboxCalls[i].ToString());
- eval('ListItemText' + i).setAttribute('title', g_FritzboxCalls[i].ToString());
- }
- }
- // set timestamp of last refresh
- var date=new Date();
- HeaderDiv.setAttribute('title', 'Letzte Aktualisierung: ' + date.getHours() + ':' + (date.getMinutes()<10 ? '0' : '') + date.getMinutes() + ':' + (date.getSeconds()<10 ? '0' : '') + date.getSeconds());
- HideStatus();
- }
- function ClearGadgetCallList()
- {
- for(var i = 0; i < g_ItemsToDisplay; i++)
- {
- eval('ListItemHeader' + i).innerHTML = '';
- eval('ListItemText' + i).innerHTML = '';
- eval('ListItemImage' + i).style.background = '';
- eval('ListItemImage' + i).style.backgroundRepeat = '';
- eval('ListItemHeader' + i).setAttribute('title', '');
- eval('ListItemText' + i).setAttribute('title', '');
- }
- }
- function GetCallTypeImage(CallType)
- {
- // 2 -> Eingehend in Abwesenheit / 1 -> Eingehend / 3 -> Ausgehend
- if(CallType == 2)
- return 'images/callinfailed.png';
- else if(CallType == 1)
- return 'images/callin.png';
- else if(CallType == 3)
- return 'images/callout.png';
- return '';
- }
- // #####################################################
- // A call
- // #####################################################
- function FritzboxCall()
- {
- this.Name = '';
- this.Number = '';
- this.OwnNumber = '';
- this.ExtensionLine = '';
- this.Date = '';
- this.CallType = -1;
- this.ParseError = '';
- this.Duration = '';
- return true;
- }
- FritzboxCall.prototype.GetDisplayName = function()
- {
- if(this.Name != null && this.Name.length > 0)
- return this.Name;
- else
- {
- return (this.Number == null || this.Number.length == 0) ? 'unbekannt' : this.Number;
- }
- }
- FritzboxCall.prototype.ToString = function()
- {
- var ttText = '';
- if(this.CallType == 2)
- ttText = 'Anruf in Abwesenheit';
- else if(this.CallType == 1)
- ttText = 'Eingehender Anruf';
- else if(this.CallType == 3)
- ttText = 'Ausgehender Anruf';
- else
- ttText = 'Unbekannter Anruftyp';
- ttText += '\nName: ' + ((this.Name != null) ? this.Name : ' - ');
- ttText += '\nNummer: ' + ((this.Number != null) ? this.Number : ' - ');
- ttText += '\nDatum: ' + ((this.Date != null) ? this.Date : ' - ');
- ttText += '\nEigene Nummer: ' + ((this.OwnNumber != null) ? this.OwnNumber : ' - ');
- ttText += '\nNebenstelle: ' + ((this.ExtensionLine != null) ? this.ExtensionLine : ' - ');
- ttText += '\nDauer: ' + ((this.Duration != null) ? this.Duration : ' - ');
- ttText += ((this.ParseError != null && this.ParseError.length > 0) ? ('\nFehler beim Bearbeiten: ' + this.ParseError) : '');
- return ttText;
- }
- // #####################################################
- // Display/Hide status information
- // #####################################################
- function DisplayStatus(StatusText, IsError)
- {
- ListContentDiv.style.visibility = 'hidden';
- ErrorTextDiv.style.visibility = 'visible';
- ErrorTextDiv.innerText = StatusText;
- ErrorTextDiv.style.top = '35%';
- }
- function HideStatus()
- {
- ErrorTextDiv.style.visibility = 'hidden';
- }
- // #####################################################
- // Flyout
- // #####################################################
- function SetFlyout()
- {
- if (System.Gadget.Flyout.show==false) {
- System.Gadget.Flyout.file = "flyout.html";
- System.Gadget.Flyout.onHide = CloseFlyout;
- System.Gadget.Flyout.show = true;
- System.Gadget.Flyout.onShow = DrawFlyoutContent;
- }
- else
- {
- System.Gadget.Flyout.show = false;
- }
- }
- function CloseFlyout()
- {
- // something to do here???
- }
- function DrawFlyoutContent()
- {
- var contenthtml = '';
- var FlyoutContentDiv = System.Gadget.Flyout.document.getElementById("content");
- contenthtml += '<table cellpadding="2" cellspacing="0" border="0">';
- contenthtml += '<tr>';
- contenthtml += '<th class="dark"></th>';
- contenthtml += '<th class="dark">Datum</td>';
- contenthtml += '<th class="dark">Name/Rufnummer</td>';
- contenthtml += '<th class="dark">Telefoniegerät</td>';
- contenthtml += '<th class="dark">Eigene Rufnummer</td>';
- contenthtml += '<th class="dark">Dauer [hh:mm]</td>';
- contenthtml += '</tr>';
- var tdstyle = '';
- for(var i = 0; i < g_FritzboxCalls.length; i++)
- {
- if(g_FritzboxCalls[i] != null)
- {
- if(i%2 != 0)
- tdstyle = 'class="dark"';
- else
- tdstyle = '';
- contenthtml += '<tr>';
- calltypeimage = GetCallTypeImage(g_FritzboxCalls[i].CallType);
- if(calltypeimage != null && calltypeimage.length > 0)
- contenthtml += '<td ' + tdstyle + '><img src="' + GetCallTypeImage(g_FritzboxCalls[i].CallType) + '" alt="' + g_FritzboxCalls[i].ToString() + '"/></td>';
- else
- contenthtml += '<td ' + tdstyle + '></td>';
- contenthtml += '<td ' + tdstyle + '>' + g_FritzboxCalls[i].Date + '</td>';
- contenthtml += '<td ' + tdstyle + '>' + g_FritzboxCalls[i].GetDisplayName() + '</td>';
- contenthtml += '<td ' + tdstyle + '>' + g_FritzboxCalls[i].ExtensionLine + '</td>';
- contenthtml += '<td ' + tdstyle + '>' + g_FritzboxCalls[i].OwnNumber + '</td>';
- contenthtml += '<td ' + tdstyle + '>' + g_FritzboxCalls[i].Duration + '</td>';
- contenthtml += '</tr>';
- }
- }
- contenthtml += '</table>';
- FlyoutContentDiv.innerHTML = contenthtml;
- }
- // #####################################################
- // Get HTTPRequest object
- // #####################################################
- function GetHttpObject()
- {
- var http = null;
- if(typeof XMLHttpRequest != 'undefined')
- {
- try
- {
- http = new XMLHttpRequest();
- }
- catch(e)
- {
- http = null;
- }
- }
- if(typeof ActiveXObject != 'undefined')
- {
- if(!http)
- {
- try
- {
- http = new ActiveXObject('Msxml2.XMLHTTP');
- }
- catch(e)
- {
- try
- {
- http = new ActiveXObject('Microsoft.XMLHTTP');
- }
- catch(e)
- {
- http = null;
- }
- }
- }
- }
- return http;
- }
- // #####################################################
- // Prepare Url/Password
- // #####################################################
- function GetPreparedFBCallListUrl()
- {
- return AddSessionIdToUrl('http://' + g_FritzboxIP + g_CallListUrl);
- }
- function GetPreparedFBCallListRefreshUrl()
- {
- g_SessionID
- return AddSessionIdToUrl('http://' + g_FritzboxIP + g_CallListRefreshUrl);
- }
- function GetPreparedFBLoginUrl()
- {
- return 'http://' + g_FritzboxIP + g_LoginUrl;
- }
- function GetPreparedFBLoginSidUrl()
- {
- return 'http://' + g_FritzboxIP + g_LoginSidUrl;
- }
- function AddSessionIdToUrl(url)
- {
- if(g_SessionID != null)
- {
- url = url + (url.indexOf('?') > -1 ? '&': '?') + 'sid=' + g_SessionID;
- }
- return url;
- }
- // #####################################################
- // Settings
- // #####################################################
- function LoadSettings()
- {
- var settings = new FBGadgetSettings();
- g_FritzboxIP = settings.FritzboxIP;
- g_FBPassword = settings.Password;
- g_refreshInterval = settings.Interval;
- }
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN