X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=ItemDownload.pas;h=b0057253b20c05144336cb2796ddf48befbf126b;hb=refs%2Fheads%2FBb60;hp=b8a7c4c39af26c0d1434cf31c50e3324884e8d39;hpb=4796f75f333c016154b6c6c1889d5cb8a37aab1e;p=gikonavigoeson%2Fgikonavi.git diff --git a/ItemDownload.pas b/ItemDownload.pas index b8a7c4c..b005725 100644 --- a/ItemDownload.pas +++ b/ItemDownload.pas @@ -6,7 +6,7 @@ uses Windows, SysUtils, Classes, ComCtrls, Controls, Forms, IdHTTP, {HTTPApp,} YofUtils, IdGlobal, IdException, IdComponent, IniFiles, {DateUtils,} GikoSystem, BoardGroup, ExternalBoardManager, ExternalBoardPlugInMain, - Sort; + Sort, SyncObjs; type TDownloadItem = class; @@ -27,7 +27,17 @@ type FErrText: string; end; - + TWorkData = record + //FWorkCS: TCriticalSection; + //IdHttp‚ÌOnWorkAOnWorkBegin,OnWorkEnd‚͕ʂ̃XƒŒƒbƒh‚©‚ç + //ŒÄ‚΂ê‚éˆ×ASynchronize‚Å“¯Šú‚·‚é•K—v‚ª‚ ‚éB + //ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚Í–³‚­‚Ä‚à‚½‚Ô‚ñ•½‹C‚¾‚¯‚Ç—pS‚ׁ̈B by eggcake + FWorkCS: TCriticalSection; + FSender: TObject; + FAWorkMode: TWorkMode; + FAWorkCount: Integer; + FAWorkCountMax: Integer + end; TDownloadThread = class(TThread) private FIndy: TIdHttp; @@ -43,6 +53,7 @@ type FOnDownloadEnd: TDownloadEndEvent; FOnDownloadMsg: TDownloadMsgEvent; FDownloadTitle: string; + FWorkData: TWorkData; procedure FireDownloadEnd; procedure FireDownloadMsg; @@ -56,7 +67,10 @@ type 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; @@ -106,11 +120,13 @@ type 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; @@ -122,6 +138,7 @@ destructor TDownloadThread.Destroy; begin ClearHttpClient(FIndy); FIndy.Free; + FWorkData.FWorkCS.Free; inherited; end; @@ -734,13 +751,12 @@ begin {$ENDIF} FIndy.Get(URL, ResStream); Item.Content := GikoSys.GzipDecompress(ResStream, FIndy.Response.ContentEncoding); - Item.LastModified := FIndy.Response.LastModified; - //·•ªŽæ“¾‚Å‚PƒoƒCƒg‘O‚©‚ç‚Æ‚Á‚Ä‚«‚½‚Æ‚«‚̓}ƒCƒiƒX‚·‚é -// Item.ContentLength := FIndy.Response.ContentLength + AdjustLen; Item.ContentLength := Length(Item.Content) + AdjustLen; - //–³‚¢‚ÆŽv‚¤‚¯‚ǁBBB -// if (FIndy.ResponseCode in [200, 206]) and (Item.Content = '') then -// Result := False + // ’uŠ·‚·‚é + 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 @@ -815,22 +831,72 @@ begin 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; + +//‚±‚±‚©‚çV‹Kƒƒ\ƒbƒh +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; @@ -1089,6 +1155,7 @@ begin end; //ƒŠƒXƒg(subject.txt)‚ð•Û‘¶ GikoSys.ForceDirectoriesEx(ExtractFilePath(Board.GetSubjectFileName)); + Body.Text := MojuUtils.Sanitize(Body.Text); Body.SaveToFile(Board.GetSubjectFileName); end; finally