Wundertalker >>Wunderlist geht wieder<<

Ohhh. Gleich nochmals Weihnachten :slight_smile:

Funzt aber immer noch nicht richtig. Erledigte Einträge werden in IPS nicht als erledigt angezeigt.

OK, hab den Fehler gefunden (muss aber in der alten Variante auch schon nicht richtig gelaufen sein…).

Hier mein aktualisiertes Script:

<?
// ****************************************************************************
// Auslesen von Wunderlist toDoListen mit Hilfe von Tonis Wundertalker
// ** Wundertalker.exe starten. Dann Link=> wundertaler_Console starten.
// ** Wunderlist-Einloggdaten eingeben, Installieren, autoinclude anhaken, starten
// ** Daten per getToniArray('http://localhost:1218/.... auslesen
// ** im Verzeichnis IP-Symcon/webfront/user muss die Datei WunderlistButton.php liegen. Sie enthält folgenden Code:
// **
// **          $ScriptID = $_GET['ScriptID'];
//	**				$do = $_GET['do'];
//	**				$number = $_GET['number'];
// **            if ($ScriptID > 0 && $number >= 0 && $do >"")
//	**				 {  IPS_RunScriptWaitEx((int)$ScriptID, array('action' => $do, 'number' => $number) );}
// **
// im Verzeichnis /user/icons/fixed/ die Datei delete.png, done.png, important.png und leer.png
// ****************************************************************************
// ** #hardlog 10.01.15
// ****************************************************************************

/******************************************************************************
*******************************************************************************
** Diese Script kann mit Hilfe von @Tonic1024's Wundertalker toDoListen aus
** der Web-Anwendung WUNDERLIST auslesen und bearbeiten
*******************************************************************************
** Installationsanleitung:
** Es muss ein aktueller Wunderlist-Account bestehen
**
** (1) Wundertalker von @Tonic1024 nach seiner Anleitung installieren
** (2) Das Script WunderlistButton.php ins Verzeichnis ../IP-Symcon/webfront/user kopieren
** (3) Die Datei delete.png, done.png, important.png und leer.png ins Verzeichnis ../IP-Symcon/webfront/user/icons/fixed/ kopieren
** (4) Dummy-Instanz an beliebiger/passender Stelle im Objektbaum anlegen, Name ist egal (hier: "toDo Listen (Wunderlist)"
** (5) Als Child darunter Interger-Variable anlegen (Name egal) (hier "Vorhandene Listen")
** (6) Als Child unter der Integer-Variable ein Script mit dem Inhalt dieses Scriptes (WunderlistMain.php)
** (7) Als Eigene Aktion der Integer aus (5) das Script unter (6) angeben
** (8) Als Child unter die Dummy-Instanz eine String-Var mit dem Profil htmlBox (Name egal, wird autom. ersetzt)
** (9) Als weiteres Child unter die Dummy-Instanz eine String-Var mit dem Profil textbox (Name egal, hier: "Neuen Eintrag in geöffnete Liste")
** (10) Als Eigene Aktion der textbox (9) das Script unter (6) angeben
** (11) In diesem Script (WunderlistMain.php) die IDs der folgenden 6 Programmzeilen an die eigenen anpassen
** (12) das müßte es eigentlich gewesen sein.
******************************************************************************/

include("__Toni.inc.php");

$WFC=46366 /*[WebFront]*/; // Webfront-Konfigurator ID
$NewTaskStrID=19260 /*[to Do	o Do Listen (Wunderlist)\Neuen Eintrag in geöffnete Liste]*/; // ID der string-Variable (Profil textbox) für einen neuen Task
$VisuTaskListID=12070 /*[to Do	o Do Listen (Wunderlist)\Aktuelle Liste: <>]*/; // ID der htmlBox für die darstellung der Taskliste

$IPuPort='http://127.0.0.1:1218'; // IP und Port des Wundertalkers von Tonic1014, in der Regel so ok

// **** ab hier muss nichts geändert werden ************************************

