Page 2 of 3
Posted: Mon Nov 17, 2008 5:36 pm
by Patrick Mast
Hello,
Horizon wrote:Is it possible to show progress bar (for example in message bar) while reading at ReadAll() method?
I download big files from www. Users confuse if there is a problem or not.
Sorry, I don't know.
Patrick
Posted: Mon Nov 17, 2008 6:23 pm
by Horizon
Hi,
Where can i find the more documentation about TIpClientHttp. Is it from Windows Controls or someone writes it?
Thanks
Posted: Tue Nov 18, 2008 6:59 pm
by Horizon
Hi,
I finally found the tip class in XHB source directory.
I have done some modifications in wfSaveURL function like below. It works perfectly with progressbar.
Code: Select all | Expand
.
.
.
// oProg : Progress Bar is created before
cURL := "http://www.test.be/test.txt"
cSaveAs := "newfile.txt"
nFileSize := Get_File_Size(cURL)
IF wfReadURL(cURL, cSaveAs, oProg, nFileSize)
... File is there AND downloaded as cSaveAs
ELSE
... File is not there
ENDIF
.
.
.
FUNCTION wfSaveURL(cUrl, cSaveAs, oProg, nFileSize)
LOCAL oConn, lReturn:=.T.
DEFAULT oProg := 0
IF Upper(Left(cUrl,4))#"HTTP"
cUrl:="http://"+cUrl
ENDIF
TRY
oConn := TipClientHttp():New(TURL():New(cUrl))
oConn:nConnTimeout := 20000
IF !EMPTY(oProg) .and. !EMPTY(nFileSize)
oConn:exGauge := { | done, size| wfProgress(done, size, oProg ) }
oProg:SetRange( 0, 99 )
ENDIF
IF oConn:Open(cURL)
oConn:ReadToFile(cSaveAs,,nFileSize)
oConn:Close()
ENDIF
CATCH
lReturn := .F.
END
RETURN lReturn
function wfProgress(nReceived,nTotalSize,ooProg)
ooProg:SetPos(INT(nReceived/nTotalSize*100)+1)
SysRefresh()
return
function Get_File_Size(cURL)
LOCAL cBuffer, cRequest, cResponse, nBytes, pSocket, aRequest
LOCAL crlf := CHR(13)+CHR(10), Result := 0, oUrl
// initialize sockets system and connect to server
DEFAULT cURL:=""
oUrl := tURL():New( cUrl )
IF Empty( oUrl )
Return 0
ENDIF
IF Lower( oUrl:cProto ) <> "http"
Return 0
ENDIF
INetInit()
pSocket := INetConnect( oUrl:cServer, 80 )
IF INetErrorCode( pSocket ) <> 0
? "Socket error:", INetErrorDesc( pSocket )
INetCleanUp()
RETURN 0
ENDIF
crlf := INETCRLF()
// send HTTP request to server
cRequest := "HEAD "+oUrl:BuildAddress() + " HTTP/1.1" + CRLF + ;
"Host: "+oUrl:cServer+ CRLF + ;
"User-Agent: HTTP-Get-File-Size" + CRLF + ;
"Connection:close" + CRLF + ;
CRLF
nBytes := INetSend( pSocket, cRequest )
cBuffer := Space(4096)
cResponse:= ""
// get HTTP response from server
DO WHILE ( nBytes > 0 )
nBytes := INetRecv( pSocket, @cBuffer )
cResponse += Left( cBuffer, nBytes )
cBuffer := Space(4096)
ENDDO
// disconnect and cleanup memory
INetClose( pSocket )
INetCleanUp()
aRequest := HB_ATokens(cResponse, CRLF)
clear
nAt := Ascan(aRequest,{|x|LEFT(LTRIM(X),15)="Content-Length:"})
IF nAt>0
Result := VAL(SUBSTR(aRequest[nAt],17))
ENDIF
RETURN RESULT
Posted: Wed Nov 19, 2008 4:09 am
by RAMESHBABU
Hello Mr.Horizon
A Small correction :
Code: Select all | Expand
IF wfReadURL(cURL, cSaveAs, oProg, nFileSize)
... File is there AND downloaded as cSaveAs
should be
Code: Select all | Expand
IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize)
... File is there AND downloaded as cSaveAs
And oProg is an object. Is it not ? You have defined it as
The :exGauge is not working with FWH. I don't know why...
And :SetRange and :SetPos methods are not there in TMETER
class of FWH. Instead :SetTotal and :Set methods are there. I changed
them as required in your source. Still the Progress bar is not seen.
Are you running this code in FWH or in terminal mode ?
>I finally found the tip class in XHB source directory.
One more request. May I get a copy of TIP CLASS SOURCE?
Thanks,
- Ramesh Babu P
Posted: Wed Nov 19, 2008 7:57 am
by Horizon
Hi Ramesh,
I use xHarbour Builder Sep. 2008 and FWH 8.10.
Code: Select all | Expand
IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize)
... File is there AND downloaded as cSaveAs
You are right. It should be.
Yes oProg is a Progress Bar object. like
It might be DEFAULT oProg := NIL. It works now.
:exGauge works only :ReadtoFile() and :WriteToFile() methods.
You may use Progress instead of TMeter. :SetRange and :SetPos works now in Progress.
I will send a working example for you. It may help you.
Posted: Wed Nov 19, 2008 8:28 am
by Horizon
It is the working example.
Code: Select all | Expand
#include "FiveWin.ch"
//----------------------------------------------------------------------------//
function Main()
local oDlg, oBtnDwn, oBtnOk
DEFINE DIALOG oDlg
@ 1, 1 BUTTON oBtnDwn PROMPT "Download" ACTION Download(oProg)
@ 2.5, 1 PROGRESS oProg POSITION 0 SIZE 100, 12
@ 3, 1 BUTTON oBtnOk PROMPT "Quit" ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTER
return nil
PROCEDURE Download
LOCAL cURL, cSaveAs, nFileSize
cURL := "http://www.fivetechsoft.com/files/utilities/prometheus.exe"
cSaveAs := "prometh.exe"
nFileSize := Get_File_Size(cURL)
IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize)
? "Downloaded" // ... File is there AND downloaded as cSaveAs
ELSE
? "Can not downloaded " //... File is not there
ENDIF
RETURN
FUNCTION wfSaveURL(cUrl, cSaveAs, oProg, nFileSize)
LOCAL oConn, lReturn:=.T.
DEFAULT oProg := NIL
DEFAULT nFileSize := 0
IF Upper(Left(cUrl,4))#"HTTP"
cUrl:="http://"+cUrl
ENDIF
TRY
oConn := TipClientHttp():New(TURL():New(cUrl))
oConn:nConnTimeout := 20000
IF !EMPTY(oProg) .and. !EMPTY(nFileSize)
oConn:exGauge := { | done, size| wfProgress(done, size, oProg ) }
oProg:SetRange( 0, 99 )
ENDIF
IF oConn:Open(cURL)
oConn:ReadToFile(cSaveAs,,nFileSize)
oConn:Close()
ENDIF
CATCH
lReturn := .F.
END
RETURN lReturn
function wfProgress(nReceived,nTotalSize,ooProg)
ooProg:SetPos(INT(nReceived/nTotalSize*100)+1)
SysRefresh()
return
function Get_File_Size(cURL)
LOCAL cBuffer, cRequest, cResponse, nBytes, pSocket, aRequest
LOCAL crlf := CHR(13)+CHR(10), Result := 0, oUrl
// initialize sockets system and connect to server
DEFAULT cURL:=""
oUrl := tURL():New( cUrl )
IF Empty( oUrl )
Return 0
ENDIF
IF Lower( oUrl:cProto ) <> "http"
Return 0
ENDIF
INetInit()
pSocket := INetConnect( oUrl:cServer, 80 )
IF INetErrorCode( pSocket ) <> 0
? "Socket error:", INetErrorDesc( pSocket )
INetCleanUp()
RETURN 0
ENDIF
crlf := INETCRLF()
// send HTTP request to server
cRequest := "HEAD "+oUrl:BuildAddress() + " HTTP/1.1" + CRLF + ;
"Host: "+oUrl:cServer+ CRLF + ;
"User-Agent: HTTP-Get-File-Size" + CRLF + ;
"Connection:close" + CRLF + ;
CRLF
nBytes := INetSend( pSocket, cRequest )
cBuffer := Space(4096)
cResponse:= ""
// get HTTP response from server
DO WHILE ( nBytes > 0 )
nBytes := INetRecv( pSocket, @cBuffer )
cResponse += Left( cBuffer, nBytes )
cBuffer := Space(4096)
ENDDO
// disconnect and cleanup memory
INetClose( pSocket )
INetCleanUp()
aRequest := HB_ATokens(cResponse, CRLF)
clear
nAt := Ascan(aRequest,{|x|LEFT(LTRIM(X),15)="Content-Length:"})
IF nAt>0
Result := VAL(SUBSTR(aRequest[nAt],17))
ENDIF
RETURN RESULT
Re: Download internet file without interference
Posted: Fri May 01, 2009 1:47 pm
by Dave Zowasky
Hello All,
I am on Harbour 1.1.0dev (Rev. 10716)
I have hbtip.lib in my buildh.bat and all programs compile ok except when
I try to add turl code to my program.
If I add this to my program:
oConn := TipClientHttp():New(TURL():New(cUrl))
I get this error:
Error: Unresolved external '_pcre_config' referenced from H:\ZHARBOUR\LIB\HBRTL.LIB|hbregex
Error: Unresolved external '_pcre_stack_malloc' referenced from H:\ZHARBOUR\LIB\HBRTL.LIB|hbregex
Error: Unresolved external '_pcre_stack_free' referenced from H:\ZHARBOUR\LIB\HBRTL.LIB|hbregex
Any ideas?
Thanks
Re: Download internet file without interference
Posted: Sun May 03, 2009 12:30 am
by Antonio Linares
Dave,
You have to link Harbour hbpcre.lib
Re: Download internet file without interference
Posted: Sun May 03, 2009 1:59 am
by codemaker
Was anybody able to run the example "horizon" posted?
For me it returns "Downloaded" but nothing wa sactualy downloaded.
Re: Download internet file without interference
Posted: Sun May 03, 2009 1:47 pm
by Dave Zowasky
Antonio,
hbpcre.lib fixed my problem, however now getting:
HB_FUN_INETINIT'
HB_FUN_INETCONNECT
HB_FUN_INETERRORCODE
HB_FUN_INETERRORDESC
I have hbtip.lib linking in.
I thought hbtip.lib had these functions?
Thanks
Re: Download internet file without interference
Posted: Mon May 04, 2009 7:12 am
by Carles
Hi !,
Can somebody send me the HBTIP.LIB for Harbour and their sources? I cna't connect to CVS...
Regards.
Re: Download internet file without interference
Posted: Mon May 04, 2009 10:09 am
by Antonio Linares
Dave,
You need to link XHB.lib
Re: Download internet file without interference
Posted: Mon May 04, 2009 10:13 am
by Antonio Linares
Re: Download internet file without interference
Posted: Mon May 04, 2009 5:29 pm
by Carles
Antonio => Thanks a lot
Re: Download internet file without interference
Posted: Tue May 26, 2009 1:58 pm
by Dave Zowasky
Antonio,
Compiles great now, Thanks