OSDN Git Service

File save logic changed, XML file save modified
authornaru <bottle@mikage.to>
Wed, 4 Dec 2002 12:09:05 +0000 (12:09 +0000)
committernaru <bottle@mikage.to>
Wed, 4 Dec 2002 12:09:05 +0000 (12:09 +0000)
bottleclient/LogForm.dfm
bottleclient/LogForm.pas
bottleclient/Logs.pas

index 3374d33..87df021 100755 (executable)
@@ -44,7 +44,7 @@ object frmLog: TfrmLog
       Enabled = False
       ImageIndex = 27
       Style = tbsDropDown
-      OnClick = mnSaveLogClick
+      OnClick = mnSaveLogXMLClick
     end
     object ToolButton1: TToolButton
       Left = 57
@@ -268,9 +268,13 @@ object frmLog: TfrmLog
   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
@@ -281,10 +285,6 @@ object frmLog: TfrmLog
       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
@@ -313,4 +313,10 @@ object frmLog: TfrmLog
       OnClick = mnCloseTabClick
     end
   end
+  object XMLDocument: TXMLDocument
+    Options = [doNodeAutoCreate, doNodeAutoIndent, doAttrNull, doAutoPrefix, doNamespaceDecl]
+    Left = 208
+    Top = 56
+    DOMVendorDesc = 'MSXML'
+  end
 end
index 3e2a0c1..594388a 100755 (executable)
@@ -5,7 +5,8 @@ interface
 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);
@@ -49,6 +50,7 @@ type
     PopupMenuTab: TPopupMenu;
     mnCloseTab: TMenuItem;
     tbtnFindBottle: TToolButton;
+    XMLDocument: TXMLDocument;
     procedure tbtnClearClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure lvwLogChange(Sender: TObject; Item: TListItem;
@@ -400,7 +402,11 @@ end;
 
 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);
@@ -531,17 +537,29 @@ end;
 
 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);
index 1f40b28..59968bd 100755 (executable)
@@ -4,7 +4,8 @@ interface
 
 uses
   Contnrs, Classes, SysUtils, Dialogs, Forms, HttpThread, BottleDef,
-  DateUtils, IdURI;
+  DateUtils, IdURI, xmldom, XMLIntf,
+  msxmldom, XMLDoc;
 
 type
 
@@ -79,6 +80,10 @@ 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
@@ -342,6 +347,86 @@ begin
   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;