From 3d7eeaefe7d7bee77c4e7c6bdac58f25d72eb8ed Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Thu, 29 Nov 2018 11:39:53 +0100 Subject: [PATCH] Added more widgets --- awesome-wm-widgets/email-widget/.gitignore | 2 + .../email-widget/count_unread_emails.py | 32 ++++++++--- awesome-wm-widgets/email-widget/email.lua | 41 ++++++++----- .../email-widget/read_unread_emails.py | 57 ++++++++++++------- rc.lua | 5 ++ 5 files changed, 95 insertions(+), 42 deletions(-) create mode 100644 awesome-wm-widgets/email-widget/.gitignore mode change 100644 => 100755 awesome-wm-widgets/email-widget/count_unread_emails.py mode change 100644 => 100755 awesome-wm-widgets/email-widget/read_unread_emails.py diff --git a/awesome-wm-widgets/email-widget/.gitignore b/awesome-wm-widgets/email-widget/.gitignore new file mode 100644 index 0000000..0923ec3 --- /dev/null +++ b/awesome-wm-widgets/email-widget/.gitignore @@ -0,0 +1,2 @@ +__pycache__ +credentials.py diff --git a/awesome-wm-widgets/email-widget/count_unread_emails.py b/awesome-wm-widgets/email-widget/count_unread_emails.py old mode 100644 new mode 100755 index f4d2b86..dc3328f --- a/awesome-wm-widgets/email-widget/count_unread_emails.py +++ b/awesome-wm-widgets/email-widget/count_unread_emails.py @@ -1,16 +1,30 @@ -#!/usr/bin/python +#!/usr/bin/env python3 import imaplib import email -M=imaplib.IMAP4_SSL("mail.teenagemutantninjaturtles.com", 993) -M.login("mickey@tmnt.com","cowabunga") +try: + import credentials +except: + print("Couldn't read crendtials") + exit(1) -status, counts = M.status("INBOX","(MESSAGES UNSEEN)") +ok = True +unread = 0 -if status == "OK": - unread = counts[0].split()[4][:-1] +for account in credentials.accounts: + + mailbox = imaplib.IMAP4_SSL(account.host, 993) + mailbox.login(account.username, account.password) + + status, counts = mailbox.status("INBOX","(MESSAGES UNSEEN)") + + if status == "OK": + unread += int(counts[0].split()[4][:-1]) + else: + ok = False + +if not ok and unread == 0: + print('N/A') else: - unread = "N/A" - -print(unread) \ No newline at end of file + print(unread) diff --git a/awesome-wm-widgets/email-widget/email.lua b/awesome-wm-widgets/email-widget/email.lua index d6619f9..2071158 100644 --- a/awesome-wm-widgets/email-widget/email.lua +++ b/awesome-wm-widgets/email-widget/email.lua @@ -1,3 +1,4 @@ +local os = require("os") local wibox = require("wibox") local awful = require("awful") local naughty = require("naughty") @@ -5,38 +6,52 @@ local watch = require("awful.widget.watch") local path_to_icons = "/usr/share/icons/Arc/actions/22/" -email_widget = wibox.widget.textbox() +local home = os.getenv('HOME') + +local email_widget = wibox.widget.textbox() email_widget:set_font('Play 9') -email_icon = wibox.widget.imagebox() +local email_icon = wibox.widget.imagebox() email_icon:set_image(path_to_icons .. "/mail-mark-new.png") +local previous_value = 0 + watch( - "python /home//.config/awesome/email-widget/count_unread_emails.py", 20, + "bash -c " .. home .. "/.config/awesome/awesome-wm-widgets/email-widget/count_unread_emails.py", 60, function(widget, stdout, stderr, exitreason, exitcode) local unread_emails_num = tonumber(stdout) or 0 + + if previous_value < unread_emails_num then + previous_value = unread_emails_num + show_emails(10) + end + + email_widget:set_text(stdout) if (unread_emails_num > 0) then - email_icon:set_image(path_to_icons .. "/mail-mark-unread.png") - email_widget:set_text(stdout) + email_icon:set_image(path_to_icons .. "/mail-mark-unread.png") elseif (unread_emails_num == 0) then - email_icon:set_image(path_to_icons .. "/mail-message-new.png") - email_widget:set_text("") - end + email_icon:set_image(path_to_icons .. "/mail-message-new.png") + end end ) -function show_emails() - awful.spawn.easy_async([[bash -c 'python /home//.config/awesome/email-widget/read_unread_emails.py']], - function(stdout, stderr, reason, exit_code) +function show_emails(timeout) + awful.spawn.easy_async_with_shell(home .. "/.config/awesome/awesome-wm-widgets/email-widget/read_unread_emails.py", + function(stdout, stderr, reason, exit_code) naughty.notify{ text = stdout, title = "Unread Emails", - timeout = 5, hover_timeout = 0.5, + timeout = timeout, width = 400, } end ) end -email_icon:connect_signal("mouse::enter", function() show_emails() end) +email_icon:connect_signal("button::press", function() show_emails(5) end) + +return { + icon = email_icon, + widget = email_widget +} diff --git a/awesome-wm-widgets/email-widget/read_unread_emails.py b/awesome-wm-widgets/email-widget/read_unread_emails.py old mode 100644 new mode 100755 index 343fe66..aa2acef --- a/awesome-wm-widgets/email-widget/read_unread_emails.py +++ b/awesome-wm-widgets/email-widget/read_unread_emails.py @@ -1,42 +1,59 @@ -#!/usr/bin/python +#!/usr/bin/env python3 import imaplib -import email +import email.header import datetime -def process_mailbox(M): - rv, data = M.search(None, "(UNSEEN)") +def process_mailbox(mailbox, to = None): + rv, data = mailbox.search(None, "(UNSEEN)") if rv != 'OK': - print "No messages found!" + print("No messages found!") return for num in data[0].split(): - rv, data = M.fetch(num, '(BODY.PEEK[])') + rv, data = mailbox.fetch(num, '(BODY.PEEK[])') if rv != 'OK': - print "ERROR getting message", num + print("ERROR getting message", num) return - msg = email.message_from_string(data[0][1]) - print 'From:', msg['From'] - print 'Subject: %s' % (msg['Subject']) + msg = email.message_from_string(data[0][1].decode()) + + if to is not None: + print('To: ', to) + + print('From:', msg['From']) + decode = email.header.decode_header(msg['Subject']) + subject = ''.join(map(lambda x: x[0].decode(), decode)) + + print('Subject: %s' % subject) date_tuple = email.utils.parsedate_tz(msg['Date']) if date_tuple: local_date = datetime.datetime.fromtimestamp(email.utils.mktime_tz(date_tuple)) - print "Local Date:", local_date.strftime("%a, %d %b %Y %H:%M:%S") + print("Local Date:", local_date.strftime("%a, %d %b %Y %H:%M:%S")) # with code below you can process text of email # if msg.is_multipart(): # for payload in msg.get_payload(): # if payload.get_content_maintype() == 'text': - # print payload.get_payload() + # print(payload.get_payload()) # else: - # print msg.get_payload() + # print(msg.get_payload()) -M=imaplib.IMAP4_SSL("mail.teenagemutantninjaturtles.com", 993) -M.login("mickey@tmnt.com","cowabunga") +try: + import credentials +except: + print("Couldn't read crendtials") + exit(1) -rv, data = M.select("INBOX") -if rv == 'OK': - process_mailbox(M) -M.close() -M.logout() \ No newline at end of file +for account in credentials.accounts: + + mailbox = imaplib.IMAP4_SSL(account.host, 993) + mailbox.login(account.username, account.password) + + rv, data = mailbox.select("INBOX") + + if rv == 'OK': + process_mailbox(mailbox, account.email) + + mailbox.close() + mailbox.logout() diff --git a/rc.lua b/rc.lua index a9a7056..3b0ba56 100644 --- a/rc.lua +++ b/rc.lua @@ -18,6 +18,7 @@ local volume_bar_widget = require("awesome-wm-widgets.volumebar-widget.volumebar local cpu_widget = require("awesome-wm-widgets.cpu-widget.cpu-widget") local battery_widget = require("awesome-wm-widgets.battery-widget.battery") local ram_widget = require("awesome-wm-widgets.ram-widget.ram-widget") +local email_widget = require("awesome-wm-widgets.email-widget.email") -- Custom imports local options = require("options") @@ -272,6 +273,10 @@ awful.screen.connect_for_each_screen(function(s) music.icon_widget, music.text_widget, delimiter, + email_widget.icon, + delimiter2, + email_widget.widget, + delimiter, ram_widget, delimiter2, cpu_widget,