Fix byte-compile error
[riece] / lisp / riece-twitter.el
index e40d211..5cf7b6d 100644 (file)
@@ -1,4 +1,4 @@
-;;; riece-twitter.el --- post your status to Twitter
+;;; riece-twitter.el --- post your status to Twitter -*- lexical-binding: t -*-
 ;; Copyright (C) 2007 Daiki Ueno
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
   :group 'riece-twitter
   :type 'string)
 
-(defcustom riece-twitter-cache-credential t
-  "If non-nil, cache your credential on Twitter."
-  :group 'riece-twitter
-  :type 'boolean)
+(eval-and-compile
+  (if (fboundp 'clear-string)
+      (defalias 'riece-twitter-clear-string 'clear-string)
+    (defun riece-twitter-clear-string (string)
+      (fillarray string ?\0))))
+
+(defun riece-twitter-set-credential (credential)
+  "Set your credential used to login to Twitter."
+  (interactive
+   (let ((username (read-string "Username: "))
+        password)
+     (unwind-protect
+        (list (concat username ":"
+                      (setq password (read-passwd "Password: "))))
+       (if password
+          (riece-twitter-clear-string password))
+       (setq password nil))))
+  (setq riece-twitter-credential credential))
+
+(defun riece-twitter-update (status)
+  "Update your status."
+  (interactive
+   (progn
+     (unless riece-twitter-credential
+       (error "%s"
+             (substitute-command-keys
+              "\\[riece-twitter-set-credential] to set your credential")))
+     (list (read-string "Status: "))))
+  (message "Sending to Twitter...")
+  (let* ((args
+         (list "-u" riece-twitter-credential
+               "-d" (concat "status="
+                            (riece-twitter-escape-string
+                             (encode-coding-string status 'utf-8)))
+               "-s"
+               "http://twitter.com/statuses/update.json"))
+        (process
+         (apply #'start-process
+                "curl" nil "curl"
+                (if (interactive-p)
+                    args
+                  (append args
+                          (list "-H" "X-Twitter-Client: Riece"
+                                "-H" (concat "X-Twitter-Client-Version: "
+                                             riece-version-number)
+                                "-H" "X-Twitter-Client-URL: http://riece.nongnu.org/twitter.xml"
+                                "-d" "source=riece"))))))
+    (set-process-sentinel process #'riece-twitter-sentinel)))
+
+(defun riece-twitter-sentinel (_process status)
+  (if (equal status "finished\n")
+      (message "Sending to Twitter...done")
+    (message "Sending to Twitter...failed: %s"
+            (substring status 0 (1- (length status))))))
 
 (defun riece-twitter-message-filter (message)
-  (let ((credential
-        (or riece-twitter-credential
-            (concat (read-string "Twitter username: ") ":"
-                    (read-passwd "Twitter password: ")))))
-    (if (and riece-twitter-cache-credential
-            (not (eq credential riece-twitter-credential)))
-       (setq riece-twitter-credential credential))
-    (if (and (riece-message-own-p message)
-            (eq 'action (riece-message-type message)))
-       (start-process
-        "curl" nil "curl"
-        "-H" "X-Twitter-Client: Riece"
-        "-H" (concat "X-Twitter-Client-Version: " riece-version-number)
-        "-H" "X-Twitter-Client-URL: http://riece.nongnu.org/twitter.xml"
-        "-u" credential
-        "-d" (concat "status="
-                     (riece-twitter-escape-string
-                      (encode-coding-string (riece-message-text message)
-                                            'utf-8)))
-        "-s"
-        "http://twitter.com/statuses/update.json")))
+  (if (and (riece-message-own-p message)
+          (eq 'action (riece-message-type message)))
+      (if riece-twitter-credential
+         (riece-twitter-update (riece-message-text message))
+       (message "%s"
+                (substitute-command-keys
+                 "\\[riece-twitter-set-credential] to set your credential"))))
   message)
 
 (defun riece-twitter-escape-string (string)