AddAction() public method

public AddAction ( string action, string label, ActionHandler handler ) : void
action string
label string
handler ActionHandler
return void
Beispiel #1
4
		public override void AskYesNoQuestion (string title, string message, Gdk.Pixbuf icon,
				string ok_string, string cancel_string,
				EventHandler ok_handler, EventHandler cancel_handler)
		{
			Notification notify = new Notification (title, message, icon);
			notify.Timeout = 60000;

			notify.AddAction (cancel_string, cancel_string, delegate {
					if (cancel_handler != null)
						cancel_handler (null, null);
					currentNotification = null;
				});

			notify.AddAction (ok_string, ok_string, delegate {
					if (ok_handler != null)
						ok_handler (null, null);
					currentNotification = null;
				});

			notify.Closed += delegate {
					if (cancel_handler != null)
						cancel_handler (null, null);
					currentNotification = null;
				};

			if (currentNotification != null) {
				Logger.Debug ("RECEIVE: HandleSendRequest: Found a notification... closing it");
				currentNotification.Close();
				currentNotification = null;
			}

			currentNotification = notify;
			currentNotification.Show ();
		}
 internal static void SuggestTask()
 {
     SetPidginStatus("Available", "");
     Notification notify;
     Tasks tasks = new Tasks();
     tasks.Load();
     Task task = tasks.GetPriority();
     if (task != null)
     {
         notify = new Notification("Tasks", "This is the next priority task:\n" + task.Summary);
         notify.AddAction("select", "Select", HandleSelectTask);
         notify.AddAction("postpone", "Delay", HandlePostponeTask);
         notify.AddAction("AddTask", "Add Task", HandleAddTask);
         notify.Timeout = 0;
         notify.Urgency = Urgency.Critical;
         notify.Show();
     }
     else
     {
         notify = new Notification("Tasks", "What are you working on?");
         notify.AddAction("AddTask", "Add Task", HandleAddTask);
         notify.Timeout = 0;
         notify.Urgency = Urgency.Critical;
         notify.Show();
     }
 }
Beispiel #3
0
 static void HandleDailyReportActivated(object sender, EventArgs e)
 {
     Reports dailyreport = new Reports();
     dailyreportmessage = dailyreport.CompileDailyReport();
     Notification notify = new Notification();
     notify.Summary = "Daily Report";
     notify.Body = dailyreportmessage;
     notify.AddAction("send", "Send", HandleSendDaily);
     notify.AddAction("select", "Select Date", HandleSelectedReportActivated);
     notify.Urgency = Urgency.Critical;
     notify.Show();
 }
Beispiel #4
0
        LibNotify.Notification ToNotify(Notification note)
        {
            LibNotify.Notification notify = new LibNotify.Notification();
            notify.Body    = GLib.Markup.EscapeText(note.Body);
            notify.Summary = GLib.Markup.EscapeText(note.Title);
            notify.Closed += (sender, e) => OnNotificationClosed(note);
            notify.Timeout = ReadableDurationForMessage(note.Title, note.Body);

            if (SupportsCapability(NotificationCapability.scaling) && !note.Icon.Contains("@"))
            {
                notify.IconName = string.IsNullOrEmpty(note.Icon)
                                        ? DefaultIconName
                                        : note.Icon;
            }
            else
            {
                notify.Icon = string.IsNullOrEmpty(note.Icon)
                                        ? DefaultIcon
                                        : IconProvider.PixbufFromIconName(note.Icon, IconSize);
            }

            if (note is ActionableNotification)
            {
                ActionableNotification anote = note as ActionableNotification;
                notify.AddAction(GLib.Markup.EscapeText(anote.ActionLabel),
                                 anote.ActionLabel, (sender, e) => anote.PerformAction());
            }

            return(notify);
        }
 static void Daily()
 {
     Reports dailyreport = new Reports();
     dailyreportmessage = dailyreport.CompileDailyReport(selected);
     Notification notify = new Notification();
     notify.Summary = "Daily Report " + selected.ToShortDateString();
     notify.Body = dailyreportmessage;
     notify.AddAction("send", "Send", HandleSendReport);
     notify.Urgency = Urgency.Critical;
     notify.Show();
 }
 internal static void DisplayMessage()
 {
     Tasks tasks = new Tasks();
     tasks.Load();
     Task current = tasks.CurrentTask();
     Notification notify;
     if (current != null)
     {
         notify = new Notification("Tasks", "Are you still working on this task?\n" + current.Summary);
         notify.AddAction("yes", "Yes", HandleDoNothing);
         notify.AddAction("view", "View", HandleEditTask);
         notify.AddAction("finish", "Finish", HandleFinishedTask);
         notify.Timeout = 0;
         notify.Urgency = Urgency.Critical;
         notify.Show();
     }
     else
     {
         SuggestTask();
     }
 }
