end;
TFavoriteDM = class(TDataModule)
- procedure DataModuleDestroy(Sender: TObject);
private
{ Private \90é\8c¾ }
- FStack: TStack;
+ FAbEnd: Boolean;
FTreeView: TTreeView;
FModified: boolean;
- procedure ReadNode(Node: IXMLNode);
+ procedure ReadNode(Node: IXMLNode; Stack: TStack; TreeView: TTreeView);
procedure AddSaveString(Node: TTreeNode; SaveList: TStringList);
-// procedure AddSaveString(Node: TTreeNode; XMLNode: IXMLNode);
-// procedure SAXStartDocument(Sender: TObject);
-// procedure SAXEndDocument(Sender: TObject);
-// procedure SAXStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; const Atts: IAttributes);
-// procedure SAXEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
-// procedure SAXCharacters(Sender: TObject; const PCh: SAXString);
public
{ Public \90é\8c¾ }
procedure Clear;
procedure URLReplace(oldURLs: TStringList; newURLs: TStringList);
property TreeView: TTreeView read FTreeView;
property Modified: boolean read FModified write FModified;
+ property AbEnd: Boolean read FAbEnd write FAbEnd;
end;
var
end;
-procedure TFavoriteDM.DataModuleDestroy(Sender: TObject);
-//var
-// i: Integer;
-begin
-{ TreeView.Items.BeginUpdate;
- for i := TreeView.Items.Count - 1 downto 0 do begin
- // if TObject(TreeView.Items[i].Data) <> nil then
- // TObject(TreeView.Items[i].Data).Free;
- end;
- TreeView.Items.Clear;
- TreeView.Items.EndUpdate;
-} //TreeView.Free;
-end;
procedure TFavoriteDM.Clear;
var
Node : TTreeNode;
i: Integer;
FavFolder: TFavoriteFolder;
LinkExists: Boolean;
+ Stack: TStack;
begin
+ FABend := False;
+
FavoriteDM.Modified := true;
FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
LoadXMLDocument(FileName, XMLDoc);
XMLNode := XMLDoc.DocumentElement;
- FStack := TStack.Create;
+ Stack := TStack.Create;
try
- FStack.Push(Node);
+ Stack.Push(Node);
LinkExists := False;
if XMLNode.NodeName = 'favorite' then begin
for i := XMLNode.ChildNodes.Count - 1 downto 0 do begin
- ReadNode(XMLNode.ChildNodes[i]);
+ ReadNode(XMLNode.ChildNodes[i], Stack, FTreeView);
if (XMLNode.ChildNodes[i].NodeName = 'folder') and
(XMLNode.ChildNodes[i].Attributes['title'] = FAVORITE_LINK_NAME) then begin
LinkExists := True;
Node.ImageIndex := 14;
Node.SelectedIndex := 14;
end;
+
finally
- FStack.Free;
+ Stack.Free;
XMLDoc.Free;
end;
except
+ on e : Exception do begin
+ FABend := True;
+ end;
end;
end;
-{
- FavFolder := TFavoriteFolder.Create;
- Node := FTreeView.Items.AddChildObjectFirst(nil, FAVORITE_ROOT_NAME, FavFolder);
- Node.ImageIndex := 12;
- Node.SelectedIndex := 13;
-
- FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
- if not FileExists(FileName) then
- Exit;
-
- FavSAXHandler.OnStartDocument := SAXStartDocument;
- FavSAXHandler.OnEndDocument := SAXEndDocument;
- FavSAXHandler.OnStartElement := SAXStartElement;
- FavSAXHandler.OnStartElement := SAXStartElement;
- FavSAXHandler.OnEndElement := SAXEndElement;
- FavSAXHandler.OnCharacters := SAXCharacters;
-
- FavSAXReader.Vendor := 'Keith Wood';
- FavSAXReader.URL := FileName;
- FavSAXReader.Parse;}
end;
-procedure TFavoriteDM.ReadNode(Node: IXMLNode);
+procedure TFavoriteDM.ReadNode(Node: IXMLNode; Stack: TStack; TreeView: TTreeView);
var
i: Integer;
threadItem : TThreadItem;
begin
if Node.NodeName = 'folder' then begin
- ParentNode := FStack.Peek;
+ CurrentNode := nil;
+ ParentNode := Stack.Peek;
if TObject(ParentNode.Data) is TFavoriteFolder then begin
FavFolder := TFavoriteFolder.Create;
- CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavFolder);
+ CurrentNode := TreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavFolder);
CurrentNode.ImageIndex := 14;
CurrentNode.SelectedIndex := 14;
- FStack.Push(CurrentNode);
+ Stack.Push(CurrentNode);
end;
for i := Node.ChildNodes.Count - 1 downto 0 do begin
- ReadNode(Node.ChildNodes[i]);
+ ReadNode(Node.ChildNodes[i], Stack, TreeView);
end;
- if TObject(ParentNode.Data) is TFavoriteFolder then
+ if CurrentNode <> nil then
CurrentNode.Expanded := Node.Attributes[ 'expanded' ] = 'true';
- if FStack.Count <> 0 then
- FStack.Pop;
+ if Stack.Count <> 0 then
+ Stack.Pop;
end else if Node.NodeName = 'favitem' then begin
try
- ParentNode := FStack.Peek;
+ ParentNode := Stack.Peek;
if TObject(ParentNode.Data) is TFavoriteFolder then begin
if Node.Attributes['favtype'] = 'board' then begin
FavBoard := nil;
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 := TreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavBoard);
CurrentNode.ImageIndex := 15;
CurrentNode.SelectedIndex := 15;
end else if Node.Attributes['favtype'] = 'thread' then 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 := TreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavThread);
CurrentNode.ImageIndex := 16;
CurrentNode.SelectedIndex := 16;
end;
end;
procedure TFavoriteDM.WriteFavorite;
-{
-var
- FileName: string;
-// SaveList: TStringList;
-// i: Integer;
-// Count: Integer;
-
- XMLDoc: IXMLDocument;
- XMLNode: IXMLNode;
-// FavoNode: IXMLNode;
-begin
- XMLDoc := NewXMLDocument;
- XMLDoc.Encoding := 'Shift_JIS';
- XMLDoc.StandAlone := 'yes';
- XMLNode := XMLDoc.AddChild('favorite');
- FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
- AddSaveString(TreeView.Items.GetFirstNode, XMLNode);
- XMLDoc.SaveToFile(FileName);
-}
var
FileName, tmpFileName: string;
SaveList: TStringList;
end;
end;
-{
-procedure TFavoriteDM.AddSaveString(Node: TTreeNode; XMLNode: IXMLNode);
-var
- i: Integer;
-// s: string;
- FavBoard: TFavoriteBoardItem;
- FavThread: TFavoriteThreadItem;
- FavNode: IXMLNode;
-begin
- for i := 0 to Node.Count - 1 do begin
- if TObject(Node.Item[i].Data) is TFavoriteFolder then begin
- FavNode := XMLNode.AddChild('folder');
- FavNode.Attributes['title'] := Node.Item[i].Text;
- AddSaveString(Node.Item[i], FavNode);
- end else if TObject(Node.Item[i].Data) is TFavoriteBoardItem then begin
- FavBoard := TFavoriteBoardItem(Node.Item[i].Data);
- FavNode := XMLNode.AddChild('favitem');
- FavNode.Attributes['type'] := '2ch';
- FavNode.Attributes['favtype'] := 'board';
- FavNode.Attributes['bbs'] := FavBoard.BBSID;
- FavNode.Attributes['title'] := Node.Item[i].Text;
- FavNode.Attributes['boardname'] := FavBoard.BoardName;
- end else if TObject(Node.Item[i].Data) is TFavoriteThreadItem then begin
- FavThread := TFavoriteThreadItem(Node.Item[i].Data);
- FavNode := XMLNode.AddChild('favitem');
- FavNode.Attributes['type'] := '2ch';
- FavNode.Attributes['favtype'] := 'thread';
- FavNode.Attributes['bbs'] := FavThread.BBSID;
- FavNode.Attributes['thread'] := FavThread.ThreadID;
- FavNode.Attributes['title'] := Node.Item[i].Text;
- FavNode.Attributes['threadname'] := FavThread.ThreadName;
- end;
- end;
-end;
-}
-
procedure TFavoriteDM.AddSaveString(Node: TTreeNode; SaveList: TStringList);
var
s: string;
end else if TObject(data) is TFavoriteBoardItem then begin
FavBoard := TFavoriteBoardItem(data);
s := Format('<favitem type="2ch" favtype="board" url="%s" title="%s"/>',
- [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('<favitem type="2ch" favtype="thread" url="%s" title="%s"/>',
- [HtmlEncode( FavThread.URL ), HtmlEncode(Node.Text)]);
+ [HtmlEncode( FavThread.URL ), HtmlEncode(MojuUtils.Sanitize(Node.Text))]);
SaveList.Add(s);
end;
Node := Node.getNextSibling;
end;
end;
-{
-procedure TFavoriteDM.SAXStartDocument(Sender: TObject);
-begin
- FStack := TStack.Create;
- FStack.Push(FTreeView.Items.GetFirstNode);
-end;
-
-procedure TFavoriteDM.SAXEndDocument(Sender: TObject);
-begin
- FStack.Free;
-end;
-
-procedure TFavoriteDM.SAXStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString;
- const Atts: IAttributes);
-var
- FavType: string;
- ParentNode: TTreeNode;
- CurrentNode: TTreeNode;
- FavFolder: TFavoriteFolder;
- FavBoard: TFavoriteBoardItem;
- FavThread: TFavoriteThreadItem;
-begin
- if QName = 'folder' then begin
- ParentNode := FStack.Peek;
- if TObject(ParentNode.Data) is TFavoriteFolder then begin
- FavFolder := TFavoriteFolder.Create;
- CurrentNode := FTreeView.Items.AddChildObject(ParentNode, Atts.getValue('title'), FavFolder);
- CurrentNode.ImageIndex := 12;
- CurrentNode.SelectedIndex := 13;
- FStack.Push(CurrentNode);
- end;
- end else if QName = 'favitem' then begin
- ParentNode := FStack.Peek;
- if TObject(ParentNode.Data) is TFavoriteFolder then begin
- FavType := Atts.getValue('favtype');
- if FavType = 'board' then begin
- FavBoard := TFavoriteBoardItem.Create;
- FavBoard.BBSID := Atts.getValue('bbs');
- FavBoard.BoardName := Atts.getValue('boardname');
- CurrentNode := FTreeView.Items.AddChildObject(ParentNode, Atts.getValue('title'), FavBoard);
- CurrentNode.ImageIndex := 14;
- CurrentNode.SelectedIndex := 15;
- end else if FavType = 'thread' then begin
- FavThread := TFavoriteThreadItem.Create;
- FavThread.BBSID := Atts.getValue('bbs');
- FavThread.ThreadID := Atts.getValue('thread');
- FavThread.ThreadName := Atts.getValue('threadname');
- CurrentNode := FTreeView.Items.AddChildObject(ParentNode, Atts.getValue('title'), FavThread);
- CurrentNode.ImageIndex := 16;
- CurrentNode.SelectedIndex := 17;
- end;
- end;
- end;
-end;
-
-procedure TFavoriteDM.SAXEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
-begin
- if QName = 'folder' then begin
- if FStack.Count <> 0 then
- FStack.Pop;
- end;
-end;
-
-procedure TFavoriteDM.SAXCharacters(Sender: TObject; const PCh: SAXString);
-begin
-//
-end;
-}
function TFavoriteDM.SaveFavoriteFile(FileName: String) : Boolean;
var
FavoriteFilePath: string;