From b0122d7d896ddcb062a1c9a819ecce2377da5056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mariusz=20Nosin=CC=81ski?= Date: Mon, 6 Jul 2015 11:41:10 +0200 Subject: [PATCH] refactored DirectMessage API for more consistent sendig process. --- .../scalac/slack/bots/MessageListener.scala | 18 +++++++++++++- .../io/scalac/slack/common/Messages.scala | 24 +++++-------------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/main/scala/io/scalac/slack/bots/MessageListener.scala b/src/main/scala/io/scalac/slack/bots/MessageListener.scala index 2d709ab..d80ac0e 100644 --- a/src/main/scala/io/scalac/slack/bots/MessageListener.scala +++ b/src/main/scala/io/scalac/slack/bots/MessageListener.scala @@ -1,19 +1,35 @@ package io.scalac.slack.bots -import akka.actor.{Actor, ActorLogging} +import akka.actor.{Actor, ActorLogging, ActorRef} +import akka.util.Timeout import io.scalac.slack.MessageEventBus import io.scalac.slack.common.{Incoming, MessageEvent, Outgoing, _} +import scala.concurrent.ExecutionContext import scala.language.implicitConversions trait MessagePublisher { + import akka.pattern._ + def bus: MessageEventBus + implicit def publish(event: MessageEvent): Unit = { bus.publish(event) } + def publish(directMessage: DirectMessage)(implicit context: ExecutionContext, userStorage: ActorRef, timeout: Timeout): Unit = { + userStorage ? FindChannel(directMessage.key) onSuccess { + case Some(channel: String) => + val eventToSend = directMessage.event match { + case message: OutboundMessage => message.copy(channel = channel) + case message: RichOutboundMessage => message.copy(channel = channel) + case other => other + } + publish(eventToSend) + } + } } abstract class MessageListener extends Actor with ActorLogging with MessagePublisher diff --git a/src/main/scala/io/scalac/slack/common/Messages.scala b/src/main/scala/io/scalac/slack/common/Messages.scala index 4412b73..a7a0b42 100644 --- a/src/main/scala/io/scalac/slack/common/Messages.scala +++ b/src/main/scala/io/scalac/slack/common/Messages.scala @@ -1,11 +1,6 @@ package io.scalac.slack.common -import akka.actor.ActorRef -import akka.pattern._ -import akka.util.Timeout - import scala.annotation.tailrec -import scala.concurrent.ExecutionContext /** * Created on 08.02.15 22:04 @@ -123,7 +118,6 @@ object Attachment { } - /** * Classifier for message event */ @@ -141,18 +135,12 @@ object Outgoing extends MessageEventType case class MessageType(messageType: String, subType: Option[String]) /** - * Direct message is message send by the private channel - * userStorage try to find channel ID and if will - * message is translated into basic message and send to this channel. + * DirectMessage is sent directly to choosen user + * @param key user's name, Id or channelId + * @param event message to send, channel inside event will be overwritten */ -object DirectMessage extends { - - def apply(key: String, message: String)(implicit context: ExecutionContext, userStorage: ActorRef, timeout: Timeout, forward: (OutboundMessage) => Unit): Unit = { +case class DirectMessage(key: String, event: MessageEvent) - userStorage ? FindChannel(key) onSuccess { - case Some(channel: String) => - forward(OutboundMessage(channel, message)) - } - - } +object DirectMessage { + def apply(key: String, message: String): DirectMessage = DirectMessage(key, OutboundMessage("", message)) } \ No newline at end of file