public AddAction ( string action, string label, ActionHandler handler ) : void | ||
action | string | |
label | string | |
handler | ActionHandler | |
return | void |
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(); } }
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(); }
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(); } }
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 (); }); }
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); } }
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); }
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(); }