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.15 - (hide annotations) (download) (as text)
Mon Oct 25 12:37:17 2004 UTC (19 years, 5 months ago) by h677
Branch: MAIN
CVS Tags: v1_50_0_572, bv1_49_0_564, bv1_49_0_563, bv1_49_0_565, v1_50_0_574, v1_50_0_573, v1_50_0_571, root-of-remodel
Branch point for: remodeling
Changes since 1.14: +1 -1 lines
File MIME type: text/x-pascal
TimeOutの秒数を設定できるようにした。

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 h677 1.15 inSocket.ReadTimeout := GikoSys.Setting.ReadTimeOut;
182 yoffy 1.1 {$IFDEF DEBUG}
183     Writeln('------------------------------------------------------------');
184     {$ENDIF}
185 yoffy 1.2 //inSocket.AllowCookies := False;
186 yoffy 1.1 if GikoSys.Setting.ReadProxy then begin
187     if GikoSys.Setting.ProxyProtocol then
188 yoffy 1.2 inSocket.ProtocolVersion := pv1_1
189 yoffy 1.1 else
190 yoffy 1.2 inSocket.ProtocolVersion := pv1_0;
191     inSocket.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
192     inSocket.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
193     inSocket.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
194     inSocket.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
195 yoffy 1.1 if GikoSys.Setting.ReadProxyUserID <> '' then
196 yoffy 1.2 inSocket.ProxyParams.BasicAuthentication := True;
197 yoffy 1.1 {$IFDEF DEBUG}
198     Writeln('???????決┃絎?????');
199     Writeln('???鴻??: ' + GikoSys.Setting.ReadProxyAddress);
200     Writeln('???若??: ' + IntToStr( GikoSys.Setting.ReadProxyPort ));
201     {$ENDIF}
202     end else begin
203     if GikoSys.Setting.Protocol then
204 yoffy 1.2 inSocket.ProtocolVersion := pv1_1
205 yoffy 1.1 else
206 yoffy 1.2 inSocket.ProtocolVersion := pv1_0;
207     inSocket.ProxyParams.ProxyServer := '';
208     inSocket.ProxyParams.ProxyPort := 80;
209     inSocket.ProxyParams.ProxyUsername := '';
210     inSocket.ProxyParams.ProxyPassword := '';
211 yoffy 1.1 {$IFDEF DEBUG}
212     Writeln('???????決┃絎?????');
213     {$ENDIF}
214     end;
215 yoffy 1.2 end;
216    
217     end;
218    
219     // *************************************************************************
220     // ??絎????? URL ???????潟???若?????????
221     // *************************************************************************
222     function InternalDownload(
223     inURL : PChar; // ?????潟???若?????? URL
224     var ioModified : Double; // ??緇??????????ユ??
225     var outResultData : PChar; // ?????潟???若??????????絖???
226     inRangeStart : DWORD; // ??紮?篏?臀?/span>
227     inRangeEnd : DWORD // 腟?篋?篏?臀?/span>
228     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
229     var
230 h677 1.11 // httpSocket : TIdHTTP;
231 yoffy 1.2 resStream : TMemoryStream;
232     content : string;
233 h677 1.14 const
234     LIVEDOOR_URL = 'http://jbbs.livedoor.jp/';
235 yoffy 1.2 begin
236    
237     {$IFDEF DEBUG}
238     Writeln('ExternalBoardManager.InternalDownload');
239     {$ENDIF}
240 h677 1.11 // Result := -1;
241 yoffy 1.2
242 h677 1.11 socket := TIdHTTP.Create( nil );
243 yoffy 1.2 try
244 h677 1.11 InitializeSocket( socket );
245     socket.Request.ContentRangeStart := inRangeStart;
246     socket.Request.ContentRangeEnd := inRangeEnd;
247 yoffy 1.1 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
248 h677 1.11 socket.Request.LastModified := ioModified - OffsetFromUTC;
249 yoffy 1.1 if inRangeStart = 0 then
250 h677 1.11 socket.Request.AcceptEncoding := 'gzip'
251 yoffy 1.1 else
252 h677 1.11 socket.Request.AcceptEncoding := '';
253     socket.Request.Accept := 'text/html';
254 yoffy 1.1
255     resStream := TMemoryStream.Create;
256     try
257     try
258     resStream.Clear;
259     {$IFDEF DEBUG}
260     Writeln('URL: ' + inURL);
261     {$ENDIF}
262 h677 1.11 socket.Get( inURL, resStream );
263 yoffy 1.1 {$IFDEF DEBUG}
264     Writeln('??緇??т?紊?????');
265     {$ENDIF}
266    
267 h677 1.11 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
268 yoffy 1.1
269 h677 1.11 ioModified := socket.Response.LastModified;
270    
271     Result := socket.ResponseCode;
272 yoffy 1.1 if (Length( content ) = 0) and (Result = 206) then
273     Result := 304;
274 h677 1.14 //????????BBS???????????????惹???宴??莠????????????с???????с???с????/span>
275     if ( AnsiPos(LIVEDOOR_URL, inURL) > 0 ) and (Result = 200) then begin
276 h677 1.13 if( AnsiPos('STORAGE IN', socket.Response.RawHeaders.Text) > 0 ) then begin
277     Result := 302;
278     end;
279     end;
280 yoffy 1.1 outResultData := CreateResultString( content );
281     except
282     on E: EIdSocketError do begin
283     ioModified := ZERO_DATE;
284     outResultData := nil;
285 h677 1.11 Result := socket.ResponseCode;
286 yoffy 1.1 end;
287     on E: EIdConnectException do begin
288     ioModified := ZERO_DATE;
289     outResultData := nil;
290 h677 1.11 Result := socket.ResponseCode;
291 yoffy 1.1 //Item.ErrText := E.Message;
292     end;
293 h677 1.11 //筝??????????????潟?潟???ャ??
294     on E: EIdClosedSocket do begin
295     ioModified := ZERO_DATE;
296     outResultData := nil;
297     Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
298     //???c?????障?????с????ず?????????若?潟?若????菴???
299     end;
300 yoffy 1.1 on E: Exception do begin
301     {$IFDEF DEBUG}
302     Writeln('??緇??т?紊?????');
303     Writeln('E.Message: ' + E.Message);
304     {$ENDIF}
305     ioModified := ZERO_DATE;
306     outResultData := nil;
307 h677 1.11 Result := socket.ResponseCode;
308 yoffy 1.1 //Item.ErrText := E.Message;
309     end;
310     end;
311     finally
312     resStream.Free;
313     end;
314    
315     finally
316 h677 1.11 socket.Free;
317     socket := nil;
318 yoffy 1.1 end;
319    
320     end;
321    
322     // *************************************************************************
323 yoffy 1.2 // ??絎????? URL ?吾???若?帥????篆<????
324     // *************************************************************************
325     function InternalPost(
326     inURL : PChar; // ??篆<???? URL
327     inSource : PChar; // ??篆<??????絎?/span>
328     var outResultData : PChar // 菴??c????????絖???
329     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
330     var
331     httpSocket : TIdHTTP;
332     content : string;
333     resStream : TStringStream;
334     sourceStream : TStringStream;
335 h677 1.12 tmpURL, Protocol, Host, Path, Document, Port, Bookmark : string;
336 yoffy 1.2 begin
337    
338     {$IFDEF DEBUG}
339     Writeln('ExternalBoardManager.InternalPost');
340     {$ENDIF}
341     Result := -1;
342    
343     httpSocket := TIdHTTP.Create( nil );
344     try
345     InitializeSocket( httpSocket );
346 h677 1.12 tmpURL := string(inURL);
347     GikoSys.ParseURI(tmpURL, Protocol,Host, Path, Document, Port, Bookmark);
348 yoffy 1.2 httpSocket.Request.CustomHeaders.Add('Pragma: no-cache');
349     httpSocket.Request.AcceptLanguage := 'ja';
350     httpSocket.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
351     httpSocket.Request.ContentType := 'application/x-www-form-urlencoded';
352 h677 1.12 httpSocket.Request.Referer := Protocol + '://' + Host;
353 yoffy 1.2 resStream := TStringStream.Create( content );
354     sourceStream := TStringStream.Create( string( inSource ) );
355     try
356     try
357     {$IFDEF DEBUG}
358     Writeln('URL: ' + inURL);
359     Writeln('Source: ' + inSource);
360     {$ENDIF}
361     httpSocket.Post( string( inURL ), sourceStream, resStream );
362     {$IFDEF DEBUG}
363     Writeln('??緇??т?紊?????');
364     {$ENDIF}
365    
366     Result := httpSocket.ResponseCode;
367    
368     outResultData := CreateResultString( resStream.DataString );
369     except
370     on E: EIdSocketError do begin
371     outResultData := nil;
372     end;
373     on E: EIdConnectException do begin
374     outResultData := nil;
375     end;
376     on E: Exception do begin
377     {$IFDEF DEBUG}
378     Writeln('??緇??т?紊?????');
379     Writeln('E.Message: ' + E.Message);
380     {$ENDIF}
381 yoffy 1.6 outResultData := CreateResultString( resStream.DataString );
382 yoffy 1.2 Result := httpSocket.ResponseCode;
383     end;
384     end;
385     finally
386     resStream.Free;
387     sourceStream.Free;
388     end;
389     finally
390     httpSocket.Free;
391     end;
392    
393     end;
394    
395     // *************************************************************************
396 yoffy 1.1 // 鐚??<????????? dat 綵√??????若???????若??????????
397     // *************************************************************************
398 h677 1.5
399 yoffy 1.1 function InternalAbon(
400 yoffy 1.3 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
401 h677 1.5 inDatPath : PChar // dat ???<?ゃ????????????/span>
402    
403 yoffy 1.7 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
404 yoffy 1.1 var
405     datList : TStringList;
406 yoffy 1.6 FileName : String;
407 yoffy 1.1 begin
408    
409     datList := TStringList.Create;
410 h677 1.9 try
411     datList.Text := string( inDatText );
412     FileName := string( inDatPath );
413     GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
414     GikoSys.FAbon.Execute( datList );
415     GikoSys.FSelectResFilter.Execute( datList );
416    
417     Result := CreateResultString( datList.Text );
418     finally
419     datList.Free;
420     end;
421 yoffy 1.1
422    
423     end;
424 h677 1.5 // *************************************************************************
425     // 鐚??<????????? dat 綵√??????若???????若??????????
426     // ????????鐚????鴻????/span>
427     // *************************************************************************
428    
429     function InternalAbonForOne(
430 yoffy 1.6 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
431     inDatPath : PChar; // dat ???<?ゃ????????????/span>
432     inNo : Integer // 荀?羆??????????合???/span>
433 h677 1.5 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
434     var
435     datString : String;
436 yoffy 1.6 FileName : String;
437 h677 1.5 begin
438    
439     datString := string( inDatText );
440 yoffy 1.6 FileName := string( inDatPath );
441 h677 1.5 GikoSys.FAbon.IndividualAbon( datString, ChangeFileExt(FileName,'.NG'), inNo);
442     GikoSys.FAbon.Execute( datString , inNo);
443     GikoSys.FSelectResFilter.Execute( datString , inNo );
444    
445     Result := CreateResultString( datString );
446    
447     end;
448 yoffy 1.1
449     // *************************************************************************
450     // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
451     // *************************************************************************
452     function InternalDat2HTML(
453 yoffy 1.6 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
454     inResNo : DWORD; // ???合???/span>
455     inIsNew : Boolean // ?亥?????鴻???? True
456 yoffy 1.1 ) : PChar; stdcall; // ?翫就?????? HTML
457     var
458     board : TBoard;
459     threadItem : TThreadItem;
460     begin
461    
462     // ?????若????????/span>
463 yoffy 1.7 board := TBoard.Create( nil, 'about://dummy/' );
464     threadItem := TThreadItem.Create( nil, 'about://dummy/test/read.cgi/dummy/' );
465 yoffy 1.1 try
466 yoffy 1.7 try
467     board.Add( threadItem );
468 yoffy 1.1
469 yoffy 1.7 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
470     except
471     Result := nil;
472     end;
473     finally
474     board.Free;
475 yoffy 1.1 end;
476    
477     end;
478    
479 yoffy 1.8 // *************************************************************************
480     // ?????違?ゃ?潟?<???ャ?若????????菴遵??
481     // *************************************************************************
482     function AddPlugInMenu(
483     inInstance : DWORD; // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
484     inCaption : PChar // ?<???ャ?若??;腓冴??????絖???
485     ) : HMENU; stdcall; // ?<???ャ?若??潟??????菴遵????け???????翫??? NULL
486     var
487     newItem : TMenuItem;
488     begin
489    
490     try
491     newItem := TMenuItem.Create( nil );
492     newItem.Caption := inCaption;
493     newItem.Tag := inInstance;
494     newItem.OnClick := GikoForm.OnPlugInMenuItem;
495     GikoForm.PlugInMenu.Add( newItem );
496    
497     Result := newItem.Handle;
498     except
499 h677 1.10 Result := 0;
500 yoffy 1.8 end;
501    
502     end;
503    
504     // *************************************************************************
505     // ?????違?ゃ?潟?<???ャ?若??????????????/span>
506     // *************************************************************************
507     procedure RemovePlugInMenu(
508     inHandle : HMENU // ?<???ャ?若??潟????/span>
509     ); stdcall;
510     var
511     i : Integer;
512     begin
513    
514     for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
515     if GikoForm.PlugInMenu.Items[ i ].Handle = inHandle then begin
516 h677 1.10 GikoForm.PlugInMenu.items[i].Free;
517     //GikoForm.PlugInMenu.Delete( i );
518 yoffy 1.8 Break;
519     end;
520     end;
521    
522     end;
523    
524 yoffy 1.1 exports
525     CreateResultString,
526     DisposeResultString,
527     VersionInfo,
528 yoffy 1.6 InternalPrint,
529     InternalDebugPrint,
530 yoffy 1.1 InternalDownload,
531 yoffy 1.2 InternalPost,
532 yoffy 1.1 InternalAbon,
533 yoffy 1.6 InternalAbonForOne,
534 yoffy 1.8 InternalDat2HTML,
535     AddPlugInMenu,
536     RemovePlugInMenu;
537 yoffy 1.1
538     end.

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