OSDN Git Service

This commit was manufactured by cvs2svn to create branch 'Bb62'.
[gikonavigoeson/gikonavi.git] / ExternalBoardManager.pas
1 unit ExternalBoardManager;
2
3 interface
4
5 uses
6         Windows, Classes, SysUtils,
7         IdHTTP, IdComponent, IdGlobal, IdException,
8         ExternalBoardPlugInMain, ExternalFilePath, ExternalThreadItem, ExternalBoardItem;
9
10 type
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 )
15         private
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
18
19                 FLoad                                                           : TOnLoad;
20                 FVersionInfo                            : TOnVersionInfo;
21                 FAcceptURL                                      : TOnAcceptURL;
22         FExtractBoardURL                                : TOnExtractBoardURL;
23                 FPlugInMenu                                     : TOnPlugInMenu;
24
25                 FCreateThreadItem               : TThreadItemCreate;
26                 FDisposeThreadItem      : TThreadItemDispose;
27                 FDownloadThread                 : TThreadItemOnDownload;
28                 FWriteThread                            : TThreadItemOnWrite;
29                 FGetRes                                                 : TThreadItemOnGetRes;
30                 FGetDat                                                 : TThreadItemOnGetDat;
31                 FGetHeader                                      : TThreadItemOnGetHeader;
32                 FGetFooter                                      : TThreadItemOnGetFooter;
33                 FGetBoardURL                            : TThreadItemOnGetBoardURL;
34
35                 FCreateBoardItem                : TBoardItemCreate;
36                 FDisposeBoardItem               : TBoardItemDispose;
37                 FDownloadBoard                  : TBoardItemOnDownload;
38                 FCreateThread                           : TBoardItemOnCreateThread;
39                 FEnumThread                                     : TBoardItemOnEnumThread;
40                 FFileName2ThreadURL     : TBoardItemOnFileName2ThreadURL;
41
42         public
43                 // \83R\83\93\83X\83g\83\89\83N\83^
44                 constructor     Create;
45                 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\8dì\90¬
46                 constructor     CreateFromPath( inPath : string );
47                 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\8dì\90¬
48                 constructor     CreateFromName( inName : string );
49                 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\8dì\90¬
50                 constructor     CreateFromModule( inModule : HMODULE );
51                 // \83f\83X\83g\83\89\83N\83^
52                 destructor      Destroy; override;
53
54                 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
55                 procedure       LoadFromPath( inPath : string );
56                 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
57                 procedure       LoadFromName( inName : string );
58                 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
59                 procedure       LoadFromModule( inModule : HMODULE );
60
61                 //===== PlugInMain \8aÖ\98A
62                 // \83v\83\89\83O\83C\83\93\82ª(\90³\82µ\82­)\83\8d\81[\83h\82³\82ê\82½
63                 procedure       Loaded;
64                 // \83o\81[\83W\83\87\83\93\8fî\95ñ
65                 procedure       VersionInfo(    var outAgent : string;
66                         var outMajor : DWORD; var outMinor : DWORD;
67                         var outRelease : string; var outRevision : DWORD );
68                 // \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©
69                 function        AcceptURL( inURL : string ) : TAcceptType;
70         // URL\82©\82ç\8eg\82¦\82éBoard\82ÌURL\82ð\93±\82«\8fo\82·
71         function        ExtractBoardURL( inURL : string ): string;
72                 // \83\81\83j\83\85\81[\83n\83\93\83h\83\89
73                 procedure       PlugInMenu( inHandle : HMENU );
74
75                 //===== TThreadItem \8aÖ\98A
76                 // TThreadItem \82ª\90\90¬\82³\82ê\82½
77                 procedure       CreateThreadItem( threadItem : DWORD );
78                 // TThreadItem \82ª\94j\8aü\82³\82ê\82½
79                 procedure       DisposeThreadItem( threadItem : DWORD );
80                 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
81                 function        DownloadThread( threadItem : DWORD ) : TDownloadState;
82                 // \8f\91\82«\8d\9e\82Ý\82ð\8ew\8e¦
83                 function        WriteThread( threadItem : DWORD; inName : string; inMail : string; inMessage : string ) : TDownloadState;
84                 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
85                 function        GetRes( threadItem : DWORD; inNo : DWORD ) : string;
86                 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é Dat \82ð\97v\8b\81
87                 function        GetDat( threadItem : DWORD; inNo : DWORD ) : string;
88                 // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
89                 function        GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
90                 // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81
91                 function        GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
92                 // \82±\82Ì ThreadItem \82ª\91®\82·\82é\94Â\82Ì URL \82ð\97v\8b\81
93                 function        GetBoardURL( threadItem : DWORD ) : string;
94
95                 //===== TBoardItem \8aÖ\98A
96                 // TBoard \82ª\90\90¬\82³\82ê\82½
97                 procedure       CreateBoardItem( boardItem : DWORD );
98                 // TBoardItem \82ª\94j\8aü\82³\82ê\82½
99                 procedure       DisposeBoardItem( boardItem : DWORD );
100                 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
101                 function        DownloadBoard( boardItem : DWORD ) : TDownloadState;
102                 // \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
103                 function        CreateThread( boardItem : DWORD; inSubject : string; inName : string; inMail : string; inMessage : string ) : TDownloadState;
104                 // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
105                 procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
106                 // \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81
107                 function        FileName2ThreadURL( boardItem : DWORD; inFileName : string ) : string;
108
109         private
110                 procedure       LoadPlugInAPI;
111
112         public
113                 property        FilePath        : string        read FFilePath;
114                 property        Module          : HMODULE       read FModule;
115         end;
116
117 var
118         OnWork                          : TWorkEvent;
119         OnWorkBegin             : TWorkBeginEvent;
120         OnWorkEnd                       : TWorkEndEvent;
121
122         BoardPlugIns    : array of TBoardPlugIn;
123
124 procedure InitializeBoardPlugIns;
125
126 implementation
127
128 uses GikoSystem, BoardGroup;
129
130 // *************************************************************************
131 // BoardPlugin \83t\83H\83\8b\83_\82É\82 \82é\83v\83\89\83O\83C\83\93\82ð\91S\82Ä\83\8d\81[\83h
132 // *************************************************************************
133 procedure InitializeBoardPlugIns;
134 var
135         i, bound                : Integer;
136         pluginNames     : TStringList;
137 begin
138
139         pluginNames := TStringList.Create;
140         try
141                 //GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
142         pluginNames.BeginUpdate;
143                 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*.dll', pluginNames, False );
144         pluginNames.EndUpdate;
145                 SetLength( BoardPlugIns, pluginNames.Count );
146         //
147         SetLength( BoardGroups, pluginNames.Count + 1 );
148                 BoardGroups[0] := TBoardGroup.Create;
149                 BoardGroups[0].Sorted := true;
150                 BoardGroups[0].BoardPlugIn := nil;
151                 //
152                 bound := pluginNames.Count - 1;
153                 for i := 0 to bound do begin
154                         try
155                                 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
156                                 BoardPlugIns[ i ].Loaded;
157                                 BoardGroups[ i + 1 ] := TBoardGroup.Create;
158                 BoardGroups[ i + 1 ].Sorted := True;
159                                 BoardGroups[ i + 1 ].BoardPlugIn := BoardPlugIns[ i ];
160                         except end;
161                 end;
162         finally
163                 pluginNames.Free;
164         end;
165
166 end;
167
168
169
170 // =========================================================================
171 // \83v\83\89\83O\83C\83\93\82ð\8aÇ\97\9d\82·\82é TBoardPlugin \83N\83\89\83X
172 // =========================================================================
173
174 // *************************************************************************
175 // \83R\83\93\83X\83g\83\89\83N\83^
176 // *************************************************************************
177 constructor     TBoardPlugIn.Create;
178 begin
179
180         inherited;
181
182         FLoad                                                           := nil;
183         FVersionInfo                            := nil;
184         FAcceptURL                                      := nil;
185     FExtractBoardURL                    := nil;
186         FPlugInMenu                                     := nil;
187
188         FCreateThreadItem               := nil;
189         FDisposeThreadItem      := nil;
190         FDownloadThread                 := nil;
191         FWriteThread                            := nil;
192         FGetRes                                                 := nil;
193         FGetDat                                                 := nil;
194         FGetHeader                                      := nil;
195         FGetFooter                                      := nil;
196
197         FCreateBoardItem                := nil;
198         FDisposeBoardItem               := nil;
199         FDownloadBoard                  := nil;
200         FCreateThread                           := nil;
201         FEnumThread                                     := nil;
202         FFileName2ThreadURL     := nil;
203
204 end;
205
206 // *************************************************************************
207 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\8dì\90¬
208 // *************************************************************************
209 constructor     TBoardPlugIn.CreateFromPath(
210         inPath : string
211 );
212 begin
213
214         Create;
215
216         LoadFromPath( inPath );
217
218 end;
219
220 // *************************************************************************
221 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\8dì\90¬
222 // *************************************************************************
223 constructor     TBoardPlugIn.CreateFromName(
224         inName : string
225 );
226 begin
227
228         Create;
229
230         LoadFromName( inName );
231
232 end;
233
234 // *************************************************************************
235 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\8dì\90¬
236 // *************************************************************************
237 constructor     TBoardPlugIn.CreateFromModule(
238         inModule : HMODULE
239 );
240 begin
241
242         inherited Create;
243
244         LoadFromModule( inModule );
245
246 end;
247
248 // *************************************************************************
249 // \83f\83X\83g\83\89\83N\83^
250 // *************************************************************************
251 destructor      TBoardPlugIn.Destroy;
252 begin
253
254         FreeLibrary( FModule );
255
256         inherited;
257
258 end;
259
260 // *************************************************************************
261 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
262 // *************************************************************************
263 procedure TBoardPlugIn.LoadFromPath(
264         inPath : string
265 );
266 begin
267
268         FFilePath := inPath;
269         if FileExists( inPath ) then
270                 FModule := LoadLibrary( PChar( inPath ) )
271         else if FileExists( inPath + '.dll' ) then
272                 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
273
274         LoadPlugInAPI;
275
276 end;
277
278 // *************************************************************************
279 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
280 // *************************************************************************
281 procedure TBoardPlugIn.LoadFromName(
282         inName : string
283 );
284 begin
285
286         LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
287
288 end;
289
290 // *************************************************************************
291 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
292 // *************************************************************************
293 procedure TBoardPlugIn.LoadFromModule(
294         inModule        : HMODULE
295 );
296 var
297         tmp                             : array [0..MAX_PATH] of Char;
298 begin
299
300         GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
301         FFilePath       := tmp;
302         FModule         := inModule;
303
304         LoadPlugInAPI;
305
306 end;
307
308 // *************************************************************************
309 // \83v\83\89\83O\83C\83\93\82ª(\90³\82µ\82­)\83\8d\81[\83h\82³\82ê\82½
310 // *************************************************************************
311 procedure TBoardPlugIn.Loaded;
312 begin
313
314         if Assigned( FLoad ) then
315                 FLoad( DWORD( Self ) );
316
317 end;
318
319 // *************************************************************************
320 // \83o\81[\83W\83\87\83\93\8fî\95ñ
321 // *************************************************************************
322 procedure TBoardPlugIn.VersionInfo(
323         var outAgent            : string;               // \83o\81[\83W\83\87\83\93\82ð\88ê\90Ø\8aÜ\82Ü\82È\82¢\8f\83\90\88\82È\96¼\8fÌ
324         var outMajor            : DWORD;                // \83\81\83W\83\83\81[\83o\81[\83W\83\87\83\93
325         var outMinor            : DWORD;                // \83}\83C\83i\81[\83o\81[\83W\83\87\83\93
326         var outRelease  : string;               // \83\8a\83\8a\81[\83X\92i\8aK\96¼
327         var outRevision : DWORD                 // \83\8a\83r\83W\83\87\83\93\83i\83\93\83o\81[
328 );
329 var
330         agent                                           : PChar;
331         release                                 : PChar;
332 begin
333
334         if Assigned( FVersionInfo ) then begin
335                 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
336                 outAgent                := string( agent );
337                 outRelease      := string( release );
338                 DisposeResultString( agent );
339                 DisposeResultString( release );
340         end;
341
342 end;
343
344 // *************************************************************************
345 // \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©
346 // *************************************************************************
347 function        TBoardPlugIn.AcceptURL(
348         inURL : string
349 ) : TAcceptType;
350 begin
351
352         if Assigned( FAcceptURL ) then
353                 Result := FAcceptURL( PChar( inURL ) )
354         else
355                 Result := atNoAccept;
356
357 end;
358 // *************************************************************************
359 // \8ew\92è\82µ\82½ URL \82©\82ç\8eg\82¦\82éBoard\82ÌURL\82ð\93±\82«\8fo\82·
360 // *************************************************************************
361 function        TBoardPlugIn.ExtractBoardURL(
362         inURL : string
363 ) : string;
364 var
365         URL : PChar;
366 //    tmp : string;
367 begin
368     Result := inURL;
369         if Assigned( FExtractBoardURL ) then begin
370         FExtractBoardURL( PChar(inURL), URL);
371         Result := string(URL);
372         DisposeResultString(URL);
373     end;
374 end;
375 // *************************************************************************
376 // \83\81\83j\83\85\81[\83n\83\93\83h\83\89
377 // *************************************************************************
378 procedure TBoardPlugIn.PlugInMenu(
379         inHandle : HMENU                                        // \83\81\83j\83\85\81[\83n\83\93\83h\83\8b
380 );
381 begin
382
383         if Assigned( FPlugInMenu ) then
384                 FPlugInMenu( inHandle );
385
386 end;
387
388 // *************************************************************************
389 // TThreadItem \82ª\90\90¬\82³\82ê\82½
390 // *************************************************************************
391 procedure       TBoardPlugIn.CreateThreadItem(
392         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
393 );
394 begin
395
396         if Assigned( FCreateThreadItem ) then
397                 FCreateThreadItem( threadItem );
398
399 end;
400
401 // *************************************************************************
402 // TThreadItem \82ª\94j\8aü\82³\82ê\82½
403 // *************************************************************************
404 procedure       TBoardPlugIn.DisposeThreadItem(
405         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
406 );
407 begin
408
409         if Assigned( FDisposeThreadItem ) then
410                 FDisposeThreadItem( threadItem );
411
412 end;
413
414 // *************************************************************************
415 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
416 // *************************************************************************
417 function        TBoardPlugIn.DownloadThread(
418         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
419 ) : TDownloadState;
420 begin
421
422         if Assigned( FDownloadThread ) then
423                 Result := FDownloadThread( threadItem )
424         else
425                 Result := dsError;
426
427 end;
428
429 // *************************************************************************
430 // \8f\91\82«\8d\9e\82Ý\82ð\8ew\8e¦
431 // *************************************************************************
432 function        TBoardPlugIn.WriteThread(
433         threadItem      : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
434         inName                  : string;       // \96¼\91O(\83n\83\93\83h\83\8b)
435         inMail                  : string;       // \83\81\81[\83\8b\83A\83h\83\8c\83X
436         inMessage               : string        // \96{\95
437 ) : TDownloadState;                     // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
438 begin
439
440         if Assigned( FWriteThread ) then
441                 Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) )
442         else
443                 Result := dsError;
444
445 end;
446
447 // *************************************************************************
448 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
449 // *************************************************************************
450 function TBoardPlugIn.GetRes(
451         threadItem      : DWORD;                // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
452         inNo                            : DWORD                 // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
453 ) : string;                                                     // \95\\8e¦\82·\82é HTML
454 var
455         tmp                                     : PChar;
456 begin
457
458         if Assigned( FGetRes ) then begin
459                 tmp                     := FGetRes( threadItem, inNo );
460                 try
461                         Result  := string( tmp );
462                 finally
463                         DisposeResultString( tmp );
464                 end;
465         end;
466
467 end;
468
469 // *************************************************************************
470 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é Dat \82ð\97v\8b\81
471 // *************************************************************************
472 function TBoardPlugIn.GetDat(
473         threadItem      : DWORD;                // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
474         inNo                            : DWORD                 // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
475 ) : string; // \82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\8c`\8e®
476 var
477         tmp :   PChar;
478 begin
479
480         if Assigned( FGetDat ) then begin
481                 tmp := FGetDat( threadItem, inNo );
482                 try
483                         Result := string( tmp );
484                 finally
485                         DisposeResultString(tmp);  end;
486         end;
487
488 end;
489
490 // *************************************************************************
491 // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
492 // *************************************************************************
493 function TBoardPlugIn.GetHeader(
494         threadItem                              : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
495         inOptionalHeader        : string        // \92Ç\89Á\82Ì\83w\83b\83_
496 ) : string;                                                                             // \90®\8c`\82³\82ê\82½ HTML
497 var
498         tmp                                                             : PChar;
499 begin
500
501         if Assigned( FGetHeader ) then begin
502                 tmp                     := FGetHeader( threadItem, PChar( inOptionalHeader ) );
503                 try
504                         Result  := string( tmp );
505                 finally
506                         DisposeResultString( tmp );
507                 end;
508         end;
509
510 end;
511
512 // *************************************************************************
513 // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81
514 // *************************************************************************
515 function TBoardPlugIn.GetFooter(
516         threadItem                              : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
517         inOptionalFooter        : string        // \92Ç\89Á\82Ì\83t\83b\83^
518 ) : string;                                                                             // \90®\8c`\82³\82ê\82½ HTML
519 var
520         tmp                                                             : PChar;
521 begin
522
523         if Assigned( FGetFooter ) then begin
524                 tmp                     := FGetFooter( threadItem, PChar( inOptionalFooter ) );
525                 Result  := string( tmp );
526                 DisposeResultString( tmp );
527         end;
528
529 end;
530
531 // *************************************************************************
532 // \82±\82Ì ThreadItem \82ª\91®\82·\82é\94Â\82Ì URL \82ð\97v\8b\81
533 // *************************************************************************
534 function        TBoardPlugIn.GetBoardURL(
535         threadItem      : DWORD // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
536 ) : string;
537 var
538         tmp                                     : PChar;
539 begin
540
541         if Assigned( FGetBoardURL ) then begin
542                 tmp                     := FGetBoardURL( threadItem );
543                 Result  := string( tmp );
544                 DisposeResultString( tmp );
545         end;
546
547 end;
548
549 // *************************************************************************
550 // TBoardItem \82ª\90\90¬\82³\82ê\82½
551 // *************************************************************************
552 procedure       TBoardPlugIn.CreateBoardItem(
553         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
554 );
555 begin
556
557         if Assigned( FCreateBoardItem ) then
558                 FCreateBoardItem( boardItem );
559
560 end;
561
562 // *************************************************************************
563 // TBoardItem \82ª\94j\8aü\82³\82ê\82½
564 // *************************************************************************
565 procedure       TBoardPlugIn.DisposeBoardItem(
566         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
567 );
568 begin
569
570         if Assigned( FDisposeBoardItem ) then
571                 FDisposeBoardItem( boardItem );
572
573 end;
574
575 // *************************************************************************
576 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
577 // *************************************************************************
578 function        TBoardPlugIn.DownloadBoard(
579         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
580 ) : TDownloadState;
581 begin
582
583         if Assigned( FDownloadBoard ) then
584                 Result := FDownloadBoard( boardItem )
585         else
586                 Result := dsError;
587
588 end;
589
590 // *************************************************************************
591 // \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
592 // *************************************************************************
593 function        TBoardPlugIn.CreateThread(
594         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
595         inSubject               : string;       // \83X\83\8c\83^\83C
596         inName                  : string;       // \96¼\91O(\83n\83\93\83h\83\8b)
597         inMail                  : string;       // \83\81\81[\83\8b\83A\83h\83\8c\83X
598         inMessage               : string        // \96{\95
599 ) : TDownloadState;                     // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
600 begin
601
602         if Assigned( FCreateThread ) then
603                 Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) )
604         else
605                 Result := dsError;
606
607 end;
608
609 // *************************************************************************
610 // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
611 // *************************************************************************
612 procedure TBoardPlugIn.EnumThread(
613         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
614         inCallBack      : TBoardItemEnumThreadCallBack
615 );
616 begin
617
618         if Assigned( FEnumThread ) then
619                 FEnumThread( boardItem, inCallBack );
620
621 end;
622
623 // *************************************************************************
624 // \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81
625 // *************************************************************************
626 function        TBoardPlugIn.FileName2ThreadURL(
627         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
628         inFileName      : string
629 ) : string;
630 var
631         tmp                                                             : PChar;
632 begin
633
634         if Assigned( FFileName2ThreadURL ) then begin
635                 tmp                     := FFileName2ThreadURL( boardItem, PChar( inFileName ) );
636                 Result  := string( tmp );
637                 DisposeResultString( tmp );
638         end;
639
640 end;
641
642 // *************************************************************************
643 // \83v\83\89\83O\83C\83\93\82Ì API \82ð\8eæ\93¾
644 // *************************************************************************
645 procedure TBoardPlugIn.LoadPlugInAPI;
646 begin
647
648         try
649                 if Assigned( Pointer( FModule ) ) then begin
650                         FLoad                                                           := GetProcAddress( FModule, 'OnLoad' );
651                         FVersionInfo                            := GetProcAddress( FModule, 'OnVersionInfo' );
652                         FAcceptURL                                      := GetProcAddress( FModule, 'OnAcceptURL' );
653             FExtractBoardURL                            := GetProcAddress( FModule, 'OnExtractBoardURL' );
654                         FPlugInMenu                                     := GetProcAddress( FModule, 'OnPlugInMenu' );
655
656                         FCreateThreadItem               := GetProcAddress( FModule, 'ThreadItemCreate' );
657                         FDisposeThreadItem      := GetProcAddress( FModule, 'ThreadItemDispose' );
658                         FDownloadThread                 := GetProcAddress( FModule, 'ThreadItemOnDownload' );
659                         FWriteThread                            := GetProcAddress( FModule, 'ThreadItemOnWrite' );
660                         FGetRes                                                 := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
661                         FGetDat                                                 := GetProcAddress( FModule, 'ThreadItemOnGetDat' );
662                         FGetHeader                                      := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
663                         FGetFooter                                      := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
664                         FGetBoardURL                            := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );
665
666                         FCreateBoardItem                := GetProcAddress( FModule, 'BoardItemCreate' );
667                         FDisposeBoardItem               := GetProcAddress( FModule, 'BoardItemDispose' );
668                         FDownloadBoard                  := GetProcAddress( FModule, 'BoardItemOnDownload' );
669                         FCreateThread                           := GetProcAddress( FModule, 'BoardItemOnCreateThread' );
670                         FEnumThread                                     := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
671                         FFileName2ThreadURL     := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' );
672                 end;
673         except
674         end;
675
676 end;
677
678 end.
679