OSDN Git Service

・ExternalBoardManager が大きくなったので分割。
[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         // \8ae\83X\83\8c\82Ì\8fî\95ñ\82ð\95Ô\8bp
51         // *************************************************************************
52         TBoardItemEnumThreadCallBack = function(
53                 inInstance      : DWORD;        // TBoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
54                 inURL                           : PChar;        // \83X\83\8c\83b\83h\82Ì URL
55                 inTitle                 : PChar;        // \83X\83\8c\83^\83C
56                 inCount                 : DWORD         // \83\8c\83X\82Ì\90\94
57         ) : Boolean; stdcall;           // \97ñ\8b\93\82ð\91±\82¯\82é\82È\82ç True
58
59         // *************************************************************************
60         // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
61         // *************************************************************************
62         TBoardItemOnEnumThread = procedure(
63                 inInstance      : DWORD;                                                                                                // \83C\83\93\83X\83^\83\93\83X
64                 inCallBack      : TBoardItemEnumThreadCallBack  // \95Ô\8bp\82·\82×\82«\83R\81[\83\8b\83o\83b\83N
65         ); stdcall;
66
67         // *************************************************************************
68         // \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81\82³\82ê\82½
69         // *************************************************************************
70         TBoardItemOnFileName2ThreadURL = function(
71                 inInstance      : DWORD;                                                                                                // \83C\83\93\83X\83^\83\93\83X
72                 inFileName      : PChar                                                                                                 // \8c³\82É\82È\82é\83t\83@\83C\83\8b\96¼
73         ) : PChar; stdcall;
74
75 implementation
76
77 uses ExternalBoardManager, GikoSystem, BoardGroup;
78
79 // *************************************************************************
80 // TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\8eæ\93¾\82·\82é
81 // *************************************************************************
82 function BoardItemGetLong(
83         instance                : DWORD;
84         propertyID      : TBoardItemProperty
85 ) : DWORD; stdcall;
86 var
87         boardItem : TBoard;
88 begin
89
90         boardItem := TBoard( instance );
91         case propertyID of
92                 bipContext:                                                     // : DWORD                              // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
93                         Result := boardItem.Context;
94                 bipNo:                                                                  // : Integer                    // \94Ô\8d\86
95                         Result := boardItem.No;
96                 bipTitle:                                                               // : string                             // \83X\83\8c\83b\83h\83^\83C\83g\83\8b
97                         Result := DWORD( CreateResultString( boardItem.Title ) );
98                 bipRound:                                                               // : Boolean                    // \8f\84\89ñ\83t\83\89\83O
99                         Result := DWORD( boardItem.Round );
100                 bipRoundName:                                           // : string                             // \8f\84\89ñ\96¼
101                         Result := DWORD( CreateResultString( boardItem.RoundName ) );
102                 bipIsLogFile:                                           // : Boolean                    // \83\8d\83O\91\8dÝ\83t\83\89\83O
103                         Result := DWORD( boardItem.IsLogFile );
104                 bipUnRead:                                                      // : Integer                    // \83X\83\8c\83b\83h\96¢\93Ç\90\94
105                         Result := DWORD( boardItem.UnRead );
106                 bipURL:                                                                 // : string                             // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
107                         Result := DWORD( CreateResultString( boardItem.URL ) );
108                 bipFilePath:                                                                                                                    // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
109                         Result := DWORD( CreateResultString( boardItem.FilePath ) );
110         else
111                 Result := 0;
112         end;
113 end;
114
115 // *************************************************************************
116 // TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\90Ý\92è\82·\82é
117 // *************************************************************************
118 procedure BoardItemSetLong(
119         instance                : DWORD;
120         propertyID      : TBoardItemProperty;
121         param : DWORD
122 ); stdcall;
123 var
124         boardItem       : TBoard;
125 begin
126
127         boardItem := TBoard( instance );
128         case propertyID of
129                 bipContext:                                                     // : DWORD                      // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
130                         boardItem.Context                       := param;
131                 bipNo:                                                                  // : Integer            // \94Ô\8d\86
132                         boardItem.No                                            := param;
133                 bipTitle:                                                               // : string                     // \83X\83\8c\83b\83h\83^\83C\83g\83\8b
134                         boardItem.Title                         := string( PChar( param ) );
135                 bipRound:                                                               // : Boolean            // \8f\84\89ñ\83t\83\89\83O
136                         boardItem.Round                         := Boolean( param );
137                 bipRoundName:                                           // : string                     // \8f\84\89ñ\96¼
138                         boardItem.RoundName             := string( PChar( param ) );
139                 bipIsLogFile:                                           // : Boolean            // \83\8d\83O\91\8dÝ\83t\83\89\83O
140                         boardItem.IsLogFile             := Boolean( param );
141                 bipUnRead:                                                      // : Integer            // \83X\83\8c\83b\83h\96¢\93Ç\90\94
142                         boardItem.UnRead                                := Integer( param );
143                 bipURL:                                                                 // : string                     // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
144                         boardItem.URL                                   := string( PChar( param ) );
145                 bipFilePath:                                            // : string                     // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
146                         boardItem.FilePath                      := string( PChar( param ) );
147         end;
148
149 end;
150
151 // *************************************************************************
152 // TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\8eæ\93¾\82·\82é
153 // *************************************************************************
154 function BoardItemGetDouble(
155         instance                : DWORD;
156         propertyID      : TBoardItemProperty
157 ) : Double; stdcall;
158 var
159         boardItem : TBoard;
160 begin
161
162         boardItem := TBoard( instance );
163         case propertyID of
164                 bipRoundDate:                                           // : TDateTime  // \83X\83\8c\83b\83h\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
165                         Result := boardItem.RoundDate;
166                 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
167                         Result := boardItem.LastModified;
168                 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
169                         Result := boardItem.LastGetTime;
170         else
171                 Result := 0;
172         end;
173
174 end;
175
176 // *************************************************************************
177 // TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\90Ý\92è\82·\82é
178 // *************************************************************************
179 procedure BoardItemSetDouble(
180         instance                : DWORD;
181         propertyID      : TBoardItemProperty;
182         param                           : Double
183 ); stdcall;
184 var
185         boardItem : TBoard;
186 begin
187
188         boardItem := TBoard( instance );
189         case propertyID of
190                 bipRoundDate:                                           // : TDateTime  // \83X\83\8c\83b\83h\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
191                         boardItem.RoundDate             := param;
192                 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
193                         boardItem.LastModified  := param;
194                 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
195                         boardItem.LastGetTime   := param;
196         end;
197
198 end;
199
200 // *************************************************************************
201 // TBoardItem \83N\83\89\83X\82É\8cq\82ª\82ê\82Ä\82¢\82é TThreadItem \83N\83\89\83X\82ð\8eæ\93¾\82·\82é
202 // *************************************************************************
203 function BoardItemGetItems(
204         instance        : DWORD;
205         index                   : Integer
206 ) : DWORD; stdcall;
207 var
208         boardItem : TBoard;
209 begin
210
211         boardItem       := TBoard( instance );
212         Result          := DWORD( boardItem.Items[ index ] );
213
214 end;
215
216 // *************************************************************************
217 // \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\90i\8ds\82µ\82½
218 // *************************************************************************
219 procedure BoardItemWork(
220         inInstance      : DWORD;                        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
221         inWorkCount     : Integer                       // \8c»\8dÝ\82Ì\90i\95à\8fó\8bµ(\83J\83E\83\93\83g)
222 ); stdcall;
223 begin
224
225         if Assigned( OnWork ) then
226                 OnWork( TObject( inInstance ), wmRead, inWorkCount );
227
228 end;
229
230 // *************************************************************************
231 // \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\8en\82Ü\82Á\82½
232 // *************************************************************************
233 procedure BoardItemWorkBegin(
234         inInstance                      : DWORD;        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
235         inWorkCountMax  : Integer       // \92Ê\90M\82Ì\8fI\82í\82è\82ð\8e¦\82·\83J\83E\83\93\83g
236 ); stdcall;
237 begin
238
239         if Assigned( OnWorkBegin ) then
240                 OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax );
241
242 end;
243
244 // *************************************************************************
245 // \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\8fI\82í\82Á\82½
246 // *************************************************************************
247 procedure BoardItemWorkEnd(
248         inInstance      : DWORD                         // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
249 ); stdcall;
250 begin
251
252         if Assigned( OnWorkEnd ) then
253                 OnWorkEnd( TObject( inInstance ), wmRead );
254
255 end;
256
257 // *************************************************************************
258 // \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½
259 // *************************************************************************
260 procedure BoardItemEnumThread(
261         inInstance              : DWORD;
262         inCallBack              : TBoardItemEnumThreadCallBack;
263         inSubjectText   : PChar
264 ); stdcall;
265 var
266         board                                   : TBoard;
267         subject                         : TStringList;
268         i                                                       : Integer;
269         rec                                             : TSubjectRec;
270         isContinue              : Boolean;
271 begin
272
273         {$IFDEF DEBUG}
274         Writeln('ExternalBoardManager.BoardItemEnumThread');
275         {$ENDIF}
276         try
277                 board           := TBoard( inInstance );
278                 subject := TStringList.Create;
279                 try
280                         subject.Text := inSubjectText;
281
282                         for i := 0 to subject.Count - 1 do begin
283                                 rec                                             := GikoSys.DivideSubject( subject[i] );
284                                 rec.FFileName   := Trim(rec.FFileName);
285                                 if (rec.FTitle = '') and (rec.FCount = 0) then
286                                         Continue;
287
288                                 isContinue := inCallBack(
289                                         inInstance,
290                                         PChar( board.BoardPlugIn.FileName2ThreadURL( DWORD( board ), rec.FFileName ) ),
291                                         PChar( rec.FTitle ),
292                                         DWORD( rec.FCount ) );
293
294                                 if ( not isContinue ) then
295                                         Break;
296                         end;
297                 finally
298                         subject.Free;
299                 end;
300         except
301         end;
302
303 end;
304
305 exports
306         BoardItemGetLong,
307         BoardItemSetLong,
308         BoardItemGetDouble,
309         BoardItemSetDouble,
310         BoardItemGetItems,
311         BoardItemEnumThread,
312         BoardItemWork,
313         BoardItemWorkBegin,
314         BoardItemWorkEnd;
315
316 end.
317