Changeset 61 for lang/elisp

Show
Ignore:
Timestamp:
07/31/08 16:10:43 (16 years ago)
Author:
tsuyoshi
Message:

Commit test twittering-mode for 'since' support

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/elisp/twittering-mode/branches/tsuyoshi/twittering-mode.el

    r50 r61  
    5959(defvar twittering-mode-map (make-sparse-keymap)) 
    6060 
    61 (defvar twittering-timer nil 
    62   "Timer object for timeline refreshing will be stored here. DO NOT SET VALUE 
    63 MANUALLY.") 
     61(defvar twittering-timer nil "Timer object for timeline refreshing will be stored here. DO NOT SET VALUE MANUALLY.") 
    6462 
    6563(defvar twittering-idle-time 20) 
     
    7775(make-variable-buffer-local 'twittering-jojo-mode) 
    7876 
    79 (defvar twittering-status-format "%i %s,  %@:\n  %t // from %f%L" 
    80   "Formatt Rule: 
    81  %s - screen_name 
    82  %S - name 
    83  %i - profile_image 
    84  %d - description 
    85  %l - location 
    86  %L - \" [location]\" 
    87  %u - url 
    88  %j - user.id 
    89  %p - protected? 
    90  %c - created_at (raw UTC string) 
    91  %C{time-format-str} - created_at (formatted with time-format-str) 
    92  %@ - X seconds ago 
    93  %t - text 
    94  %' - truncated 
    95  %f - source 
    96  %# - id") 
     77(defvar twittering-status-format nil) 
     78(setq twittering-status-format "%i %s,  %@:\n  %t // from %f%L") 
     79;; %s - screen_name 
     80;; %S - name 
     81;; %i - profile_image 
     82;; %d - description 
     83;; %l - location 
     84;; %L - " [location]" 
     85;; %u - url 
     86;; %j - user.id 
     87;; %p - protected? 
     88;; %c - created_at (raw UTC string) 
     89;; %C{time-format-str} - created_at (formatted with time-format-str) 
     90;; %@ - X seconds ago 
     91;; %t - text 
     92;; %' - truncated 
     93;; %f - source 
     94;; %# - id 
    9795 
    9896(defvar twittering-buffer "*twittering*") 
     
    10098  (twittering-get-or-generate-buffer twittering-buffer)) 
    10199 
    102 (defvar twittering-http-buffer " *twittering-http-buffer*") 
     100(defvar twittering-http-buffer "*twittering-http-buffer*") 
    103101(defun twittering-http-buffer () 
    104102  (twittering-get-or-generate-buffer twittering-http-buffer)) 
    105103 
    106104(defvar twittering-friends-timeline-data nil) 
     105(defvar twittering-friends-timeline-last-update nil) 
    107106 
    108107(defvar twittering-username-face 'twittering-username-face) 
     
    156155;;; to show image files 
    157156 
    158 (defvar twittering-wget-buffer " *twittering-wget-buffer*") 
     157(defvar twittering-wget-buffer "*twittering-wget-buffer*") 
    159158(defun twittering-wget-buffer () 
    160159  (twittering-get-or-generate-buffer twittering-wget-buffer)) 
     
    205204   (t nil))) 
    206205 
     206(defun twittering-setftime (fmt string uni) 
     207  (format-time-string fmt ; like "%Y-%m-%d %H:%M:%S" 
     208                      (apply 'encode-time (parse-time-string string)) 
     209                      uni)) 
    207210(defun twittering-local-strftime (fmt string) 
    208   (format-time-string fmt ; like "%Y-%m-%d %H:%M:%S", shown in localtime 
    209                       (apply 'encode-time (parse-time-string string)))) 
     211  (twittering-setftime fmt string nil)) 
     212(defun twittering-global-strftime (fmt string) 
     213  (twittering-setftime fmt string t)) 
     214 
    210215 
    211216(defvar twittering-debug-mode nil) 
     
    255260      (define-key km "s" 'twittering-scroll-mode) 
    256261      (define-key km "t" 'twittering-toggle-proxy) 
    257       (define-key km "F" 'twittering-status-toggle-favorite) 
    258262      (define-key km "\C-c\C-p" 'twittering-toggle-proxy) 
    259263      nil)) 
     
    327331;;; 
    328332 
    329 (defun twittering-http-get (method-class method &optional sentinel) 
     333(defun twittering-http-get (method-class method &optional parameters sentinel) 
    330334  (if (null sentinel) (setq sentinel 'twittering-http-get-default-sentinel)) 
    331335 
     
    357361                 request) 
    358362             (setq request 
    359                    (concat "GET http://twitter.com/" method-class "/" method ".xml HTTP/1.1" nl 
     363                   (concat "GET http://twitter.com/" method-class "/" method 
     364                           ".xml" 
     365                           (when parameters 
     366                             (concat "?" 
     367                                     (mapconcat 
     368                                      (lambda (param-pair) 
     369                                        (format "%s=%s" 
     370                                                (twittering-percent-encode (car param-pair)) 
     371                                                (twittering-percent-encode (cdr param-pair)))) 
     372                                      parameters 
     373                                      "&"))) 
     374                           " HTTP/1.1" nl 
    360375                           "Host: twitter.com" nl 
    361376                           "User-Agent: " (twittering-user-agent) nl 
     
    380395                                         proxy-password)) 
    381396                                nl))) 
    382                            nl nl)) 
     397                           nl)) 
    383398             (debug-print (concat "GET Request\n" request)) 
    384399             request))) 
     
    544559      (let ((formatted-status (apply 'concat (nreverse result)))) 
    545560        (add-text-properties 0 (length formatted-status) 
    546                              `(username ,(attr 'user-screen-name) 
    547                                         id ,(attr 'id) 
    548                                         favorited ,(attr 'favorited)) 
     561                             `(username ,(attr 'user-screen-name)) 
    549562                             formatted-status) 
    550563        formatted-status) 
     
    586599             request) 
    587600         (setq  request 
    588                 (concat "POST http://twitter.com/" method-class "/" method ".xml?" 
    589                         (if parameters 
    590                             (mapconcat 
    591                              (lambda (param-pair) 
    592                                (format "%s=%s" 
    593                                        (twittering-percent-encode (car param-pair)) 
    594                                        (twittering-percent-encode (cdr param-pair)))) 
    595                              parameters 
    596                              "&")) 
     601                (concat "POST http://twitter.com/" method-class "/" method ".xml" 
     602                        (when parameters 
     603                          (concat "?" 
     604                                  (mapconcat 
     605                                   (lambda (param-pair) 
     606                                     (format "%s=%s" 
     607                                             (twittering-percent-encode (car param-pair)) 
     608                                             (twittering-percent-encode (cdr param-pair)))) 
     609                                   parameters 
     610                                   "&"))) 
    597611                        " HTTP/1.1" nl 
    598612                        "Host: twitter.com" nl 
     
    613627                                      proxy-password)) 
    614628                             nl))) 
    615                         nl nl)) 
     629                        nl)) 
    616630         (debug-print (concat "POST Request\n" request)) 
    617631         request))))) 
     
    683697    (let* ((status-data (cddr status)) 
    684698           id text source created-at truncated 
    685            favorited in_reply_to_status_id in_reply_to_user_id 
    686699           (user-data (cddr (assq 'user status-data))) 
    687700           user-id user-name 
     
    701714      (setq created-at (assq-get 'created_at status-data)) 
    702715      (setq truncated (assq-get 'truncated status-data)) 
    703       (setq favorited (assq-get 'favorited status-data)) 
    704       (setq in_reply_to_user_id (assq-get 'in_reply_to_user_id status-data)) 
    705       (setq in_reply_to_user_id (assq-get 'in_reply_to_status_id status-data)) 
    706716      (setq user-id (string-to-number (assq-get 'id user-data))) 
    707717      (setq user-name (twittering-decode-html-entities 
     
    776786            )) 
    777787 
     788      ;; save last update time 
     789      (setq twittering-friends-timeline-last-update created-at) 
     790 
    778791      (mapcar 
    779792       (lambda (sym) 
    780793         `(,sym . ,(symbol-value sym))) 
    781794       '(id text source created-at truncated 
    782             favorited in_reply_to_status_id in_reply_to_user_id 
    783795            user-id user-name user-screen-name user-location 
    784796            user-description 
     
    888900         ("source" . "twmode"))))) 
    889901 
    890 (defun twittering-http-get-fav-sentinel (proc stat &optional suc-msg) 
    891   (flet ((assq-get (item seq) 
    892                    (car (cddr (assq item seq))))) 
    893     (let ((header (twittering-get-response-header)) 
    894           (body (twittering-get-response-body)) 
    895           (status nil)) 
    896       (if (string-match "HTTP/1\.[01] \\([a-z0-9 ]+\\)\r?\n" header) 
    897           (progn 
    898             (setq status (match-string-no-properties 1 header)) 
    899             (case-string 
    900              status 
    901              (("200 OK") 
    902               (let ((status-data 
    903                      ;;(assq-get 'status body) 
    904                      (cddr (car body)) 
    905                      )) 
    906                 (message "status %s: favorited - %s" 
    907                          (assq-get 'id status-data) 
    908                          (assq-get 'favorited status-data)))) 
    909              (t (message status)))) 
    910         (message "Failure: Bad http response."))))) 
    911  
    912 (defun twittering-status-set-favorite (id) 
    913   (with-temp-buffer 
    914     (twittering-http-get "favourings" (format "create/%d" id) 
    915                          'twittering-http-get-fav-sentinel))) 
    916  
    917 (defun twittering-status-destroy-favorite (id) 
    918   (with-temp-buffer 
    919     (twittering-http-get "favourings" (format "destroy/%d" id) 
    920                          'twittering-http-get-fav-sentinel))) 
    921  
    922 (defun twittering-status-toggle-favorite () 
    923   (interactive) 
    924   (let ((id (get-text-property (point) 'id)) 
    925         (favorite-status 
    926          (string-equal "true" (get-text-property (point) 'favorited)))) 
    927     (if favorite-status 
    928         ;; destroy 
    929         (progn 
    930           (twittering-status-destroy-favorite id) 
    931           (message "Destory favorite : %d" id)) 
    932       (twittering-status-set-favorite id) 
    933       (message "Set favorite : %d" id)))) 
    934  
    935902;;; 
    936903;;; Commands 
     
    958925    (if (not buf) 
    959926        (twittering-stop) 
    960       (twittering-http-get "statuses" "friends_timeline") 
    961       )) 
     927       (if (not twittering-friends-timeline-last-update) 
     928           (twittering-http-get "statuses" "friends_timeline") 
     929         (let* ((system-time-locale "C") 
     930                (since 
     931                  (twittering-global-strftime 
     932                   "%a, %d %b %Y %H:%M:%S GMT" 
     933                   twittering-friends-timeline-last-update))) 
     934           (twittering-http-get "statuses" "friends_timeline" 
     935                                `(("since" . ,since))))))) 
    962936 
    963937  (if twittering-icon-mode 
     
    988962  (interactive) 
    989963  (setq twittering-friends-timeline-data nil) 
    990   (twittering-http-get "statuses" "friends_timeline")) 
     964  (if (not twittering-friends-timeline-last-update) 
     965      (twittering-http-get "statuses" "friends_timeline") 
     966    (let* ((system-time-locale "C") 
     967           (since 
     968             (twittering-global-strftime 
     969              "%a, %d %b %Y %H:%M:%S GMT" 
     970              twittering-friends-timeline-last-update))) 
     971      (twittering-http-get "statuses" "friends_timeline" 
     972                           `(("since" . ,since)))))) 
    991973 
    992974(defun twittering-click ()