From 5390884b38ca081d81f0c2c79b89118b8b0e0e00 Mon Sep 17 00:00:00 2001 From: Yuya Minami Date: Sat, 28 Jan 2017 22:57:24 +0900 Subject: [PATCH] add slack-message-changed --- slack-message-changed.el | 69 ++++++++++++++++++++++++++++++++++++++++ slack-message.el | 19 ----------- slack-websocket.el | 2 +- slack.el | 1 + 4 files changed, 71 insertions(+), 20 deletions(-) create mode 100644 slack-message-changed.el diff --git a/slack-message-changed.el b/slack-message-changed.el new file mode 100644 index 00000000..7207ae78 --- /dev/null +++ b/slack-message-changed.el @@ -0,0 +1,69 @@ +;;; slack-message-changed.el --- impl for message changed -*- lexical-binding: t; -*- + +;; Copyright (C) 2017 南優也 + +;; Author: 南優也 +;; 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 . + +;;; Commentary: + +;; + +;;; Code: + +(require 'eieio) +(require 'slack-room) +(require 'slack-message) +(require 'slack-message-update) +(require 'slack-thread) + +(defclass _slack-message-changed () + ((room :initarg :room :initform nil) + (team :initarg :team) + (edited-message :initarg :edited-message) + (base-message :initarg :base-message :initform nil))) + +(defclass _slack-thread-message-changed (_slack-message-changed) ()) + +(defun slack-message-changed (payload team) + (let* ((room (slack-room-find (plist-get payload :channel) team)) + (mpayload (plist-get payload :message)) + (edited (and room (slack-message-create (slack-decode mpayload) + team + :room room))) + (base (and room (slack-room-find-message room (plist-get mpayload :ts)))) + (class (and base (or (and (slack-message-thread-messagep base) '_slack-thread-message-changed) + '_slack-message-changed))) + (changed (and class (make-instance class + :room room + :team team + :edited-message edited + :base-message base)))) + (when changed + (slack-message-changed--copy changed) + (slack-message-changed--update changed)))) + +(defmethod slack-message-changed--copy ((this _slack-message-changed)) + (with-slots ((base base-message) (edited edited-message)) this + (oset base text (oref edited text)) + (oset base edited-at (oref edited edited-at)))) + +(defmethod slack-message-changed--update ((this _slack-message-changed)) + (with-slots ((base base-message) team) this + (slack-message-update base team t))) + +(provide 'slack-message-changed) +;;; slack-message-changed.el ends here diff --git a/slack-message.el b/slack-message.el index f9e99b45..74d44628 100644 --- a/slack-message.el +++ b/slack-message.el @@ -260,18 +260,6 @@ (oset parent thread thread)) thread)) -(defun slack-message-edited (payload team) - (let* ((room (slack-room-find (plist-get payload :channel) team)) - (edited-message (slack-message-create - (slack-decode (plist-get payload :message)) - team :room room)) - (message (slack-room-find-message - room (oref edited-message ts)))) - (when message - (oset edited-message reactions (oref message reactions)) - (slack-message-copy-thread-messages edited-message (oref message thread)) - (slack-message-update edited-message team t)))) - (defmethod slack-message-sender-name ((m slack-message) team) (slack-user-name (oref m user) team)) @@ -326,12 +314,5 @@ (defmethod slack-message-get-reactions ((m slack-file-comment-message)) (oref (oref m comment) reactions)) -(defmethod slack-message-copy-thread-messages ((message slack-message) thread) - (if thread - (with-slots ((this thread)) message - (when this - (oset this messages (oref thread messages))))) - message) - (provide 'slack-message) ;;; slack-message.el ends here diff --git a/slack-websocket.el b/slack-websocket.el index e8f0e071..030c8a08 100644 --- a/slack-websocket.el +++ b/slack-websocket.el @@ -266,7 +266,7 @@ (slack-ws-handle-file-share payload team) (slack-ws-update-message payload team)) ((and subtype (string= subtype "message_changed")) - (slack-message-edited payload team)) + (slack-message-changed payload team)) ((and subtype (string= subtype "message_deleted")) (slack-message-deleted payload team)) ((and subtype (string= subtype "message_replied")) diff --git a/slack.el b/slack.el index e0d49586..27c213f9 100644 --- a/slack.el +++ b/slack.el @@ -42,6 +42,7 @@ (require 'slack-reminder) (require 'slack-thread) (require 'slack-message-update) +(require 'slack-message-changed) (require 'slack-websocket) (require 'slack-request)