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.16.2.2 - (hide annotations) (download) (as text)
Sat Jul 23 07:28:39 2005 UTC (18 years, 9 months ago) by h677
Branch: Bb50
CVS Tags: v1_50_2_606, v1_50_0_603, v1_50_0_604, v1_50_0_606, v1_50_0_600, v1_50_2_604, v1_50_0_602, v1_50_0_601, v1_50_0_605
Changes since 1.16.2.1: +1 -7 lines
File MIME type: text/x-pascal
Indyコンポーネントで送受信するときのみIdAntiFreezeを有効にするように変更した。

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.16.2.1 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.16.2.1
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.16.2.2 socket.Get( inURL, resStream );
272 yoffy 1.1 {$IFDEF DEBUG}
273     Writeln('??緇??т?紊?????');
274     {$ENDIF}
275    
276 h677 1.11 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
277 yoffy 1.1
278 h677 1.11 ioModified := socket.Response.LastModified;
279    
280     Result := socket.ResponseCode;
281 yoffy 1.1 if (Length( content ) = 0) and (Result = 206) then
282     Result := 304;
283 h677 1.16.2.1 //????????BBS???????????????惹???宴??莠????????????с???????с???с????/span>
284 h677 1.14 if ( AnsiPos(LIVEDOOR_URL, inURL) > 0 ) and (Result = 200) then begin
285 h677 1.13 if( AnsiPos('STORAGE IN', socket.Response.RawHeaders.Text) > 0 ) then begin
286     Result := 302;
287     end;
288     end;
289 yoffy 1.1 outResultData := CreateResultString( content );
290     except
291     on E: EIdSocketError do begin
292     ioModified := ZERO_DATE;
293     outResultData := nil;
294 h677 1.11 Result := socket.ResponseCode;
295 yoffy 1.1 end;
296     on E: EIdConnectException do begin
297     ioModified := ZERO_DATE;
298     outResultData := nil;
299 h677 1.11 Result := socket.ResponseCode;
300 yoffy 1.1 //Item.ErrText := E.Message;
301     end;
302 h677 1.11 //筝??????????????潟?潟???ャ??
303     on E: EIdClosedSocket do begin
304     ioModified := ZERO_DATE;
305     outResultData := nil;
306     Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
307     //???c?????障?????с????ず?????????若?潟?若????菴???
308     end;
309 yoffy 1.1 on E: Exception do begin
310     {$IFDEF DEBUG}
311     Writeln('??緇??т?紊?????');
312     Writeln('E.Message: ' + E.Message);
313     {$ENDIF}
314     ioModified := ZERO_DATE;
315     outResultData := nil;
316 h677 1.11 Result := socket.ResponseCode;
317 yoffy 1.1 //Item.ErrText := E.Message;
318     end;
319     end;
320     finally
321     resStream.Free;
322     end;
323    
324     finally
325 h677 1.11 socket.Free;
326     socket := nil;
327 yoffy 1.1 end;
328    
329     end;
330    
331     // *************************************************************************
332 yoffy 1.2 // ??絎????? URL ?吾???若?帥????篆<????
333     // *************************************************************************
334     function InternalPost(
335     inURL : PChar; // ??篆<???? URL
336     inSource : PChar; // ??篆<??????絎?/span>
337 h677 1.16 inReferer : PChar; // Referer
338 yoffy 1.2 var outResultData : PChar // 菴??c????????絖???
339     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
340     var
341     httpSocket : TIdHTTP;
342     content : string;
343     resStream : TStringStream;
344     sourceStream : TStringStream;
345 h677 1.16
346 yoffy 1.2 begin
347    
348     {$IFDEF DEBUG}
349     Writeln('ExternalBoardManager.InternalPost');
350     {$ENDIF}
351     Result := -1;
352    
353     httpSocket := TIdHTTP.Create( nil );
354     try
355     InitializeSocket( httpSocket );
356     httpSocket.Request.CustomHeaders.Add('Pragma: no-cache');
357     httpSocket.Request.AcceptLanguage := 'ja';
358     httpSocket.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
359     httpSocket.Request.ContentType := 'application/x-www-form-urlencoded';
360 h677 1.16 httpSocket.Request.Referer := string(inReferer);
361 yoffy 1.2 resStream := TStringStream.Create( content );
362     sourceStream := TStringStream.Create( string( inSource ) );
363     try
364     try
365     {$IFDEF DEBUG}
366     Writeln('URL: ' + inURL);
367     Writeln('Source: ' + inSource);
368     {$ENDIF}
369     httpSocket.Post( string( inURL ), sourceStream, resStream );
370     {$IFDEF DEBUG}
371     Writeln('??緇??т?紊?????');
372     {$ENDIF}
373    
374     Result := httpSocket.ResponseCode;
375    
376     outResultData := CreateResultString( resStream.DataString );
377     except
378     on E: EIdSocketError do begin
379     outResultData := nil;
380     end;
381     on E: EIdConnectException do begin
382     outResultData := nil;
383     end;
384     on E: Exception do begin
385     {$IFDEF DEBUG}
386     Writeln('??緇??т?紊?????');
387     Writeln('E.Message: ' + E.Message);
388     {$ENDIF}
389 yoffy 1.6 outResultData := CreateResultString( resStream.DataString );
390 yoffy 1.2 Result := httpSocket.ResponseCode;
391     end;
392     end;
393     finally
394     resStream.Free;
395     sourceStream.Free;
396     end;
397     finally
398     httpSocket.Free;
399     end;
400    
401     end;
402    
403     // *************************************************************************
404 yoffy 1.1 // 鐚??<????????? dat 綵√??????若???????若??????????
405     // *************************************************************************
406 h677 1.5
407 yoffy 1.1 function InternalAbon(
408 yoffy 1.3 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
409 h677 1.5 inDatPath : PChar // dat ???<?ゃ????????????/span>
410    
411 yoffy 1.7 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
412 yoffy 1.1 var
413     datList : TStringList;
414 yoffy 1.6 FileName : String;
415 yoffy 1.1 begin
416    
417     datList := TStringList.Create;
418 h677 1.9 try
419     datList.Text := string( inDatText );
420     FileName := string( inDatPath );
421     GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
422     GikoSys.FAbon.Execute( datList );
423     GikoSys.FSelectResFilter.Execute( datList );
424    
425     Result := CreateResultString( datList.Text );
426     finally
427     datList.Free;
428     end;
429 yoffy 1.1
430    
431     end;
432 h677 1.5 // *************************************************************************
433     // 鐚??<????????? dat 綵√??????若???????若??????????
434     // ????????鐚????鴻????/span>
435     // *************************************************************************
436    
437     function InternalAbonForOne(
438 yoffy 1.6 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
439     inDatPath : PChar; // dat ???<?ゃ????????????/span>
440     inNo : Integer // 荀?羆??????????合???/span>
441 h677 1.5 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
442     var
443     datString : String;
444 yoffy 1.6 FileName : String;
445 h677 1.5 begin
446    
447     datString := string( inDatText );
448 yoffy 1.6 FileName := string( inDatPath );
449 h677 1.5 GikoSys.FAbon.IndividualAbon( datString, ChangeFileExt(FileName,'.NG'), inNo);
450     GikoSys.FAbon.Execute( datString , inNo);
451     GikoSys.FSelectResFilter.Execute( datString , inNo );
452    
453     Result := CreateResultString( datString );
454    
455     end;
456 yoffy 1.1
457     // *************************************************************************
458     // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
459     // *************************************************************************
460     function InternalDat2HTML(
461 yoffy 1.6 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
462     inResNo : DWORD; // ???合???/span>
463     inIsNew : Boolean // ?亥?????鴻???? True
464 yoffy 1.1 ) : PChar; stdcall; // ?翫就?????? HTML
465     var
466     board : TBoard;
467     threadItem : TThreadItem;
468     begin
469    
470     // ?????若????????/span>
471 yoffy 1.7 board := TBoard.Create( nil, 'about://dummy/' );
472 h677 1.16 threadItem := TThreadItem.Create( nil, board, 'about://dummy/test/read.cgi/dummy/' );
473 yoffy 1.1 try
474 yoffy 1.7 try
475     board.Add( threadItem );
476 yoffy 1.1
477 yoffy 1.7 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
478     except
479     Result := nil;
480     end;
481     finally
482     board.Free;
483 yoffy 1.1 end;
484    
485     end;
486    
487 yoffy 1.8 // *************************************************************************
488     // ?????違?ゃ?潟?<???ャ?若????????菴遵??
489     // *************************************************************************
490     function AddPlugInMenu(
491     inInstance : DWORD; // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
492     inCaption : PChar // ?<???ャ?若??;腓冴??????絖???
493     ) : HMENU; stdcall; // ?<???ャ?若??潟??????菴遵????け???????翫??? NULL
494     var
495     newItem : TMenuItem;
496     begin
497    
498     try
499     newItem := TMenuItem.Create( nil );
500     newItem.Caption := inCaption;
501     newItem.Tag := inInstance;
502     newItem.OnClick := GikoForm.OnPlugInMenuItem;
503     GikoForm.PlugInMenu.Add( newItem );
504    
505     Result := newItem.Handle;
506     except
507 h677 1.10 Result := 0;
508 yoffy 1.8 end;
509    
510     end;
511    
512     // *************************************************************************
513     // ?????違?ゃ?潟?<???ャ?若??????????????/span>
514     // *************************************************************************
515     procedure RemovePlugInMenu(
516     inHandle : HMENU // ?<???ャ?若??潟????/span>
517     ); stdcall;
518     var
519     i : Integer;
520     begin
521    
522     for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
523     if GikoForm.PlugInMenu.Items[ i ].Handle = inHandle then begin
524 h677 1.10 GikoForm.PlugInMenu.items[i].Free;
525     //GikoForm.PlugInMenu.Delete( i );
526 yoffy 1.8 Break;
527     end;
528     end;
529    
530     end;
531    
532 yoffy 1.1 exports
533     CreateResultString,
534     DisposeResultString,
535     VersionInfo,
536 yoffy 1.6 InternalPrint,
537     InternalDebugPrint,
538 yoffy 1.1 InternalDownload,
539 yoffy 1.2 InternalPost,
540 yoffy 1.1 InternalAbon,
541 yoffy 1.6 InternalAbonForOne,
542 yoffy 1.8 InternalDat2HTML,
543     AddPlugInMenu,
544     RemovePlugInMenu;
545 yoffy 1.1
546     end.

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