OSDN Git Service

・スレ立てを実装。
[gikonavigoeson/gikonavi.git] / ExternalBoardItem.pas
1 unit ExternalBoardItem;
2
3 interface
4
5 uses
6         Windows, Classes, SysUtils,
7         IdComponent,
8         ExternalBoardPlugInMain;
9
10 type
11         // TBoardItem \82Ì\83v\83\8d\83p\83e\83B\90Ý\92è\81^\8eæ\93¾ ID
12         TBoardItemProperty = (
13                 bipContext,                                                     // : DWORD                              // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
14                 bipItems,                                                               // : TThreadItem        // \94Â\82É\8cq\82ª\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h
15                 bipNo,                                                                  // : Integer                    // \94Ô\8d\86
16                 bipTitle,                                                               // : string                             // \94Â\83^\83C\83g\83\8b
17                 bipRoundDate,                                           // : TDateTime          // \94Â\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
18                 bipLastModified,                                // : TDateTime          // \94Â\82ª\8dX\90V\82³\82ê\82Ä\82¢\82é\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81j
19                 bipLastGetTime,                                 // : TDateTime          // \83X\83\8c\83b\83h\82Ü\82½\82Í\83X\83\8c\83b\83h\88ê\97\97\82ð\8dÅ\8cã\82É\8dX\90V\82µ\82½\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81E\8f\91\82«\8d\9e\82Ý\8e\9e\82É\8eg\97p\82·\82é\81j
20                 bipRound,                                                               // : Boolean                    // \8f\84\89ñ\97\\96ñ
21                 bipRoundName,                                           // : string                             // \8f\84\89ñ\96¼
22                 bipIsLogFile,                                           // : Boolean                    // \83\8d\83O\91\8dÝ\83t\83\89\83O
23                 bipUnRead,                                                      // : Integer                    // \83X\83\8c\83b\83h\96¢\93Ç\90\94
24                 bipURL,                                                                 // : string                             // \94Â\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
25                 bipFilePath                                                     // : string                             // \82±\82Ì\94Â\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
26         );
27
28         // *************************************************************************
29         // TBoardItem \82ª\90\90¬\82³\82ê\82½
30         // *************************************************************************
31         TBoardItemCreate = procedure(
32                 inInstance : DWORD
33         ); stdcall;
34
35         // *************************************************************************
36         // TBoardItem \82ª\94j\8aü\82³\82ê\82½
37         // *************************************************************************
38         TBoardItemDispose = procedure(
39                 inInstance : DWORD
40         ); stdcall;
41
42         // *************************************************************************
43         // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦\82³\82ê\82½
44         // *************************************************************************
45         TBoardItemOnDownload = function(
46                 inInstance      : DWORD                                 // \83C\83\93\83X\83^\83\93\83X
47         ) : TDownloadState; stdcall;    // \83_\83E\83\93\83\8d\81[\83h\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
48
49         // *************************************************************************
50         // \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
51         // *************************************************************************
52         TBoardItemOnCreateThread = function(
53                 inInstance      : DWORD;                                // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
54                 inSubject               : PChar;                                // \83X\83\8c\83^\83C
55                 inName                  : PChar;                                // \96¼\91O(\83n\83\93\83h\83\8b)
56                 inMail                  : PChar;                                // \83\81\81[\83\8b\83A\83h\83\8c\83X
57                 inMessage               : PChar                                 // \96{\95
58         ) : TDownloadState; stdcall;    // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
59
60         // *************************************************************************
61         // \8ae\83X\83\8c\82Ì\8fî\95ñ\82ð\95Ô\8bp
62         // *************************************************************************
63         TBoardItemEnumThreadCallBack = function(
64                 inInstance      : DWORD;        // TBoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
65                 inURL                           : PChar;        // \83X\83\8c\83b\83h\82Ì URL
66                 inTitle                 : PChar;        // \83X\83\8c\83^\83C
67                 inCount                 : DWORD         // \83\8c\83X\82Ì\90\94
68         ) : Boolean; stdcall;           // \97ñ\8b\93\82ð\91±\82¯\82é\82È\82ç True
69
70         // *************************************************************************
71         // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
72         // *************************************************************************
73         TBoardItemOnEnumThread = procedure(
74                 inInstance      : DWORD;                                                                                                // \83C\83\93\83X\83^\83\93\83X
75                 inCallBack      : TBoardItemEnumThreadCallBack  // \95Ô\8bp\82·\82×\82«\83R\81[\83\8b\83o\83b\83N
76         ); stdcall;
77
78         // *************************************************************************
79         // \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81\82³\82ê\82½
80         // *************************************************************************
81         TBoardItemOnFileName2ThreadURL = function(
82                 inInstance      : DWORD;                                                                                                // \83C\83\93\83X\83^\83\93\83X
83                 inFileName      : PChar                                                                                                 // \8c³\82É\82È\82é\83t\83@\83C\83\8b\96¼
84         ) : PChar; stdcall;
85
86 implementation
87
88 uses ExternalBoardManager, GikoSystem, BoardGroup;
89
90 // *************************************************************************
91 // TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\8eæ\93¾\82·\82é
92 // *************************************************************************
93 function BoardItemGetLong(
94         instance                : DWORD;
95         propertyID      : TBoardItemProperty
96 ) : DWORD; stdcall;
97 var
98         boardItem : TBoard;
99 begin
100
101         boardItem := TBoard( instance );
102         case propertyID of
103                 bipContext:                                                     // : DWORD                              // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
104                         Result := boardItem.Context;
105                 bipNo:                                                                  // : Integer                    // \94Ô\8d\86
106                         Result := boardItem.No;
107                 bipTitle:                                                               // : string                             // \83X\83\8c\83b\83h\83^\83C\83g\83\8b
108                         Result := DWORD( CreateResultString( boardItem.Title ) );
109                 bipRound:                                                               // : Boolean                    // \8f\84\89ñ\83t\83\89\83O
110                         Result := DWORD( boardItem.Round );
111                 bipRoundName:                                           // : string                             // \8f\84\89ñ\96¼
112                         Result := DWORD( CreateResultString( boardItem.RoundName ) );
113                 bipIsLogFile:                                           // : Boolean                    // \83\8d\83O\91\8dÝ\83t\83\89\83O
114                         Result := DWORD( boardItem.IsLogFile );
115                 bipUnRead:                                                      // : Integer                    // \83X\83\8c\83b\83h\96¢\93Ç\90\94
116                         Result := DWORD( boardItem.UnRead );
117                 bipURL:                                                                 // : string                             // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
118                         Result := DWORD( CreateResultString( boardItem.URL ) );
119                 bipFilePath:                                                                                                                    // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
120                         Result := DWORD( CreateResultString( boardItem.FilePath ) );
121         else
122                 Result := 0;
123         end;
124 end;
125
126 // *************************************************************************
127 // TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\90Ý\92è\82·\82é
128 // *************************************************************************
129 procedure BoardItemSetLong(
130         instance                : DWORD;
131         propertyID      : TBoardItemProperty;
132         param : DWORD
133 ); stdcall;
134 var
135         boardItem       : TBoard;
136 begin
137
138         boardItem := TBoard( instance );
139         case propertyID of
140                 bipContext:                                                     // : DWORD                      // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
141                         boardItem.Context                       := param;
142                 bipNo:                                                                  // : Integer            // \94Ô\8d\86
143                         boardItem.No                                            := param;
144                 bipTitle:                                                               // : string                     // \83X\83\8c\83b\83h\83^\83C\83g\83\8b
145                         boardItem.Title                         := string( PChar( param ) );
146                 bipRound:                                                               // : Boolean            // \8f\84\89ñ\83t\83\89\83O
147                         boardItem.Round                         := Boolean( param );
148                 bipRoundName:                                           // : string                     // \8f\84\89ñ\96¼
149                         boardItem.RoundName             := string( PChar( param ) );
150                 bipIsLogFile:                                           // : Boolean            // \83\8d\83O\91\8dÝ\83t\83\89\83O
151                         boardItem.IsLogFile             := Boolean( param );
152                 bipUnRead:                                                      // : Integer            // \83X\83\8c\83b\83h\96¢\93Ç\90\94
153                         boardItem.UnRead                                := Integer( param );
154                 bipURL:                                                                 // : string                     // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
155                         boardItem.URL                                   := string( PChar( param ) );
156                 bipFilePath:                                            // : string                     // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
157                         boardItem.FilePath                      := string( PChar( param ) );
158         end;
159
160 end;
161
162 // *************************************************************************
163 // TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\8eæ\93¾\82·\82é
164 // *************************************************************************
165 function BoardItemGetDouble(
166         instance                : DWORD;
167         propertyID      : TBoardItemProperty
168 ) : Double; stdcall;
169 var
170         boardItem : TBoard;
171 begin
172
173         boardItem := TBoard( instance );
174         case propertyID of
175                 bipRoundDate:                                           // : TDateTime  // \83X\83\8c\83b\83h\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
176                         Result := boardItem.RoundDate;
177                 bipLastModified:                                // : TDateTime  // \83X\83\8c\83b\83h\82ª\8dX\90V\82³\82ê\82Ä\82¢\82é\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81j
178                         Result := boardItem.LastModified;
179                 bipLastGetTime:                                 // : TDateTime  // \83X\83\8c\83b\83h\82Ü\82½\82Í\83X\83\8c\83b\83h\88ê\97\97\82ð\8dÅ\8cã\82É\8dX\90V\82µ\82½\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81E\8f\91\82«\8d\9e\82Ý\8e\9e\82É\8eg\97p\82·\82é\81j
180                         Result := boardItem.LastGetTime;
181         else
182                 Result := 0;
183         end;
184
185 end;
186
187 // *************************************************************************
188 // TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\90Ý\92è\82·\82é
189 // *************************************************************************
190 procedure BoardItemSetDouble(
191         instance                : DWORD;
192         propertyID      : TBoardItemProperty;
193         param                           : Double
194 ); stdcall;
195 var
196         boardItem : TBoard;
197 begin
198
199         boardItem := TBoard( instance );
200         case propertyID of
201                 bipRoundDate:                                           // : TDateTime  // \83X\83\8c\83b\83h\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
202                         boardItem.RoundDate             := param;
203                 bipLastModified:                                // : TDateTime  // \83X\83\8c\83b\83h\82ª\8dX\90V\82³\82ê\82Ä\82¢\82é\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81j
204                         boardItem.LastModified  := param;
205                 bipLastGetTime:                                 // : TDateTime  // \83X\83\8c\83b\83h\82Ü\82½\82Í\83X\83\8c\83b\83h\88ê\97\97\82ð\8dÅ\8cã\82É\8dX\90V\82µ\82½\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81E\8f\91\82«\8d\9e\82Ý\8e\9e\82É\8eg\97p\82·\82é\81j
206                         boardItem.LastGetTime   := param;
207         end;
208
209 end;
210
211 // *************************************************************************
212 // TBoardItem \83N\83\89\83X\82É\8cq\82ª\82ê\82Ä\82¢\82é TThreadItem \83N\83\89\83X\82ð\8eæ\93¾\82·\82é
213 // *************************************************************************
214 function BoardItemGetItems(
215         instance        : DWORD;
216         index                   : Integer
217 ) : DWORD; stdcall;
218 var
219         boardItem : TBoard;
220 begin
221
222         boardItem       := TBoard( instance );
223         Result          := DWORD( boardItem.Items[ index ] );
224
225 end;
226
227 // *************************************************************************
228 // \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\90i\8ds\82µ\82½
229 // *************************************************************************
230 procedure BoardItemWork(
231         inInstance      : DWORD;                        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
232         inWorkCount     : Integer                       // \8c»\8dÝ\82Ì\90i\95à\8fó\8bµ(\83J\83E\83\93\83g)
233 ); stdcall;
234 begin
235
236         if Assigned( OnWork ) then
237                 OnWork( TObject( inInstance ), wmRead, inWorkCount );
238
239 end;
240
241 // *************************************************************************
242 // \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\8en\82Ü\82Á\82½
243 // *************************************************************************
244 procedure BoardItemWorkBegin(
245         inInstance                      : DWORD;        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
246         inWorkCountMax  : Integer       // \92Ê\90M\82Ì\8fI\82í\82è\82ð\8e¦\82·\83J\83E\83\93\83g
247 ); stdcall;
248 begin
249
250         if Assigned( OnWorkBegin ) then
251                 OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax );
252
253 end;
254
255 // *************************************************************************
256 // \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\8fI\82í\82Á\82½
257 // *************************************************************************
258 procedure BoardItemWorkEnd(
259         inInstance      : DWORD                         // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
260 ); stdcall;
261 begin
262
263         if Assigned( OnWorkEnd ) then
264                 OnWorkEnd( TObject( inInstance ), wmRead );
265
266 end;
267
268 // *************************************************************************
269 // \94Â\82ª\95Û\97L\82·\82é\83X\83\8c\88ê\97\97\82Ì\97ñ\8b\93\8f\88\97\9d\82ð\83v\83\8d\83O\83\89\83\80\96{\91Ì\82É\94C\82³\82ê\82½
270 // *************************************************************************
271 procedure BoardItemEnumThread(
272         inInstance              : DWORD;
273         inCallBack              : TBoardItemEnumThreadCallBack;
274         inSubjectText   : PChar
275 ); stdcall;
276 var
277         board                                   : TBoard;
278         subject                         : TStringList;
279         i                                                       : Integer;
280         rec                                             : TSubjectRec;
281         isContinue              : Boolean;
282 begin
283
284         {$IFDEF DEBUG}
285         Writeln('ExternalBoardManager.BoardItemEnumThread');
286         {$ENDIF}
287         try
288                 board           := TBoard( inInstance );
289                 subject := TStringList.Create;
290                 try
291                         subject.Text := inSubjectText;
292
293                         for i := 0 to subject.Count - 1 do begin
294                                 rec                                             := GikoSys.DivideSubject( subject[i] );
295                                 rec.FFileName   := Trim(rec.FFileName);
296                                 if (rec.FTitle = '') and (rec.FCount = 0) then
297                                         Continue;
298
299                                 isContinue := inCallBack(
300                                         inInstance,
301                                         PChar( board.BoardPlugIn.FileName2ThreadURL( DWORD( board ), rec.FFileName ) ),
302                                         PChar( rec.FTitle ),
303                                         DWORD( rec.FCount ) );
304
305                                 if ( not isContinue ) then
306                                         Break;
307                         end;
308                 finally
309                         subject.Free;
310                 end;
311         except
312         end;
313
314 end;
315
316 exports
317         BoardItemGetLong,
318         BoardItemSetLong,
319         BoardItemGetDouble,
320         BoardItemSetDouble,
321         BoardItemGetItems,
322         BoardItemEnumThread,
323         BoardItemWork,
324         BoardItemWorkBegin,
325         BoardItemWorkEnd;
326
327 end.
328