private void ShowAdd1Page() { this.Present(); Header = CmisSync.Properties_Resources.Where; VBox layout_vertical = new VBox (false, 12); HBox layout_fields = new HBox (true, 12); VBox layout_address = new VBox (true, 0); HBox layout_address_help = new HBox(false, 3); VBox layout_user = new VBox (true, 0); VBox layout_password = new VBox (true, 0); // Address Label address_label = new Label() { UseMarkup = true, Xalign = 0, Markup = "<b>" + CmisSync.Properties_Resources.EnterWebAddress + "</b>" }; Entry address_entry = new Entry () { Text = (Controller.PreviousAddress == null || String.IsNullOrEmpty(Controller.PreviousAddress.ToString()))?"https://":Controller.PreviousAddress.ToString(), ActivatesDefault = false }; Label address_help_label = new Label() { Xalign = 0, UseMarkup = true, Markup = "<span foreground=\"#808080\" size=\"small\">" + CmisSync.Properties_Resources.Help + ": " + "</span>" }; EventBox address_help_urlbox = new EventBox(); Label address_help_urllabel = new Label() { Xalign = 0, UseMarkup = true, Markup = "<span foreground=\"blue\" underline=\"single\" size=\"small\">" + CmisSync.Properties_Resources.WhereToFind + "</span>" }; address_help_urlbox.Add(address_help_urllabel); address_help_urlbox.ButtonPressEvent += delegate(object o, ButtonPressEventArgs args) { Process process = new Process(); process.StartInfo.FileName = "xdg-open"; process.StartInfo.Arguments = "https://github.com/aegif/CmisSync/wiki/What-address"; process.Start (); }; address_help_urlbox.EnterNotifyEvent += delegate(object o, EnterNotifyEventArgs args) { address_help_urlbox.GdkWindow.Cursor = hand_cursor; }; Label address_error_label = new Label() { Xalign = 0, UseMarkup = true, Markup = "" }; address_error_label.Hide(); // User Entry user_entry = new Entry () { Text = Controller.PreviousPath, ActivatesDefault = false }; if(String.IsNullOrEmpty(Controller.saved_user)) { user_entry.Text = Environment.UserName; } else { user_entry.Text = Controller.saved_user; } // Password Entry password_entry = new Entry () { Visibility = false, ActivatesDefault = true }; Controller.ChangeAddressFieldEvent += delegate (string text, string example_text) { Application.Invoke (delegate { address_entry.Text = text; }); }; Controller.ChangeUserFieldEvent += delegate (string text, string example_text) { Application.Invoke (delegate { user_entry.Text = text; }); }; Controller.ChangePasswordFieldEvent += delegate (string text, string example_text) { Application.Invoke (delegate { password_entry.Text = text; }); }; address_entry.Changed += delegate { string error = Controller.CheckAddPage(address_entry.Text); if (!String.IsNullOrEmpty(error)) { address_error_label.Markup = "<span foreground=\"red\">" + CmisSync.Properties_Resources.ResourceManager.GetString(error, CultureInfo.CurrentCulture) + "</span>"; address_error_label.Show(); } else { address_error_label.Hide(); } }; // Address layout_address_help.PackStart(address_help_label, false, false, 0); layout_address_help.PackStart(address_help_urlbox, false, false, 0); layout_address.PackStart (address_label, true, true, 0); layout_address.PackStart (address_entry, true, true, 0); layout_address.PackStart (layout_address_help, true, true, 0); // layout_address.PackStart (address_error_label, true, true, 0); // User layout_user.PackStart (new Label () { Markup = "<b>" + CmisSync.Properties_Resources.User + ":</b>", Xalign = 0 }, true, true, 0); layout_user.PackStart (user_entry, false, false, 0); // Password layout_password.PackStart (new Label () { Markup = "<b>" + CmisSync.Properties_Resources.Password + ":</b>", Xalign = 0 }, true, true, 0); layout_password.PackStart (password_entry, false, false, 0); layout_fields.PackStart (layout_user); layout_fields.PackStart (layout_password); // layout_vertical.PackStart (new Label (""), false, false, 0); layout_vertical.PackStart (layout_address, false, false, 0); layout_vertical.PackStart (layout_fields, false, false, 0); layout_vertical.PackStart (address_error_label, true, true, 0); Add (layout_vertical); // Cancel button Button cancel_button = new Button (cancelText); cancel_button.Clicked += delegate { Controller.PageCancelled (); }; // Continue button Button continue_button = new Button (continueText) { Sensitive = String.IsNullOrEmpty( Controller.CheckAddPage (address_entry.Text)) }; continue_button.Clicked += delegate { // Show wait cursor this.GdkWindow.Cursor = wait_cursor; // Try to find the CMIS server (asynchronous using a delegate) GetRepositoriesFuzzyDelegate dlgt = new GetRepositoriesFuzzyDelegate(CmisUtils.GetRepositoriesFuzzy); ServerCredentials credentials = new ServerCredentials() { UserName = user_entry.Text, Password = password_entry.Text, Address = new Uri(address_entry.Text) }; IAsyncResult ar = dlgt.BeginInvoke(credentials, null, null); while (!ar.AsyncWaitHandle.WaitOne(100)) { while (Application.EventsPending()) { Application.RunIteration(); } } Tuple<CmisServer, Exception> result = dlgt.EndInvoke(ar); CmisServer cmisServer = result.Item1; if(cmisServer != null) { Controller.repositories = cmisServer.Repositories; address_entry.Text = cmisServer.Url.ToString(); } else { Controller.repositories = null; } // Hide wait cursor this.GdkWindow.Cursor = default_cursor; if (Controller.repositories == null) { // Show warning string warning = ""; string message = result.Item2.Message; Exception e = result.Item2; if (e is CmisPermissionDeniedException) { warning = Properties_Resources.LoginFailedForbidden; } // else if (e is CmisServerNotFoundException) // { // warning = Properties_Resources.ConnectFailure; // } else if (e.Message == "SendFailure" && cmisServer.Url.Scheme.StartsWith("https")) { warning = Properties_Resources.SendFailureHttps; } else if (e.Message == "TrustFailure") { warning = Properties_Resources.TrustFailure; } else { warning = message + Environment.NewLine + Properties_Resources.Sorry; } address_error_label.Markup = "<span foreground=\"red\">" + warning + "</span>"; address_error_label.Show(); } else { // Continue to folder selection Controller.Add1PageCompleted( new Uri(address_entry.Text), user_entry.Text, password_entry.Text); } }; Controller.UpdateAddProjectButtonEvent += delegate (bool button_enabled) { Application.Invoke (delegate { continue_button.Sensitive = button_enabled; if(button_enabled) { continue_button.SetFlag(Gtk.WidgetFlags.CanFocus); continue_button.SetFlag(Gtk.WidgetFlags.CanDefault); continue_button.GrabDefault(); } }); }; AddButton (cancel_button); AddButton (continue_button); Controller.CheckAddPage (address_entry.Text); address_entry.GrabFocus (); }
private void ShowAdd1Page() { this.Present(); this.Header = Properties_Resources.Where; VBox layout_vertical = new VBox(false, 12); HBox layout_fields = new HBox(true, 12); VBox layout_address = new VBox(true, 0); HBox layout_address_help = new HBox(false, 3); VBox layout_user = new VBox(true, 0); VBox layout_password = new VBox(true, 0); // Address Label address_label = new Label() { UseMarkup = true, Xalign = 0, Markup = "<b>" + Properties_Resources.EnterWebAddress + "</b>" }; Entry address_entry = new Entry() { Text = (this.controller.PreviousAddress == null || string.IsNullOrEmpty(this.controller.PreviousAddress.ToString())) ? DefaultEntries.Defaults.Url : this.controller.PreviousAddress.ToString(), IsEditable = DefaultEntries.Defaults.CanModifyUrl, ActivatesDefault = false }; Label address_help_label = new Label() { Xalign = 0, UseMarkup = true, Markup = "<span foreground=\"#808080\" size=\"small\">" + Properties_Resources.Help + ": " + "</span>" }; EventBox address_help_urlbox = new EventBox(); Label address_help_urllabel = new Label() { Xalign = 0, UseMarkup = true, Markup = "<span foreground=\"blue\" underline=\"single\" size=\"small\">" + Properties_Resources.WhereToFind + "</span>" }; address_help_urlbox.Add(address_help_urllabel); address_help_urlbox.ButtonPressEvent += delegate(object o, ButtonPressEventArgs args) { Process process = new Process(); process.StartInfo.FileName = "xdg-open"; process.StartInfo.Arguments = "https://github.com/nicolas-raoul/CmisSync/wiki/What-address"; process.Start(); }; address_help_urlbox.EnterNotifyEvent += delegate(object o, EnterNotifyEventArgs args) { address_help_urlbox.GdkWindow.Cursor = handCursor; }; Label address_error_label = new Label() { Xalign = 0, UseMarkup = true, Markup = string.Empty }; address_error_label.Hide(); // User Entry user_entry = new Entry() { Text = this.controller.PreviousPath, ActivatesDefault = false }; if (string.IsNullOrEmpty(this.controller.saved_user)) { user_entry.Text = DefaultEntries.Defaults.Name; } else { user_entry.Text = this.controller.saved_user; } // Password Entry password_entry = new Entry() { Visibility = false, ActivatesDefault = true }; this.controller.ChangeAddressFieldEvent += delegate(string text, string example_text) { Application.Invoke(delegate { address_entry.Text = text; }); }; this.controller.ChangeUserFieldEvent += delegate(string text, string example_text) { Application.Invoke(delegate { user_entry.Text = text; }); }; this.controller.ChangePasswordFieldEvent += delegate(string text, string example_text) { Application.Invoke(delegate { password_entry.Text = text; }); }; address_entry.Changed += delegate { string error = this.controller.CheckAddPage(address_entry.Text); if (!string.IsNullOrEmpty(error)) { address_error_label.Markup = "<span foreground=\"red\">" + Properties_Resources.ResourceManager.GetString(error, CultureInfo.CurrentCulture) + "</span>"; address_error_label.Show(); } else { address_error_label.Hide(); } }; // Address layout_address_help.PackStart(address_help_label, false, false, 0); layout_address_help.PackStart(address_help_urlbox, false, false, 0); layout_address.PackStart(address_label, true, true, 0); layout_address.PackStart(address_entry, true, true, 0); layout_address.PackStart(layout_address_help, true, true, 0); // User layout_user.PackStart( new Label() { Markup = "<b>" + Properties_Resources.User + ":</b>", Xalign = 0 }, true, true, 0); layout_user.PackStart(user_entry, false, false, 0); // Password layout_password.PackStart( new Label() { Markup = "<b>" + Properties_Resources.Password + ":</b>", Xalign = 0 }, true, true, 0); layout_password.PackStart(password_entry, false, false, 0); layout_fields.PackStart(layout_user); layout_fields.PackStart(layout_password); layout_vertical.PackStart(layout_address, false, false, 0); layout_vertical.PackStart(layout_fields, false, false, 0); layout_vertical.PackStart(address_error_label, true, true, 0); this.Add(layout_vertical); // Cancel button Button cancel_button = new Button(this.cancelText); cancel_button.Clicked += delegate { this.controller.PageCancelled(); }; // Continue button Button continue_button = new Button(this.continueText) { Sensitive = string.IsNullOrEmpty(this.controller.CheckAddPage(address_entry.Text)) }; continue_button.Clicked += delegate { // Show wait cursor this.GdkWindow.Cursor = waitCursor; // Try to find the CMIS server (asynchronous using a delegate) GetRepositoriesDelegate dlgt = new GetRepositoriesDelegate(SetupController.GetRepositories); ServerCredentials credentials = new ServerCredentials() { UserName = user_entry.Text, Password = password_entry.Text, Address = new Uri(address_entry.Text), Binding = this.controller.saved_binding ?? ServerCredentials.BindingBrowser }; IAsyncResult ar = dlgt.BeginInvoke(credentials, null, null); while (!ar.AsyncWaitHandle.WaitOne(100)) { while (Application.EventsPending()) { Application.RunIteration(); } } var result = dlgt.EndInvoke(ar); if (result.Repositories != null) { this.controller.repositories = result.Repositories.WithoutHiddenOnce(); address_entry.Text = result.Credentials.Address.ToString(); } else { this.controller.repositories = null; // Show best found Url address_entry.Text = result.Credentials.Address.ToString(); // Show warning string warning = this.controller.GetConnectionsProblemWarning(result.FailedException); address_error_label.Markup = "<span foreground=\"red\">" + warning + "</span>"; address_error_label.Show(); } // Hide wait cursor this.GdkWindow.Cursor = defaultCursor; if (this.controller.repositories != null) { // Continue to folder selection this.controller.Add1PageCompleted( new Uri(address_entry.Text), result.Credentials.Binding, user_entry.Text, password_entry.Text); } }; this.controller.UpdateAddProjectButtonEvent += delegate(bool button_enabled) { Application.Invoke(delegate { continue_button.Sensitive = button_enabled; if (button_enabled) { continue_button.SetFlag(Gtk.WidgetFlags.CanFocus); continue_button.SetFlag(Gtk.WidgetFlags.CanDefault); continue_button.GrabDefault(); } }); }; this.AddButton(cancel_button); this.AddButton(continue_button); this.controller.CheckAddPage(address_entry.Text); address_entry.GrabFocus(); }