Beispiel #7
0
 public override void DesktopNotify(ActivityFeedItemTemplate template, IActivityFeedItem item, string text)
 {
     // FIXME: This will need to be different on windows/osx...
     QApplication.Invoke(delegate {
         Notification notif = new Notification(text, item.Content);
         foreach (var action in template.Actions) {
             notif.AddAction(action.Name, action.Label, delegate {
                 item.TriggerAction(action.Name);
             });
         }
         notif.Show ();
     });
 }
Beispiel #8
0
        void ShowNotification(ChatView chatView, MessageModel msg)
        {
            Notification notification;
            if (!Capabilites.Contains("append") &&
                Notifications.TryGetValue(chatView, out notification)) {
                // no support for append, update the existing notification
                notification.Body = GLib.Markup.EscapeText(
                    msg.ToString()
                );
                return;
            }

            notification = new Notification() {
                Summary = chatView.Name,
                Category = "im.received"
            };
            if (Capabilites.Contains("body")) {
                // notify-osd doesn't like unknown tags when appending
                notification.Body = GLib.Markup.EscapeText(
                    msg.ToString()
                );
            }
            //notification.IconName = "notification-message-im";
            if (Capabilites.Contains("icon-static")) {
                if (chatView is PersonChatView) {
                    notification.Icon = PersonChatIconPixbuf;
                }
                if (chatView is GroupChatView) {
                    notification.Icon = GroupChatIconPixbuf;
                }
            }
            if (Capabilites.Contains("actions")) {
                notification.AddAction("show", _("Show"), delegate {
                    try {
                        MainWindow.PresentWithServerTime();
                        MainWindow.Notebook.CurrentChatView = chatView;
                        notification.Close();
                    } catch (Exception ex) {
            #if LOG4NET
                        Logger.Error("OnChatViewMessageHighlighted() " +
                                     "notification.Show threw exception", ex);
            #endif
                    }
                });
            }
            if (Capabilites.Contains("append")) {
                notification.AddHint("append", String.Empty);
            }
            if (Capabilites.Contains("sound")) {
                // DNS 0.9 only supports sound-file which is a file path
                // http://www.galago-project.org/specs/notification/0.9/x344.html
                // DNS 1.1 supports sound-name which is an id, see:
                // http://people.canonical.com/~agateau/notifications-1.1/spec/ar01s08.html
                // http://0pointer.de/public/sound-naming-spec.html
                // LAMESPEC: We can't tell which of those are actually
                // supported by this version as hint are totally optional :/
                // HACK: always pass both hints when possible
                notification.AddHint("sound-name", "message-new-instant");
                if (SoundFile != null) {
                    notification.AddHint("sound-file", SoundFile);
                }
            }
            notification.Closed += delegate {
                try {
            #if LOG4NET
                    Logger.Debug("OnChatViewMessageHighlighted(): received " +
                                 "notification.Closed signal for: " +
                                 chatView.Name);
            #endif
                    Notifications.Remove(chatView);
                } catch (Exception ex) {
            #if LOG4NET
                    Logger.Error("OnChatViewMessageHighlighted(): " +
                                 "Exception in notification.Closed handler",
                                 ex);
            #endif
                }
            };
            notification.Show();

            if (!Notifications.ContainsKey(chatView)) {
                Notifications.Add(chatView, notification);
            }
        }
