X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-twitter.el;h=d82841296529a9ffc9424db39e30302d0b7c8303;hb=9fab6517fc217311d3741753fd4e3c1f33e8c74a;hp=214d03f318405f1173e927dc4ca59101c96082bb;hpb=5ec2f664141ef6f120dc5c213c843eb8de9b50bf;p=elisp%2Friece.git diff --git a/lisp/riece-twitter.el b/lisp/riece-twitter.el index 214d03f..d828412 100644 --- a/lisp/riece-twitter.el +++ b/lisp/riece-twitter.el @@ -38,34 +38,64 @@ :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 ((process + (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" riece-twitter-credential + "-d" "source=riece" + "-d" (concat "status=" + (riece-twitter-escape-string + (encode-coding-string status 'utf-8))) + "-s" + "http://twitter.com/statuses/update.json"))) + (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) (if (and (riece-message-own-p message) (eq 'action (riece-message-type 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)) - (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" "source=riece" - "-d" (concat "status=" - (riece-twitter-escape-string - (encode-coding-string (riece-message-text message) - 'utf-8))) - "-s" - "http://twitter.com/statuses/update.json"))) + (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)