emacs-slack icon indicating copy to clipboard operation
emacs-slack copied to clipboard

Zoom links not supported (solution inside)

Open jumper047 opened this issue 2 years ago • 0 comments

In my company we using slack with zoom app, which generates special blocks inside buffer with "join" button and additional stuff. I added rudimentary support for this type of blocks - it's not perfect, but I suppose it useful enough to post it here. Just add it somewhere in your slack config:

    ;; Zoom support
    (defclass slack-zoom-call-block ()
      ((type :initarg :type :type string)
       (block-id :initarg :block_id :type string)
       (name :initarg :name :type string)
       (id :initarg :id :type string)
       (join-url :initarg :join_url :type string)))

    (cl-defmethod slack-block-to-string ((this slack-zoom-call-block) &optional _option)
      (with-slots (name id join-url) this
	(format "%s\nMeeting ID: %s\n<%s|Join>"
		(propertize name 'face 'slack-mrkdwn-bold-face) id join-url)))

    (defun slack-create-zoom-call-block (payload)
      (let ((call-data (plist-get (plist-get payload :call) :v1)))
	(make-instance 'slack-zoom-call-block
		       :type (plist-get payload :type)
		       :block_id (plist-get payload :block_id)
		       :name (plist-get call-data :name)
		       :id (plist-get call-data :id)
		       :join_url (plist-get call-data :join_url))))

    (defun my/slack-create-layout-block-advice (orig &rest args)
      (let ((type (plist-get (cl-first args) :type)))
	(if (string= "call" type)
	    (slack-create-zoom-call-block (cl-first args))
	  (apply orig args))))

    (advice-add 'slack-create-layout-block :around 'my/slack-create-layout-block-advice)

jumper047 avatar Apr 16 '22 09:04 jumper047