protected void OnAdd (object sender, EventArgs e) { Gtk.Builder builder = new Gtk.Builder (null, "Mono.Addins.GuiGtk3.interfaces.NewSiteDialog.ui", null); NewSiteDialog dlg = new NewSiteDialog (builder, builder.GetObject ("NewSiteDialog").Handle); try { if (dlg.Run ()) { string url = dlg.Url; if (!url.StartsWith ("http://") && !url.StartsWith ("https://") && !url.StartsWith ("file://")) { url = "http://" + url; } try { new Uri (url); } catch { Services.ShowError (null, "Invalid url: " + url, null, true); } if (!service.Repositories.ContainsRepository (url)) { builder = new Gtk.Builder (null, "Mono.Addins.GuiGtk3.interfaces.ProgressDialog.ui", null); ProgressDialog pdlg = new ProgressDialog (builder, builder.GetObject ("ProgressDialog").Handle); pdlg.Show (); pdlg.SetMessage (AddinManager.CurrentLocalizer.GetString ("Registering repository")); bool done = false; AddinRepository rr = null; Exception error = null; ThreadPool.QueueUserWorkItem (delegate { try { rr = service.Repositories.RegisterRepository (pdlg, url, true); } catch (System.Exception ex) { error = ex; } finally { done = true; } }); while (!done) { if (Gtk.Application.EventsPending ()) Gtk.Application.RunIteration (); else Thread.Sleep (100); } pdlg.Destroy (); if (pdlg.HadError) { if (rr != null) service.Repositories.RemoveRepository (rr.Url); return; } if (error != null) { Services.ShowError (error, "The repository could not be registered", null, true); return; } AppendRepository (rr); } } } finally { dlg.Destroy (); } }
protected virtual void OnButtonRefreshClicked(object sender, System.EventArgs e) { Gtk.Builder builder = new Gtk.Builder (null, "Mono.Addins.GuiGtk3.interfaces.ProgressDialog.ui", null); ProgressDialog pdlg = new ProgressDialog (builder, builder.GetObject ("ProgressDialog").Handle); pdlg.Show (); pdlg.SetMessage (AddinManager.CurrentLocalizer.GetString ("Updating repository")); bool updateDone = false; Thread t = new Thread (delegate () { try { service.Repositories.UpdateAllRepositories (pdlg); } finally { updateDone = true; } }); t.Start (); while (!updateDone) { while (Gtk.Application.EventsPending ()) Gtk.Application.RunIteration (); Thread.Sleep (50); } pdlg.Destroy (); LoadGallery (); LoadUpdates (); }