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