diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-file-comment.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-file-comment.el | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-file-comment.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-file-comment.el new file mode 100644 index 000000000000..faeba0cdcdd7 --- /dev/null +++ b/configs/shared/emacs/.emacs.d/elpa/slack-20180712.2222/slack-file-comment.el @@ -0,0 +1,210 @@ +;;; slack-file-comment.el --- -*- lexical-binding: t; -*- + +;; Copyright (C) 2017 + +;; Author: <yuya373@yuya373> +;; 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 <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; + +;;; Code: +(require 'slack-util) +(require 'slack-message) +(require 'slack-file) + +(define-derived-mode slack-edit-file-comment-mode + fundamental-mode + "Slack Edit File Comment" + "" + (slack-buffer-enable-emojify)) + +(defvar slack-edit-file-comment-mode-map + (let ((keymap (make-sparse-keymap))) + (define-key keymap (kbd "C-c C-c") #'slack-file-comment-edit-commit) + keymap)) + +(defclass slack-file-comment (slack-user-message) + ((id :initarg :id) + (file-id :initarg :file_id :type string) + (created :initarg :created) + (timestamp :initarg :timestamp) + (user :initarg :user) + (is-intro :initarg :is_intro) + (comment :initarg :comment) + (channel :initarg :channel) + (reactions :initarg :reactions type list) + (is-starred :initarg :is_starred :type boolean :initform nil))) + +(defclass slack-file-comment-message (slack-file-message) + ((comment :initarg :comment :initform nil))) + +(defclass slack-file-mention-message (slack-file-message) + ((user :initarg :user :initform nil))) + +(defmethod slack-reaction-delete ((this slack-file-comment) reaction) + (with-slots (reactions) this + (setq reactions + (slack-reaction--delete reactions reaction)))) + +(defmethod slack-reaction-push ((this slack-file-comment) reaction) + (push reaction (oref this reactions))) + +(defmethod slack-reaction-find ((this slack-file-comment) reaction) + (slack-reaction--find (oref this reactions) reaction)) + +(defmethod slack-message-reactions ((this slack-file-comment)) + (oref this reactions)) + +(defmethod slack-message-reaction-to-string ((m slack-file-comment) team) + (let ((reactions (oref m reactions))) + (when reactions + (slack-format-reactions reactions team)))) + +(defmethod slack-equalp ((c slack-file-comment) other) + (string= (oref c id) (oref other id))) + +(defmethod slack-merge ((old slack-file-comment) new) + (slack-merge-list (oref old reactions) (oref new reactions)) + (oset old comment (oref new comment))) + +(defmethod slack-message-body ((comment slack-file-comment) team) + (slack-message-unescape-string (oref comment comment) team)) + +(defmethod slack-message-to-string ((comment slack-file-comment) team) + (let ((header (slack-message-header-to-string comment team)) + (body (slack-message-body-to-string comment team)) + (reactions (slack-message-reaction-to-string comment team))) + (propertize (slack-format-message header body reactions) + 'file-comment-id (oref comment id)))) + +(defmethod slack-file-id ((file-comment slack-file-comment)) + (oref file-comment file-id)) + +(defmethod slack-message-star-added ((this slack-file-comment)) + (oset this is-starred t)) + +(defmethod slack-message-star-removed ((this slack-file-comment)) + (oset this is-starred nil)) + +(defmethod slack-message-star-api-params ((this slack-file-comment)) + (cons "file_comment" (oref this id))) + +(defun slack-file-comment-edit-commit () + (interactive) + (slack-if-let* ((buf slack-current-buffer) + (message (buffer-substring-no-properties (point-min) (point-max)))) + (slack-buffer-send-message buf message))) + +(defun slack-file-comment-process-star-api (url team) + (slack-if-let* ((file-id slack-current-file-id) + (file-comment-id (slack-get-file-comment-id))) + (slack-with-file file-id team + (slack-with-file-comment file-comment-id file + (slack-message-star-api-request url + (list (slack-message-star-api-params file-comment)) + team))))) + +(defmethod slack-message-set-file-comment ((m slack-file-comment-message) payload) + (let* ((file-id (plist-get (plist-get payload :file) :id)) + (comment (plist-get payload :comment)) + (file-comment (slack-file-comment-create comment file-id))) + (oset m comment file-comment) + m)) + +(defmethod slack-message-sender-name ((m slack-file-comment-message) team) + (slack-user-name (oref (oref m comment) user) team)) + +(defmethod slack-message-sender-id ((m slack-file-comment-message)) + (oref (oref m comment) user)) + +(defmethod slack-message-star-added ((m slack-file-comment-message)) + (slack-message-star-added (oref m comment))) + +(defmethod slack-message-star-removed ((m slack-file-comment-message)) + (slack-message-star-removed (oref m comment))) + +(defmethod slack-message-star-api-params ((m slack-file-comment-message)) + (slack-message-star-api-params (oref m comment))) + +(defmethod slack-reaction-delete ((this slack-file-comment-message) reaction) + (slack-reaction-delete (oref this comment) reaction)) + +(defmethod slack-reaction-push ((this slack-file-comment-message) reaction) + (slack-reaction-push (oref this comment) reaction)) + +(defmethod slack-reaction-find ((this slack-file-comment-message) reaction) + (slack-reaction-find (oref this comment) reaction)) + +(defmethod slack-message-reactions ((this slack-file-comment-message)) + (slack-message-reactions (oref this comment))) + +(defmethod slack-message-get-param-for-reaction ((m slack-file-comment-message)) + (cons "file_comment" (oref (oref m comment) id))) + +(defmethod slack-file-id ((m slack-file-comment-message)) + (slack-file-id (oref m comment))) + +(defmethod slack-message-starred-p ((m slack-file-comment-message)) + (oref (oref m comment) is-starred)) + +(defmethod slack-message-to-string ((this slack-file-comment-message) team) + (with-slots (permalink name id page) (oref this file) + (with-slots (comment) (oref this comment) + (let* ((face '(:underline t)) + (text (format "commented on %s <%s|open in browser>\n%s" + (slack-file-link-info (oref (oref this file) id) name) + permalink + (format "“ %s" (slack-message-unescape-string comment + team)))) + (header (slack-message-header-to-string this team)) + (reactions (slack-message-reaction-to-string this team))) + (slack-format-message header text reactions))))) + +(defmethod slack-message-get-user-id ((m slack-file-comment-message)) + (oref (oref m comment) user)) + +(defmethod slack-message-edit-type ((_m slack-file-comment-message)) + 'edit-file-comment) + +(defmethod slack-message-get-text ((m slack-file-comment-message)) + (oref (oref m comment) comment)) + +(defmethod slack-message-changed--copy ((this slack-file-comment-message) other) + (when (slack-file-comment-message-p other) + (let ((changed (call-next-method))) + (with-slots ((old-comment comment) text) this + (let ((new-comment (oref other comment))) + (oset old-comment reactions (oref new-comment reactions)) + (unless (string= (oref old-comment comment) (oref new-comment comment)) + (oset old-comment comment (oref new-comment comment)) + (setq changed t)))) + changed))) + +(defmethod slack-ts ((this slack-file-comment)) + (number-to-string (oref this timestamp))) + +(defmethod slack-message-update ((this slack-file-comment) file team) + (slack-if-let* ((buffer (slack-buffer-find 'slack-file-info-buffer + file + team))) + (progn + (oset buffer file file) + (slack-buffer-update buffer (oref this id))))) + +(provide 'slack-file-comment) +;;; slack-file-comment.el ends here |