Windows, SysUtils, Classes, ComCtrls, Controls, Forms, IdHTTP,
{HTTPApp,} YofUtils, IdGlobal, IdException, IdComponent, IniFiles, {DateUtils,}
GikoSystem, BoardGroup, ExternalBoardManager, ExternalBoardPlugInMain,
- Sort;
+ Sort, SyncObjs;
type
TDownloadItem = class;
FErrText: string;
end;
-
+ TWorkData = record
+ //FWorkCS: TCriticalSection;
+ //IdHttp\82ÌOnWork\81AOnWorkBegin,OnWorkEnd\82Í\95Ê\82Ì\83X\83\8c\83b\83h\82©\82ç
+ //\8cÄ\82Î\82ê\82é\88×\81ASynchronize\82Å\93¯\8aú\82·\82é\95K\97v\82ª\82 \82é\81B
+ //\83N\83\8a\83e\83B\83J\83\8b\83Z\83N\83V\83\87\83\93\82Í\96³\82\82Ä\82à\82½\82Ô\82ñ\95½\8bC\82¾\82¯\82Ç\97p\90S\82Ì\88×\81B by eggcake
+ FWorkCS: TCriticalSection;
+ FSender: TObject;
+ FAWorkMode: TWorkMode;
+ FAWorkCount: Integer;
+ FAWorkCountMax: Integer
+ end;
TDownloadThread = class(TThread)
private
FIndy: TIdHttp;
FOnDownloadEnd: TDownloadEndEvent;
FOnDownloadMsg: TDownloadMsgEvent;
FDownloadTitle: string;
+ FWorkData: TWorkData;
procedure FireDownloadEnd;
procedure FireDownloadMsg;
procedure DeleteStatusLine(Item: TDownloadItem);
procedure InitHttpClient(client: TIdHttp);
procedure ClearHttpClient(client: TIdHttp);
- protected
+ procedure FireWork;
+ procedure FireWorkBegin;
+ procedure FireWorkEnd;
+ protected
procedure Execute; override;
public
property Item: TDownloadItem read FItem write FItem;
implementation
uses
- Y_TextConverter, MojuUtils, HTMLCreate;
+ Y_TextConverter, MojuUtils, HTMLCreate, ReplaceDataModule;
constructor TDownloadThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
+ FWorkData.FWorkCS := TCriticalSection.Create;
+
FIndy := TIdHttp.Create(nil);
FIndy.OnWorkBegin := WorkBegin;
begin
ClearHttpClient(FIndy);
FIndy.Free;
+ FWorkData.FWorkCS.Free;
inherited;
end;
{$ENDIF}
FIndy.Get(URL, ResStream);
Item.Content := GikoSys.GzipDecompress(ResStream, FIndy.Response.ContentEncoding);
- Item.LastModified := FIndy.Response.LastModified;
- //\8d·\95ª\8eæ\93¾\82Å\82P\83o\83C\83g\91O\82©\82ç\82Æ\82Á\82Ä\82«\82½\82Æ\82«\82Í\83}\83C\83i\83X\82·\82é
-// Item.ContentLength := FIndy.Response.ContentLength + AdjustLen;
Item.ContentLength := Length(Item.Content) + AdjustLen;
- //\96³\82¢\82Æ\8ev\82¤\82¯\82Ç\81B\81B\81B
-// if (FIndy.ResponseCode in [200, 206]) and (Item.Content = '') then
-// Result := False
+ // \92u\8a·\82·\82é
+ if GikoSys.Setting.ReplaceDat then begin
+ Item.Content := ReplaceDM.Replace(Item.Content);
+ end;
+ Item.LastModified := FIndy.Response.LastModified;
if Item.Content = '' then
Result := False
else
end;
end;
-procedure TDownloadThread.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
+procedure TDownloadThread.WorkBegin(Sender: TObject;
+AWorkMode: TWorkMode; const AWorkCountMax: Integer);
+begin
+ if Assigned(OnWorkBegin) then begin
+ FWorkData.FWorkCS.Acquire;
+ try
+ FWorkData.FSender := Sender;
+ FWorkData.FAWorkMode := AWorkMode;
+ FWorkData.FAWorkCountMax := AWorkCountMax;
+ Synchronize(FireWorkBegin);
+ finally
+ FWorkData.FWorkCS.Release;
+ end;
+ end;
+end;
+
+procedure TDownloadThread.WorkEnd(Sender: TObject;
+AWorkMode: TWorkMode);
+begin
+ if Assigned(OnWorkEnd) then begin;
+ FWorkData.FWorkCS.Acquire;
+ try
+ FWorkData.FSender := Sender;
+ FWorkData.FAWorkMode := AWorkMode;
+ Synchronize(FireWorkEnd);
+ finally
+ FWorkData.FWorkCS.Release;
+ end;
+ end;
+end;
+
+procedure TDownloadThread.Work(Sender: TObject; AWorkMode:
+TWorkMode; const AWorkCount: Integer);
+begin
+ if Assigned(OnWork) then begin
+ FWorkData.FWorkCS.Acquire;
+ try
+ FWorkData.FSender := Sender;
+ FWorkData.FAWorkMode := AWorkMode;
+ FWorkData.FAWorkCount := AWorkCount;
+ Synchronize(FireWork);
+ finally
+ FWorkData.FWorkCS.Release;
+ end;
+ end;
+end;
+
+//\82±\82±\82©\82ç\90V\8bK\83\81\83\\83b\83h
+procedure TDownloadThread.FireWorkBegin;
begin
- if Assigned(OnWorkBegin) then
- OnWorkBegin(Sender, AWorkMode, AWorkCountMax, FNumber, FDownloadTitle);
+ OnWorkBegin(FWorkData.FSender, FWorkData.FAWorkMode,
+ FWorkData.FAWorkCountMax,
+ FNumber, FDownloadTitle);
end;
-procedure TDownloadThread.WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
+procedure TDownloadThread.FireWorkEnd;
begin
- if Assigned(OnWorkEnd) then
- OnWorkEnd(Sender, AWorkMode, FNumber);
+ OnWorkEnd(FWorkData.FSender, FWorkData.FAWorkMode,
+ FNumber);
end;
-procedure TDownloadThread.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
+procedure TDownloadThread.FireWork;
begin
- if Assigned(OnWork) then
- OnWork(Sender, AWorkMode, AWorkCount, FNumber);
+ OnWork(FWorkData.FSender, FWorkData.FAWorkMode,
+ FWorkData.FAWorkCount,
+ FNumber);
end;
function TDownloadThread.ParseCgiStatus(Content: string): TCgiStatus;