$ListsArray=getToniArray($IPuPort.'/Lists'); // Array mit allen Listen füllen
$ListsCount=Count($ListsArray);  // Anzahl er geladenen Listen ermitteln

$selfID=$_IPS['self']; // ID dieses Scripts

$ActualListID= IPS_getparent($selfID); // ID der obergeordneten Variable

AktuelleList=getvalue($ActualListID);

if ($_IPS['SENDER']=="WebFront")
   {
  	 if($_IPS['VARIABLE']==$NewTaskStrID) // wenn durch Texteingabe für "neuen Eintrag" ausgelöst
		{
    		 $ListID=$ListsArray[Getvalue($ActualListID)][0];
          $result1=WunderlistBefehlSenden("AddTask?title=".urlencode($_IPS['VALUE'])."&list=".$ListID);
          $result2=WunderlistBefehlSenden("Sync");  // Wunderlist in Cloud synchronisieren und Erfolg rückmelden
          if (($result1=="FEHLER") or ($result2=="FEHLER"))
				   { WFC_SendNotification($WFC, "Wunderlist!", "Fehler beim Anlegen eines neuen Tasks ", "Warning", 5);}
       		else
					{ WFC_SendNotification($WFC, "Wunderlist!", "Erfolgreich angelegt", "Information", 5);}
			 SetValue($NewTaskStrID,'');
 		    $AktuelleList=getvalue($ActualListID);
 		}
		else
		{
          SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
 		    $AktuelleList=$_IPS['VALUE'];
		}
  	}

if ($_IPS['SENDER']=="RunScript")
  {
  switch ($action)
        {
            case 'DELETE':
                if (isset($number) && $number <> '')
                {
                    $result=WunderlistBefehlSenden("DeleteTask?id=".$number); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) LÖSCHEN
                    $result=WunderlistBefehlSenden("Sync"); // cloud synchronisieren
						  if ($result<>"FEHLER") WFC_SendNotification($WFC,"toDo Task","Erfolgreich gelöscht","Information",5); else WFC_SendNotification($WFC,"toDo Task","FEHLER! Nicht gelöscht!","Warning",8);
                }
	             break;
            case 'DONE':
                if (isset($number) && $number <> '')
                {
						  if (getToniArray($IPuPort.'/Tasks?id='.$number)[0][4]=="True") // wenn als DONE markiert dann....
						        $result=WunderlistBefehlSenden("EditTask?id=".$number."&completed=False"); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) als UnWichtig markieren
							  else
  						        $result=WunderlistBefehlSenden("EditTask?id=".$number."&completed=True"); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) als Wichtig markieren

                    $result=WunderlistBefehlSenden("Sync"); // cloud synchronisieren
						  if ($result<>"FEHLER") WFC_SendNotification($WFC,"toDo Task","Markierung geändert!","Information",5); else WFC_SendNotification($WFC,"toDo Task","FEHLER! Markierung nicht geändert!","Warning",8);
                }
                break;
            case 'IMPORTANT':
                if (isset($number) && $number <> '')
                {
						  if (getToniArray($IPuPort.'/Tasks?id='.$number)[0][3]=="True")
						        $result=WunderlistBefehlSenden("EditTask?id=".$number."&starred=False"); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) als UnWichtig markieren
							  else
  						        $result=WunderlistBefehlSenden("EditTask?id=".$number."&starred=True"); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) als Wichtig markieren
                    $result=WunderlistBefehlSenden("Sync"); // cloud synchronisieren
						  if ($result<>"FEHLER") WFC_SendNotification($WFC,"toDo Task","Markierung gesetzt!","Information",5); else WFC_SendNotification($WFC,"toDo Task","FEHLER! Nicht markiert!","Warning",8);
                }
                break;
         case 'EDIT':
                if (isset($number) && $number <> '')
                {
                 setvalue($NewTaskStrID,getToniArray($IPuPort.'/Tasks?id='.$number)[0][1]); // angeklickten Task in Textbox
                 // dann angeklickten Task löschen
                 $result=WunderlistBefehlSenden("DeleteTask?id=".$number); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) LÖSCHEN
                 $result=WunderlistBefehlSenden("Sync"); // cloud synchronisieren

                }
                break;
				}
        $AktuelleList=getvalue($ActualListID);
     }

