]> git.madduck.net Git - etc/awesome.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

new imap widget
authorluke bonham <dadasignificanulla@gmail.com>
Thu, 12 Sep 2013 00:26:48 +0000 (02:26 +0200)
committerluke bonham <dadasignificanulla@gmail.com>
Thu, 12 Sep 2013 00:26:48 +0000 (02:26 +0200)
scripts/checkmail [deleted file]
widgets/bat.lua
widgets/imap.lua
widgets/yawn/icons/ThunderintheVicinity.png [new symlink]
widgets/yawn/init.lua
widgets/yawn/localizations/it_IT
widgets/yawn/localizations/localization_template

diff --git a/scripts/checkmail b/scripts/checkmail
deleted file mode 100755 (executable)
index 67c5206..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/python
-
-# Simple email checker
-#
-# Wrote by copycat-killer on a rainy day of august 2013
-# to be used in Lain. 
-#
-# https://github.com/copycat-killer/lain
-
-import sys, getopt, locale, imaplib
-
-def main(argv):
-   usage    = "usage: checkmail -s <imapserver> -u <usermail> -p <password> [--port <port>] [--encoding <encoding>] [--cut]"
-   server   = ""
-   user     = ""
-   password = ""
-   port     = 993
-   cut      = False
-   encoding = locale.getdefaultlocale()[1]
-   output   = ""
-
-   try:
-       opts, args = getopt.getopt(argv, "hs:u:p:", ["port=", "encoding=", "cut"])
-   except getopt.GetoptError:
-      print(usage)
-      sys.exit(2)
-
-   if len(argv) == 0:
-      print(usage)
-      sys.exit()
-
-   for opt, arg in opts:
-      if opt == "-h":
-         print(usage)
-         sys.exit()
-      elif opt == "-s":
-         server = arg
-      elif opt == "-u":
-         user = arg
-      elif opt == "-p":
-         password = arg
-      elif opt == "--port":
-         port = int(arg)
-      elif opt == "--cut":
-         cut = True
-      elif opt == "--encoding":
-         encoding = arg
-
-   try:
-      mail = imaplib.IMAP4_SSL(server, port)
-      mail.login(user, password)
-   except imaplib.IMAP4.error:
-      print("CheckMailError: invalid credentials")
-      sys.exit(2)
-
-   status, counts = mail.status("Inbox","(MESSAGES UNSEEN)")
-
-   unread = int(counts[0].split()[4][:-1])
-
-   if status == "OK" and unread:
-      mail.select("Inbox", readonly = 1)
-      ret, messages = mail.uid("search", None, "(UNSEEN)")
-
-      if ret == "OK":
-          latest_email_uid = messages[0].split()[-1]
-
-          ret_header, new_mail_header = mail.uid("fetch", latest_email_uid,
-                                                 "(BODY.PEEK[HEADER.FIELDS (SUBJECT FROM)])")
-          ret_text, new_mail_text = mail.uid("fetch", latest_email_uid, "(BODY[TEXT])")
-
-          if ret_header == "OK" and ret_text == "OK":
-              try: # not all the servers like this, that's why we try
-                  mail.store(latest_email_uid, "-FLAGS", "\\Seen")
-              except imaplib.IMAP4.error:
-                  # this simply means the server refused to
-                  # toggle Seen flag from mail
-                  print("[+Seen]\n")
-
-              nm_header = new_mail_header[0][1].decode(encoding, "replace").strip()
-              nm_text = new_mail_text[0][1].decode(encoding, "replace").strip()
-
-              if unread == 1:
-                  print(user, "has 1 new message\n")
-              else:
-                  print(user, "has", unread, "new messages\n")
-                  nm_header.replace("From:", "Latest from:", 1)
-
-              print(nm_header, "\n")
-
-              if cut:
-                  if len(nm_text) <= 100:
-                      print(nm_text)
-                  else:
-                      print(nm_text[0:100])
-                      print("[...]")
-              else:
-                  print(nm_text)
-   else:
-      print("No new messages")
-
-   mail.logout()
-
-if __name__ == "__main__":
-   main(sys.argv[1:])
index fa61c3484690dc8723eff04418b9bc02fdca411b..ba1fa58f0aea99c57444c8c75b810f3ec2fe50aa 100644 (file)
@@ -30,14 +30,14 @@ local function worker(args)
 
     bat.widget = wibox.widget.textbox('')
 
-    bat_now = {
-        status = "not present",
-        perc   = "N/A",
-        time   = "N/A",
-        watt   = "N/A"
-    }
-
     function bat.update()
+        bat_now = {
+            status = "not present",
+            perc   = "N/A",
+            time   = "N/A",
+            watt   = "N/A"
+        }
+
         local present = first_line("/sys/class/power_supply/"
                                    .. battery
                                    .. "/present")
index 9821cb3614aa0edc0f6c5395a49945f487fcaf23..4df3610db18364fdfb4b5fa63e3a6c3b97249928 100644 (file)
@@ -11,10 +11,9 @@ local helpers      = require("lain.helpers")
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
-local io           = { popen = io.popen }
-local tonumber     = tonumber
-local string       = { len    = string.len,
-                       format = string.format }
+local io           = { popen  = io.popen }
+local string       = { format = string.format,
+                       gsub   = string.gsub }
 
 local setmetatable = setmetatable
 
@@ -29,102 +28,58 @@ local function worker(args)
     local mail     = args.mail
     local password = args.password
 
-    local port     = args.port or "993"
+    local port     = args.port or 993
     local timeout  = args.timeout or 60
