Develop and Download Open Source Software

Browse CVS Repository

Annotation of /gikonavigoeson/gikonavi/Favorite.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.52 - (hide annotations) (download) (as text)
Wed Sep 19 15:00:38 2007 UTC (16 years, 7 months ago) by h677
Branch: MAIN
CVS Tags: v1_57_0_737, v1_57_0_735, v1_57_0_734, v1_57_0_733, v1_57_0_732, v1_57_0_739, v1_57_0_738, v1_57_1_744, v1_57_0_736, v1_57_2_749, v1_57_0_742, v1_57_0_743, v1_57_0_740, v1_57_0_741, v1_57_0_744
Branch point for: Bb57
Changes since 1.51: +8 -143 lines
File MIME type: text/x-pascal
初期化時に問題があったときに、ギコナビを終了するようにした。

1 hi_ 1.1 unit Favorite;
2    
3     interface
4    
5     uses
6 yoffy 1.2 Messages, SysUtils, Classes, Contnrs, ComCtrls, {HttpApp,} YofUtils,
7 h677 1.49 GikoSystem{, XMLIntf, XMLDoc}, GikoXMLDoc, BoardGroup, windows;
8 hi_ 1.1 {SAX, SAXHelpers, SAXComps, SAXKW;}
9    
10     type
11     TFavoriteFolder = class
12     end;
13    
14 h677 1.48 TFavoriteItem = class(TObject)
15 hi_ 1.1 private
16 yoffy 1.7 FURL : string;
17 yoffy 1.5 FTitle : string;
18 h677 1.48 public
19     function GetItemTitle : string; virtual;abstract;
20     property URL : string read FURL write FURL; // Item ?????転?長?鼎???足???? URL ???鱈???徹???????辿
21     property Title : string read FTitle write FTitle;
22     end;
23     TFavoriteBoardItem = class(TFavoriteItem)
24     private
25     FItem : TBoard;
26 yoffy 1.9 function GetItem : TBoard;
27 hi_ 1.1 public
28 yoffy 1.7 constructor Create( inURL : string; inTitle : string = ''; inItem : TBoard = nil );
29 yoffy 1.12 constructor CreateWithItem( inItem : TBoard );
30 h677 1.48 destructor Destory;
31     function GetItemTitle : string; override;
32 yoffy 1.9 property Item : TBoard read GetItem write FItem;
33 hi_ 1.1 end;
34    
35 h677 1.48 TFavoriteThreadItem = class(TFavoriteItem)
36 hi_ 1.1 private
37 yoffy 1.5 FItem : TThreadItem;
38 yoffy 1.9 function GetItem : TThreadItem;
39 hi_ 1.1 public
40 yoffy 1.7 constructor Create( inURL : string; inTitle : string = ''; inItem : TThreadItem = nil );
41 yoffy 1.12 constructor CreateWithItem( inItem : TThreadItem );
42 h677 1.48 destructor Destory;
43     function GetItemTitle : string; override;
44 yoffy 1.9 property Item : TThreadItem read GetItem write FItem;
45 hi_ 1.1 end;
46    
47     TFavoriteDM = class(TDataModule)
48     private
49     { Private ?辿?転 }
50 h677 1.52 FAbEnd: Boolean;
51 hi_ 1.1 FStack: TStack;
52     FTreeView: TTreeView;
53 h677 1.50 FModified: boolean;
54 hi_ 1.1 procedure ReadNode(Node: IXMLNode);
55 yoffy 1.2 procedure AddSaveString(Node: TTreeNode; SaveList: TStringList);
56 hi_ 1.1 public
57     { Public ?辿?転 }
58 h677 1.50 procedure Clear;
59     function GetFavoriteFilePath() : String;
60     function SaveFavoriteFile(FileName: String) : Boolean;
61 hi_ 1.1 procedure SetFavTreeView(TreeView: TTreeView);
62     procedure ReadFavorite;
63     procedure WriteFavorite;
64 h677 1.50 procedure URLReplace(oldURLs: TStringList; newURLs: TStringList);
65 hi_ 1.1 property TreeView: TTreeView read FTreeView;
66 h677 1.50 property Modified: boolean read FModified write FModified;
67 h677 1.52 property AbEnd: Boolean read FAbEnd write FAbEnd;
68 hi_ 1.1 end;
69    
70     var
71     FavoriteDM: TFavoriteDM;
72     const
73     FAVORITE_LINK_NAME = '?????N';
74    
75     implementation
76    
77 h677 1.49 uses ExternalBoardManager, ExternalBoardPlugInMain, MojuUtils;
78 yoffy 1.5
79 hi_ 1.1 const
80     FAVORITE_ROOT_NAME = '?即?C???端??';
81     FAVORITE_FILE_NAME = 'Favorite.xml';
82    
83     {$R *.dfm}
84    
85 yoffy 1.7 constructor TFavoriteBoardItem.Create(
86     inURL : string;
87     inTitle : string = '';
88     inItem : TBoard = nil
89     );
90     begin
91    
92     inherited Create;
93    
94     URL := inURL;
95     Title := inTitle;
96     Item := inItem;
97    
98     end;
99    
100 yoffy 1.12 constructor TFavoriteBoardItem.CreateWithItem(
101     inItem : TBoard
102     );
103     begin
104    
105     Create( inItem.URL, inItem.Title, inItem );
106    
107     end;
108 h677 1.26 destructor TFavoriteBoardItem.Destory;
109     begin
110     if FItem <> nil then
111 h677 1.41 FItem.Free;
112     inherited;
113 h677 1.26 end;
114 h677 1.48 //! ?徹???直?????辿?????^?C?g????????
115     function TFavoriteBoardItem.GetItemTitle : string;
116     begin
117     Result := '';
118     //???x???????J?????????????鼎?i?N?貼?????L???r?l?b?g???即?C???端???????j
119     //?????鼎??FItem??nil?????長?泥?????鼎????????????
120     if FItem = nil then begin
121     FItem := BBSsFindBoardFromURL(URL);
122     end;
123     if FItem <> nil then begin
124     try
125     if not FItem.IsThreadDatRead then begin
126     GikoSys.ReadSubjectFile(FItem);
127     end;
128     except
129     end;
130     Result := FItem.Title;
131     end;
132     end;
133 yoffy 1.9 function TFavoriteBoardItem.GetItem : TBoard;
134 yoffy 1.29 var
135     protocol, host, path, document, port, bookmark : string;
136 h677 1.48 BBSID : string;
137     tmpURL : string;
138 yoffy 1.9 begin
139    
140     if FItem = nil then begin
141     FItem := BBSsFindBoardFromURL( URL );
142 yoffy 1.16 if FItem = nil then begin
143 yoffy 1.29 tmpURL := URL;
144     GikoSys.ParseURI( tmpURL, protocol, host, path, document, port, bookmark );
145     if GikoSys.Is2chHost( host ) then begin
146 yoffy 1.32 BBSID := GikoSys.URLToID( tmpURL );
147 yoffy 1.29 FItem := BBSs[ 0 ].FindBBSID( BBSID );
148 yoffy 1.31 if FItem <> nil then
149     URL := FItem.URL;
150 yoffy 1.29 end;
151     {
152 yoffy 1.9 // ???????????A???????辿?J?e?S???????????長???直?足?徹?纏
153 yoffy 1.16 FItem := GikoSys.GetUnknownBoard( nil, URL );
154     FItem.Title := Title;
155 yoffy 1.29 }
156 yoffy 1.16 end;
157 yoffy 1.9 end;
158    
159 h677 1.41 Result := FItem;
160 yoffy 1.9
161     end;
162    
163 yoffy 1.7 constructor TFavoriteThreadItem.Create(
164     inURL : string;
165     inTitle : string = '';
166     inItem : TThreadItem = nil
167     );
168     begin
169    
170     inherited Create;
171 h677 1.41 URL := inURL;
172 yoffy 1.7
173     Title := inTitle;
174     Item := inItem;
175    
176     end;
177    
178 yoffy 1.12 constructor TFavoriteThreadItem.CreateWithItem(
179     inItem : TThreadItem
180     );
181     begin
182    
183     Create( inItem.URL, inItem.Title, inItem );
184    
185 h677 1.26 end;
186     destructor TFavoriteThreadItem.Destory;
187     begin
188     if FItem <> nil then
189     FItem.Free;
190     inherited;
191 yoffy 1.12 end;
192 h677 1.48 //! ?徹???直?????辿?X?????^?C?g????????
193     function TFavoriteThreadItem.GetItemTitle : string;
194     begin
195     Result := '';
196     if FItem = nil then begin
197     FItem := BBSsFindThreadFromURL(URL);
198     end;
199     if FItem <> nil then begin
200     Result := FItem.Title;
201     end;
202     end;
203 yoffy 1.12
204 yoffy 1.9 function TFavoriteThreadItem.GetItem : TThreadItem;
205     var
206 yoffy 1.17 board : TBoard;
207     boardURL : string;
208     browsableURL : string;
209 yoffy 1.29 protocol, host, path, document, port, bookmark : string;
210     BBSID, BBSKey : string;
211     tmpURL : string;
212 yoffy 1.9 begin
213    
214 yoffy 1.29 Result := nil;
215 yoffy 1.9 if FItem = nil then begin
216 yoffy 1.29 browsableURL := GikoSys.GetBrowsableThreadURL( URL );
217     boardURL := GikoSys.GetThreadURL2BoardURL( browsableURL );
218     board := BBSsFindBoardFromURL( boardURL );
219 yoffy 1.9
220 h677 1.19 if board = nil then begin
221 yoffy 1.29 tmpURL := URL;
222     GikoSys.ParseURI( tmpURL, protocol, host, path, document, port, bookmark );
223     if GikoSys.Is2chHost( host ) then begin
224     GikoSys.Parse2chURL( tmpURL, path, document, BBSID, BBSKey );
225     board := BBSs[ 0 ].FindBBSID( BBSID );
226     end;
227    
228     if board = nil then begin
229     Exit;
230     // ???????????A???????辿?J?e?S???????????長???直?足?徹?纏
231     //board := GikoSys.GetUnknownBoard( nil, boardURL )
232     end;
233     end;
234    
235     FItem := board.FindThreadFromURL( browsableURL );
236 yoffy 1.31
237     if FItem = nil then begin
238     tmpURL := URL;
239     GikoSys.ParseURI( tmpURL, protocol, host, path, document, port, bookmark );
240     if GikoSys.Is2chHost( host ) then begin
241     GikoSys.Parse2chURL( tmpURL, path, document, BBSID, BBSKey );
242     FItem := BBSs[ 0 ].FindThreadItem( BBSID, BBSKey + '.dat' );
243     if FItem <> nil then
244     URL := FItem.URL;
245     end;
246     end;
247 yoffy 1.9
248 yoffy 1.10 if FItem = nil then begin
249 h677 1.47 FItem := TThreadItem.Create( board.BoardPlugIn, board, browsableURL );
250 yoffy 1.9
251 yoffy 1.10 FItem.Title := Title;
252     board.Add( FItem );
253     end;
254 yoffy 1.9 end;
255    
256     Result := FItem;
257    
258 hi_ 1.1 end;
259    
260 h677 1.27 procedure TFavoriteDM.Clear;
261     var
262 yoffy 1.38 Node : TTreeNode;
263 h677 1.27 begin
264 yoffy 1.38 TreeView.Items.BeginUpdate;
265     Node := TreeView.Items.GetFirstNode;
266     while Node <> nil do begin
267     if TObject(Node.Data) <> nil then
268     TObject(Node.Data).Free;
269     Node := Node.GetNext;
270 hi_ 1.1 end;
271 yoffy 1.38 TreeView.Items.Clear;
272     TreeView.Items.EndUpdate;
273 h677 1.50
274     FavoriteDM.Modified := true;
275 hi_ 1.1 end;
276    
277     procedure TFavoriteDM.SetFavTreeView(TreeView: TTreeView);
278     begin
279     FTreeView := TreeView;
280     end;
281    
282     procedure TFavoriteDM.ReadFavorite;
283     var
284     FileName: string;
285     XMLDoc: IXMLDocument;
286     XMLNode: IXMLNode;
287     Node: TTreeNode;
288     i: Integer;
289     FavFolder: TFavoriteFolder;
290     LinkExists: Boolean;
291     begin
292 h677 1.52 FABend := False;
293    
294 h677 1.50 FavoriteDM.Modified := true;
295 hi_ 1.1 FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
296    
297     FavFolder := TFavoriteFolder.Create;
298 yoffy 1.45 Node := FTreeView.Items.AddChildObjectFirst(nil, FAVORITE_ROOT_NAME, FavFolder);
299 yoffy 1.2 Node.ImageIndex := 14;
300     Node.SelectedIndex := 14;
301 hi_ 1.1
302     if FileExists(FileName) then begin
303 yoffy 1.2 try
304 h677 1.23 XMLDoc := IXMLDocument.Create;
305     //XMLDoc := LoadXMLDocument(FileName);
306     LoadXMLDocument(FileName, XMLDoc);
307 yoffy 1.2 XMLNode := XMLDoc.DocumentElement;
308 hi_ 1.1
309 yoffy 1.2 FStack := TStack.Create;
310     try
311     FStack.Push(Node);
312     LinkExists := False;
313     if XMLNode.NodeName = 'favorite' then begin
314 yoffy 1.45 for i := XMLNode.ChildNodes.Count - 1 downto 0 do begin
315 yoffy 1.2 ReadNode(XMLNode.ChildNodes[i]);
316     if (XMLNode.ChildNodes[i].NodeName = 'folder') and
317     (XMLNode.ChildNodes[i].Attributes['title'] = FAVORITE_LINK_NAME) then begin
318     LinkExists := True;
319     end;
320 hi_ 1.1 end;
321     end;
322 yoffy 1.2 if not LinkExists then begin
323     FavFolder := TFavoriteFolder.Create;
324 yoffy 1.45 Node := FTreeView.Items.AddChildObjectFirst(Node, FAVORITE_LINK_NAME, FavFolder);
325 yoffy 1.2 Node.ImageIndex := 14;
326     Node.SelectedIndex := 14;
327     end;
328 h677 1.52
329 yoffy 1.2 finally
330     FStack.Free;
331 h677 1.23 XMLDoc.Free;
332 hi_ 1.1 end;
333 yoffy 1.2 except
334 h677 1.52 on e : Exception do begin
335     FABend := True;
336     end;
337 hi_ 1.1 end;
338     end;
339    
340 yoffy 1.2 {
341     FavFolder := TFavoriteFolder.Create;
342 yoffy 1.45 Node := FTreeView.Items.AddChildObjectFirst(nil, FAVORITE_ROOT_NAME, FavFolder);
343 hi_ 1.1 Node.ImageIndex := 12;
344     Node.SelectedIndex := 13;
345    
346     FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
347     if not FileExists(FileName) then
348     Exit;
349    
350     FavSAXHandler.OnStartDocument := SAXStartDocument;
351     FavSAXHandler.OnEndDocument := SAXEndDocument;
352     FavSAXHandler.OnStartElement := SAXStartElement;
353     FavSAXHandler.OnStartElement := SAXStartElement;
354     FavSAXHandler.OnEndElement := SAXEndElement;
355     FavSAXHandler.OnCharacters := SAXCharacters;
356    
357     FavSAXReader.Vendor := 'Keith Wood';
358     FavSAXReader.URL := FileName;
359     FavSAXReader.Parse;}
360     end;
361    
362     procedure TFavoriteDM.ReadNode(Node: IXMLNode);
363     var
364     i: Integer;
365    
366     ParentNode: TTreeNode;
367     CurrentNode: TTreeNode;
368     FavFolder: TFavoriteFolder;
369     FavBoard: TFavoriteBoardItem;
370     FavThread: TFavoriteThreadItem;
371 yoffy 1.7 board : TBoard;
372     threadItem : TThreadItem;
373 hi_ 1.1 begin
374     if Node.NodeName = 'folder' then begin
375     ParentNode := FStack.Peek;
376     if TObject(ParentNode.Data) is TFavoriteFolder then begin
377     FavFolder := TFavoriteFolder.Create;
378 yoffy 1.45 CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavFolder);
379 yoffy 1.2 CurrentNode.ImageIndex := 14;
380     CurrentNode.SelectedIndex := 14;
381 hi_ 1.1 FStack.Push(CurrentNode);
382     end;
383 yoffy 1.45 for i := Node.ChildNodes.Count - 1 downto 0 do begin
384 hi_ 1.1 ReadNode(Node.ChildNodes[i]);
385     end;
386 yoffy 1.44 if TObject(ParentNode.Data) is TFavoriteFolder then
387     CurrentNode.Expanded := Node.Attributes[ 'expanded' ] = 'true';
388 hi_ 1.1 if FStack.Count <> 0 then
389     FStack.Pop;
390     end else if Node.NodeName = 'favitem' then begin
391 yoffy 1.14 try
392     ParentNode := FStack.Peek;
393     if TObject(ParentNode.Data) is TFavoriteFolder then begin
394     if Node.Attributes['favtype'] = 'board' then begin
395 yoffy 1.15 FavBoard := nil;
396 yoffy 1.14 // ???貼???即?C???端???????????鼎??????
397     if Length( Node.Attributes[ 'bbs' ] ) > 0 then begin
398     board := BBSsFindBoardFromBBSID( Node.Attributes[ 'bbs' ] );
399     if board <> nil then
400     FavBoard := TFavoriteBoardItem.Create(
401 h677 1.51 board.URL, MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), board );
402 yoffy 1.14 end else begin
403     FavBoard := TFavoriteBoardItem.Create(
404 h677 1.51 Node.Attributes[ 'url' ], MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), nil );
405 yoffy 1.14 end;
406 h677 1.51 CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavBoard);
407 yoffy 1.14 CurrentNode.ImageIndex := 15;
408     CurrentNode.SelectedIndex := 15;
409     end else if Node.Attributes['favtype'] = 'thread' then begin
410     // ???貼???即?C???端???????????鼎??????
411     if Length( Node.Attributes[ 'bbs' ] ) > 0 then begin
412     board := BBSsFindBoardFromBBSID( Node.Attributes[ 'bbs' ] );
413     if board = nil then
414     Exit;
415    
416     if not board.IsThreadDatRead then
417     GikoSys.ReadSubjectFile( board );
418 yoffy 1.30 threadItem := board.FindThreadFromFileName( Node.Attributes[ 'thread' ] );
419 yoffy 1.14 if threadItem = nil then begin
420     threadItem := TThreadItem.Create(
421     board.BoardPlugIn,
422 h677 1.47 board,
423 yoffy 1.14 GikoSys.Get2chBoard2ThreadURL( board, ChangeFileExt( Node.Attributes[ 'thread' ], '' ) ) );
424 h677 1.51 threadItem.Title := UnSanitize(Node.Attributes[ 'title' ]);
425 yoffy 1.14 board.Add( threadItem );
426     end;
427     FavThread := TFavoriteThreadItem.Create(
428 h677 1.51 threadItem.URL, UnSanitize(Node.Attributes[ 'title' ]), threadItem );
429 h677 1.23 threadItem.Free;
430 yoffy 1.14 end else begin
431     FavThread := TFavoriteThreadItem.Create(
432 h677 1.51 Node.Attributes[ 'url' ], UnSanitize(Node.Attributes[ 'title' ]), nil );
433 yoffy 1.7 end;
434 h677 1.51 CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavThread);
435 yoffy 1.14 CurrentNode.ImageIndex := 16;
436     CurrentNode.SelectedIndex := 16;
437 yoffy 1.7 end;
438 hi_ 1.1 end;
439 yoffy 1.14 except
440     // ?????A?C?e???長?但?????N?鼎?????添???A?C?e?????e?甜???^?????足???????長
441 hi_ 1.1 end;
442     end;
443     end;
444    
445     procedure TFavoriteDM.WriteFavorite;
446 yoffy 1.2 var
447 h677 1.42 FileName, tmpFileName: string;
448 hi_ 1.1 SaveList: TStringList;
449 h677 1.42
450 hi_ 1.1 begin
451 h677 1.50 FavoriteDM.Modified := true;
452 hi_ 1.1 FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
453 h677 1.42 if FileExists(FileName) then begin
454     tmpFileName := GikoSys.GetConfigDir + '~' + FAVORITE_FILE_NAME;
455     if FileExists(tmpFileName) then
456     SysUtils.DeleteFile(tmpFileName); //SysUtils.?????纏??????WinAPI???????長?鼎???????長
457     RenameFile(FileName, tmpFileName);
458     end;
459 hi_ 1.1 SaveList := TStringList.Create;
460     try
461     SaveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
462     SaveList.Add('<favorite>');
463 h677 1.50 try
464     AddSaveString(TreeView.Items.GetFirstNode.getFirstChild, SaveList);
465     except
466     end;
467 hi_ 1.1 SaveList.Add('</favorite>');
468     SaveList.SaveToFile(FileName);
469     finally
470     SaveList.Free;
471 yoffy 1.2 end;
472 hi_ 1.1 end;
473    
474 yoffy 1.2 procedure TFavoriteDM.AddSaveString(Node: TTreeNode; SaveList: TStringList);
475 hi_ 1.1 var
476     s: string;
477     FavBoard: TFavoriteBoardItem;
478     FavThread: TFavoriteThreadItem;
479 yoffy 1.37 data : Pointer;
480 hi_ 1.1 begin
481 yoffy 1.37 while Node <> nil do begin
482     data := Node.Data;
483     if TObject(data) is TFavoriteFolder then begin
484     if Node.Expanded then
485     s := Format('<folder title="%s" expanded="true">', [HtmlEncode(Node.Text)])
486 yoffy 1.7 else
487 yoffy 1.37 s := Format('<folder title="%s" expanded="false">', [HtmlEncode(Node.Text)]);
488 hi_ 1.1 SaveList.Add(s);
489 yoffy 1.37 AddSaveString(Node.getFirstChild, SaveList);
490 hi_ 1.1 SaveList.Add('</folder>');
491 yoffy 1.37 end else if TObject(data) is TFavoriteBoardItem then begin
492     FavBoard := TFavoriteBoardItem(data);
493 yoffy 1.5 s := Format('<favitem type="2ch" favtype="board" url="%s" title="%s"/>',
494 h677 1.51 [HtmlEncode( FavBoard.URL ), HtmlEncode(MojuUtils.Sanitize(Node.Text))]);
495 hi_ 1.1 SaveList.Add(s);
496 yoffy 1.37 end else if TObject(data) is TFavoriteThreadItem then begin
497     FavThread := TFavoriteThreadItem(data);
498 yoffy 1.5 s := Format('<favitem type="2ch" favtype="thread" url="%s" title="%s"/>',
499 h677 1.51 [HtmlEncode( FavThread.URL ), HtmlEncode(MojuUtils.Sanitize(Node.Text))]);
500 hi_ 1.1 SaveList.Add(s);
501     end;
502 yoffy 1.37 Node := Node.getNextSibling;
503 hi_ 1.1 end;
504 yoffy 1.2 end;
505 hi_ 1.1
506 h677 1.4 function TFavoriteDM.SaveFavoriteFile(FileName: String) : Boolean;
507     var
508     FavoriteFilePath: string;
509 yoffy 1.7 tempStringList: TStringList;
510 h677 1.4 begin
511 h677 1.36 WriteFavorite;
512 h677 1.4 FavoriteFilePath := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
513    
514     if FileExists( FavoriteFilePath ) then begin
515 yoffy 1.7 tempStringList := TStringList.Create;
516 h677 1.4 try
517 yoffy 1.7 tempStringList.LoadFromFile( FavoriteFilePath );
518     tempStringList.SaveToFile( FileName );
519 h677 1.4 finally
520 yoffy 1.7 tempStringList.Free;
521 h677 1.4 end;
522 yoffy 1.7 Result := true;
523 h677 1.4 end else begin
524 yoffy 1.7 Result := false;
525 h677 1.21 end;
526     end;
527    
528     procedure TFavoriteDM.URLReplace(oldURLs: TStringList; newURLs: TStringList);
529     var
530 yoffy 1.39 i : Integer;
531 yoffy 1.34 tmpURL: string;
532 h677 1.21 oldHost: string;
533     oldBoardName: string;
534     newHost: string;
535     newBoardName: string;
536 yoffy 1.34 tempString: string;
537     favBoard : TFavoriteBoardItem;
538     favThread : TFavoriteThreadItem;
539     favorites : TTreeNodes;
540 yoffy 1.39 Node : TTreeNode;
541 h677 1.21 begin
542    
543 yoffy 1.34 // ???|?転?纏??thread???泥???添??URL???`?F?b?N?直?????巽?但?????????鼎?叩???纏?????B
544     favorites := FavoriteDM.FTreeView.Items;
545     for i := 0 to oldURLs.Count - 1 do begin
546 h677 1.21 try
547 yoffy 1.34 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
548     oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
549     oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
550     tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
551     newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
552     newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
553 h677 1.33
554 yoffy 1.39 Node := favorites.GetFirstNode.getFirstChild;
555     while Node <> nil do begin
556 yoffy 1.34 try
557 yoffy 1.39 if TObject( Node.Data ) is TFavoriteBoardItem then begin
558     favBoard := TFavoriteBoardItem( Node.Data );
559 yoffy 1.34 if favBoard = nil then continue;
560     tempString := favBoard.URL;
561     if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
562     tempString := StringReplace(tempString, oldHost, newHost,[]);
563     favBoard.URL := tempString;
564     end;
565 yoffy 1.39 end else if TObject( Node.Data ) is TFavoriteThreadItem then begin
566     favThread := TFavoriteThreadItem( Node.Data );
567 yoffy 1.34 if favThread = nil then continue;
568     tempString := favThread.URL;
569     if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
570     tempString := StringReplace(tempString, oldHost, newHost,[]);
571     favThread.URL := tempString;
572 h677 1.33 end;
573     end;
574 yoffy 1.34 except
575     end;
576 yoffy 1.39 Node := Node.GetNext;
577 yoffy 1.34 end;
578     except
579 h677 1.21 end;
580 yoffy 1.7 end;
581 yoffy 1.34
582 h677 1.4 end;
583    
584     function TFavoriteDM.GetFavoriteFilePath() : String;
585     begin
586     Result := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
587     end;
588    
589 hi_ 1.1 end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26