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.2.1 - (show annotations) (download) (as text)
Wed May 4 06:26:07 2005 UTC (18 years, 11 months ago) by h677
Branch: remodeling
CVS Tags: v1_50_0_577, v_step1, v1_50_0_576, v1_50_0_578, v1_50_0_579
Changes since 1.15: +9 -1 lines
File MIME type: text/x-pascal
ThreadItemの持っていたプロパティを削って、省メモリ化

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 var outResultData : PChar // 菴??c????????絖???
337 ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
338 var
339 httpSocket : TIdHTTP;
340 content : string;
341 resStream : TStringStream;
342 sourceStream : TStringStream;
343 tmpURL, Protocol, Host, Path, Document, Port, Bookmark : string;
344 begin
345
346 {$IFDEF DEBUG}
347 Writeln('ExternalBoardManager.InternalPost');
348 {$ENDIF}
349 Result := -1;
350
351 httpSocket := TIdHTTP.Create( nil );
352 try
353 InitializeSocket( httpSocket );
354 tmpURL := string(inURL);
355 GikoSys.ParseURI(tmpURL, Protocol,Host, Path, Document, Port, Bookmark);
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 httpSocket.Request.Referer := Protocol + '://' + Host;
361 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 outResultData := CreateResultString( resStream.DataString );
390 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 // 鐚??<????????? dat 綵√??????若???????若??????????
405 // *************************************************************************
406
407 function InternalAbon(
408 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
409 inDatPath : PChar // dat ???<?ゃ????????????/span>
410
411 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
412 var
413 datList : TStringList;
414 FileName : String;
415 begin
416
417 datList := TStringList.Create;
418 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
430
431 end;
432 // *************************************************************************
433 // 鐚??<????????? dat 綵√??????若???????若??????????
434 // ????????鐚????鴻????/span>
435 // *************************************************************************
436
437 function InternalAbonForOne(
438 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
439 inDatPath : PChar; // dat ???<?ゃ????????????/span>
440 inNo : Integer // 荀?羆??????????合???/span>
441 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
442 var
443 datString : String;
444 FileName : String;
445 begin
446
447 datString := string( inDatText );
448 FileName := string( inDatPath );
449 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
457 // *************************************************************************
458 // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
459 // *************************************************************************
460 function InternalDat2HTML(
461 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
462 inResNo : DWORD; // ???合???/span>
463 inIsNew : Boolean // ?亥?????鴻???? True
464 ) : PChar; stdcall; // ?翫就?????? HTML
465 var
466 board : TBoard;
467 threadItem : TThreadItem;
468 begin
469
470 // ?????若????????/span>
471 board := TBoard.Create( nil, 'about://dummy/' );
472 threadItem := TThreadItem.Create( nil, board, 'about://dummy/test/read.cgi/dummy/' );
473 try
474 try
475 board.Add( threadItem );
476
477 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
478 except
479 Result := nil;
480 end;
481 finally
482 board.Free;
483 end;
484
485 end;
486
487 // *************************************************************************
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 Result := 0;
508 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 GikoForm.PlugInMenu.items[i].Free;
525 //GikoForm.PlugInMenu.Delete( i );
526 Break;
527 end;
528 end;
529
530 end;
531
532 exports
533 CreateResultString,
534 DisposeResultString,
535 VersionInfo,
536 InternalPrint,
537 InternalDebugPrint,
538 InternalDownload,
539 InternalPost,
540 InternalAbon,
541 InternalAbonForOne,
542 InternalDat2HTML,
543 AddPlugInMenu,
544 RemovePlugInMenu;
545
546 end.

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