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.16 - (show annotations) (download) (as text)
Sat Jun 25 11:27:22 2005 UTC (18 years, 9 months ago) by h677
Branch: MAIN
CVS Tags: merged-remodeling, root-of-Bb50
Branch point for: Bb50
Changes since 1.15: +12 -5 lines
File MIME type: text/x-pascal
remodelingブランチから、最新版をマージ

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 // ??絎?????URL???上????RL?????????
50 // *************************************************************************
51 TOnExtractBoardURL = procedure(
52 inURL : PChar; // 紊???????URL;
53 var outURL: PChar // 紊?????????URL
54 ); stdcall; // 紊?????????URL
55
56 // *************************************************************************
57 // ?<???ャ?若??潟????/span>
58 // *************************************************************************
59 TOnPlugInMenu = procedure(
60 inInstance : DWORD // ?<???ャ?若??潟????/span>
61 ); stdcall;
62
63 // *************************************************************************
64 // ?鴻???荀с? URL ?????鴻??????? URL ??絨????冴??
65 // *************************************************************************
66 TOnListURL2ThreadURL = function(
67 inListURL : PChar; // ?鴻???荀с??腓冴???? URL
68 inFileName : PChar // ?鴻?????????<?ゃ????
69 ) : PChar; stdcall; // ?鴻??????? URL
70
71
72 function CreateResultString(
73 resultStr : string
74 ) : PChar; stdcall;
75
76 procedure DisposeResultString(
77 resultStr : PChar
78 ); stdcall;
79
80 var
81 socket : TIdHTTP;
82
83 implementation
84
85 uses ExternalBoardManager, ExternalThreadItem, GikoSystem, BoardGroup, Giko;
86
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 // ?<???祉?若?吾??茵?ず????
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 // ?純?宴????????????????(?????∽??
166 // *************************************************************************
167 procedure InitializeSocket(
168 inSocket : TIdHTTP
169 );
170 begin
171
172 if inSocket <> nil then begin
173 // ?ゃ???潟????┃絎?
174 if Assigned( OnWork ) then
175 inSocket.OnWork := OnWork;
176 if Assigned( OnWorkBegin ) then
177 inSocket.OnWorkBegin := OnWorkBegin;
178 if Assigned( OnWorkEnd ) then
179 inSocket.OnWorkEnd := OnWorkEnd;
180
181 // ??篆<???≪????荐??
182 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 inSocket.ReadTimeout := GikoSys.Setting.ReadTimeOut;
190 {$IFDEF DEBUG}
191 Writeln('------------------------------------------------------------');
192 {$ENDIF}
193 //inSocket.AllowCookies := False;
194 if GikoSys.Setting.ReadProxy then begin
195 if GikoSys.Setting.ProxyProtocol then
196 inSocket.ProtocolVersion := pv1_1
197 else
198 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 if GikoSys.Setting.ReadProxyUserID <> '' then
204 inSocket.ProxyParams.BasicAuthentication := True;
205 {$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 inSocket.ProtocolVersion := pv1_1
213 else
214 inSocket.ProtocolVersion := pv1_0;
215 inSocket.ProxyParams.ProxyServer := '';
216 inSocket.ProxyParams.ProxyPort := 80;
217 inSocket.ProxyParams.ProxyUsername := '';
218 inSocket.ProxyParams.ProxyPassword := '';
219 {$IFDEF DEBUG}
220 Writeln('???????決┃絎?????');
221 {$ENDIF}
222 end;
223 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 // httpSocket : TIdHTTP;
239 resStream : TMemoryStream;
240 content : string;
241 const
242 LIVEDOOR_URL = 'http://jbbs.livedoor.jp/';
243 begin
244
245 {$IFDEF DEBUG}
246 Writeln('ExternalBoardManager.InternalDownload');
247 {$ENDIF}
248 // Result := -1;
249
250 socket := TIdHTTP.Create( nil );
251 try
252 InitializeSocket( socket );
253 socket.Request.ContentRangeStart := inRangeStart;
254 socket.Request.ContentRangeEnd := inRangeEnd;
255 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
256 socket.Request.LastModified := ioModified - OffsetFromUTC;
257 if inRangeStart = 0 then
258 socket.Request.AcceptEncoding := 'gzip'
259 else
260 socket.Request.AcceptEncoding := '';
261 socket.Request.Accept := 'text/html';
262
263 resStream := TMemoryStream.Create;
264 try
265 try
266 resStream.Clear;
267 {$IFDEF DEBUG}
268 Writeln('URL: ' + inURL);
269 {$ENDIF}
270 socket.Get( inURL, resStream );
271 {$IFDEF DEBUG}
272 Writeln('??緇??т?紊?????');
273 {$ENDIF}
274
275 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
276
277 ioModified := socket.Response.LastModified;
278
279 Result := socket.ResponseCode;
280 if (Length( content ) = 0) and (Result = 206) then
281 Result := 304;
282 //????????BBS???????????????惹???宴??莠????????????с???????с???с????/span>
283 if ( AnsiPos(LIVEDOOR_URL, inURL) > 0 ) and (Result = 200) then begin
284 if( AnsiPos('STORAGE IN', socket.Response.RawHeaders.Text) > 0 ) then begin
285 Result := 302;
286 end;
287 end;
288 outResultData := CreateResultString( content );
289 except
290 on E: EIdSocketError do begin
291 ioModified := ZERO_DATE;
292 outResultData := nil;
293 Result := socket.ResponseCode;
294 end;
295 on E: EIdConnectException do begin
296 ioModified := ZERO_DATE;
297 outResultData := nil;
298 Result := socket.ResponseCode;
299 //Item.ErrText := E.Message;
300 end;
301 //筝??????????????潟?潟???ャ??
302 on E: EIdClosedSocket do begin
303 ioModified := ZERO_DATE;
304 outResultData := nil;
305 Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
306 //???c?????障?????с????ず?????????若?潟?若????菴???
307 end;
308 on E: Exception do begin
309 {$IFDEF DEBUG}
310 Writeln('??緇??т?紊?????');
311 Writeln('E.Message: ' + E.Message);
312 {$ENDIF}
313 ioModified := ZERO_DATE;
314 outResultData := nil;
315 Result := socket.ResponseCode;
316 //Item.ErrText := E.Message;
317 end;
318 end;
319 finally
320 resStream.Free;
321 end;
322
323 finally
324 socket.Free;
325 socket := nil;
326 end;
327
328 end;
329
330 // *************************************************************************
331 // ??絎????? URL ?吾???若?帥????篆<????
332 // *************************************************************************
333 function InternalPost(
334 inURL : PChar; // ??篆<???? URL
335 inSource : PChar; // ??篆<??????絎?/span>
336 inReferer : PChar; // Referer
337 var outResultData : PChar // 菴??c????????絖???
338 ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
339 var
340 httpSocket : TIdHTTP;
341 content : string;
342 resStream : TStringStream;
343 sourceStream : TStringStream;
344
345 begin
346
347 {$IFDEF DEBUG}
348 Writeln('ExternalBoardManager.InternalPost');
349 {$ENDIF}
350 Result := -1;
351
352 httpSocket := TIdHTTP.Create( nil );
353 try
354 InitializeSocket( httpSocket );
355 httpSocket.Request.CustomHeaders.Add('Pragma: no-cache');
356 httpSocket.Request.AcceptLanguage := 'ja';
357 httpSocket.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
358 httpSocket.Request.ContentType := 'application/x-www-form-urlencoded';
359 httpSocket.Request.Referer := string(inReferer);
360 resStream := TStringStream.Create( content );
361 sourceStream := TStringStream.Create( string( inSource ) );
362 try
363 try
364 {$IFDEF DEBUG}
365 Writeln('URL: ' + inURL);
366 Writeln('Source: ' + inSource);
367 {$ENDIF}
368 httpSocket.Post( string( inURL ), sourceStream, resStream );
369 {$IFDEF DEBUG}
370 Writeln('??緇??т?紊?????');
371 {$ENDIF}
372
373 Result := httpSocket.ResponseCode;
374
375 outResultData := CreateResultString( resStream.DataString );
376 except
377 on E: EIdSocketError do begin
378 outResultData := nil;
379 end;
380 on E: EIdConnectException do begin
381 outResultData := nil;
382 end;
383 on E: Exception do begin
384 {$IFDEF DEBUG}
385 Writeln('??緇??т?紊?????');
386 Writeln('E.Message: ' + E.Message);
387 {$ENDIF}
388 outResultData := CreateResultString( resStream.DataString );
389 Result := httpSocket.ResponseCode;
390 end;
391 end;
392 finally
393 resStream.Free;
394 sourceStream.Free;
395 end;
396 finally
397 httpSocket.Free;
398 end;
399
400 end;
401
402 // *************************************************************************
403 // 鐚??<????????? dat 綵√??????若???????若??????????
404 // *************************************************************************
405
406 function InternalAbon(
407 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
408 inDatPath : PChar // dat ???<?ゃ????????????/span>
409
410 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
411 var
412 datList : TStringList;
413 FileName : String;
414 begin
415
416 datList := TStringList.Create;
417 try
418 datList.Text := string( inDatText );
419 FileName := string( inDatPath );
420 GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
421 GikoSys.FAbon.Execute( datList );
422 GikoSys.FSelectResFilter.Execute( datList );
423
424 Result := CreateResultString( datList.Text );
425 finally
426 datList.Free;
427 end;
428
429
430 end;
431 // *************************************************************************
432 // 鐚??<????????? dat 綵√??????若???????若??????????
433 // ????????鐚????鴻????/span>
434 // *************************************************************************
435
436 function InternalAbonForOne(
437 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
438 inDatPath : PChar; // dat ???<?ゃ????????????/span>
439 inNo : Integer // 荀?羆??????????合???/span>
440 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
441 var
442 datString : String;
443 FileName : String;
444 begin
445
446 datString := string( inDatText );
447 FileName := string( inDatPath );
448 GikoSys.FAbon.IndividualAbon( datString, ChangeFileExt(FileName,'.NG'), inNo);
449 GikoSys.FAbon.Execute( datString , inNo);
450 GikoSys.FSelectResFilter.Execute( datString , inNo );
451
452 Result := CreateResultString( datString );
453
454 end;
455
456 // *************************************************************************
457 // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
458 // *************************************************************************
459 function InternalDat2HTML(
460 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
461 inResNo : DWORD; // ???合???/span>
462 inIsNew : Boolean // ?亥?????鴻???? True
463 ) : PChar; stdcall; // ?翫就?????? HTML
464 var
465 board : TBoard;
466 threadItem : TThreadItem;
467 begin
468
469 // ?????若????????/span>
470 board := TBoard.Create( nil, 'about://dummy/' );
471 threadItem := TThreadItem.Create( nil, board, 'about://dummy/test/read.cgi/dummy/' );
472 try
473 try
474 board.Add( threadItem );
475
476 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
477 except
478 Result := nil;
479 end;
480 finally
481 board.Free;
482 end;
483
484 end;
485
486 // *************************************************************************
487 // ?????違?ゃ?潟?<???ャ?若????????菴遵??
488 // *************************************************************************
489 function AddPlugInMenu(
490 inInstance : DWORD; // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
491 inCaption : PChar // ?<???ャ?若??;腓冴??????絖???
492 ) : HMENU; stdcall; // ?<???ャ?若??潟??????菴遵????け???????翫??? NULL
493 var
494 newItem : TMenuItem;
495 begin
496
497 try
498 newItem := TMenuItem.Create( nil );
499 newItem.Caption := inCaption;
500 newItem.Tag := inInstance;
501 newItem.OnClick := GikoForm.OnPlugInMenuItem;
502 GikoForm.PlugInMenu.Add( newItem );
503
504 Result := newItem.Handle;
505 except
506 Result := 0;
507 end;
508
509 end;
510
511 // *************************************************************************
512 // ?????違?ゃ?潟?<???ャ?若??????????????/span>
513 // *************************************************************************
514 procedure RemovePlugInMenu(
515 inHandle : HMENU // ?<???ャ?若??潟????/span>
516 ); stdcall;
517 var
518 i : Integer;
519 begin
520
521 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
522 if GikoForm.PlugInMenu.Items[ i ].Handle = inHandle then begin
523 GikoForm.PlugInMenu.items[i].Free;
524 //GikoForm.PlugInMenu.Delete( i );
525 Break;
526 end;
527 end;
528
529 end;
530
531 exports
532 CreateResultString,
533 DisposeResultString,
534 VersionInfo,
535 InternalPrint,
536 InternalDebugPrint,
537 InternalDownload,
538 InternalPost,
539 InternalAbon,
540 InternalAbonForOne,
541 InternalDat2HTML,
542 AddPlugInMenu,
543 RemovePlugInMenu;
544
545 end.

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