private void HandleFolder(string currentLocalPath, WebDavContent item) { var fileName = item.FilePath; if (this.IsBriefkasten(item)) { this.OnLogData(new LogEventArgs("INFO: Kein Update, weil Briefkasten!!! " + item.FilePath)); } else { this.DownloadWebDavContentRecursive(fileName, currentLocalPath + "\\" + fileName.Substring(fileName.TrimEnd(new char[] { '/' }).LastIndexOf('/')).Trim('/')); } }
private void HandleFile(string currentLocalPath, WebDavContent item) { var fileName = item.FilePath; if (!fileName.Contains("\"")) { string strlocalfile = currentLocalPath + "\\" + fileName.Substring(fileName.LastIndexOf('/')).TrimStart('/'); FileInfo objLocalFile = new FileInfo(strlocalfile); // Todo,jac: objLocalFile.Exists prüfen if (objLocalFile.LastWriteTime > Convert.ToDateTime(item.Lastmodified)) { //File ist lokal neuer //Debug.WriteLine("Lokale Datei ist neuer --> kein Download"); this.OnLogData(new LogEventArgs("INFO: Kein Update: " + strlocalfile)); } else { //Debug.WriteLine("Lokale Datei ist älter --> Download"); this.OnLogData(new LogEventArgs("INFO: Update: " + strlocalfile)); // Todo,jac: wieso wird hier blockiert -> Queue? autoResetEvent = new AutoResetEvent(false); WebDavClient.DownloadComplete += new DownloadCompleteDel(c_DownloadComplete); this.WebDavClient.Download(fileName, strlocalfile); autoResetEvent.WaitOne(); } } else { //Wegen eines der Zeichen \ / : * ? " < > | ist dieses Objekt in Windows Webordnern nicht sichtbar LogData(this, new LogEventArgs("ERROR: Datei " + fileName + " kann nicht heruntergeladen werden. Dateinamen wird nicht unterstützt")); Debug.WriteLine("Datei kann nicht herungergeladen werden " + fileName); } }
private void FinishList(IAsyncResult result) { try { var statusCode = 0; var webDavContentList = new List <WebDavContent>(); var managedState = (ManagedState <string>)result.AsyncState; var remoteFilePath = managedState.UserState; using (var response = (HttpWebResponse)managedState.HttpWebRequest.EndGetResponse(result)) { statusCode = (int)response.StatusCode; using (var stream = response.GetResponseStream()) { XmlDocument xml = new XmlDocument(); xml.Load(stream); XmlNamespaceManager xmlNsManager = new XmlNamespaceManager(xml.NameTable); xmlNsManager.AddNamespace("d", "DAV:"); foreach (XmlNode node in xml.DocumentElement.ChildNodes) { WebDavContent currentContent = new WebDavContent(); XmlNode xmlNode = null; XmlNode xmlNodeProp = null; XmlNode xmlNodePropStat = null; xmlNode = node.SelectSingleNode("d:href", xmlNsManager); currentContent.FilePath = Uri.UnescapeDataString(xmlNode.InnerXml); xmlNode = node.SelectSingleNode("d:propstat", xmlNsManager); xmlNodeProp = xmlNode.SelectSingleNode("d:prop", xmlNsManager); //Childnode xmlNodePropStat = xmlNodeProp.SelectSingleNode("d:getlastmodified", xmlNsManager); currentContent.Lastmodified = Uri.UnescapeDataString(xmlNodePropStat.InnerXml); xmlNodePropStat = xmlNodeProp.SelectSingleNode("d:getcontenttype", xmlNsManager); currentContent.Contenttype = Uri.UnescapeDataString(xmlNodePropStat.InnerXml); xmlNodePropStat = xmlNodeProp.SelectSingleNode("d:getcontentlength", xmlNsManager); currentContent.Contentlength = Convert.ToInt32(Uri.UnescapeDataString(xmlNodePropStat.InnerXml)); xmlNodePropStat = xmlNodeProp.SelectSingleNode("d:creationdate", xmlNsManager); currentContent.Creationdate = Uri.UnescapeDataString(xmlNodePropStat.InnerXml); // Want to see directory contents, not the directory itself. if (currentContent.FilePath == remoteFilePath) { continue; } webDavContentList.Add(currentContent); } } } if (ListComplete != null) { ListComplete(webDavContentList, statusCode); } } catch (WebException ex) { if (ex.Message.Equals("Der Remoteserver hat einen Fehler zurückgegeben: (401) Nicht autorisiert.")) { Debug.WriteLine("Benutzername oder Kennwort ist falsch"); } } }
private bool IsBriefkasten(WebDavContent item) { return(item.FilePath.IndexOf("briefkasten", StringComparison.OrdinalIgnoreCase) > 0); }
//========================================================================================= #region Private Helpers private bool IsFolder(WebDavContent item) { return(item.Contentlength == 0); }