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.17 - (hide annotations) (download) (as text)
Mon Jul 18 03:55:14 2005 UTC (18 years, 9 months ago) by h677
Branch: MAIN
CVS Tags: v1_51_0_612, marged-Bb50, v1_51_0_611, v1_51_0_620, v1_51_0_616, v1_51_0_614, v1_51_0_615, v1_51_0_613, v1_51_0_618, v1_51_0_619, root-of-draw, v1_51_0_617
Branch point for: Bdraw
Changes since 1.16: +10 -3 lines
File MIME type: text/x-pascal
ハ゛タ50(1.50.1.599)までの変更分をマージ

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

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