about summary refs log tree commit diff
path: root/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack.el
diff options
context:
space:
mode:
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack.el')
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack.el227
1 files changed, 227 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack.el
new file mode 100644
index 0000000000..e6184f83a1
--- /dev/null
+++ b/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack.el
@@ -0,0 +1,227 @@
+;;; slack.el --- slack client for emacs              -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2015  yuya.minami
+
+;; Author: yuya.minami <yuya.minami@yuyaminami-no-MacBook-Pro.local>
+;; Keywords: tools
+;; Version: 0.0.2
+;; Package-Requires: ((websocket "1.8") (request "0.2.0") (oauth2 "0.10") (circe "2.3") (alert "1.2") (emojify "0.4") (emacs "24.4"))
+;; 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 'cl-lib)
+(require 'subr-x)
+(require 'oauth2)
+(require 'color)
+
+(require 'slack-util)
+(require 'slack-team)
+(require 'slack-channel)
+(require 'slack-im)
+(require 'slack-file)
+(require 'slack-message-notification)
+(require 'slack-message-sender)
+(require 'slack-message-editor)
+(require 'slack-message-reaction)
+(require 'slack-user-message)
+(require 'slack-bot-message)
+(require 'slack-search)
+(require 'slack-reminder)
+(require 'slack-thread)
+(require 'slack-file-share-message)
+(require 'slack-file-comment)
+(require 'slack-attachment)
+(require 'slack-emoji)
+(require 'slack-star)
+
+(require 'slack-buffer)
+(require 'slack-message-buffer)
+(require 'slack-message-edit-buffer)
+(require 'slack-message-share-buffer)
+(require 'slack-thread-message-buffer)
+(require 'slack-room-message-compose-buffer)
+(require 'slack-pinned-items-buffer)
+(require 'slack-user-profile-buffer)
+(require 'slack-file-list-buffer)
+(require 'slack-file-info-buffer)
+(require 'slack-thread-message-compose-buffer)
+(require 'slack-edit-file-comment-buffer)
+(require 'slack-search-result-buffer)
+(require 'slack-stars-buffer)
+(require 'slack-file-comment-compose-buffer)
+
+(require 'slack-websocket)
+(require 'slack-request)
+(require 'slack-request-worker)
+
+(defgroup slack nil
+  "Emacs Slack Client"
+  :prefix "slack-"
+  :group 'tools)
+
+(defcustom slack-redirect-url "http://localhost:8080"
+  "Redirect url registered for Slack.")
+(defcustom slack-buffer-function #'switch-to-buffer-other-window
+  "Function to print buffer.")
+
+(defvar slack-use-register-team-string
+  "use `slack-register-team' instead.")
+
+(defcustom slack-client-id nil
+  "Client ID provided by Slack.")
+(make-obsolete-variable
+ 'slack-client-id slack-use-register-team-string
+ "0.0.2")
+(defcustom slack-client-secret nil
+  "Client Secret Provided by Slack.")
+(make-obsolete-variable
+ 'slack-client-secret slack-use-register-team-string
+ "0.0.2")
+(defcustom slack-token nil
+  "Slack token provided by Slack.
+set this to save request to Slack if already have.")
+(make-obsolete-variable
+ 'slack-token slack-use-register-team-string
+ "0.0.2")
+(defcustom slack-room-subscription '()
+  "Group or Channel list to subscribe notification."
+  :group 'slack)
+(make-obsolete-variable
+ 'slack-room-subscription slack-use-register-team-string
+ "0.0.2")
+(defcustom slack-typing-visibility 'frame
+  "When to show typing indicator.
+frame means typing slack buffer is in the current frame, show typing indicator.
+buffer means typing slack buffer is the current buffer, show typing indicator.
+never means never show typing indicator."
+  :type '(choice (const frame)
+                 (const buffer)
+                 (const never)))
+
+(defcustom slack-display-team-name t
+  "If nil, only display channel, im, group name."
+  :group 'slack)
+
+(defcustom slack-completing-read-function #'completing-read
+  "Require same argument with `completing-read'."
+  :group 'slack)
+
+(defconst slack-oauth2-authorize "https://slack.com/oauth/authorize")
+(defconst slack-oauth2-access "https://slack.com/api/oauth.access")
+(defconst slack-authorize-url "https://slack.com/api/rtm.start")
+(defconst slack-rtm-connect-url "https://slack.com/api/rtm.connect")
+
+(defun slack-authorize (team &optional error-callback success-callback)
+  (let ((authorize-request (oref team authorize-request)))
+    (if (and authorize-request (not (request-response-done-p authorize-request)))
+        (slack-log "Authorize Already Requested" team)
+      (cl-labels
+          ((on-error (&key error-thrown symbol-status response data)
+                     (oset team authorize-request nil)
+                     (slack-log (format "Slack Authorize Failed: %s" error-thrown)
+                                team)
+                     (when (functionp error-callback)
+                       (funcall error-callback
+                                :error-thrown error-thrown
+                                :symbol-status symbol-status
+                                :response response
+                                :data data)))
+           (on-success (&key data &allow-other-keys)
+                       (oset team authorize-request nil)
+                       (if success-callback
+                           (funcall success-callback data)
+                         (slack-on-authorize data team))))
+        (let ((request (slack-request
+                        (slack-request-create
+                         slack-rtm-connect-url
+                         team
+                         :params (list (cons "mpim_aware" "1"))
+                         :success #'on-success
+                         :error #'on-error))))
+          (oset team authorize-request request))))))
+
+(defun slack-update-team (data team)
+  (let ((self (plist-get data :self))
+        (team-data (plist-get data :team)))
+    (oset team id (plist-get team-data :id))
+    (oset team name (plist-get team-data :name))
+    (oset team self self)
+    (oset team self-id (plist-get self :id))
+    (oset team self-name (plist-get self :name))
+    (oset team ws-url (plist-get data :url))
+    (oset team domain (plist-get team-data :domain))
+    team))
+
+(cl-defun slack-on-authorize (data team)
+  (slack-request-handle-error
+   (data "slack-authorize")
+   (slack-log (format "Slack Authorization Finished" (oref team name)) team)
+   (let ((team (slack-update-team data team)))
+     (cl-labels
+         ((on-open ()
+                   (slack-channel-list-update team)
+                   (slack-group-list-update team)
+                   (slack-im-list-update team)
+                   (slack-bot-list-update team)
+                   (slack-request-emoji team)
+                   (slack-update-modeline)))
+       (slack-ws-open team :on-open #'on-open)))))
+
+(defun slack-on-authorize-e
+    (&key error-thrown &allow-other-keys &rest_)
+  (error "slack-authorize: %s" error-thrown))
+
+(defun slack-oauth2-auth (team)
+  (with-slots (client-id client-secret) team
+    (oauth2-auth
+     slack-oauth2-authorize
+     slack-oauth2-access
+     client-id
+     client-secret
+     "client"
+     nil
+     slack-redirect-url)))
+
+(defun slack-request-token (team)
+  (with-slots (token) team
+    (setq token
+          (oauth2-token-access-token
+           (slack-oauth2-auth team)))))
+
+;;;###autoload
+(defun slack-start (&optional team)
+  (interactive)
+  (cl-labels ((start
+               (team)
+               (slack-team-kill-buffers team)
+               (slack-ws-close team)
+               (when (slack-team-need-token-p team)
+                 (slack-request-token team)
+                 (kill-new (oref team token))
+                 (message "Your Token is added to kill ring."))
+               (slack-authorize team)))
+    (if team
+        (start team)
+      (if slack-teams
+          (cl-loop for team in slack-teams
+                   do (start team))
+        (slack-start (call-interactively #'slack-register-team))))
+    (slack-enable-modeline)))
+
+(provide 'slack)
+;;; slack.el ends here