Develop and Download Open Source Software

Browse CVS Repository

Annotation of /gikonavigoeson/gikonavi/ExternalBoardPlugInMain.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.11 - (hide annotations) (download) (as text)
Tue Jun 29 15:31:28 2004 UTC (19 years, 9 months ago) by h677
Branch: MAIN
CVS Tags: v1_48_0_530, v1_48_0_510, v1_48_0_535, v1_48_0_533
Changes since 1.10: +31 -17 lines
File MIME type: text/x-pascal
pluginの外部BBSでの中断処理が正しく作動するように修正

1 yoffy 1.1 unit ExternalBoardPlugInMain;
2    
3     interface
4    
5     uses
6 yoffy 1.8 Windows, Classes, SysUtils, Menus,
7 yoffy 1.1 IdHTTP, IdComponent, IdGlobal, IdException,
8     AbonUnit;
9    
10     type
11    
12     // ?????潟???若????????????????????
13     TDownloadState = (dsWait, dsWork, dsComplete, dsDiffComplete, dsNotModify, dsAbort, dsError);
14    
15 yoffy 1.4 // ??絎????? URL ???????????違?ゃ?潟?у???篁?????????????
16     TAcceptType = (atNoAccept, atBBS, atBoard, atThread);
17    
18 yoffy 1.8 // ?<???ャ?若??潟????/span>
19     TMenuHandler = procedure(
20     inHandle : HMENU // ?<???ャ?若??潟????/span>
21     ); stdcall;
22    
23     // *************************************************************************
24     // ?????違?ゃ?潟??(罩c???????若????????
25     // *************************************************************************
26     TOnLoad = procedure (
27     inInstance : DWORD // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
28     ); stdcall;
29    
30 yoffy 1.1 // *************************************************************************
31     // ?????違?ゃ?潟?????若?吾?с??/span>
32     // *************************************************************************
33     TOnVersionInfo = procedure(
34     var outAgent : PChar; // ???若?吾?с?潟??筝??????障????膣?膕?????腱?/span>
35     var outMajor : DWORD; // ?<?吾?c?若???若?吾?с??/span>
36     var outMinor : DWORD; // ???ゃ???若???若?吾?с??/span>
37     var outRelease : PChar; // ?????若?号?????
38     var outRevision : DWORD // ?????吾?с?潟???潟????/span>
39     ); stdcall;
40    
41     // *************************************************************************
42     // ??絎????? URL ???????????違?ゃ?潟?у???篁?????????????
43     // *************************************************************************
44     TOnAcceptURL = function(
45     inURL : PChar // ?ゆ????篁違???с???? URL
46 yoffy 1.4 ): TAcceptType; stdcall; // URL ??┏蕁?
47 yoffy 1.1
48     // *************************************************************************
49 yoffy 1.8 // ?<???ャ?若??潟????/span>
50     // *************************************************************************
51     TOnPlugInMenu = procedure(
52     inInstance : DWORD // ?<???ャ?若??潟????/span>
53     ); stdcall;
54    
55     // *************************************************************************
56 yoffy 1.1 // ?鴻???荀с? URL ?????鴻??????? URL ??絨????冴??
57     // *************************************************************************
58     TOnListURL2ThreadURL = function(
59     inListURL : PChar; // ?鴻???荀с??腓冴???? URL
60     inFileName : PChar // ?鴻?????????<?ゃ????
61     ) : PChar; stdcall; // ?鴻??????? URL
62    
63 h677 1.11
64 yoffy 1.1 function CreateResultString(
65     resultStr : string
66     ) : PChar; stdcall;
67    
68     procedure DisposeResultString(
69     resultStr : PChar
70     ); stdcall;
71    
72 h677 1.11 var
73     socket : TIdHTTP;
74    
75 yoffy 1.1 implementation
76    
77 yoffy 1.6 uses ExternalBoardManager, ExternalThreadItem, GikoSystem, BoardGroup, Giko;
78 yoffy 1.1
79     // *************************************************************************
80     // ?祉???ゃ?? PChar ?с???? API ???<?≪????腆坂?????
81     // *************************************************************************
82     function CreateResultString(
83     resultStr : string
84     ) : PChar; stdcall;
85     var
86     tmp : PChar;
87     begin
88    
89     tmp := PChar( resultStr );
90     GetMem( Result, Length( tmp ) + 1 );
91     Move( tmp^, Result^, Length( tmp ) + 1 );
92    
93     end;
94    
95     // *************************************************************************
96     // ?祉???ゃ?? PChar ?с???? API ???<?≪???????障????
97     // *************************************************************************
98     procedure DisposeResultString(
99     resultStr : PChar
100     ); stdcall;
101     begin
102    
103     FreeMem( resultStr );
104    
105     end;
106    
107     // *************************************************************************
108     // ?????違????????????若?吾?с?潟????緇?????
109     // *************************************************************************
110     procedure VersionInfo(
111     var outAgent : PChar; // ???若?吾?с?潟??筝??????障????膣?膕?????腱?/span>
112     var outMajor : DWORD; // ?<?吾?c?若???若?吾?с??/span>
113     var outMinor : DWORD; // ???ゃ???若???若?吾?с??/span>
114     var outRelease : PChar; // ?????若?号?????
115     var outRevision : DWORD // ?????吾?с?潟???潟????/span>
116     ); stdcall;
117     begin
118    
119     {$IFDEF DEBUG}
120     Writeln('ExternalBoardManager.VersionInfo');
121     {$ENDIF}
122     outAgent := CreateResultString( PChar( APP_NAME ) );
123     outMajor := 1;
124     outMinor := 0;
125     outRelease := CreateResultString( PChar( BETA_VERSION_NAME_E ) );
126     outRevision := BETA_VERSION;
127    
128     end;
129    
130     // *************************************************************************
131 yoffy 1.6 // ?<???祉?若?吾??茵?ず????
132     // *************************************************************************
133     procedure InternalPrint(
134     inMessage : PChar // ?<???祉?若??/span>
135     ); stdcall;
136     begin
137    
138     GikoForm.AddMessageList( inMessage, nil, gmiWhat );
139    
140     end;
141    
142     // *************************************************************************
143     // ???????違?<???祉?若?吾??茵?ず????
144     // *************************************************************************
145     procedure InternalDebugPrint(
146     inMessage : PChar // ?<???祉?若??/span>
147     ); stdcall;
148     begin
149    
150     {$IFDEF DEBUG}
151     Writeln( inMessage );
152     {$ENDIF}
153    
154     end;
155    
156     // *************************************************************************
157 yoffy 1.2 // ?純?宴????????????????(?????∽??
158 yoffy 1.1 // *************************************************************************
159 yoffy 1.2 procedure InitializeSocket(
160     inSocket : TIdHTTP
161     );
162 yoffy 1.1 begin
163    
164 yoffy 1.2 if inSocket <> nil then begin
165 yoffy 1.1 // ?ゃ???潟????┃絎?
166     if Assigned( OnWork ) then
167 yoffy 1.2 inSocket.OnWork := OnWork;
168 yoffy 1.1 if Assigned( OnWorkBegin ) then
169 yoffy 1.2 inSocket.OnWorkBegin := OnWorkBegin;
170 yoffy 1.1 if Assigned( OnWorkEnd ) then
171 yoffy 1.2 inSocket.OnWorkEnd := OnWorkEnd;
172 yoffy 1.1
173     // ??篆<???≪????荐??
174 yoffy 1.2 inSocket.Request.CustomHeaders.Clear;
175     inSocket.Response.Clear;
176     inSocket.Request.Clear;
177    
178     inSocket.Request.UserAgent := GikoSys.GetUserAgent;
179     inSocket.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
180     inSocket.ProxyParams.BasicAuthentication := False;
181 yoffy 1.1 {$IFDEF DEBUG}
182     Writeln('------------------------------------------------------------');
183     {$ENDIF}
184 yoffy 1.2 //inSocket.AllowCookies := False;
185 yoffy 1.1 if GikoSys.Setting.ReadProxy then begin
186     if GikoSys.Setting.ProxyProtocol then
187 yoffy 1.2 inSocket.ProtocolVersion := pv1_1
188 yoffy 1.1 else
189 yoffy 1.2 inSocket.ProtocolVersion := pv1_0;
190     inSocket.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
191     inSocket.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
192     inSocket.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
193     inSocket.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
194 yoffy 1.1 if GikoSys.Setting.ReadProxyUserID <> '' then
195 yoffy 1.2 inSocket.ProxyParams.BasicAuthentication := True;
196 yoffy 1.1 {$IFDEF DEBUG}
197     Writeln('???????決┃絎?????');
198     Writeln('???鴻??: ' + GikoSys.Setting.ReadProxyAddress);
199     Writeln('???若??: ' + IntToStr( GikoSys.Setting.ReadProxyPort ));
200     {$ENDIF}
201     end else begin
202     if GikoSys.Setting.Protocol then
203 yoffy 1.2 inSocket.ProtocolVersion := pv1_1
204 yoffy 1.1 else
205 yoffy 1.2 inSocket.ProtocolVersion := pv1_0;
206     inSocket.ProxyParams.ProxyServer := '';
207     inSocket.ProxyParams.ProxyPort := 80;
208     inSocket.ProxyParams.ProxyUsername := '';
209     inSocket.ProxyParams.ProxyPassword := '';
210 yoffy 1.1 {$IFDEF DEBUG}
211     Writeln('???????決┃絎?????');
212     {$ENDIF}
213     end;
214 yoffy 1.2 end;
215    
216     end;
217    
218     // *************************************************************************
219     // ??絎????? URL ???????潟???若?????????
220     // *************************************************************************
221     function InternalDownload(
222     inURL : PChar; // ?????潟???若?????? URL
223     var ioModified : Double; // ??緇??????????ユ??
224     var outResultData : PChar; // ?????潟???若??????????絖???
225     inRangeStart : DWORD; // ??紮?篏?臀?/span>
226     inRangeEnd : DWORD // 腟?篋?篏?臀?/span>
227     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
228     var
229 h677 1.11 // httpSocket : TIdHTTP;
230 yoffy 1.2 resStream : TMemoryStream;
231     content : string;
232     begin
233    
234     {$IFDEF DEBUG}
235     Writeln('ExternalBoardManager.InternalDownload');
236     {$ENDIF}
237 h677 1.11 // Result := -1;
238 yoffy 1.2
239 h677 1.11 socket := TIdHTTP.Create( nil );
240 yoffy 1.2 try
241 h677 1.11 InitializeSocket( socket );
242 yoffy 1.1
243 h677 1.11 socket.Request.ContentRangeStart := inRangeStart;
244     socket.Request.ContentRangeEnd := inRangeEnd;
245 yoffy 1.1 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
246 h677 1.11 socket.Request.LastModified := ioModified - OffsetFromUTC;
247 yoffy 1.1 if inRangeStart = 0 then
248 h677 1.11 socket.Request.AcceptEncoding := 'gzip'
249 yoffy 1.1 else
250 h677 1.11 socket.Request.AcceptEncoding := '';
251     socket.Request.Accept := 'text/html';
252 yoffy 1.1
253     resStream := TMemoryStream.Create;
254     try
255     try
256     resStream.Clear;
257     {$IFDEF DEBUG}
258     Writeln('URL: ' + inURL);
259     {$ENDIF}
260 h677 1.11 socket.Get( inURL, resStream );
261 yoffy 1.1 {$IFDEF DEBUG}
262     Writeln('??緇??т?紊?????');
263     {$ENDIF}
264    
265 h677 1.11 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
266 yoffy 1.1
267 h677 1.11 ioModified := socket.Response.LastModified;
268    
269     Result := socket.ResponseCode;
270 yoffy 1.1 if (Length( content ) = 0) and (Result = 206) then
271     Result := 304;
272    
273     outResultData := CreateResultString( content );
274     except
275     on E: EIdSocketError do begin
276     ioModified := ZERO_DATE;
277     outResultData := nil;
278 h677 1.11 Result := socket.ResponseCode;
279 yoffy 1.1 end;
280     on E: EIdConnectException do begin
281     ioModified := ZERO_DATE;
282     outResultData := nil;
283 h677 1.11 Result := socket.ResponseCode;
284 yoffy 1.1 //Item.ErrText := E.Message;
285     end;
286 h677 1.11 //筝??????????????潟?潟???ャ??
287     on E: EIdClosedSocket do begin
288     ioModified := ZERO_DATE;
289     outResultData := nil;
290     Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
291     //???c?????障?????с????ず?????????若?潟?若????菴???
292     end;
293 yoffy 1.1 on E: Exception do begin
294     {$IFDEF DEBUG}
295     Writeln('??緇??т?紊?????');
296     Writeln('E.Message: ' + E.Message);
297     {$ENDIF}
298     ioModified := ZERO_DATE;
299     outResultData := nil;
300 h677 1.11 Result := socket.ResponseCode;
301 yoffy 1.1 //Item.ErrText := E.Message;
302     end;
303     end;
304     finally
305     resStream.Free;
306     end;
307    
308     finally
309 h677 1.11 socket.Free;
310     socket := nil;
311 yoffy 1.1 end;
312    
313     end;
314    
315     // *************************************************************************
316 yoffy 1.2 // ??絎????? URL ?吾???若?帥????篆<????
317     // *************************************************************************
318     function InternalPost(
319     inURL : PChar; // ??篆<???? URL
320     inSource : PChar; // ??篆<??????絎?/span>
321     var outResultData : PChar // 菴??c????????絖???
322     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
323     var
324     httpSocket : TIdHTTP;
325     content : string;
326     resStream : TStringStream;
327     sourceStream : TStringStream;
328     begin
329    
330     {$IFDEF DEBUG}
331     Writeln('ExternalBoardManager.InternalPost');
332     {$ENDIF}
333     Result := -1;
334    
335     httpSocket := TIdHTTP.Create( nil );
336     try
337     InitializeSocket( httpSocket );
338    
339     httpSocket.Request.CustomHeaders.Add('Pragma: no-cache');
340     httpSocket.Request.AcceptLanguage := 'ja';
341     httpSocket.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
342     httpSocket.Request.ContentType := 'application/x-www-form-urlencoded';
343    
344     resStream := TStringStream.Create( content );
345     sourceStream := TStringStream.Create( string( inSource ) );
346     try
347     try
348     {$IFDEF DEBUG}
349     Writeln('URL: ' + inURL);
350     Writeln('Source: ' + inSource);
351     {$ENDIF}
352     httpSocket.Post( string( inURL ), sourceStream, resStream );
353     {$IFDEF DEBUG}
354     Writeln('??緇??т?紊?????');
355     {$ENDIF}
356    
357     Result := httpSocket.ResponseCode;
358    
359     outResultData := CreateResultString( resStream.DataString );
360     except
361     on E: EIdSocketError do begin
362     outResultData := nil;
363     end;
364     on E: EIdConnectException do begin
365     outResultData := nil;
366     end;
367     on E: Exception do begin
368     {$IFDEF DEBUG}
369     Writeln('??緇??т?紊?????');
370     Writeln('E.Message: ' + E.Message);
371     {$ENDIF}
372 yoffy 1.6 outResultData := CreateResultString( resStream.DataString );
373 yoffy 1.2 Result := httpSocket.ResponseCode;
374     end;
375     end;
376     finally
377     resStream.Free;
378     sourceStream.Free;
379     end;
380     finally
381     httpSocket.Free;
382     end;
383    
384     end;
385    
386     // *************************************************************************
387 yoffy 1.1 // 鐚??<????????? dat 綵√??????若???????若??????????
388     // *************************************************************************
389 h677 1.5
390 yoffy 1.1 function InternalAbon(
391 yoffy 1.3 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
392 h677 1.5 inDatPath : PChar // dat ???<?ゃ????????????/span>
393    
394 yoffy 1.7 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
395 yoffy 1.1 var
396     datList : TStringList;
397 yoffy 1.6 FileName : String;
398 yoffy 1.1 begin
399    
400     datList := TStringList.Create;
401 h677 1.9 try
402     datList.Text := string( inDatText );
403     FileName := string( inDatPath );
404     GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
405     GikoSys.FAbon.Execute( datList );
406     GikoSys.FSelectResFilter.Execute( datList );
407    
408     Result := CreateResultString( datList.Text );
409     finally
410     datList.Free;
411     end;
412 yoffy 1.1
413    
414     end;
415 h677 1.5 // *************************************************************************
416     // 鐚??<????????? dat 綵√??????若???????若??????????
417     // ????????鐚????鴻????/span>
418     // *************************************************************************
419    
420     function InternalAbonForOne(
421 yoffy 1.6 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
422     inDatPath : PChar; // dat ???<?ゃ????????????/span>
423     inNo : Integer // 荀?羆??????????合???/span>
424 h677 1.5 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
425     var
426     datString : String;
427 yoffy 1.6 FileName : String;
428 h677 1.5 begin
429    
430     datString := string( inDatText );
431 yoffy 1.6 FileName := string( inDatPath );
432 h677 1.5 GikoSys.FAbon.IndividualAbon( datString, ChangeFileExt(FileName,'.NG'), inNo);
433     GikoSys.FAbon.Execute( datString , inNo);
434     GikoSys.FSelectResFilter.Execute( datString , inNo );
435    
436     Result := CreateResultString( datString );
437    
438     end;
439 yoffy 1.1
440     // *************************************************************************
441     // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
442     // *************************************************************************
443     function InternalDat2HTML(
444 yoffy 1.6 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
445     inResNo : DWORD; // ???合???/span>
446     inIsNew : Boolean // ?亥?????鴻???? True
447 yoffy 1.1 ) : PChar; stdcall; // ?翫就?????? HTML
448     var
449     board : TBoard;
450     threadItem : TThreadItem;
451     begin
452    
453     // ?????若????????/span>
454 yoffy 1.7 board := TBoard.Create( nil, 'about://dummy/' );
455     threadItem := TThreadItem.Create( nil, 'about://dummy/test/read.cgi/dummy/' );
456 yoffy 1.1 try
457 yoffy 1.7 try
458     board.Add( threadItem );
459 yoffy 1.1
460 yoffy 1.7 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
461     except
462     Result := nil;
463     end;
464     finally
465     board.Free;
466 yoffy 1.1 end;
467    
468     end;
469    
470 yoffy 1.8 // *************************************************************************
471     // ?????違?ゃ?潟?<???ャ?若????????菴遵??
472     // *************************************************************************
473     function AddPlugInMenu(
474     inInstance : DWORD; // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
475     inCaption : PChar // ?<???ャ?若??;腓冴??????絖???
476     ) : HMENU; stdcall; // ?<???ャ?若??潟??????菴遵????け???????翫??? NULL
477     var
478     newItem : TMenuItem;
479     begin
480    
481     try
482     newItem := TMenuItem.Create( nil );
483     newItem.Caption := inCaption;
484     newItem.Tag := inInstance;
485     newItem.OnClick := GikoForm.OnPlugInMenuItem;
486     GikoForm.PlugInMenu.Add( newItem );
487    
488     Result := newItem.Handle;
489     except
490 h677 1.10 Result := 0;
491 yoffy 1.8 end;
492    
493     end;
494    
495     // *************************************************************************
496     // ?????違?ゃ?潟?<???ャ?若??????????????/span>
497     // *************************************************************************
498     procedure RemovePlugInMenu(
499     inHandle : HMENU // ?<???ャ?若??潟????/span>
500     ); stdcall;
501     var
502     i : Integer;
503     begin
504    
505     for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
506     if GikoForm.PlugInMenu.Items[ i ].Handle = inHandle then begin
507 h677 1.10 GikoForm.PlugInMenu.items[i].Free;
508     //GikoForm.PlugInMenu.Delete( i );
509 yoffy 1.8 Break;
510     end;
511     end;
512    
513     end;
514    
515 yoffy 1.1 exports
516     CreateResultString,
517     DisposeResultString,
518     VersionInfo,
519 yoffy 1.6 InternalPrint,
520     InternalDebugPrint,
521 yoffy 1.1 InternalDownload,
522 yoffy 1.2 InternalPost,
523 yoffy 1.1 InternalAbon,
524 yoffy 1.6 InternalAbonForOne,
525 yoffy 1.8 InternalDat2HTML,
526     AddPlugInMenu,
527     RemovePlugInMenu;
528 yoffy 1.1
529     end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26