Show
Ignore:
Timestamp:
05/11/08 15:44:53 (16 years ago)
Author:
tsuyoshi
Message:

support fav for status.

Files:
1 modified

Legend:

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

    r48 r49  
    5959(defvar twittering-mode-map (make-sparse-keymap)) 
    6060 
    61 (defvar twittering-timer nil "Timer object for timeline refreshing will be stored here. DO NOT SET VALUE MANUALLY.") 
     61(defvar twittering-timer nil 
     62  "Timer object for timeline refreshing will be stored here. DO NOT SET VALUE 
     63MANUALLY.") 
    6264 
    6365(defvar twittering-idle-time 20) 
     
    7577(make-variable-buffer-local 'twittering-jojo-mode) 
    7678 
    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 
     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") 
    9597 
    9698(defvar twittering-buffer "*twittering*") 
     
    253255      (define-key km "s" 'twittering-scroll-mode) 
    254256      (define-key km "t" 'twittering-toggle-proxy) 
     257      (define-key km "F" 'twittering-status-toggle-favorite) 
    255258      (define-key km "\C-c\C-p" 'twittering-toggle-proxy) 
    256259      nil)) 
     
    541544      (let ((formatted-status (apply 'concat (nreverse result)))) 
    542545        (add-text-properties 0 (length formatted-status) 
    543                              `(username ,(attr 'user-screen-name)) 
     546                             `(username ,(attr 'user-screen-name) 
     547                                        id ,(attr 'id) 
     548                                        favorited ,(attr 'favorited)) 
    544549                             formatted-status) 
    545550        formatted-status) 
     
    678683    (let* ((status-data (cddr status)) 
    679684           id text source created-at truncated 
     685           favorited in_reply_to_status_id in_reply_to_user_id 
    680686           (user-data (cddr (assq 'user status-data))) 
    681687           user-id user-name 
     
    695701      (setq created-at (assq-get 'created_at status-data)) 
    696702      (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)) 
    697706      (setq user-id (string-to-number (assq-get 'id user-data))) 
    698707      (setq user-name (twittering-decode-html-entities 
     
    771780         `(,sym . ,(symbol-value sym))) 
    772781       '(id text source created-at truncated 
     782            favorited in_reply_to_status_id in_reply_to_user_id 
    773783            user-id user-name user-screen-name user-location 
    774784            user-description 
     
    878888         ("source" . "twmode"))))) 
    879889 
     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 (assq-get 'status body))) 
     903                (message "status %s: favorited - %s" 
     904                         (assq-get 'id status-data) 
     905                         (assq-get 'favorited status-data)))) 
     906             (t (message status)))) 
     907        (message "Failure: Bad http response."))))) 
     908 
     909(defun twittering-status-set-favorite (id) 
     910  (with-temp-buffer 
     911    (twittering-http-get "favourings" (format "create/%d" id) 
     912                         'twittering-http-get-fav-sentinel))) 
     913 
     914(defun twittering-status-destroy-favorite (id) 
     915  (with-temp-buffer 
     916    (twittering-http-get "favourings" (format "destroy/%d" id) 
     917                         'twittering-http-get-fav-sentinel))) 
     918 
     919(defun twittering-status-toggle-favorite () 
     920  (interactive) 
     921  (let ((id (get-text-property (point) 'id)) 
     922        (favorite-status 
     923         (string-equal "true" (get-text-property (point) 'favorited)))) 
     924    (if favorite-status 
     925        ;; destroy 
     926        (progn 
     927          (twittering-status-destroy-favorite id) 
     928          (message "Destory favorite : %d" id)) 
     929      (twittering-status-set-favorite id) 
     930      (message "Set favorite : %d" id)))) 
     931 
    880932;;; 
    881933;;; Commands