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; +//! •ÛŽ‚µ‚Ä‚¢‚锂̃^ƒCƒgƒ‹‚ð•Ô‚· +function TFavoriteBoardItem.GetItemTitle : string; +begin + Result := ''; + //ˆê“x‚à”‚ðŠJ‚¢‚Ä‚¢‚È‚¢‚Æ‚«i‹N“®Žž‚ɃLƒƒƒrƒlƒbƒg‚ð‚¨‹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ƒŒ‚̃^ƒCƒgƒ‹‚ð•Ô‚· +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;