;;; dzen.el --- Control DZEN2 from emacs

;; Copyright (C) 2012  Tom Willemse

;; Author: Tom Willemse <slash@drd>
;; Keywords: convenience

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;;

;;; Code:

(require 'newst-backend)
(require 'sawfish)

(defvar dzen-process nil
  "Dzen2's process.")

(defvar dzen-timer nil
  "Timer used to update the dzen line.")

(defun get-mail-count (account)
  (length (directory-files (concat "/home/slash/documents/mail/"
                                   account "/inbox/new") nil "^[^.]")))

(defun dzen-update ()
  (let ((strl "")
        (strc (if (boundp 'metal-express-radio-currently-playing)
                  metal-express-radio-currently-playing
                ""))
        (strr (format
               "jabber: %s ryu: %d gm: %d aet: %d 9n: %d rss: %d\n"
               (oni:current-jabber-status)
               (get-mail-count "ryuslash.org")
               (get-mail-count "gmail")
               (get-mail-count "aethon")
               (get-mail-count "ninthfloor")
               (newsticker--stat-num-items-total 'new))))
    (process-send-string
     "dzen2" (format "%s^p(_CENTER)^p(-%d)%s^p(_RIGHT)^p(-%d)%s"
                     strl
                     (* (floor (/ (length strc) 2)) 8) strc
                     (+ 8 (* 8 (length strr))) strr))))

(defun dzen-start ()
  (interactive)
  (if (or (null dzen-process) (not (process-live-p dzen-process)))
      (progn
        (setq dzen-process
              (start-process "dzen2" "*dzen2*" "dzen2"
                             "-w" "1920"
                             "-fn" "Monaco-10"
                             "-bg" "#222224"
                             "-fg" "#eeeeec"
                             "-y" "1060"))
        (dzen-update)
        (setq dzen-timer (run-with-timer 1 1 #'dzen-update)))
    (message "Dzen2 already running")))

(defun dzen-stop ()
  (interactive)
  (if (and dzen-process (process-live-p dzen-process))
      (progn
        (when dzen-timer
          (cancel-timer dzen-timer))
        (kill-process "dzen2"))
    (message "Dzen2 is not running"))
  (setq dzen-process nil
        dzen-timer nil))

(provide 'dzen)
;;; dzen.el ends here
