wasDAVClient – Blame information for rev 3

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>
3 office 12 /// Represents the parser for response's results.
1 office 13 /// </summary>
14 internal static class ResponseParser
15 {
3 office 16 internal static XmlReaderSettings XmlReaderSettings = new XmlReaderSettings
17 {
18 IgnoreComments = true,
19 IgnoreProcessingInstructions = true,
20 IgnoreWhitespace = true
21 };
22  
1 office 23 /// <summary>
3 office 24 /// Parses the disk item.
1 office 25 /// </summary>
26 /// <param name="stream">The response text.</param>
27 /// <returns>The parsed item.</returns>
28 public static Item ParseItem(Stream stream)
29 {
30 return ParseItems(stream).FirstOrDefault();
31 }
32  
33 /// <summary>
3 office 34 /// Parses the disk items.
1 office 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 Item itemInfo = null;
44 while (reader.Read())
45 {
46 if (reader.NodeType == XmlNodeType.Element)
47 {
48 switch (reader.LocalName.ToLower())
49 {
50 case "response":
51 itemInfo = new Item();
52 break;
53 case "href":
54 if (!reader.IsEmptyElement)
55 {
56 reader.Read();
57 var value = reader.Value;
58 value = value.Replace("#", "%23");
59 itemInfo.Href = value;
60 }
61 break;
62 case "creationdate":
63 if (!reader.IsEmptyElement)
64 {
65 reader.Read();
66 DateTime creationdate;
67 if (DateTime.TryParse(reader.Value, out creationdate))
68 itemInfo.CreationDate = creationdate;
69 }
70 break;
71 case "getlastmodified":
72 if (!reader.IsEmptyElement)
73 {
74 reader.Read();
75 DateTime lastmodified;
76 if (DateTime.TryParse(reader.Value, out lastmodified))
77 itemInfo.LastModified = lastmodified;
78 }
79 break;
80 case "displayname":
81 if (!reader.IsEmptyElement)
82 {
83 reader.Read();
84 itemInfo.DisplayName = reader.Value;
85 }
86 break;
87 case "getcontentlength":
88 if (!reader.IsEmptyElement)
89 {
90 reader.Read();
91 long contentLength;
92 if (long.TryParse(reader.Value, out contentLength))
93 itemInfo.ContentLength = contentLength;
94 }
95 break;
96 case "getcontenttype":
97 if (!reader.IsEmptyElement)
98 {
99 reader.Read();
100 itemInfo.ContentType = reader.Value;
101 }
102 break;
103 case "getetag":
104 if (!reader.IsEmptyElement)
105 {
106 reader.Read();
107 itemInfo.Etag = reader.Value;
108 }
109 break;
110 case "iscollection":
111 if (!reader.IsEmptyElement)
112 {
113 reader.Read();
114 bool isCollection;
115 if (bool.TryParse(reader.Value, out isCollection))
116 itemInfo.IsCollection = isCollection;
117 int isCollectionInt;
118 if (int.TryParse(reader.Value, out isCollectionInt))
119 itemInfo.IsCollection = isCollectionInt == 1;
120 }
121 break;
122 case "resourcetype":
123 if (!reader.IsEmptyElement)
124 {
125 reader.Read();
126 var resourceType = reader.LocalName.ToLower();
3 office 127 if (string.Equals(resourceType, "collection",
128 StringComparison.InvariantCultureIgnoreCase))
1 office 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:
3 office 141 {
142 var a = 0;
143 break;
144 }
1 office 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 }
3 office 168 }