OSDN Git Service

・板一覧更新の処理メッセージを追加
[gikonavigoeson/gikonavi.git] / AddressHistory.pas
1 unit AddressHistory;
2
3 interface
4
5 uses
6         SysUtils, Classes, {SAX, SAXHelpers, SAXComps, SAXKW,}
7         GikoSystem, {XMLIntf, XMLDoc}{, HttpApp} GikoXMLDoc, YofUtils;
8
9 type
10         TAddressHistoryDM = class(TDataModule)
11         private
12                 { Private \90é\8c¾ }
13                 FReadCount: Integer;
14
15 //              procedure SAXStartDocument(Sender: TObject);
16 //              procedure SAXEndDocument(Sender: TObject);
17 //              procedure SAXStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; const Atts: IAttributes);
18 //              procedure SAXEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
19 //              procedure SAXCharacters(Sender: TObject; const PCh: SAXString);
20         public
21                 { Public \90é\8c¾ }
22                 procedure ReadHistory(sl: TStrings; ReadCount: Integer);
23                 procedure WriteHistory(sl: TStrings; WriteCount: Integer);
24         end;
25
26 var
27         AddressHistoryDM: TAddressHistoryDM;
28
29 implementation
30
31 const
32         ADDRESS_HISTORY_FILE_NAME = 'AddressHistory.xml';
33
34 {$R *.dfm}
35
36 procedure TAddressHistoryDM.ReadHistory(sl: TStrings; ReadCount: Integer);
37 var
38         FileName: string;
39         XMLDoc: IXMLDocument;
40         XMLNode: IXMLNode;
41         HistoryNode: IXMLNode;
42         i: Integer;
43         s: string;
44 begin
45
46         sl.Clear;
47         FReadCount := ReadCount;
48
49         FileName := GikoSys.GetConfigDir + ADDRESS_HISTORY_FILE_NAME;
50
51         if FileExists(FileName) then begin
52                 try
53             XMLDoc := IXMLDocument.Create;
54                         //XMLDoc := LoadXMLDocument(FileName);
55             LoadXMLDocument(FileName, XMLDoc);
56       try
57         XMLNode := XMLDoc.DocumentElement;
58
59         if XMLNode.NodeName = 'address' then begin
60           for i := 0 to XMLNode.ChildNodes.Count - 1 do begin
61             HistoryNode := XMLNode.ChildNodes[i];
62             if HistoryNode.NodeName = 'history' then begin
63               if FReadCount >= sl.Count then begin
64                 s := Trim(HistoryNode.Attributes['url']);
65                 if s <> '' then
66                   sl.Add(s);
67                   //sl.Add(HttpDecode(s));
68               end;
69             end;
70           end;
71         end;
72       finally
73         XMLDoc.Free;
74       end;
75                 except
76                 end;
77         end;
78
79 //      AddressSAXHandler.OnStartDocument := SAXStartDocument;
80 //      AddressSAXHandler.OnEndDocument := SAXEndDocument;
81 //      AddressSAXHandler.OnStartElement := SAXStartElement;
82 //      AddressSAXHandler.OnStartElement := SAXStartElement;
83 //      AddressSAXHandler.OnEndElement := SAXEndElement;
84 //      AddressSAXHandler.OnCharacters := SAXCharacters;
85
86 //      AddressSAXReader.Vendor := 'Keith Wood';
87 //      AddressSAXReader.URL := FileName;
88 //      AddressSAXReader.Parse;
89 end;
90
91 procedure TAddressHistoryDM.WriteHistory(sl: TStrings; WriteCount: Integer);
92 var
93         FileName: string;
94         SaveList: TStringList;
95         i: Integer;
96         Count: Integer;
97 {
98         XMLDoc: IXMLDocument;
99         XMLNode: IXMLNode;
100         HistoryNode: IXMLNode;
101 }
102 begin
103 {
104         XMLDoc :=       NewXMLDocument;
105         XMLDoc.Encoding := 'Shift_JIS';
106         XMLDoc.StandAlone := 'yes';
107         XMLNode := XMLDoc.AddChild('address');
108
109         FileName := GikoSys.GetConfigDir + ADDRESS_HISTORY_FILE_NAME;
110         if sl.Count > WriteCount then
111                 Count := WriteCount
112         else
113                 Count := sl.Count;
114
115         for i := 0 to Count - 1 do begin
116                 HistoryNode := XMLNode.AddChild('history');
117                 HistoryNode.Attributes['url'] := Trim(sl[i]);
118         end;
119         XMLDoc.SaveToFile(FileName);
120 }
121         FileName := GikoSys.GetConfigDir + ADDRESS_HISTORY_FILE_NAME;
122         SaveList := TStringList.Create;
123         try
124                 if sl.Count > WriteCount then
125                         Count := WriteCount
126                 else
127                         Count := sl.Count;
128                 SaveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
129                 SaveList.Add('<address>');
130                 for i := 0 to Count - 1 do begin
131                         SaveList.Add('<history url="' + HtmlEncode(Trim(sl[i])) + '"/>');
132                 end;
133                 SaveList.Add('</address>');
134                 SaveList.SaveToFile(FileName);
135         finally
136                 SaveList.Free;
137         end;
138 end;
139
140 {procedure TAddressHistoryDM.SAXStartDocument(Sender: TObject);
141 begin
142 //
143 end;
144
145 procedure TAddressHistoryDM.SAXEndDocument(Sender: TObject);
146 begin
147 //
148 end;
149
150 procedure TAddressHistoryDM.SAXStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString;
151         const Atts: IAttributes);
152 var
153         s: string;
154 begin
155         if QName = 'history' then begin
156                 if FReadCount >= FList.Count then begin
157                         s := Atts.getValue('url');
158                         if Trim(s) <> '' then
159                                 FList.Add(s);
160                 end;
161         end;
162 end;
163
164 procedure TAddressHistoryDM.SAXEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
165 begin
166 //
167 end;
168
169 procedure TAddressHistoryDM.SAXCharacters(Sender: TObject; const PCh: SAXString);
170 begin
171 //
172 end;
173 }
174 end.