mastodon.el を新 API に対応させる

# 
1. テキストベースで mastodon を使いたい
2. テキストベースなら Emacs でしょう、と google 検索して[JPでmastodon.elを使う](https://qiita.com/TakesxiSximada/items/22879136fa7bafb8222d)を見つける
3. 自分のサーバーが v2.1.0 なので書かれている修正を適用してトゥート出来るようになる
4. 自分の bot がリプライを利用しているためスレッド表示ができず困る
5. 泥縄修正する

結果 Mew 程度しか Emacs を使ったことがないレベルの私でもなんとか新しい API に対応させることができました。
このときの記録を残しておきます。
ちなみに LISP は初めていじります。なのであまりきれいな修正ではないでしょう。

# mastodon-tl.el 修正
## mastodon-tl--byline で Favourited / Boosted の判定処理の修正
判定が正しく行われていないので、すべてのトゥートが Favourited / Boosted 扱いされています。これをどうにかするために mastodon-tl--byline の手前に新しく関数を一つ追加しました。

~~~
(defun convert-to-boolean (val)
 (cond ((equal 't val) t)
       ((equal json-false val) nil)
       (t (symbol-name val))))
~~~
これを mastodon-tl--byline で利用します。

~~~
defun mastodon-tl--byline (toot)
  "Generate byline for TOOT."
  (let ((id (cdr (assoc 'id toot)))
        (timestamp (mastodon-tl--field 'created_at toot))
        (faved (convert-to-boolean (mastodon-tl--field 'favourited toot)))    ;; 修正
        (boosted (convert-to-boolean (mastodon-tl--field 'reblogged toot))))  ;; 修正
~~~
## id の扱いの修正
[JPでmastodon.elを使う](https://qiita.com/TakesxiSximada/items/22879136fa7bafb8222d)で記述があるように id は数値から文字列になっているのですべて修正します。

~~~
(defun mastodon-tl--more-json (endpoint id)
  "Return JSON for timeline ENDPOINT before ID."
  (let* ((url (mastodon-http--api (concat
                                   endpoint
                                   (if (string-match-p "?" endpoint)
                                       "&"
                                     "?")
                                   "max_id="
                                   id))))  ;; 修正
~~~
~~~
(defun mastodon-tl--updated-json (endpoint id)
  "Return JSON for timeline ENDPOINT since ID."
  (let ((url (mastodon-http--api (concat
                                  endpoint
                                  (if (string-match-p "?" endpoint)
                                      "&"
                                    "?")
                                  "since_id="
                                  id))))  ;; 修正
~~~
~~~
(defun mastodon-tl--thread ()
  "Open thread buffer for toot under `point'."
  (interactive)
  (let* ((id (mastodon-tl--property 'toot-id))  ;; 修正
~~~

# mastodon-toot.el 修正
## id の扱いの修正
ここでも id が数値であることを期待しているので修正します。

~~~
(defun mastodon-toot--action (action callback)
  "Take ACTION on toot at point, then execute CALLBACK."
  (let* ((id (mastodon-tl--property 'toot-id))
         (url (mastodon-http--api (concat "statuses/"
                                         id  ;; 修正
~~~
~~~
(defun mastodon-toot--reply ()
  "Reply to toot at `point'."
  (interactive)
  (let* ((toot (mastodon-tl--property 'toot-json))
         (id (mastodon-tl--field 'id toot))  ;; 修正
         (account (mastodon-tl--field 'account toot))
         (user (cdr (assoc 'username account))))
    (mastodon-toot user id)))
~~~
Favourited / Boosted の通知のための format で id について数値を期待しているのでこれも修正します

~~~
(defun mastodon-toot--toggle-boost ()
  "Boost/unboost toot at `point'."
  (interactive)
  (let* ((id (mastodon-tl--property 'toot-id))
         (boosted (get-text-property (point) 'boosted-p))
         (action (if boosted "unreblog" "reblog"))
         (msg (if boosted "unboosted" "boosted"))
         (remove (when boosted t)))
    (mastodon-toot--action action
                           (lambda ()
                             (mastodon-toot--action-success "B" remove)
                             (message (format "%s #%s" msg id))))))  ;; 修正
~~~
~~~
(defun mastodon-toot--toggle-favourite ()
  "Favourite/unfavourite toot at `point'."
  (interactive)
  (let* ((id (mastodon-tl--property 'toot-id))
         (faved (get-text-property (point) 'favourited-p))
         (action (if faved "unfavourite" "favourite"))
         (remove (when faved t)))
    (mastodon-toot--action action
                           (lambda ()
                             (mastodon-toot--action-success "F" remove)
                             (message (format "%sd #%s" action id))))))  ;; 修正
~~~
とりあえずこれで動いているようです。