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.15.2.1 - (hide 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 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     AbonUnit;
9    
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.15.2.1 // ??絎?????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     {$IFDEF DEBUG}
246     Writeln('ExternalBoardManager.InternalDownload');
247     {$ENDIF}
248 h677 1.11 // Result := -1;
249 yoffy 1.2
250 h677 1.11 socket := TIdHTTP.Create( nil );
251 yoffy 1.2 try
252 h677 1.11 InitializeSocket( socket );
253     socket.Request.ContentRangeStart := inRangeStart;
254     socket.Request.ContentRangeEnd := inRangeEnd;
255 yoffy 1.1 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
256 h677 1.11 socket.Request.LastModified := ioModified - OffsetFromUTC;
257 yoffy 1.1 if inRangeStart = 0 then
258 h677 1.11 socket.Request.AcceptEncoding := 'gzip'
259 yoffy 1.1 else
260 h677 1.11 socket.Request.AcceptEncoding := '';
261     socket.Request.Accept := 'text/html';
262 yoffy 1.1
263     resStream := TMemoryStream.Create;
264     try
265     try
266     resStream.Clear;
267     {$IFDEF DEBUG}
268     Writeln('URL: ' + inURL);
269     {$ENDIF}
270 h677 1.11 socket.Get( inURL, resStream );
271 yoffy 1.1 {$IFDEF DEBUG}
272     Writeln('??緇??т?紊?????');
273     {$ENDIF}
274    
275 h677 1.11 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
276 yoffy 1.1
277 h677 1.11 ioModified := socket.Response.LastModified;
278    
279     Result := socket.ResponseCode;
280 yoffy 1.1 if (Length( content ) = 0) and (Result = 206) then
281     Result := 304;
282 h677 1.14 //????????BBS???????????????惹???宴??莠????????????с???????с???с????/span>
283     if ( AnsiPos(LIVEDOOR_URL, inURL) > 0 ) and (Result = 200) then begin
284 h677 1.13 if( AnsiPos('STORAGE IN', socket.Response.RawHeaders.Text) > 0 ) then begin
285     Result := 302;
286     end;
287     end;
288 yoffy 1.1 outResultData := CreateResultString( content );
289     except
290     on E: EIdSocketError do begin
291     ioModified := ZERO_DATE;
292     outResultData := nil;
293 h677 1.11 Result := socket.ResponseCode;
294 yoffy 1.1 end;
295     on E: EIdConnectException do begin
296     ioModified := ZERO_DATE;
297     outResultData := nil;
298 h677 1.11 Result := socket.ResponseCode;
299 yoffy 1.1 //Item.ErrText := E.Message;
300     end;
301 h677 1.11 //筝??????????????潟?潟???ャ??
302     on E: EIdClosedSocket do begin
303     ioModified := ZERO_DATE;
304     outResultData := nil;
305     Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
306     //???c?????障?????с????ず?????????若?潟?若????菴???
307     end;
308 yoffy 1.1 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 h677 1.11 Result := socket.ResponseCode;
316 yoffy 1.1 //Item.ErrText := E.Message;
317     end;
318     end;
319     finally
320     resStream.Free;
321     end;
322    
323     finally
324 h677 1.11 socket.Free;
325     socket := nil;
326 yoffy 1.1 end;
327    
328     end;
329    
330     // *************************************************************************
331 yoffy 1.2 // ??絎????? 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 h677 1.12 tmpURL, Protocol, Host, Path, Document, Port, Bookmark : string;
344 yoffy 1.2 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 h677 1.12 tmpURL := string(inURL);
355     GikoSys.ParseURI(tmpURL, Protocol,Host, Path, Document, Port, Bookmark);
356 yoffy 1.2 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.12 httpSocket.Request.Referer := Protocol + '://' + Host;
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.15.2.1 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