public async void LoadData(Account account) { _account = account; AccountName = _account.Name; var webDav = new WebDAVClient(_account.GetUri(), await _accountService.GetCredentials(_account)); try { var files = await webDav.GetEntries(_account.WebDAVPath, true); Files = new ObservableCollection<WebDAVFile> // except current folder (files.Where(x => x.FilePath.ToString() != _account.WebDAVPath)); } catch { } }
private async void OnHTTPResponse(IAsyncResult result) { AsyncHttpResponse state = (AsyncHttpResponse)result.AsyncState; var success = false; try { state.Request.EndGetResponse(result); success = true; } catch (WebException) { if (state.AssociatedAccount.Protocol == "https") { // try to fetch certificate try { var tls = new TLSHandshake(); tls.SetServerNameExtension(state.AssociatedAccount.Hostname); var socket = new StreamSocket(); socket.Connect(state.AssociatedAccount.Hostname, state.AssociatedAccount.GetPort(true)); socket.Write(tls.CreateClientHello()); DateTime startTime = DateTime.Now; while (true) { var data = socket.Read(); if (data.Length > 0) { var cert = tls.FindPacket(data, TLSHandshake.TLS_HANDSHAKE_CERTIFICATE); if (cert.Length > 0) { var details = tls.GetCertificateDetails(cert); if (details.Count > 0) { var certDetails = details[0]; if (certDetails.ContainsKey("CN")) { Dispatcher.BeginInvoke(() => { MessageBox.Show("EditAccountPage_Connection_Rejected".Translate(state.AssociatedAccount.Hostname, certDetails["CN"], certDetails["ValidAfter"], certDetails["ValidTo"]), "EditAccountPage_Connection_Rejected_Caption".Translate(), MessageBoxButton.OK); _overlay.Hide(); }); return; } } break; } } if (DateTime.Now.Subtract(startTime).TotalSeconds > 5) { break; } } } catch (Exception) { // Host not reachable, no SSL host or TLS version not supported } } } catch (Exception) { // HTTPWebRequest has failed } if (success) { // Testing DAV //TODO: Add your additional connection test statement here // To complete the test all fragments must have been fired. EventCollector collector = new EventCollector() { Complete = () => { OnConnectTestComplete(success, state.AssociatedAccount); } }; collector.WaitFor(state.AssociatedAccount.WebDAVPath); collector.WaitFor(state.AssociatedAccount.CalDAVPath); // define paths to test Queue<string> pathsToTest = new Queue<string>(); pathsToTest.Enqueue(state.AssociatedAccount.WebDAVPath); pathsToTest.Enqueue(state.AssociatedAccount.CalDAVPath); // create master instance var davTest = new WebDAVClient(state.AssociatedAccount.GetUri(), await App.AccountService.GetCredentials(state.AssociatedAccount)); // call tests while (pathsToTest.Count > 0) { var path = pathsToTest.Dequeue(); try { await davTest.GetEntries(path, false); } catch { // all other states are fail states success = false; Dispatcher.BeginInvoke(() => { //TODO: fix message MessageBox.Show("EditAccountPage_CheckingConnection_DAVTestFailed".Translate(path, "requestResult.StatusText"), "Error_Caption".Translate(), MessageBoxButton.OK); }); } collector.Raise(path); } } else { OnConnectTestComplete(success, state.AssociatedAccount); } }
private async Task QueryStructure() { var dav = new WebDAVClient(_workingAccount.GetUri(), await App.AccountService.GetCredentials(_workingAccount)); try { var entries = await dav.GetEntries(_workingPath, true); if (entries.Count == 0) throw new Exception("No entries found"); bool _firstItem = false; // display all items linear // we cannot wait till an item is displayed, instead for a fluid // behaviour we should calculate fadeIn-delays. int delayStart = 0; int delayStep = 50; // ms foreach (var item in entries) { File fileItem = new File() { FileName = item.FileName, FilePath = item.FilePath.ToString(), FileSize = item.Size, FileType = item.MimeType, FileCreated = item.Created, FileLastModified = item.LastModified, IsDirectory = item.IsDirectory }; bool display = true; switch (_views[_viewIndex]) { case "detail": if (!_firstItem) { _firstItem = true; // Root if (fileItem.IsDirectory) { if (item.FilePath.ToString() == _workingAccount.WebDAVPath) { // cannot go up further display = false; } else { fileItem.IsRootItem = true; fileItem.FilePath = fileItem.FileParentPath; } } } if (display) { FileDetailViewControl detailControl = new FileDetailViewControl() { DataContext = fileItem, Opacity = 0, Background = new SolidColorBrush() { Color = Colors.Transparent }, }; DetailList.Items.Add(detailControl); detailControl.Delay(delayStart, () => { detailControl.FadeIn(100); }); delayStart += delayStep; } break; case "tile": if (!_firstItem) { _firstItem = true; // Root if (fileItem.IsDirectory) { if (item.FilePath.ToString() == _workingAccount.WebDAVPath) { // cannot go up further display = false; } else { fileItem.IsRootItem = true; fileItem.FilePath = fileItem.FileParentPath; } } } if (display) { FileMultiTileViewControl multiControl = new FileMultiTileViewControl(_workingAccount, fileItem, true) { Width = 200, Height = 200, Opacity = 0, Margin = new Thickness(0, 0, 10, 10), }; multiControl.Tap += new EventHandler<System.Windows.Input.GestureEventArgs>(TileListSelectionChanged); // sometimes the exception "wrong parameter" is thrown - but why??? TileView.Children.Add(multiControl); multiControl.Delay(delayStart, () => { multiControl.FadeIn(100); }); } break; } } progress.IsVisible = false; } catch (Exception ex) { progress.IsVisible = false; var webException = ex as WebException; var webResponse = webException != null ? webException.Response as HttpWebResponse : null; if (webException != null && webException.Status == WebExceptionStatus.ProtocolError && webResponse != null && webResponse.StatusCode == HttpStatusCode.Unauthorized) { MessageBox.Show("FetchFile_Unauthorized".Translate(), "Error_Caption".Translate(), MessageBoxButton.OK); } else { MessageBox.Show("FetchFile_Unexpected_Result".Translate(), "Error_Caption".Translate(), MessageBoxButton.OK); } } }