diff --git a/Mailnag/plugins/libnotifyplugin.py b/Mailnag/plugins/libnotifyplugin.py
index 502890f..565c3ba 100644
--- a/Mailnag/plugins/libnotifyplugin.py
+++ b/Mailnag/plugins/libnotifyplugin.py
@@ -33,7 +33,6 @@
from gi.repository import Notify, Gio, Gtk
from Mailnag.common.plugins import Plugin, HookTypes
from Mailnag.common.i18n import _
-from Mailnag.common.subproc import start_subprocess
from Mailnag.common.exceptions import InvalidOperationException
from Mailnag.daemon.mails import Mail
@@ -41,6 +40,10 @@
NOTIFICATION_MODE_SHORT_SUMMARY = '3'
NOTIFICATION_MODE_SUMMARY = '1'
NOTIFICATION_MODE_SINGLE = '2'
+SUPPORTED_DESKTOP_ENVIRONMENTS = [
+ "gnome",
+ "cinnamon",
+]
plugin_defaults = {
'notification_mode' : NOTIFICATION_MODE_SHORT_SUMMARY,
@@ -56,7 +59,7 @@ def __init__(self) -> None:
self._lock = threading.Lock()
self._notification_server_wait_event = threading.Event()
self._notification_server_ready = False
- self._is_gnome = False
+ self._is_supported_env = False
self._mails_added_hook: Optional[Callable[[list[Mail], list[Mail]], None]] = None
@@ -69,7 +72,7 @@ def enable(self) -> None:
# initialize Notification
if not self._initialized:
Notify.init("Mailnagger")
- self._is_gnome = self._is_gnome_environment(['XDG_CURRENT_DESKTOP', 'GDMSESSION'])
+ self._is_supported_env = self._is_supported_environment(['XDG_CURRENT_DESKTOP', 'GDMSESSION'])
self._initialized = True
def mails_added_hook(new_mails: list[Mail], all_mails: list[Mail]) -> None:
@@ -228,7 +231,7 @@ def _notify_short_summary(self, new_mails: list[Mail], all_mails: list[Mail]) ->
n += 1
i += 1
- if self._is_gnome:
+ if self._is_supported_env:
senders = "%s" % ", ".join(lst)
else:
senders = ", ".join(lst)
@@ -258,13 +261,13 @@ def _notify_summary(self, new_mails: list[Mail], all_mails: list[Mail]) -> None:
ubound = len(mails) if len(mails) <= self._max_mails else self._max_mails
for i in range(ubound):
- if self._is_gnome:
+ if self._is_supported_env:
body += "%s:\n%s\n\n" % (self._get_sender(mails[i]), mails[i].subject)
else:
body += "%s - %s\n" % (ellipsize(self._get_sender(mails[i]), 20), ellipsize(mails[i].subject, 20))
if len(mails) > self._max_mails:
- if self._is_gnome:
+ if self._is_supported_env:
body += "%s" % _("(and {0} more)").format(str(len(mails) - self._max_mails))
else:
body += _("(and {0} more)").format(str(len(mails) - self._max_mails))
@@ -295,7 +298,7 @@ def _notify_single(self, new_mails, all_mails):
# Remember the associated message, so we know when to remove the notification:
n.mail = mail
notification_id = str(id(n))
- if self._is_gnome:
+ if self._is_supported_env:
n.add_action("mark-as-read", _("Mark as read"),
self._notification_action_handler, (mail, notification_id))
n.show()
@@ -332,7 +335,7 @@ def _get_notification(
n.set_category("email")
n.set_hint_string("desktop-entry", "mailnagger")
- if self._is_gnome:
+ if self._is_supported_env:
n.add_action("default", "default", self._notification_action_handler, None)
return n
@@ -357,7 +360,7 @@ def _notification_action_handler(
if action == "default":
mailclient = get_default_mail_reader()
if mailclient is not None:
- start_subprocess(mailclient)
+ Gio.AppInfo.launch(mailclient)
# clicking the notification bubble has closed all notifications
# so clear the reference array as well.
@@ -390,9 +393,10 @@ def _prepend_new_mails(self, new_mails: list[Mail], all_mails: list[Mail]) -> li
return new_mails + [m for m in all_mails if m not in new_mails]
- def _is_gnome_environment(self, env_vars: list[str]) -> bool:
+ def _is_supported_environment(self, env_vars: list[str]) -> bool:
for var in env_vars:
- if 'gnome' in os.environ.get(var, '').lower().split(':'):
+ desktop_env = os.environ.get(var, "").lower()
+ if any(env in desktop_env for env in SUPPORTED_DESKTOP_ENVIRONMENTS):
return True
return False
@@ -402,10 +406,7 @@ def get_default_mail_reader() -> Optional[str]:
app_info = Gio.AppInfo.get_default_for_type("x-scheme-handler/mailto", False)
if app_info is not None:
- executable = Gio.AppInfo.get_executable(app_info)
-
- if (executable != None) and (len(executable) > 0):
- mail_reader = executable
+ mail_reader = app_info
return mail_reader