about summary refs log tree commit diff
path: root/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-emoji.el
diff options
context:
space:
mode:
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-emoji.el')
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-emoji.el93
1 files changed, 93 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-emoji.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-emoji.el
new file mode 100644
index 000000000000..baec1b03b86f
--- /dev/null
+++ b/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-emoji.el
@@ -0,0 +1,93 @@
+;;; slack-emoji.el ---                               -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2017  南優也
+
+;; Author: 南優也 <yuyaminami@minamiyuuya-no-MacBook.local>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+(require 'slack-request)
+
+(defconst slack-emoji-list "https://slack.com/api/emoji.list")
+
+(defun slack-emoji-watch-download-complete (team paths)
+  (if (eq (length (cl-remove-if #'identity (mapcar #'file-exists-p paths)))
+          0)
+      (when (timerp (oref team emoji-download-watch-timer))
+        (cancel-timer (oref team emoji-download-watch-timer))
+        (oset team emoji-download-watch-timer nil)
+        (emojify-create-emojify-emojis t))))
+
+(defun slack-request-emoji (team)
+  (if (require 'emojify nil t)
+      (cl-labels
+          ((handle-alias (name emojis)
+                         (let* ((raw-url (plist-get emojis name))
+                                (alias (if (string-prefix-p "alias:" raw-url)
+                                           (intern (format ":%s" (cadr (split-string raw-url ":")))))))
+                           (or (and alias (or (plist-get emojis alias)
+                                              (let ((emoji (emojify-get-emoji (format "%s:" alias))))
+                                                (if emoji
+                                                    (concat (emojify-image-dir) "/" (gethash "image" emoji))))))
+                               raw-url)))
+           (push-new-emoji (emoji)
+                           (cl-pushnew emoji emojify-user-emojis
+                                       :test #'string=
+                                       :key #'car))
+           (on-success
+            (&key data &allow-other-keys)
+            (slack-request-handle-error
+             (data "slack-request-emoji")
+             (emojify-create-emojify-emojis)
+             (let* ((emojis (plist-get data :emoji))
+                    (names (cl-remove-if
+                            #'(lambda (key) (not (plist-member emojis key)))
+                            emojis))
+                    (paths
+                     (mapcar
+                      #'(lambda (name)
+                          (let* ((url (handle-alias name emojis))
+                                 (path (if (file-exists-p url) url
+                                         (slack-image-path url)))
+                                 (emoji (cons (format "%s:" name)
+                                              (list (cons "name" (substring (symbol-name name) 1))
+                                                    (cons "image" path)
+                                                    (cons "style" "github")))))
+                            (if (file-exists-p path)
+                                (push-new-emoji emoji)
+                              (slack-url-copy-file
+                               url
+                               path
+                               :success #'(lambda () (push-new-emoji emoji))))
+
+                            path))
+                      names)))
+
+               (oset team
+                     emoji-download-watch-timer
+                     (run-with-idle-timer 5 t #'slack-emoji-watch-download-complete team paths))))))
+        (slack-request
+         (slack-request-create
+          slack-emoji-list
+          team
+          :success #'on-success)))))
+
+(provide 'slack-emoji)
+;;; slack-emoji.el ends here