// ******* Profil der Listenanzeige löschen,neu generieren und füllen **********
if (IPS_VariableProfileExists("toDoListen")==TRUE) IPS_DeleteVariableProfile("toDoListen");
IPS_CreateVariableProfile("toDoListen",1); // Profil "toDoListen" neuanlegen
IPS_SetVariableCustomProfile($ActualListID,"toDoListen"); // Profil der Var zuordnen
IPS_SetVariableCustomAction($ActualListID,$selfID); // passendes (dieses) Aktionsscript verbinden

for ($i=0; $i<$ListsCount; $i++) // Profil mit allen vorhandenen Listen neu füllen
 {
	 $TasksArray=getToniArray($IPuPort.'/Tasks?list='.$ListsArray[$i][0]); // Array mit allen Task der gewählten Liste füllen um deren Zahl zu bestimmen
	 $TasksCount=Count($TasksArray);
	 if (@$TasksArray[0][0]=="") $TasksCount="-"; // kein Task in dieser Liste ...
	 if (@$ListsArray[0][1]=="inbox") $ListsArray[0][1]="Eingang";
    IPS_SetVariableProfileAssociation("toDoListen", $i,$ListsArray[$i][1]." (".$TasksCount.")", "", 0xFFFFFF);
 }

// folgende Zeile listet alle Einträger einer spez. Liste (aktuell ausgewählen) auf
$TasksArray=getToniArray($IPuPort.'/Tasks?list='.$ListsArray[$AktuelleList][0]); // Array mit allen Task der gewählten Liste füllen

if ($TasksArray[0][0]=='') $TasksCount=0; else $TasksCount=Count($TasksArray);   // Wenn task leer, dann gibts keine tasks!

IPS_SetName($VisuTaskListID,'Aktuelle Liste: <'.$ListsArray[$AktuelleList][1].'>');

//** Visu in htmlBOX
	$html = '<table style="width: 100%;" cellspacing=0 cellpadding=2><tbody>
	   <tr style="color:grey;">
 	     <td style="border-bottom-width:2px; border-bottom-style:solid; border-bottom-color:#3B3B4D;"></td>
		  <td align="left" style="border-bottom-width:2px; border-bottom-style:solid; border-bottom-color:#3B3B4D;">Beschreibung</td>
	     <td style="border-bottom-width:2px; border-bottom-style:solid; border-bottom-color:#3B3B4D;">erledigen*</td>
		  <td align="right" style="border-bottom-width:2px; border-bottom-style:solid; border-bottom-color:#3B3B4D;">löschen</td>
	   </tr>';
	for($x=0; $x < $TasksCount; $x++ ) {
		if (($TasksArray[$x][3]=="True") and ($TasksArray[$x][4]==0)) //Eintrag ist als WICHTIG markiert
			   {
					$html .= '<tr><td align="center" width=25px style="line-height:25px; border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();		 HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=IMPORTANT&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/important.png"></img></div></td>';
			   }
			else
			   {
					$html .='<tr><td align="center" width=25px style="line-height:25px; border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();		 HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=IMPORTANT&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/leer.png"></img></div></td>';
			   }
		if ($TasksArray[$x][4]=="True") //text durchstreichen wenn in wunderlist als erledigt markiert= DONE
			   {
			 			$html.='<td style="border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D; color:grey;">*<strike>*'.$TasksArray[$x][1].'*</strike></td>';
						$html.='<td align="center" width=25px style="line-height:25px; border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();		 HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=DONE&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/undone.png"></img></div></td>';
						$html.='<td align="center" width=35px style="border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();		 HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=DELETE&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/Delete.png"></img></div></td></tr>';
			   }
			 else
				{
      		    	$html.='<td style="border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D; color:white;">*<div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();		 HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=EDIT&number='.$TasksArray[$x][0].'\' });">'.$TasksArray[$x][1].'</div></td>';
						$html.='<td align="center" width=25px style="line-height:25px; border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();		 HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=DONE&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/done.png"></img></div></td>';
						$html.='<td align="center" width=35px style="border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();		 HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=DELETE&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/Delete.png"></img></div></td></tr>';
			   }
	}
	$html .= '</tbody></table>';
	setvalue($VisuTaskListID,$html);
