1 unit ExternalBoardManager;
6 Windows, Classes, SysUtils,
7 IdHTTP, IdComponent, IdGlobal, IdException,
8 ExternalBoardPlugInMain, ExternalFilePath, ExternalThreadItem, ExternalBoardItem;
11 // =========================================================================
12 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
13 // =========================================================================
14 TBoardPlugIn = class( TObject )
16 FFilePath : string; //
\83v
\83\89\83O
\83C
\83\93\82ð
\8e¦
\82·
\83p
\83X
17 FModule : HMODULE; //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b
19 FVersionInfo : TOnVersionInfo;
20 FAcceptURL : TOnAcceptURL;
22 FCreateThreadItem : TThreadItemCreate;
23 FDisposeThreadItem : TThreadItemDispose;
24 FDownloadThread : TThreadItemOnDownload;
25 FGetRes : TThreadItemOnGetRes;
26 FGetHeader : TThreadItemOnGetHeader;
27 FGetFooter : TThreadItemOnGetFooter;
28 FGetBoardURL : TThreadItemOnGetBoardURL;
30 FCreateBoardItem : TBoardItemCreate;
31 FDisposeBoardItem : TBoardItemDispose;
32 FDownloadBoard : TBoardItemOnDownload;
33 FEnumThread : TBoardItemOnEnumThread;
34 FFileName2ThreadURL : TBoardItemOnFileName2ThreadURL;
37 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
39 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
40 constructor CreateFromPath( inPath : string );
41 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
42 constructor CreateFromName( inName : string );
43 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
44 constructor CreateFromModule( inModule : HMODULE );
46 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
47 procedure LoadFromPath( inPath : string );
48 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
49 procedure LoadFromName( inName : string );
50 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
51 procedure LoadFromModule( inModule : HMODULE );
53 //===== PlugInMain
\8aÖ
\98A
54 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
55 procedure VersionInfo( var outAgent : string;
56 var outMajor : DWORD; var outMinor : DWORD;
57 var outRelease : string; var outRevision : DWORD );
58 //
\8ew
\92è
\82µ
\82½ URL
\82ð
\82±
\82Ì
\83v
\83\89\83O
\83C
\83\93\82Å
\8eó
\82¯
\95t
\82¯
\82é
\82©
\82Ç
\82¤
\82©
59 function AcceptURL( inURL : string ) : Boolean;
61 //===== TThreadItem
\8aÖ
\98A
62 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
63 procedure CreateThreadItem( threadItem : DWORD );
64 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
65 procedure DisposeThreadItem( threadItem : DWORD );
66 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
67 function DownloadThread( threadItem : DWORD ) : TDownloadState;
68 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
69 function GetRes( threadItem : DWORD; inNo : DWORD ) : string;
70 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
71 function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
72 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
73 function GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
74 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
75 function GetBoardURL( threadItem : DWORD ) : string;
77 //===== TBoardItem
\8aÖ
\98A
78 // TBoard
\82ª
\90¶
\90¬
\82³
\82ê
\82½
79 procedure CreateBoardItem( boardItem : DWORD );
80 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
81 procedure DisposeBoardItem( boardItem : DWORD );
82 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
83 function DownloadBoard( boardItem : DWORD ) : TDownloadState;
84 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
85 procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
86 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
87 function FileName2ThreadURL( boardItem : DWORD; inFileName : string ) : string;
90 procedure LoadPlugInAPI;
93 property FilePath : string read FFilePath;
94 property Module : HMODULE read FModule;
99 OnWorkBegin : TWorkBeginEvent;
100 OnWorkEnd : TWorkEndEvent;
102 BoardPlugIns : array of TBoardPlugIn;
104 procedure InitializeBoardPlugIns;
110 // *************************************************************************
111 // BoardPlugin
\83t
\83H
\83\8b\83_
\82É
\82 \82é
\83v
\83\89\83O
\83C
\83\93\82ð
\91S
\82Ä
\83\8d\81[
\83h
112 // *************************************************************************
113 procedure InitializeBoardPlugIns;
116 pluginNames : TStringList;
119 pluginNames := TStringList.Create;
121 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
122 SetLength( BoardPlugIns, pluginNames.Count );
124 bound := pluginNames.Count - 1;
125 for i := 0 to bound do
126 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
135 // =========================================================================
136 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
137 // =========================================================================
139 // *************************************************************************
140 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
141 // *************************************************************************
142 constructor TBoardPlugIn.Create;
150 FCreateThreadItem := nil;
151 FDisposeThreadItem := nil;
152 FDownloadThread := nil;
157 FCreateBoardItem := nil;
158 FDisposeBoardItem := nil;
159 FDownloadBoard := nil;
161 FFileName2ThreadURL := nil;
165 // *************************************************************************
166 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
167 // *************************************************************************
168 constructor TBoardPlugIn.CreateFromPath(
175 LoadFromPath( inPath );
179 // *************************************************************************
180 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
181 // *************************************************************************
182 constructor TBoardPlugIn.CreateFromName(
189 LoadFromName( inName );
193 // *************************************************************************
194 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
195 // *************************************************************************
196 constructor TBoardPlugIn.CreateFromModule(
203 LoadFromModule( inModule );
207 // *************************************************************************
208 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
209 // *************************************************************************
210 procedure TBoardPlugIn.LoadFromPath(
216 if FileExists( inPath ) then
217 FModule := LoadLibrary( PChar( inPath ) )
218 else if FileExists( inPath + '.dll' ) then
219 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
225 // *************************************************************************
226 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
227 // *************************************************************************
228 procedure TBoardPlugIn.LoadFromName(
233 LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
237 // *************************************************************************
238 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
239 // *************************************************************************
240 procedure TBoardPlugIn.LoadFromModule(
244 tmp : array [0..MAX_PATH] of Char;
247 GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
255 // *************************************************************************
256 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
257 // *************************************************************************
258 procedure TBoardPlugIn.VersionInfo(
259 var outAgent : string; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
260 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
261 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
262 var outRelease : string; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
263 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
270 if Assigned( FVersionInfo ) then begin
271 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
272 outAgent := string( agent );
273 outRelease := string( release );
274 DisposeResultString( agent );
275 DisposeResultString( release );
280 // *************************************************************************
281 //
\8ew
\92è
\82µ
\82½ URL
\82ð
\82±
\82Ì
\83v
\83\89\83O
\83C
\83\93\82Å
\8eó
\82¯
\95t
\82¯
\82é
\82©
\82Ç
\82¤
\82©
282 // *************************************************************************
283 function TBoardPlugIn.AcceptURL(
288 if Assigned( FAcceptURL ) then
289 Result := FAcceptURL( PChar( inURL ) )
295 // *************************************************************************
296 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
297 // *************************************************************************
298 procedure TBoardPlugIn.CreateThreadItem(
299 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
303 if Assigned( FCreateThreadItem ) then
304 FCreateThreadItem( threadItem );
308 // *************************************************************************
309 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
310 // *************************************************************************
311 procedure TBoardPlugIn.DisposeThreadItem(
312 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
316 if Assigned( FDisposeThreadItem ) then
317 FDisposeThreadItem( threadItem );
321 // *************************************************************************
322 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
323 // *************************************************************************
324 function TBoardPlugIn.DownloadThread(
325 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
329 if Assigned( FDownloadThread ) then
330 Result := FDownloadThread( threadItem )
336 // *************************************************************************
337 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
338 // *************************************************************************
339 function TBoardPlugIn.GetRes(
340 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
341 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
342 ) : string; //
\95\
\8e¦
\82·
\82é HTML
347 if Assigned( FGetRes ) then begin
348 tmp := FGetRes( threadItem, inNo );
349 Result := string( tmp );
350 DisposeResultString( tmp );
355 // *************************************************************************
356 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
357 // *************************************************************************
358 function TBoardPlugIn.GetHeader(
359 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
360 inOptionalHeader : string //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
361 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
366 if Assigned( FGetHeader ) then begin
367 tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) );
368 Result := string( tmp );
369 DisposeResultString( tmp );
374 // *************************************************************************
375 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
376 // *************************************************************************
377 function TBoardPlugIn.GetFooter(
378 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
379 inOptionalFooter : string //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
380 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
385 if Assigned( FGetFooter ) then begin
386 tmp := FGetFooter( threadItem, PChar( inOptionalFooter ) );
387 Result := string( tmp );
388 DisposeResultString( tmp );
393 // *************************************************************************
394 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
395 // *************************************************************************
396 function TBoardPlugIn.GetBoardURL(
397 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
403 if Assigned( FGetBoardURL ) then begin
404 tmp := FGetBoardURL( threadItem );
405 Result := string( tmp );
406 DisposeResultString( tmp );
411 // *************************************************************************
412 // TBoardItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
413 // *************************************************************************
414 procedure TBoardPlugIn.CreateBoardItem(
415 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
419 if Assigned( FCreateBoardItem ) then
420 FCreateBoardItem( boardItem );
424 // *************************************************************************
425 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
426 // *************************************************************************
427 procedure TBoardPlugIn.DisposeBoardItem(
428 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
432 if Assigned( FDisposeBoardItem ) then
433 FDisposeBoardItem( boardItem );
437 // *************************************************************************
438 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
439 // *************************************************************************
440 function TBoardPlugIn.DownloadBoard(
441 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
445 if Assigned( FDownloadBoard ) then
446 Result := FDownloadBoard( boardItem )
452 // *************************************************************************
453 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
454 // *************************************************************************
455 procedure TBoardPlugIn.EnumThread(
456 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
457 inCallBack : TBoardItemEnumThreadCallBack
461 if Assigned( FEnumThread ) then
462 FEnumThread( boardItem, inCallBack );
466 // *************************************************************************
467 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
468 // *************************************************************************
469 function TBoardPlugIn.FileName2ThreadURL(
470 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
477 if Assigned( FFileName2ThreadURL ) then begin
478 tmp := FFileName2ThreadURL( boardItem, PChar( inFileName ) );
479 Result := string( tmp );
480 DisposeResultString( tmp );
485 // *************************************************************************
486 //
\83v
\83\89\83O
\83C
\83\93\82Ì API
\82ð
\8eæ
\93¾
487 // *************************************************************************
488 procedure TBoardPlugIn.LoadPlugInAPI;
492 if Assigned( Pointer( FModule ) ) then begin
493 FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
494 FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
496 FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
497 FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
498 FDownloadThread := GetProcAddress( FModule, 'ThreadItemOnDownload' );
499 FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
500 FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
501 FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
502 FGetBoardURL := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );
504 FCreateBoardItem := GetProcAddress( FModule, 'BoardItemCreate' );
505 FDisposeBoardItem := GetProcAddress( FModule, 'BoardItemDispose' );
506 FDownloadBoard := GetProcAddress( FModule, 'BoardItemOnDownload' );
507 FEnumThread := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
508 FFileName2ThreadURL := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' );