Develop and Download Open Source Software

Browse CVS Repository

Contents of /gikonavigoeson/gikonavi/ExternalBoardPlugInMain.pas

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


Revision 1.15 - (show 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 unit ExternalBoardPlugInMain;
2
3 interface
4
5 uses
6 Windows, Classes, SysUtils, Menus,
7 IdHTTP, IdComponent, IdGlobal, IdException,
8 AbonUnit;
9
10 type
11
12 // ?????潟???若????????????????????
13 TDownloadState = (dsWait, dsWork, dsComplete, dsDiffComplete, dsNotModify, dsAbort, dsError);
14
15 // ??絎????? URL ???????????違?ゃ?潟?у???篁?????????????
16 TAcceptType = (atNoAccept, atBBS, atBoard, atThread);
17
18 // ?<???ャ?若??潟????/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 // *************************************************************************
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 ): TAcceptType; stdcall; // URL ??┏蕁?
47
48 // *************************************************************************
49 // ?<???ャ?若??潟????/span>
50 // *************************************************************************
51 TOnPlugInMenu = procedure(
52 inInstance : DWORD // ?<???ャ?若??潟????/span>
53 ); stdcall;
54
55 // *************************************************************************
56 // ?鴻???荀с? URL ?????鴻??????? URL ??絨????冴??
57 // *************************************************************************
58 TOnListURL2ThreadURL = function(
59 inListURL : PChar; // ?鴻???荀с??腓冴???? URL
60 inFileName : PChar // ?鴻?????????<?ゃ????
61 ) : PChar; stdcall; // ?鴻??????? URL
62
63
64 function CreateResultString(
65 resultStr : string
66 ) : PChar; stdcall;
67
68 procedure DisposeResultString(
69 resultStr : PChar
70 ); stdcall;
71
72 var
73 socket : TIdHTTP;
74
75 implementation
76
77 uses ExternalBoardManager, ExternalThreadItem, GikoSystem, BoardGroup, Giko;
78
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 // ?<???祉?若?吾??茵?ず????
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 // ?純?宴????????????????(?????∽??
158 // *************************************************************************
159 procedure InitializeSocket(
160 inSocket : TIdHTTP
161 );
162 begin
163
164 if inSocket <> nil then begin
165 // ?ゃ???潟????┃絎?
166 if Assigned( OnWork ) then
167 inSocket.OnWork := OnWork;
168 if Assigned( OnWorkBegin ) then
169 inSocket.OnWorkBegin := OnWorkBegin;
170 if Assigned( OnWorkEnd ) then
171 inSocket.OnWorkEnd := OnWorkEnd;
172
173 // ??篆<???≪????荐??
174 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 inSocket.ReadTimeout := GikoSys.Setting.ReadTimeOut;
182 {$IFDEF DEBUG}
183 Writeln('------------------------------------------------------------');
184 {$ENDIF}
185 //inSocket.AllowCookies := False;
186 if GikoSys.Setting.ReadProxy then begin
187 if GikoSys.Setting.ProxyProtocol then
188 inSocket.ProtocolVersion := pv1_1
189 else
190 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 if GikoSys.Setting.ReadProxyUserID <> '' then
196 inSocket.ProxyParams.BasicAuthentication := True;
197 {$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 inSocket.ProtocolVersion := pv1_1
205 else
206 inSocket.ProtocolVersion := pv1_0;
207 inSocket.ProxyParams.ProxyServer := '';
208 inSocket.ProxyParams.ProxyPort := 80;
209 inSocket.ProxyParams.ProxyUsername := '';
210 inSocket.ProxyParams.ProxyPassword := '';
211 {$IFDEF DEBUG}
212 Writeln('???????決┃絎?????');
213 {$ENDIF}
214 end;
215 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 // httpSocket : TIdHTTP;
231 resStream : TMemoryStream;
232 content : string;
233 const
234 LIVEDOOR_URL = 'http://jbbs.livedoor.jp/';
235 begin
236
237 {$IFDEF DEBUG}
238 Writeln('ExternalBoardManager.InternalDownload');
239 {$ENDIF}
240 // Result := -1;
241
242 socket := TIdHTTP.Create( nil );
243 try
244 InitializeSocket( socket );
245 socket.Request.ContentRangeStart := inRangeStart;
246 socket.Request.ContentRangeEnd := inRangeEnd;
247 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
248 socket.Request.LastModified := ioModified - OffsetFromUTC;
249 if inRangeStart = 0 then
250 socket.Request.AcceptEncoding := 'gzip'
251 else
252 socket.Request.AcceptEncoding := '';
253 socket.Request.Accept := 'text/html';
254
255 resStream := TMemoryStream.Create;
256 try
257 try
258 resStream.Clear;
259 {$IFDEF DEBUG}
260 Writeln('URL: ' + inURL);
261 {$ENDIF}
262 socket.Get( inURL, resStream );
263 {$IFDEF DEBUG}
264 Writeln('??緇??т?紊?????');
265 {$ENDIF}
266
267 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
268
269 ioModified := socket.Response.LastModified;
270
271 Result := socket.ResponseCode;
272 if (Length( content ) = 0) and (Result = 206) then
273 Result := 304;
274 //????????BBS???????????????惹???宴??莠????????????с???????с???с????/span>
275 if ( AnsiPos(LIVEDOOR_URL, inURL) > 0 ) and (Result = 200) then begin
276 if( AnsiPos('STORAGE IN', socket.Response.RawHeaders.Text) > 0 ) then begin
277 Result := 302;
278 end;
279 end;
280 outResultData := CreateResultString( content );
281 except
282 on E: EIdSocketError do begin
283 ioModified := ZERO_DATE;
284 outResultData := nil;
285 Result := socket.ResponseCode;
286 end;
287 on E: EIdConnectException do begin
288 ioModified := ZERO_DATE;
289 outResultData := nil;
290 Result := socket.ResponseCode;
291 //Item.ErrText := E.Message;
292 end;
293 //筝??????????????潟?潟???ャ??
294 on E: EIdClosedSocket do begin
295 ioModified := ZERO_DATE;
296 outResultData := nil;
297 Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
298 //???c?????障?????с????ず?????????若?潟?若????菴???
299 end;
300 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 Result := socket.ResponseCode;
308 //Item.ErrText := E.Message;
309 end;
310 end;
311 finally
312 resStream.Free;
313 end;
314
315 finally
316 socket.Free;
317 socket := nil;
318 end;
319
320 end;
321
322 // *************************************************************************
323 // ??絎????? 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 tmpURL, Protocol, Host, Path, Document, Port, Bookmark : string;
336 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 tmpURL := string(inURL);
347 GikoSys.ParseURI(tmpURL, Protocol,Host, Path, Document, Port, Bookmark);
348 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 httpSocket.Request.Referer := Protocol + '://' + Host;
353 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 outResultData := CreateResultString( resStream.DataString );
382 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 // 鐚??<????????? dat 綵√??????若???????若??????????
397 // *************************************************************************
398
399 function InternalAbon(
400 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
401 inDatPath : PChar // dat ???<?ゃ????????????/span>
402
403 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
404 var
405 datList : TStringList;
406 FileName : String;
407 begin
408
409 datList := TStringList.Create;
410 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
422
423 end;
424 // *************************************************************************
425 // 鐚??<????????? dat 綵√??????若???????若??????????
426 // ????????鐚????鴻????/span>
427 // *************************************************************************
428
429 function InternalAbonForOne(
430 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
431 inDatPath : PChar; // dat ???<?ゃ????????????/span>
432 inNo : Integer // 荀?羆??????????合???/span>
433 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
434 var
435 datString : String;
436 FileName : String;
437 begin
438
439 datString := string( inDatText );
440 FileName := string( inDatPath );
441 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
449 // *************************************************************************
450 // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
451 // *************************************************************************
452 function InternalDat2HTML(
453 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
454 inResNo : DWORD; // ???合???/span>
455 inIsNew : Boolean // ?亥?????鴻???? True
456 ) : PChar; stdcall; // ?翫就?????? HTML
457 var
458 board : TBoard;
459 threadItem : TThreadItem;
460 begin
461
462 // ?????若????????/span>
463 board := TBoard.Create( nil, 'about://dummy/' );
464 threadItem := TThreadItem.Create( nil, 'about://dummy/test/read.cgi/dummy/' );
465 try
466 try
467 board.Add( threadItem );
468
469 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
470 except
471 Result := nil;
472 end;
473 finally
474 board.Free;
475 end;
476
477 end;
478
479 // *************************************************************************
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 Result := 0;
500 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 GikoForm.PlugInMenu.items[i].Free;
517 //GikoForm.PlugInMenu.Delete( i );
518 Break;
519 end;
520 end;
521
522 end;
523
524 exports
525 CreateResultString,
526 DisposeResultString,
527 VersionInfo,
528 InternalPrint,
529 InternalDebugPrint,
530 InternalDownload,
531 InternalPost,
532 InternalAbon,
533 InternalAbonForOne,
534 InternalDat2HTML,
535 AddPlugInMenu,
536 RemovePlugInMenu;
537
538 end.

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