From: <ob...@us...> - 2006-04-23 10:57:48
|
Revision: 10556 Author: obones Date: 2006-04-23 03:57:29 -0700 (Sun, 23 Apr 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10556&view=rev Log Message: ----------- Grabber classes now have to override Grab instead of Execute. This is to ensure the gsClosed state is always and other cleanups are done. Modified Paths: -------------- trunk/jvcl/run/JvUrlGrabbers.pas trunk/jvcl/run/JvUrlListGrabber.pas Modified: trunk/jvcl/run/JvUrlGrabbers.pas =================================================================== --- trunk/jvcl/run/JvUrlGrabbers.pas 2006-04-23 10:44:28 UTC (rev 10555) +++ trunk/jvcl/run/JvUrlGrabbers.pas 2006-04-23 10:57:29 UTC (rev 10556) @@ -154,8 +154,7 @@ TJvFtpUrlGrabberThread = class(TJvCustomUrlGrabberThread) protected function GetGrabber: TJvFtpUrlGrabber; - procedure Closed; - procedure Execute; override; + procedure Grab; override; public property Grabber: TJvFtpUrlGrabber read GetGrabber; end; @@ -230,10 +229,8 @@ protected FContinue: Boolean; function GetGrabber: TJvHttpUrlGrabber; - procedure Execute; override; - procedure Closed; + procedure Grab; override; public - constructor Create(Grabber: TJvCustomUrlGrabber); override; property Grabber: TJvHttpUrlGrabber read GetGrabber; end; @@ -283,8 +280,7 @@ TJvLocalFileUrlGrabberThread = class(TJvCustomUrlGrabberThread) protected function GetGrabber: TJvLocalFileUrlGrabber; - procedure Execute; override; - procedure Closed; + procedure Grab; override; public property Grabber: TJvLocalFileUrlGrabber read GetGrabber; end; @@ -567,12 +563,7 @@ //=== { TJvFtpUrlGrabberThread } ============================================= -procedure TJvFtpUrlGrabberThread.Closed; -begin - Grabber.DoClosed; -end; - -procedure TJvFtpUrlGrabberThread.Execute; +procedure TJvFtpUrlGrabberThread.Grab; const cPassive: array [Boolean] of DWORD = (0, INTERNET_FLAG_PASSIVE); var @@ -584,8 +575,6 @@ Buf: array [0..1023] of Byte; dwFileSizeHigh: DWORD; begin - Grabber.Stream := nil; - SetGrabberStatus(gsStopped); hSession := nil; hHostConnection := nil; hDownload := nil; @@ -694,10 +683,6 @@ except end; finally - //Free all stuff's - Grabber.Stream.Free; - Grabber.Stream := nil; - //Release all handles // (rom) now all connections get closed and Closed is always signalled if (hDownload <> nil) and not InternetCloseHandle(hDownload) then @@ -715,11 +700,6 @@ ErrorText := GetLastInternetError; Synchronize(Error); end; - - // (obones): Set stopped before calling closed so that users can change - // the URL in an OnConnectionClosed event handler. - SetGrabberStatus(gsStopped); - Synchronize(Closed); end; end; @@ -730,17 +710,7 @@ //=== { TJvHttpUrlGrabberThread } ============================================ -procedure TJvHttpUrlGrabberThread.Closed; -begin - Grabber.DoClosed; -end; - -constructor TJvHttpUrlGrabberThread.Create(Grabber: TJvCustomUrlGrabber); -begin - inherited Create(Grabber); -end; - -procedure TJvHttpUrlGrabberThread.Execute; +procedure TJvHttpUrlGrabberThread.Grab; var hSession, hHostConnection, hDownload: HINTERNET; HostName, FileName, strUserName, strPassword: string; @@ -754,8 +724,6 @@ Buffer := nil; FContinue := True; - SetGrabberStatus(gsStopped); - Grabber.Stream := nil; hSession := nil; hHostConnection := nil; hDownload := nil; @@ -903,8 +871,6 @@ // Free all stuff's if Buffer <> nil then FreeMem(Buffer); - Grabber.Stream.Free; - Grabber.Stream := nil; // Release all handles if (hDownload <> nil) and not InternetCloseHandle(hDownload) then @@ -922,11 +888,6 @@ ErrorText := GetLastInternetError; Synchronize(Error); end; - - // (obones): Set stopped before calling closed so that users can change - // the URL in an OnConnectionClosed event handler. - SetGrabberStatus(gsStopped); - Synchronize(Closed); end; end; @@ -1008,12 +969,7 @@ //=== { TJvLocalFileUrlGrabberThread } ======================================= -procedure TJvLocalFileUrlGrabberThread.Closed; -begin - Grabber.DoClosed; -end; - -procedure TJvLocalFileUrlGrabberThread.Execute; +procedure TJvLocalFileUrlGrabberThread.Grab; var FileName: string; BytesRead, TotalBytes: DWORD; @@ -1021,8 +977,6 @@ AFileStream: TFileStream; Attrs: Integer; begin - SetGrabberStatus(gsStopped); - Grabber.Stream := nil; Grabber.ParseUrl(Grabber.Url, FileName); if not FileExists(FileName) then begin @@ -1065,13 +1019,6 @@ SetFileAttributes(PChar(Grabber.FileName), Attrs); finally AFileStream.Free; - Grabber.Stream.Free; - Grabber.Stream := nil; - - // (obones): Set stopped before calling closed so that users can change - // the URL in an OnConnectionClosed event handler. - SetGrabberStatus(gsStopped); - Synchronize(Closed); end; except // Application.HandleException(Self); Modified: trunk/jvcl/run/JvUrlListGrabber.pas =================================================================== --- trunk/jvcl/run/JvUrlListGrabber.pas 2006-04-23 10:44:28 UTC (rev 10555) +++ trunk/jvcl/run/JvUrlListGrabber.pas 2006-04-23 10:57:29 UTC (rev 10556) @@ -488,8 +488,19 @@ FContinue: Boolean; protected FGrabber: TJvCustomUrlGrabber; + + procedure Execute; override; + + // Derived classes must not override Execute. They must instead override + // Grab which is called by this class' Execute. This is done to ensure + // that all derived classes will always set the status back to gsStopped + // and trigger the OnConnectionClosed event at the end. + procedure Grab; virtual; abstract; + procedure Error; procedure Ended; + procedure Closed; + procedure UpdateGrabberProgress; procedure UpdateGrabberStatus; @@ -1173,6 +1184,11 @@ //=== { TJvCustomUrlGrabberThread } ========================================== +procedure TJvCustomUrlGrabberThread.Closed; +begin + FGrabber.DoClosed; +end; + constructor TJvCustomUrlGrabberThread.Create(Grabber: TJvCustomUrlGrabber); begin inherited Create(True); @@ -1201,6 +1217,23 @@ FGrabber.DoError(FErrorText); end; +procedure TJvCustomUrlGrabberThread.Execute; +begin + SetGrabberStatus(gsStopped); + FGrabber.Stream := nil; + try + Grab; + finally + //Free all stuff's + FGrabber.Stream.Free; + FGrabber.Stream := nil; + + // Signal Closed, after having changed the state of the grabber + SetGrabberStatus(gsStopped); + Synchronize(Closed); + end; +end; + procedure TJvCustomUrlGrabberThread.SetGrabberStatus( Status: TJvGrabberStatus); begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |