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.26 - (hide annotations) (download) (as text)
Tue Mar 30 14:14:53 2004 UTC (20 years ago) by h677
Branch: MAIN
Changes since 1.25: +14 -1 lines
File MIME type: text/x-pascal
ClearHistoryメソッドを復活させるために、明示的にDestoryを作ってみた

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

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