Enabled = False
ImageIndex = 27
Style = tbsDropDown
- OnClick = mnSaveLogClick
+ OnClick = mnSaveLogXMLClick
end
object ToolButton1: TToolButton
Left = 57
object PopupMenuSaveLog: TPopupMenu
Left = 304
Top = 56
+ object mnSaveLogXML: TMenuItem
+ Caption = '&XML'#24418#24335
+ Default = True
+ OnClick = mnSaveLogXMLClick
+ end
object mnSaveLog: TMenuItem
Caption = 'sstp.log'#24418#24335'(&S)'
- Default = True
OnClick = mnSaveLogClick
end
object mnSaveLogChannel: TMenuItem
Caption = #12473#12463#12522#12503#12488#12398#12415'(&N)'
OnClick = mnSaveLogScriptClick
end
- object mnSaveLogXML: TMenuItem
- Caption = '&XML'#24418#24335
- OnClick = mnSaveLogXMLClick
- end
end
object PopupMenuPreviewStyle: TPopupMenu
OnPopup = PopupMenuPreviewStylePopup
OnClick = mnCloseTabClick
end
end
+ object XMLDocument: TXMLDocument
+ Options = [doNodeAutoCreate, doNodeAutoIndent, doAttrNull, doAutoPrefix, doNamespaceDecl]
+ Left = 208
+ Top = 56
+ DOMVendorDesc = 'MSXML'
+ end
end
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin, StdCtrls, ExtCtrls, SsParser, BottleDef, Menus,
- Clipbrd, Logs, ShellAPI, Commctrl, DirectSstp, Contnrs;
+ Clipbrd, Logs, ShellAPI, Commctrl, DirectSstp, Contnrs, xmldom, XMLIntf,
+ msxmldom, XMLDoc;
type
TSaveLogType = (stLog, stLogWithChannels, stText, stXML);
PopupMenuTab: TPopupMenu;
mnCloseTab: TMenuItem;
tbtnFindBottle: TToolButton;
+ XMLDocument: TXMLDocument;
procedure tbtnClearClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure lvwLogChange(Sender: TObject; Item: TListItem;
procedure TfrmLog.mnSaveLogClick(Sender: TObject);
begin
- DoSaveLog(stLog, 'log', 1);
+ SaveDialog.InitialDir := ExtractFileDir(Application.ExeName);
+ SaveDialog.DefaultExt := 'log';
+ SaveDialog.FilterIndex := 1;
+ if SaveDialog.Execute then
+ SelectedBottleLog.SaveToSstpLog(SaveDialog.FileName, false);
end;
procedure TfrmLog.lvwLogColumnClick(Sender: TObject; Column: TListColumn);
procedure TfrmLog.mnSaveLogChannelClick(Sender: TObject);
begin
- DoSaveLog(stLogWithChannels, 'log', 1);
+ SaveDialog.InitialDir := ExtractFileDir(Application.ExeName);
+ SaveDialog.DefaultExt := 'log';
+ SaveDialog.FilterIndex := 1;
+ if SaveDialog.Execute then
+ SelectedBottleLog.SaveToSstpLog(SaveDialog.FileName, true);
end;
procedure TfrmLog.mnSaveLogScriptClick(Sender: TObject);
begin
- DoSaveLog(stText, 'txt', 2);
+ SaveDialog.InitialDir := ExtractFileDir(Application.ExeName);
+ SaveDialog.DefaultExt := 'txt';
+ SaveDialog.FilterIndex := 2;
+ if SaveDialog.Execute then
+ SelectedBottleLog.SaveToText(SaveDialog.FileName);
end;
procedure TfrmLog.mnSaveLogXMLClick(Sender: TObject);
begin
- DoSaveLog(stXML, 'xml', 3);
+ SaveDialog.InitialDir := ExtractFileDir(Application.ExeName);
+ SaveDialog.DefaultExt := 'xml';
+ SaveDialog.FilterIndex := 3;
+ if SaveDialog.Execute then
+ SelectedBottleLog.SaveToXmlFile(SaveDialog.FileName, XMLDocument);
end;
procedure TfrmLog.lvwLogData(Sender: TObject; Item: TListItem);
uses
Contnrs, Classes, SysUtils, Dialogs, Forms, HttpThread, BottleDef,
- DateUtils, IdURI;
+ DateUtils, IdURI, xmldom, XMLIntf,
+ msxmldom, XMLDoc;
type
property SelectedIndex: integer read FSelectedIndex write SetSelectedIndex;
procedure AddScriptLog(const Script, Channel, MID, Ghost: String);
procedure AddSystemLog(const MessageString: String);
+ procedure SaveToText(const FileName: String);
+ procedure SaveToSstpLog(const FileName: String;
+ const WithChannel: boolean = false);
+ procedure SaveToXmlFile(const FileName: String; XmlDocument: TXmlDocument);
end;
var
FHttpThread.Resume;
end;
+procedure TBottleLogList.SaveToSstpLog(const FileName: String;
+ const WithChannel: boolean = false);
+var i: integer;
+ Str: TStringList;
+ Item: TLogItem;
+ Date: String;
+const
+ DayStr: array[1..7] of String = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
+begin
+ Str := nil;
+ try
+ Str := TStringList.Create;
+ for i := 0 to Self.Count - 1 do begin
+ Item := Self.Items[i] as TLogItem;
+ if Item.LogType = ltBottle then begin
+ Date := FormatDateTime('yyyy/mm/dd hh:nn:ss ', Item.LogTime);
+ Date := Date + '(' + DayStr[DayOfWeek(Item.LogTime)] + ')';
+ if WithChannel then
+ Date := Date + ',' + Item.Channel +',SEND,' + Item.Script
+ else
+ Date := Date + ',0.0.0.0,SEND,' + Item.Script;
+ Str.Add(Date);
+ end;
+ end;
+ Str.SaveToFile(FileName);
+ finally
+ Str.Free;
+ end;
+end;
+
+procedure TBottleLogList.SaveToText(const FileName: String);
+var i: integer;
+ Str: TStringList;
+begin
+ Str := nil;
+ try
+ Str := TStringList.Create;
+ for i := 0 to Self.Count - 1 do
+ if (Self.Items[i] as TLogItem).LogType = ltBottle then
+ Str.Add((Self.Items[i] as TLogItem).Script);
+ Str.SaveToFile(FileName);
+ finally
+ Str.Free;
+ end;
+end;
+
+procedure TBottleLogList.SaveToXmlFile(const FileName: String;
+ XMLDocument: TXMLDocument);
+var i: integer;
+ ANode, BNode: IXMLNode;
+ Item: TLogItem;
+begin
+ with XMLDocument do begin
+ XML.LoadFromFile(ExtractFilePath(Application.ExeName)+'xbtl.xml');
+ Active := true;
+ DocumentElement.Attributes['saved'] := FormatDateTime('yy/mm/dd hh:nn:ss', Now);
+ DocumentElement.Attributes['generator'] := VersionString;
+ DocumentElement.Attributes['version'] := '1.0';
+ for i := 0 to Self.Count-1 do begin
+ Item := Self[i] as TLogItem;
+ if Item.LogType <> ltBottle then Continue;
+ ANode := DocumentElement.AddChild('message');
+ ANode.Attributes['mid'] := Item.MID;
+ BNode := ANode.AddChild('date');
+ BNode.Text := FormatDateTime('yy/mm/dd hh:nn:ss', Item.LogTime);
+ BNode := ANode.AddChild('channel');
+ BNode.Text := Item.Channel;
+ BNode := ANode.AddChild('script');
+ BNode.Text := Item.Script;
+ BNode := ANode.AddChild('votes');
+ BNode.Text := IntToStr(Item.Votes);
+ BNode := ANode.AddChild('agrees');
+ BNode.Text := IntToStr(Item.Agrees);
+ BNode := ANode.AddChild('ghost');
+ BNode.Text := Item.Ghost;
+ end;
+ end;
+ XMLDocument.XML.SaveToFile(FileName);
+end;
+
procedure TBottleLogList.SetOnLoaded(const Value: TNotifyEvent);
begin
FOnLoaded := Value;