unit frmmain; {$mode objfpc}{$H+} // Define USESYNAPSE if you want to force use of synapse { $DEFINE USESYNAPSE} // For version 2.6.4, synapse is the only option. {$IFDEF VER2_6} {$DEFINE USESYNAPSE} {$ENDIF} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, synautil, IniFiles, googlebase, googleservice, googleclient, googletasks; type { TMainForm } TAccessTokenState = (acsWaiting,acsOK,acsCancel); TMainForm = class(TForm) BCancel: TButton; BSetAccess: TButton; BFetchTaskLists: TButton; BFetchTasks: TButton; EAccessCode: TEdit; GBAccess: TGroupBox; LTasks: TLabel; LEAccess: TLabel; LBTaskLists: TListBox; LBTasks: TListBox; procedure BCancelClick(Sender: TObject); procedure BFetchTasksClick(Sender: TObject); procedure BSetAccessClick(Sender: TObject); procedure BFetchTaskListsClick(Sender: TObject); Procedure DoUserConsent(Const AURL : String; Out AAuthCode : String) ; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure LBTaskListsSelectionChange(Sender: TObject; User: boolean); private { private declarations } FAccessState : TAccessTokenState; FClient : TGoogleClient; FTasksAPI: TTasksAPI; FTaskLists: TTaskLists; FCurrentList: TTaskList; FTasks : TTasks; procedure LoadAuthConfig; procedure SaveRefreshToken; public { public declarations } end; var MainForm: TMainForm; implementation uses {$ifdef windows}windows,{$endif} jsonparser, // needed fpoauth2, {$IFDEF USESYNAPSE} ssl_openssl, synapse,webclient {$ELSE} fphttpwebclient, {$ENDIF} lclintf; {$R *.lfm} { TMainForm } procedure TMainForm.FormCreate(Sender: TObject); begin // Register Tasks resources. TTasksAPI.RegisterAPIResources; // Set up google client. FClient:=TGoogleClient.Create(Self); {$IFDEF USESYNAPSE} FClient.WebClient:=TSynapseWebClient.Create(Self); {$ELSE} FClient.WebClient:=TFPHTTPWebClient.Create(Self); {$ENDIF} FClient.WebClient.RequestSigner:=FClient.AuthHandler; FClient.WebClient.LogFile:='requests.log'; FClient.AuthHandler.WebClient:=FClient.WebClient; FClient.AuthHandler.Config.AccessType:=atOffLine; // We want to enter a code. FClient.OnUserConsent:=@DoUserConsent; // Create a Tasks API and connect it to the client. FTasksAPI:=TTasksAPI.Create(Self); FTasksAPI.GoogleClient:=FClient; end; procedure TMainForm.FormDestroy(Sender: TObject); begin FreeAndNil(FTaskLists); FreeAndNil(FTasks); end; procedure TMainForm.LBTaskListsSelectionChange(Sender: TObject; User: boolean); begin BFetchTasks.Enabled:=User and (LBTaskLists.ItemIndex<>-1); if BFetchTasks.Enabled then begin FCurrentList:=LBTaskLists.Items.Objects[LBTaskLists.ItemIndex] as TTaskList; LTasks.Caption:='Tasks for list : '+FCurrentList.Title; end else begin LTasks.Caption:='Tasks for list :