public SparkleUI() { // Initialize the application Application.Init(); // Create the statusicon StatusIcon = new SparkleStatusIcon(); // Keep track of which event logs are open OpenLogs = new List <SparkleLog> (); if (SparkleShare.Controller.FirstRun) { Intro = new SparkleIntro(); Intro.ShowAccountForm(); } SparkleShare.Controller.OnQuitWhileSyncing += delegate { // TODO: Pop up a warning when quitting whilst syncing }; SparkleShare.Controller.OnInvitation += delegate(string server, string folder, string token) { Application.Invoke(delegate { SparkleIntro intro = new SparkleIntro(); intro.ShowInvitationPage(server, folder, token); }); }; // Show a bubble when there are new changes SparkleShare.Controller.NotificationRaised += delegate(string user_name, string user_email, string message, string repository_path) { foreach (SparkleLog log in OpenLogs) { if (log.LocalPath.Equals(repository_path)) { Application.Invoke(delegate { log.UpdateEventLog(); }); } } // TODO: move to controller and do translation here if (!SparkleShare.Controller.NotificationsEnabled) { return; } Application.Invoke(delegate { SparkleBubble bubble = new SparkleBubble(user_name, message); string avatar_file_path = SparkleUIHelpers.GetAvatar(user_email, 32); if (avatar_file_path != null) { bubble.Icon = new Gdk.Pixbuf(avatar_file_path); } else { bubble.Icon = SparkleUIHelpers.GetIcon("avatar-default", 32); } bubble.AddAction("", "Show Events", delegate { AddEventLog(repository_path); }); bubble.Show(); }); }; // Show a bubble when there was a conflict SparkleShare.Controller.ConflictNotificationRaised += delegate { Application.Invoke(delegate { string title = _("Ouch! Mid-air collision!"); string subtext = _("Don't worry, SparkleShare made a copy of each conflicting file."); new SparkleBubble(title, subtext).Show(); }); }; SparkleShare.Controller.AvatarFetched += delegate { Application.Invoke(delegate { foreach (SparkleLog log in OpenLogs) { log.UpdateEventLog(); } }); }; SparkleShare.Controller.OnIdle += delegate { Application.Invoke(delegate { foreach (SparkleLog log in OpenLogs) { log.UpdateEventLog(); } }); }; }