OSDN Git Service

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