PageRenderTime 42ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/SkyDriveSimpleLibrary/SkyDriveConnection.cs

#
C# | 91 lines | 72 code | 5 blank | 14 comment | 4 complexity | 3fa1154c055ae739d2d2d34a07d9911a MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.Xml;
  6. using System.IO;
  7. public class SkyDriveConnection : PassportConnection
  8. {
  9. /// <summary>
  10. /// Create a new object to handle SkyDrive communiction.
  11. /// </summary>
  12. /// <param name="userName"></param>
  13. /// <param name="password"></param>
  14. public SkyDriveConnection(string userName, string password)
  15. : base(userName, password)
  16. {
  17. }
  18. /// <summary>
  19. /// Fetch all WebDAV folders visible using SkyDrive web service.
  20. /// </summary>
  21. /// <returns></returns>
  22. public SkyDriveFolder[] GetDavFolders()
  23. {
  24. string soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
  25. "<s:Body><GetWebAccountInfoRequest xmlns=\"http://schemas.microsoft.com/clouddocuments\">"+
  26. "<BaseRequest xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
  27. "<ClientAppId>Microsoft Office/14.0 (Windows NT 6.1; Microsoft Word 14.0.4536; Pro)</ClientAppId><Market>en-US</Market>"+
  28. "<SkyDocsServiceVersion>v1.0</SkyDocsServiceVersion></BaseRequest>"+
  29. "<GetReadWriteLibrariesOnly>true</GetReadWriteLibrariesOnly></GetWebAccountInfoRequest></s:Body></s:Envelope>";
  30. HttpWebResponse resp = SendSoapRequest("http://docs.live.net/SkyDocsService.svc", "GetWebAccountInfo", soap);
  31. XmlDocument doc = new XmlDocument();
  32. doc.LoadXml(GetResponseData(resp));
  33. XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
  34. nsmgr.AddNamespace("ms", "http://schemas.microsoft.com/clouddocuments");
  35. XmlNodeList list = doc.SelectNodes("//ms:Library", nsmgr);
  36. SkyDriveFolder[] arr = new SkyDriveFolder[list.Count];
  37. for (int i = 0; i<list.Count; i++)
  38. {
  39. XmlElement el = list[i] as XmlElement;
  40. SkyDriveFolder folder = new SkyDriveFolder();
  41. folder.Name = el.SelectSingleNode("ms:DisplayName", nsmgr).InnerText;
  42. folder.WebDAVUrl = el.SelectSingleNode("ms:DavUrl", nsmgr).InnerText;
  43. arr[i] = folder;
  44. }
  45. return arr;
  46. }
  47. /// <summary>
  48. /// Fetch contents of a single SkyDrive folder, using the WebDAV protocol.
  49. /// </summary>
  50. /// <param name="folder"></param>
  51. /// <returns></returns>
  52. public SkyDriveItem[] GetDavFolderContent(SkyDriveFolder folder)
  53. {
  54. InternalWebRequest spec = new InternalWebRequest("PROPFIND", folder.WebDAVUrl);
  55. spec.Headers["Depth"] = "1";
  56. spec.Headers["translate"] = "f";
  57. HttpWebResponse resp = SendRequest(spec);
  58. XmlDocument doc = new XmlDocument();
  59. doc.LoadXml(GetResponseData(resp));
  60. XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
  61. nsmgr.AddNamespace("d", "DAV:");
  62. XmlNodeList list = doc.SelectNodes("//d:response", nsmgr);
  63. SkyDriveItem[] arr = new SkyDriveItem[list.Count-1];
  64. for (int i = 1; i < list.Count; i++)
  65. {
  66. XmlElement el = list[i] as XmlElement;
  67. string isFolder = el.SelectSingleNode("d:propstat/d:prop/d:isFolder", nsmgr).InnerText;
  68. if (isFolder == "t")
  69. {
  70. SkyDriveFolder item = new SkyDriveFolder();
  71. item.Name = el.SelectSingleNode("d:propstat/d:prop/d:displayname", nsmgr).InnerText;
  72. item.WebDAVUrl = el.SelectSingleNode("d:href", nsmgr).InnerText;
  73. arr[i - 1] = item;
  74. }
  75. else
  76. {
  77. SkyDriveFile item = new SkyDriveFile();
  78. item.Name = el.SelectSingleNode("d:propstat/d:prop/d:displayname", nsmgr).InnerText;
  79. item.Length = long.Parse(el.SelectSingleNode("d:propstat/d:prop/d:getcontentlength", nsmgr).InnerText);
  80. item.Modified = DateTime.Parse(el.SelectSingleNode("d:propstat/d:prop/d:getlastmodified", nsmgr).InnerText);
  81. arr[i - 1] = item;
  82. }
  83. }
  84. return arr;
  85. }
  86. }