-    local encoding = args.encoding or nil
-    local maxlen   = args.maxlen or 200
     local is_plain = args.is_plain or false
     local settings = args.settings or function() end
 
-    local checkmail = helpers.scripts_dir .. "checkmail"
+    local head_command  = "curl --connect-timeout 1 -fsm 3"
+    local request = "-X 'SEARCH (UNSEEN)'"
 
-    helpers.set_map(mail, true)
-    helpers.set_map(mail .. " count", "0")
+    helpers.set_map(mail, 0)
 
     if not is_plain
     then
-        if not imap.stored
-        then
-            local f = io.popen(password)
-            password = f:read("*all"):gsub("\n", ""):gsub("\r", "")
-            f:close()
-            imap.stored = password
-        else
-            password = imap.stored
-        end
+        local f = io.popen(password)
+        password = f:read("*all"):gsub("\n", "")
+        f:close()
     end
 
     imap.widget = wibox.widget.textbox('')
 
-    notification_preset = {
-        icon     = helpers.icons_dir .. "mail.png",
-        timeout  = 8,
-        position = "top_left"
-    }
-
     function imap.update()
-        to_execute = string.format("%s -s %s -u %s -p %s --port %s",
-                     checkmail, server, mail, password, port) 
-
-        if encoding ~= nil
-        then
-            to_execute = string.format("%s --encoding %s",
-                         to_execute, encoding)
-        end
-
-        f = io.popen(to_execute)
+        notification_preset = {
+            icon     = helpers.icons_dir .. "mail.png",
+            position = "top_left"
+        }
+        
+        curl = string.format("%s --url imaps://%s:%s/INBOX -u %s:%s %s -k",
+               head_command, server, port, mail, password, request)
+
+        f = io.popen(curl)
         ws = f:read("*all")
         f:close()
 
-        mailcount = "0"
-
-        if ws:find("No new messages") ~= nil
-        then
-            helpers.set_map(mail, true)
-        elseif ws:find("CheckMailError: invalid credentials") ~= nil
-        then
-            helpers.set_map(mail, true)
-            mailcount = "invalid credentials"
-        else
-            mailcount = ws:match("%d") or "0"
-            if helpers.get_map(mail .. " count") ~= mailcount and mailcount ~= "0"
-            then
-                helpers.set_map(mail, true)
-                helpers.set_map(mail .. " count", mailcount)
-            end
-        end
+        t, mailcount = string.gsub(ws, "%d", "")
+        t = nil -- because it's useless
 
         widget = imap.widget
         settings()
 
-        if helpers.get_map(mail) and tonumber(mailcount) >= 1
+        if mailcount > helpers.get_map(mail) and mailcount >= 1
         then
-            notify_title = ws:match(mail .. " has %d new message.?")
-            ws = ws:gsub(notify_title, "", 1):gsub("\n", "", 2)
-
-            -- trying to remove useless infos
-            ws = ws:gsub("--Content.%S+.-\n", "")
-            ws = ws:gsub("--%d+.-\n", "")
-
-            if string.len(ws) > maxlen
-            then
-                ws = ws:sub(1, maxlen) .. "[...]"
+            if mailcount == 1 then
+                nt = mail .. " has one new message"
+            else
+                nt = mail .. " has <b>" .. mailcount .. "</b> new messages"
             end
-
-            notify_title = notify_title:gsub("\n", "")
-
-            naughty.notify({
-                preset = notification_preset,
-                title = notify_title,
-                text = ws
-            })
-
-            helpers.set_map(mail, false)
+            naughty.notify({ preset = notification_preset, text = nt })
         end
+
+        helpers.set_map(mail, mailcount)
     end
 
     helpers.newtimer(mail, timeout, imap.update, true)
-
     return imap.widget
 end
 
diff --git a/widgets/yawn/icons/ThunderintheVicinity.png b/widgets/yawn/icons/ThunderintheVicinity.png
new file mode 120000 (symlink)
index 0000000..1fb3b9c
--- /dev/null
@@ -0,0 +1 @@
+Cloudy.png
\ No newline at end of file
index e0e6f68a39e65551c70ba76bfc1848a5cc0f8ba1..4d14966b17e827df82d1963ece8dd5989f3aaa00 100644 (file)
@@ -132,7 +132,6 @@ local function fetch_weather()
 
     forecast = weather_data:match(": %S+.-,"):gsub(": ", ""):gsub(",", "\n")
     units = units:gsub(" ", "")
-   -- notification_preset = {}
 
     settings()
 end
index 0b74b60e88d1738b4c485e045ae03c7cde029e03..6435eff0c573c5c1cd5572a4a74e29dd3e33416f 100644 (file)
@@ -14,6 +14,7 @@ Isolated Thunderstorms|Temporali Isolati
 Scattered Thunderstorms|Temporali Sparsi
 Thundershowers|Rovesci Temporaleschi
 Thunderstorms|Temporali
+Thunder in the Vicinity|Temporale In Arrivo
 Thunder|Temporale
 AM|In Mattinata
 PM|Nel Pomeriggio
index 98d527d06fd8f0c4aa0983ca8d1613831e3a571f..fd28868ec1f1ecec9c947545bb8fe041f0b6ea47 100644 (file)
@@ -14,6 +14,7 @@ Isolated Thunderstorms|
 Scattered Thunderstorms|
 Thundershowers|
 Thunderstorms|
+Thunder in the Vicinity|
 Thunder|
 AM|
 PM|