* Instructions for compilation with 2.6.4

git-svn-id: trunk@48979 -
This commit is contained in:
michael 2015-05-09 15:25:35 +00:00
parent 347c5403b9
commit 7a2e9badfb
3 changed files with 210 additions and 0 deletions

1
.gitattributes vendored
View File

@ -1633,6 +1633,7 @@ components/fpweb/lazwebextra.lpk svneol=native#text/plain
components/fpweb/weblaz.lpk svneol=native#text/plain
components/fpweb/weblaz.pas svneol=native#text/plain
components/fpweb/weblazideintf.pp svneol=native#text/plain
components/googleapis/2_6_4/synapsewebclient.pp svneol=native#text/plain
components/googleapis/README.txt svneol=native#text/plain
components/googleapis/demo/calendar/calendardemo.lpi svneol=native#text/plain
components/googleapis/demo/calendar/calendardemo.lpr svneol=native#text/plain

View File

@ -0,0 +1,174 @@
unit synapsewebclient;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpwebclient, httpsend;
Type
{ TSynapseRequest }
TSynapseRequest = Class(TWebClientRequest)
Private
FHTTP : THTTPSend;
Protected
function GetHeaders: TStrings;override;
function GetStream: TStream;override;
Public
Constructor Create(AHTTP : THTTPSend);
Destructor Destroy; override;
end;
{ TSynapseResponse }
TSynapseResponse = Class(TWebClientResponse)
Private
FHTTP : THTTPSend;
Protected
function GetHeaders: TStrings;override;
function GetStream: TStream;override;
Function GetStatusCode : Integer; override;
Function GetStatusText : String; override;
Public
Constructor Create(ARequest : TWebClientRequest); override;
Destructor Destroy; override;
end;
{ TSynapseWebClient }
TSynapseWebClient = Class(TAbstractWebClient)
Protected
Function DoCreateRequest: TWebClientRequest; override;
Function DoHTTPMethod(Const AMethod,AURL : String; ARequest : TWebClientRequest) : TWebClientResponse; override;
end;
implementation
{ TSynapseRequest }
function TSynapseRequest.GetHeaders: TStrings;
begin
if Assigned(FHTTP) then
Result:=FHTTP.Headers
else
Result:=Inherited GetHeaders;
end;
function TSynapseRequest.GetStream: TStream;
begin
if Assigned(FHTTP) then
Result:=FHTTP.Document
else
Result:=Inherited GetStream;
end;
Constructor TSynapseRequest.Create(AHTTP: THTTPSend);
begin
FHTTP:=AHTTP;
end;
Destructor TSynapseRequest.Destroy;
begin
FreeAndNil(FHTTP);
inherited Destroy;
end;
{ TSynapseResponse }
function TSynapseResponse.GetHeaders: TStrings;
begin
if Assigned(FHTTP) then
Result:=FHTTP.Headers
else
Result:=Inherited GetHeaders;
end;
function TSynapseResponse.GetStream: TStream;
begin
if Assigned(FHTTP) then
Result:=FHTTP.Document
else
Result:=Inherited GetStream;
end;
Function TSynapseResponse.GetStatusCode: Integer;
begin
if Assigned(FHTTP) then
Result:=FHTTP.ResultCode
else
Result:=0;
end;
Function TSynapseResponse.GetStatusText: String;
begin
if Assigned(FHTTP) then
Result:=FHTTP.ResultString
else
Result:='';
end;
Constructor TSynapseResponse.Create(ARequest : TWebClientRequest);
begin
Inherited Create(ARequest);
FHTTP:=(ARequest as TSynapseRequest).FHTTP;
end;
Destructor TSynapseResponse.Destroy;
begin
FreeAndNil(FHTTP);
inherited Destroy;
end;
{ TSynapseWebClient }
Function TSynapseWebClient.DoCreateRequest: TWebClientRequest;
begin
Result:=TSynapseRequest.Create(THTTPSend.Create);
end;
Function TSynapseWebClient.DoHTTPMethod(Const AMethod, AURL: String;
ARequest: TWebClientRequest): TWebClientResponse;
Var
U,S : String;
I : Integer;
h : THTTPSend;
begin
U:=AURL;
H:=TSynapseRequest(ARequest).FHTTP;
S:=ARequest.ParamsAsQuery;
if (S<>'') then
begin
if Pos('?',U)=0 then
U:=U+'?';
U:=U+S;
end;
I:=H.Headers.IndexOfName('Content-type');
if I<>-1 then
begin
H.MimeType:=H.Headers.Values['Content-type'];
H.Headers.Delete(I);
end;
if Not H.HTTPMethod(AMethod,U) then
begin
H.Document.Clear;
H.Headers.Clear;
H.Cookies.Clear;
With H.Sock do
Raise EFPWebClient.CreateFmt('HTTP Request failed (%d : %s)',[LastError,LastErrorDesc]);
end
else
begin
Result:=TSynapseResponse.Create(ARequest);
if Assigned(ARequest.ResponseContent) then
ARequest.ResponseContent.CopyFrom(ARequest.Content,0);
TSynapseRequest(ARequest).FHTTP:=Nil;
end;
end;
end.

View File

@ -3,6 +3,8 @@ component palette.
Each Google Service API is a REST API that offers multiple resources.
See the end of this file for instructions for compiling with FPC 2.6.x
==================
Component overview
==================
@ -97,3 +99,36 @@ correct scope)
You can re-use the same Client ID and secret for all examples, or you
can create different client IDs and keys, or even create different projects.
========================
Compiling with FPC 2.6.4
========================
The code works with FPC 2.6.4. To work with FPC 2.6.4, you need the
following files from the FPC SVN repository (trunk):
From packages/fcl-web/src/base:
fpoauth2.pp
fphttpwebclient.pp
fpwebclient.pp
restcodegen.pp
restbase.pp
fpoauth2ini.pp
fpjwt.pp
From packages/googleapi/src
All *.pp files
There is a directory 2_6_4 to which the files can be copied.
Additionally, in the directory 2_6_4 there is a unit synapsewebclient.
This unit implements a TFPWebclient descendent that works with Synapse.
It works with version 2.6.4, and with version 3.x of Free Pascal.
You need to have compiled the laz_synapse package (distributed with synapse)
for this to work.
To compile the package and the demos, copy the needed files to directory 2_6_4 and
add this directory to the source path of the lazgoogleapi package and all
demo programs.