Beispiel #9
0
        void ShowNotification(ChatView chatView, MessageModel msg)
        {
            Notification notification;
            if (!Capabilites.Contains("append") &&
                Notifications.TryGetValue(chatView, out notification)) {
                // no support for append, update the existing notification
                notification.Body = GLib.Markup.EscapeText(
                    msg.ToString()
                );
                return;
            }

            notification = new Notification() {
                Summary = chatView.Name,
                Category = "im.received"
            };
            notification.AddHint("desktop-entry", "smuxi-frontend-gnome");
            if (Capabilites.Contains("body")) {
                // notify-osd doesn't like unknown tags when appending
                notification.Body = GLib.Markup.EscapeText(
                    msg.ToString()
                );
            }
            if (Capabilites.Contains("icon-static")) {
                Gdk.Pixbuf iconData = null;
                string iconName = null;
                if (chatView is PersonChatView) {
                    iconData = PersonChatIconPixbuf;
                    iconName = "smuxi-person-chat";
                } else if (chatView is GroupChatView) {
                    iconData = GroupChatIconPixbuf;
                    iconName = "smuxi-group-chat";
                }
                var theme = Gtk.IconTheme.Default;
#if DISABLED
                // OPT: use icon path/name if we can, so the image (26K) is not
                // send over D-Bus. Especially with the gnome-shell this is a
                // serious performance issue, see:
                // https://bugzilla.gnome.org/show_bug.cgi?id=683829
                if (iconName != null && theme.HasIcon(iconName)) {
                    // HACK: use icon path instead of name as gnome-shell does
                    // not support icon names correctly, see:
                    // https://bugzilla.gnome.org/show_bug.cgi?id=665957
                    var iconInfo = theme.LookupIcon(iconName, 256, Gtk.IconLookupFlags.UseBuiltin);
                    if (!String.IsNullOrEmpty(iconInfo.Filename) &&
                        File.Exists(iconInfo.Filename) &&
                        ServerVendor == "GNOME" &&
                        (ServerName == "Notification Daemon" ||
                         ServerName == "gnome-shell")) {
                        // HACK: notification-daemon 0.7.5 seems to ignore
                        // the image_path hint for some reason, thus we have to
                        // rely on app_icon instead, see:
                        // https://bugzilla.gnome.org/show_bug.cgi?id=684653
                        // HACK: gnome-shell 3.4.2 shows no notification at all
                        // with image_path and stops responding to further
                        // notifications which freezes Smuxi completely!
                        notification.IconName = "file://" + iconInfo.Filename;
                    } else if (!String.IsNullOrEmpty(iconInfo.Filename) &&
                               File.Exists(iconInfo.Filename) &&
                               SpecificationVersion >= new Version("1.1")) {
                        // starting with DNS >= 1.1 we can use the image-path
                        // hint instead of icon_data or app_icon
                        var hintName = "image_path";
                        if (SpecificationVersion >= new Version("1.2")) {
                            hintName = "image-path";
                        }
                        notification.AddHint(hintName,
                                             "file://" + iconInfo.Filename);
                    } else {
                        // fallback to icon_data as defined in DNS 0.9
                        notification.Icon = iconData;
                    }
#endif
                if (Frontend.HasSystemIconTheme &&
                    iconName != null && theme.HasIcon(iconName)) {
                    notification.IconName = iconName;
                } else if (iconName != null && theme.HasIcon(iconName)) {
                    // icon wasn't in the system icon theme
                    var iconInfo = theme.LookupIcon(iconName, 256, Gtk.IconLookupFlags.UseBuiltin);
                    if (!String.IsNullOrEmpty(iconInfo.Filename) &&
                        File.Exists(iconInfo.Filename)) {
                        notification.IconName = "file://" + iconInfo.Filename;
                    }
                } else if (iconData != null) {
                    // fallback to icon_data as the icon is not available in
                    // the theme
                    notification.Icon = iconData;
                } else {
                    // fallback for non-group/person messages
                    notification.IconName = "notification-message-im";
                }
            } else {
                // fallback to generic icon
                notification.IconName = "notification-message-im";
            }
            if (Capabilites.Contains("actions")) {
                notification.AddAction("show", _("Show"), delegate {
                    try {
                        MainWindow.PresentWithServerTime();
                        ChatViewManager.CurrentChatView = chatView;
                        notification.Close();
                    } catch (Exception ex) {
#if LOG4NET
                        Logger.Error("OnChatViewMessageHighlighted() " +
                                     "notification.Show threw exception", ex);
#endif
                    }
                });
            }
            if (Capabilites.Contains("append")) {
                notification.AddHint("append", String.Empty);
            }
            if (Capabilites.Contains("sound")) {
                // DNS 0.9 only supports sound-file which is a file path
                // http://www.galago-project.org/specs/notification/0.9/x344.html
                // DNS 1.1 supports sound-name which is an id, see:
                // http://people.canonical.com/~agateau/notifications-1.1/spec/ar01s08.html
                // http://0pointer.de/public/sound-naming-spec.html
                // LAMESPEC: We can't tell which of those are actually
                // supported by this version as hint are totally optional :/
                // HACK: always pass both hints when possible
                notification.AddHint("sound-name", "message-new-instant");
                if (SoundFile != null) {
                    notification.AddHint("sound-file", SoundFile);
                }
            }
            notification.Closed += delegate {
                try {
#if LOG4NET
                    Logger.Debug("OnChatViewMessageHighlighted(): received " +
                                 "notification.Closed signal for: " +
                                 chatView.Name);
#endif
                    Notifications.Remove(chatView);
                } catch (Exception ex) {
#if LOG4NET
                    Logger.Error("OnChatViewMessageHighlighted(): " +
                                 "Exception in notification.Closed handler",
                                 ex);
#endif
                }
            };
            notification.Show();

            if (!Notifications.ContainsKey(chatView)) {
                Notifications.Add(chatView, notification);
            }
        }

        void OnMainWindowFocusInEvent(object sender, Gtk.FocusInEventArgs e)
        {
            Trace.Call(sender, e);

            if (MainWindow.Notebook.IsBrowseModeEnabled) {
                return;
            }

            var currentChatView = ChatViewManager.CurrentChatView;
            if (currentChatView == null) {
                return;
            }
            DisposeNotification(currentChatView);
        }

        void OnMainWindowNotebookSwitchPage(object sender, Gtk.SwitchPageArgs e)
        {
            Trace.Call(sender, e);

            if (MainWindow.Notebook.IsBrowseModeEnabled) {
                return;
            }

            var currentChatView = ChatViewManager.CurrentChatView;
            if (currentChatView == null) {
                return;
            }
            DisposeNotification(currentChatView);
        }

        void DisposeNotification(ChatView chatView)
        {
            Notification notification;
            if (!Notifications.TryGetValue(chatView, out notification)) {
                return;
            }
#if LOG4NET
            Logger.Debug("DisposeNotification(): disposing notification for: " +
                         chatView.Name);
#endif

            try {
                // don't try to close already closed notifications (timeout)
                if (notification.Id == 0) {
#if LOG4NET
                    Logger.Debug("DisposeNotification(): notification already " +
                                 "closed for: " + chatView.Name);
#endif
                    return;
                }

                notification.Close();
            } catch (Exception ex) {
#if LOG4NET
                Logger.Error("DisposeNotification(): " +
                             "notification.Close() thew exception", ex);
#endif
            } finally {
                Notifications.Remove(chatView);
            }
        }
    protected bool timer_Elapsed()
    {
        var recentPosts = GetRecentPosts();

        try
        {
            if (recentPosts.Count != 0)
            {
                bool alreadyPlayedSound = false;

                foreach (var post in recentPosts)
                {
                    //check if post hasn't already been  notified
                    if (!lastRecentPosts.Any(x => x.pid == post.pid) && IsCategoryEnabled(post.category.cid))
                    {
                        if (cbOnlyNewTopics.Active && !post.isMainPost)
                        {
                            continue;
                        }

                        string decodedTitle   = HttpUtility.HtmlDecode(post.topic.title),
                               decodedContent = HttpUtility.HtmlDecode(RemoveHTML(post.content));

                        if (cbTitleContains.Active || cbBodyContains.Active)
                        {
                            string strToSearch = "";

                            if (cbTitleContains.Active)
                            {
                                strToSearch += decodedTitle;
                            }
                            if (cbBodyContains.Active)
                            {
                                strToSearch += decodedContent;
                            }

                            if (!strToSearch.Contains(textviewContains.Buffer.Text))
                            {
                                continue;
                            }
                        }

                        if (cbIgnoreUsers.Active && ignoredUsers.Contains(post.user.username))
                        {
                            continue;
                        }

                        string linkToPost = "https://forums.gta5-mods.com/post/" + post.pid.ToString();

                        string decodedCategory = HttpUtility.HtmlDecode(post.category.name);

                        string body;
                        if (decodedContent.Length > 100)
                        {
                            body = decodedContent.Substring(0, 97) + "...";
                        }
                        else
                        {
                            body = decodedContent;
                        }

                        TreeIter iter;

                        if (treeStore.IterNChildren() == 50)
                        {
                            //remove oldest item
                            treeStore.IterNthChild(out iter, 49);

                            treeStore.Remove(ref iter);
                        }

                        iter = treeStore.InsertWithValues(0, decodedCategory, decodedTitle, body, linkToPost);

                        tvNotifications.Selection.SelectIter(iter);

                        tvNotifications.ScrollToCell(treeStore.GetPath(iter), columnCategory, true, 0f, 0f);

                        if (!alreadyPlayedSound)
                        {
                            alreadyPlayedSound = true;

                            if (cbPlayNotificationSound.Active)
                            {
                                SystemSounds.Beep.Play();
                                Thread.Sleep(150);
                                SystemSounds.Beep.Play();
                            }
                        }

                        int platform = (int)Environment.OSVersion.Platform;

                        if (platform == 4 || platform == 128) //Unix
                        {
                            var notify = new Notifications.Notification(decodedTitle, body, Gdk.Pixbuf.LoadFromResource("GTA5MFNotifier.Resources.icon.png"));
                            notify.Timeout = 5000;

                            notify.AddAction("click", "View in browser", (object o, ActionArgs args) =>
                            {
                                Process.Start(linkToPost);
                            });

                            notify.Show();
                        }
                        else if (platform != 6) //Windows (6 == MacOS)
                        {
                            var notification = new GTA5MFNotifier.Notification(linkToPost, decodedTitle, body, 10, FormAnimator.AnimationMethod.Slide, FormAnimator.AnimationDirection.Left);
                            notification.Show();
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            lastRecentPosts = recentPosts;
        }

        return(true);
    }
Beispiel #11
0
 static void MenuViewTaskActivated(object sender, EventArgs e)
 {
     Tasks tasks = new Tasks();
     tasks.Load();
     Task current = tasks.CurrentTask();
     Notification notify = new Notification(current.Summary, current.Description.Substring(0, (current.Description.Length > 1000 ? 1000 : current.Description.Length)));
     notify.AddAction("edit", "Edit", HandleEditTaskActivated);
     notify.AddAction("finish", "Mark Finished", MenuFinishTaskActivated);
     notify.AddAction("list", "Tasks", HandleViewTaskListActivated);
     notify.Urgency = Urgency.Critical;
     notify.Show();
 }