// Ende des Hauptprogrammes

function WunderlistBefehlSenden($Befehl)
{
    $curl = curl_init();
    curl_setopt ($curl, CURLOPT_URL, "http://127.0.0.1:1218/".$Befehl);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec ($curl); // Rückmeldung
    curl_close ($curl);
    if ((strpos($result,'OK')==FALSE) and (strpos($result,'Created')==FALSE)) $result="FEHLER";
    return $result;
}

?>

Der Fehler war in folgedem Ausschnitt:

if ($TasksArray[$x][4]<>0) //text durchstreichen wenn in wunderlist als erledigt markiert= DONE

Und muss statt dessen wie folgt heißen:

If ($TasksArray[$x][4]=="True") //text durchstreichen wenn in wunderlist als erledigt markiert= DONE

Gruß
hardlog

Danke und ein frohes neues Jahr

Hab noch einen ähnlichen Fehler entdeckt!
Hmm, ich könnte schwöre, dass es vor einem Jahr noch alles ging… :confused:

Folgender Abschnitt muss statt

case 'DONE':
             if (isset($number) && $number <> '')
              {
		  if (getToniArray($IPuPort.'/Tasks?id='.$number)[0][4]<>"0") // wenn als DONE markiert dann....

so lauten:

 case 'DONE':
             if (isset($number) && $number <> '')
              {
		 if (getToniArray($IPuPort.'/Tasks?id='.$number)[0][4]=="True") // wenn als DONE markiert dann....

PS: Habs im Gesamt-Script in Post #102 auch geändert.

ein gutes Neues
hardlog

Moin,

hab nochmal 2 kleine Korrekturen am Script im Post #102 gemacht. In Zeile 55 und Zeile 59.

Gruß
hardlog

Hallo,

erstmal vielen Dank für die hervorragende Arbeit die Ihr hier alle leistet. Ohne Euch alle wäre IPS nur die Hälfte wert …

Nun zu meiner Frage:
Ich habe meinen Account bei Wunderlist gelöscht und möchte nun einen anderen Account benutzen. Bei der ersten Einrichtung poppte ein Fenster bei Wundertalker auf, in dem die Zugangsdaten eingegeben werden konnten.
Dieses Fenster wird jetzt sofort wieder geschlossen, ohne irgend etwas anzuzeigen.

Wo kann ich die Daten (eMail, Passwort, Auth-Code, etc.) für den neuen Account ändern ???

Vielen Dank !!!

Gruß Proxima

Moin Moin,

Wunderlist wider mal an der Reihe :slight_smile: und… es Rockt :wink: Danke euch Toni, hardlog.
@hardlog
ist das Zip File in post #2 mit Aktuellen änderungen?

Hallo Proxima,

Im Wundertalker auf den „Get it now“ klicken, sollte das sein.

Hi Proxima,

hab das zip im #2 Post gerade ersetzt.

Gruß
hardlog

Hallo,

nachdem ich meinen Testaccount bei Wunderlist gelöscht und den „produktiven“ Account angelegt, sowie das Script und alle anderen Daten aus dem ZIP aus #2 ausgetauscht habe, erhalte ich beim Ausführen des Main-Scripts folgende Fehler:

Notice:  Undefined offset: 1 in C:\IP-Symcon\scripts\47301.ips.php on line 143

Notice:  Undefined offset: 1 in C:\IP-Symcon\scripts\47301.ips.php on line 151

Notice:  Undefined offset: 3 in C:\IP-Symcon\scripts\47301.ips.php on line 162

Notice:  Undefined offset: 4 in C:\IP-Symcon\scripts\47301.ips.php on line 170

Notice:  Undefined offset: 1 in C:\IP-Symcon\scripts\47301.ips.php on line 178


Wie oben bereits geschrieben, popt das Fenster zur Eingabe der Zugangsdaten nur kurz auf und schließr sich dann gleich wieder, nachdem auf „Get it now“ geklickt habe. Angezeigt wird in diesem Fenster nichts (ist leer). Woher soll also Wundertalker wissen, wie die eMail-Adresse und das Passwort für den „Produktiv-Account“ sind ???

Beim Klick auf „Show Help“ wird die Hilfe mit den möglichen Optionen angezeigt.

Gruß Proxima

Hi Proxima,

wenn Du das script manuell ausführts, müßte es an der Zeile

$selfID=$_IPS['self'];

liegen. Ersetz die mal gegen folgendes

$selfID=12345;

Natürlich mit der ID dieses Scripts.

Gruß
hardlog

Hallo,

habe ich gemacht: Gleiche Fehler, keine Änderung.

(Ich hatte übrigens schon vorher das ‚self‘ durch ‚SELF‘ ersetzt.)

Ich vermute, dass von Wundertalker keine Daten rein kommen ???

Gruß Proxima

Was kommt denn wenn du im Browser direkt

Localhost:1218/Lists

Eingibst?

Hardlo

Es kommt:

#Nothing found

Ok,dann liegt es zumindest nicht an meinem Script.

Moin,

im Rahmen vom Wegfall alter IPS-Funktionen mußte ich eine Minimale Änderung am Hauptscript vornehmen.
Sofern der Kompatibilitäts-Modus von IPS läuft (bei der Windowsversion) gehts auch noch (wie lange?) ohne Änderung, ab 4.0 wenn die Kompatibilitäts-Modus deaktiviert ist ODER ihr IPS unter Linux laufen lasst, muss das Main-Script angepaßt werden:
Folgende Stelle


if ($_IPS['SENDER']=="RunScript")
  {
  switch ($action)
        {

muss ab Zeile 84 geändert werden (Zeile 84 ändern und eine Code-Zeile davor neuen Programmcode einffügen:


if ($_IPS['SENDER']=="RunScript")
  {
  $number=$_IPS['number']; // ****************************** NEU
  switch ($_IPS['action'])       // ****************************** geändert
        {

Dann müßte es konform mit 4.0 sein.
Ich bitte um Feedback falls es Probleme gibt.

Gruß

hardlog

Moin hardlog,
habe das Aktuelle Script für V4. übernommen. Danke dir für die Arbeit.
Test ergab : wenn ich zwischen Listen wechsel kommt im WF nur „Fehler“ obwoh die Liste umschaltet und auch lädt
im log auch kein Eintrag. Eine Idee woran das liegt?

Hi,

Interessant! :confused: Die Meldung bekomme ich da zwar nicht, aber an anderer Stelle (ganz anderes Script) ohne das ich es bislang zuordnen kann. Ich werd mich mal auf Suche begeben…

Gruß hardlog

Moin zusamm…

Da Wunderlist die 32Bit Schallgrenze bei den TaskIDs erreicht hat hab ich mal nachgelegt und ein 64Bit Background dahinter gelegt. (Download auf meiner Webseite)

Mich würde interessieren ob es noch 32Bit Server da draußen gibt und ob der Wundertalker da noch läuft. (es ist immer noch eine native 32Bit Applikation).

Wo ich grad dabei war hab ich direkt ein paar Bugfixe eingebaut. Win10 kompatibel! :slight_smile:

Gruß,

Toni

Hallo Toni!!

Habs installiert, läuft…
Erster Eindruck nach 10sec. (ohne es weiter kontrolliert zu haben…): Kann es ein Umlaufproblem in Zusammenhang mit meinem Script zum Einbinden in IPS geben?

Gruß
Hardlog