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.11 - (show annotations) (download) (as text)
Tue Jun 29 15:31:28 2004 UTC (19 years, 9 months ago) by h677
Branch: MAIN
CVS Tags: v1_48_0_530, v1_48_0_510, v1_48_0_535, v1_48_0_533
Changes since 1.10: +31 -17 lines
File MIME type: text/x-pascal
pluginの外部BBSでの中断処理が正しく作動するように修正

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

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