wasDAVClient – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Linq;
5 using System.Net;
6 using System.Xml;
7 using wasDAVClient.Model;
8  
9 namespace wasDAVClient.Helpers
10 {
11 /// <summary>
12 /// Represents the parser for response's results.
13 /// </summary>
14 internal static class ResponseParser
15 {
16 /// <summary>
17 /// Parses the disk item.
18 /// </summary>
19 /// <param name="stream">The response text.</param>
20 /// <returns>The parsed item.</returns>
21 public static Item ParseItem(Stream stream)
22 {
23 return ParseItems(stream).FirstOrDefault();
24 }
25  
26 internal static XmlReaderSettings XmlReaderSettings = new XmlReaderSettings
27 {
28 IgnoreComments = true,
29 IgnoreProcessingInstructions = true,
30 IgnoreWhitespace = true
31 };
32  
33 /// <summary>
34 /// Parses the disk items.
35 /// </summary>
36 /// <param name="stream">The response text.</param>
37 /// <returns>The list of parsed items.</returns>
38 public static IEnumerable<Item> ParseItems(Stream stream)
39 {
40 var items = new List<Item>();
41 using (var reader = XmlReader.Create(stream, XmlReaderSettings))
42 {
43  
44 Item itemInfo = null;
45 while (reader.Read())
46 {
47 if (reader.NodeType == XmlNodeType.Element)
48 {
49 switch (reader.LocalName.ToLower())
50 {
51 case "response":
52 itemInfo = new Item();
53 break;
54 case "href":
55 if (!reader.IsEmptyElement)
56 {
57 reader.Read();
58 var value = reader.Value;
59 value = value.Replace("#", "%23");
60 itemInfo.Href = value;
61 }
62 break;
63 case "creationdate":
64 if (!reader.IsEmptyElement)
65 {
66 reader.Read();
67 DateTime creationdate;
68 if (DateTime.TryParse(reader.Value, out creationdate))
69 itemInfo.CreationDate = creationdate;
70 }
71 break;
72 case "getlastmodified":
73 if (!reader.IsEmptyElement)
74 {
75 reader.Read();
76 DateTime lastmodified;
77 if (DateTime.TryParse(reader.Value, out lastmodified))
78 itemInfo.LastModified = lastmodified;
79 }
80 break;
81 case "displayname":
82 if (!reader.IsEmptyElement)
83 {
84 reader.Read();
85 itemInfo.DisplayName = reader.Value;
86 }
87 break;
88 case "getcontentlength":
89 if (!reader.IsEmptyElement)
90 {
91 reader.Read();
92 long contentLength;
93 if (long.TryParse(reader.Value, out contentLength))
94 itemInfo.ContentLength = contentLength;
95 }
96 break;
97 case "getcontenttype":
98 if (!reader.IsEmptyElement)
99 {
100 reader.Read();
101 itemInfo.ContentType = reader.Value;
102 }
103 break;
104 case "getetag":
105 if (!reader.IsEmptyElement)
106 {
107 reader.Read();
108 itemInfo.Etag = reader.Value;
109 }
110 break;
111 case "iscollection":
112 if (!reader.IsEmptyElement)
113 {
114 reader.Read();
115 bool isCollection;
116 if (bool.TryParse(reader.Value, out isCollection))
117 itemInfo.IsCollection = isCollection;
118 int isCollectionInt;
119 if (int.TryParse(reader.Value, out isCollectionInt))
120 itemInfo.IsCollection = isCollectionInt == 1;
121 }
122 break;
123 case "resourcetype":
124 if (!reader.IsEmptyElement)
125 {
126 reader.Read();
127 var resourceType = reader.LocalName.ToLower();
128 if (string.Equals(resourceType, "collection", StringComparison.InvariantCultureIgnoreCase))
129 itemInfo.IsCollection = true;
130 }
131 break;
132 case "hidden":
133 case "ishidden":
134 itemInfo.IsHidden = true;
135 break;
136 case "checked-in":
137 case "version-controlled-configuration":
138 reader.Skip();
139 break;
140 default:
141 {
142 int a = 0;
143 break;
144 }
145 }
146 }
147 else if (reader.NodeType == XmlNodeType.EndElement && reader.LocalName.ToLower() == "response")
148 {
149 // Remove trailing / if the item is not a collection
150 var href = itemInfo.Href.TrimEnd('/');
151 if (!itemInfo.IsCollection)
152 {
153 itemInfo.Href = href;
154 }
155 if (string.IsNullOrEmpty(itemInfo.DisplayName))
156 {
157 var name = href.Substring(href.LastIndexOf('/') + 1);
158 itemInfo.DisplayName = WebUtility.UrlDecode(name);
159 }
160 items.Add(itemInfo);
161 }
162 }
163 }
164  
165 return items;
166 }
167  
168  
169 }
170 }