X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=Favorite.pas;h=0e58ba29c2c864c05834c186a4cd5b2d995b2457;hb=refs%2Fheads%2FBb52;hp=f8c4751f2b00644b80841af37def121075fed582;hpb=a441db40f43b33bcfddef42ac976be0a4eb840ce;p=gikonavigoeson%2Fgikonavi.git
diff --git a/Favorite.pas b/Favorite.pas
index f8c4751..0e58ba2 100644
--- a/Favorite.pas
+++ b/Favorite.pas
@@ -4,42 +4,44 @@ interface
uses
Messages, SysUtils, Classes, Contnrs, ComCtrls, {HttpApp,} YofUtils,
- GikoSystem{, XMLIntf, XMLDoc}, GikoXMLDoc, BoardGroup, windows,
- MojuUtils;
+ GikoSystem{, XMLIntf, XMLDoc}, GikoXMLDoc, BoardGroup, windows;
{SAX, SAXHelpers, SAXComps, SAXKW;}
type
TFavoriteFolder = class
end;
- TFavoriteBoardItem = class
+ TFavoriteItem = class(TObject)
private
- FItem : TBoard;
FURL : string;
FTitle : string;
+ public
+ function GetItemTitle : string; virtual;abstract;
+ property URL : string read FURL write FURL; // Item ªæ¾Å«ÈÄà URL ÍíÉÛ³êé
+ property Title : string read FTitle write FTitle;
+ end;
+ TFavoriteBoardItem = class(TFavoriteItem)
+ private
+ FItem : TBoard;
function GetItem : TBoard;
public
constructor Create( inURL : string; inTitle : string = ''; inItem : TBoard = nil );
constructor CreateWithItem( inItem : TBoard );
- destructor Destory;
+ destructor Destory;
+ function GetItemTitle : string; override;
property Item : TBoard read GetItem write FItem;
- property URL : string read FURL write FURL; // Item ªæ¾Å«ÈÄà URL ÍíÉÛ³êé
- property Title : string read FTitle write FTitle;
end;
- TFavoriteThreadItem = class
+ TFavoriteThreadItem = class(TFavoriteItem)
private
FItem : TThreadItem;
- FURL : string;
- FTitle : string;
function GetItem : TThreadItem;
public
constructor Create( inURL : string; inTitle : string = ''; inItem : TThreadItem = nil );
constructor CreateWithItem( inItem : TThreadItem );
- destructor Destory;
+ destructor Destory;
+ function GetItemTitle : string; override;
property Item : TThreadItem read GetItem write FItem;
- property URL : string read FURL write FURL; // Item ªæ¾Å«ÈÄà URL ÍíÉÛ³êé
- property Title : string read FTitle write FTitle;
end;
TFavoriteDM = class(TDataModule)
@@ -48,7 +50,7 @@ type
{ Private é¾ }
FStack: TStack;
FTreeView: TTreeView;
-
+ FModified: boolean;
procedure ReadNode(Node: IXMLNode);
procedure AddSaveString(Node: TTreeNode; SaveList: TStringList);
// procedure AddSaveString(Node: TTreeNode; XMLNode: IXMLNode);
@@ -59,14 +61,15 @@ type
// procedure SAXCharacters(Sender: TObject; const PCh: SAXString);
public
{ Public é¾ }
- procedure Clear;
- function GetFavoriteFilePath() : String;
- function SaveFavoriteFile(FileName: String) : Boolean;
+ procedure Clear;
+ function GetFavoriteFilePath() : String;
+ function SaveFavoriteFile(FileName: String) : Boolean;
procedure SetFavTreeView(TreeView: TTreeView);
procedure ReadFavorite;
procedure WriteFavorite;
- procedure URLReplace(oldURLs: TStringList; newURLs: TStringList);
+ procedure URLReplace(oldURLs: TStringList; newURLs: TStringList);
property TreeView: TTreeView read FTreeView;
+ property Modified: boolean read FModified write FModified;
end;
var
@@ -76,7 +79,7 @@ const
implementation
-uses ExternalBoardManager, ExternalBoardPlugInMain;
+uses ExternalBoardManager, ExternalBoardPlugInMain, MojuUtils;
const
FAVORITE_ROOT_NAME = '¨CÉüè';
@@ -113,15 +116,30 @@ begin
FItem.Free;
inherited;
end;
+//! ۵ĢéÂÌ^CgðÔ·
+function TFavoriteBoardItem.GetItemTitle : string;
+begin
+ Result := '';
+ //êxàÂðJ¢Ä¢È¢Æ«iN®ÉLrlbgð¨CÉüèÆ©j
+ //ÌÆ«ÉFItemªnilÈÌÅ»ÌÆ«Í×ÁÆõ
+ if FItem = nil then begin
+ FItem := BBSsFindBoardFromURL(URL);
+ end;
+ if FItem <> nil then begin
+ try
+ if not FItem.IsThreadDatRead then begin
+ GikoSys.ReadSubjectFile(FItem);
+ end;
+ except
+ end;
+ Result := FItem.Title;
+ end;
+end;
function TFavoriteBoardItem.GetItem : TBoard;
var
protocol, host, path, document, port, bookmark : string;
- BBSID{, BBSKey} : string;
- tmpURL{, boardURL} : string;
-// category : TCategory;
- {i, bi: Integer;}
- {tmpThread: TThreadItem;}
- {tmpBoard: TBoard;}
+ BBSID : string;
+ tmpURL : string;
begin
if FItem = nil then begin
@@ -176,6 +194,17 @@ begin
FItem.Free;
inherited;
end;
+//! ۵ĢéXÌ^CgðÔ·
+function TFavoriteThreadItem.GetItemTitle : string;
+begin
+ Result := '';
+ if FItem = nil then begin
+ FItem := BBSsFindThreadFromURL(URL);
+ end;
+ if FItem <> nil then begin
+ Result := FItem.Title;
+ end;
+end;
function TFavoriteThreadItem.GetItem : TThreadItem;
var
@@ -259,7 +288,8 @@ begin
end;
TreeView.Items.Clear;
TreeView.Items.EndUpdate;
- //TreeView.Free;
+
+ FavoriteDM.Modified := true;
end;
procedure TFavoriteDM.SetFavTreeView(TreeView: TTreeView);
@@ -277,7 +307,7 @@ var
FavFolder: TFavoriteFolder;
LinkExists: Boolean;
begin
-
+ FavoriteDM.Modified := true;
FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
FavFolder := TFavoriteFolder.Create;
@@ -380,12 +410,12 @@ begin
board := BBSsFindBoardFromBBSID( Node.Attributes[ 'bbs' ] );
if board <> nil then
FavBoard := TFavoriteBoardItem.Create(
- board.URL, Node.Attributes[ 'title' ], board );
+ board.URL, MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), board );
end else begin
FavBoard := TFavoriteBoardItem.Create(
- Node.Attributes[ 'url' ], Node.Attributes[ 'title' ], nil );
+ Node.Attributes[ 'url' ], MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), nil );
end;
- CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavBoard);
+ CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavBoard);
CurrentNode.ImageIndex := 15;
CurrentNode.SelectedIndex := 15;
end else if Node.Attributes['favtype'] = 'thread' then begin
@@ -403,17 +433,17 @@ begin
board.BoardPlugIn,
board,
GikoSys.Get2chBoard2ThreadURL( board, ChangeFileExt( Node.Attributes[ 'thread' ], '' ) ) );
- threadItem.Title := Node.Attributes[ 'title' ];
+ threadItem.Title := UnSanitize(Node.Attributes[ 'title' ]);
board.Add( threadItem );
end;
FavThread := TFavoriteThreadItem.Create(
- threadItem.URL, Node.Attributes[ 'title' ], threadItem );
+ threadItem.URL, UnSanitize(Node.Attributes[ 'title' ]), threadItem );
threadItem.Free;
end else begin
FavThread := TFavoriteThreadItem.Create(
- Node.Attributes[ 'url' ], Node.Attributes[ 'title' ], nil );
+ Node.Attributes[ 'url' ], UnSanitize(Node.Attributes[ 'title' ]), nil );
end;
- CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavThread);
+ CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavThread);
CurrentNode.ImageIndex := 16;
CurrentNode.SelectedIndex := 16;
end;
@@ -449,6 +479,7 @@ var
SaveList: TStringList;
begin
+ FavoriteDM.Modified := true;
FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
if FileExists(FileName) then begin
tmpFileName := GikoSys.GetConfigDir + '~' + FAVORITE_FILE_NAME;
@@ -460,7 +491,10 @@ begin
try
SaveList.Add('');
SaveList.Add('');
- AddSaveString(TreeView.Items.GetFirstNode.getFirstChild, SaveList);
+ try
+ AddSaveString(TreeView.Items.GetFirstNode.getFirstChild, SaveList);
+ except
+ end;
SaveList.Add('');
SaveList.SaveToFile(FileName);
finally
@@ -524,12 +558,12 @@ begin
end else if TObject(data) is TFavoriteBoardItem then begin
FavBoard := TFavoriteBoardItem(data);
s := Format('',
- [HtmlEncode( FavBoard.URL ), HtmlEncode(Node.Text)]);
+ [HtmlEncode( FavBoard.URL ), HtmlEncode(MojuUtils.Sanitize(Node.Text))]);
SaveList.Add(s);
end else if TObject(data) is TFavoriteThreadItem then begin
FavThread := TFavoriteThreadItem(data);
s := Format('',
- [HtmlEncode( FavThread.URL ), HtmlEncode(Node.Text)]);
+ [HtmlEncode( FavThread.URL ), HtmlEncode(MojuUtils.Sanitize(Node.Text))]);
SaveList.Add(s);
end;
Node := Node.getNextSibling;