2014-12-07 19:09:38 -05:00
|
|
|
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
2014-11-03 15:47:28 -05:00
|
|
|
|
|
|
|
|
#include "FriendsAndChatPrivatePCH.h"
|
|
|
|
|
#include "ChatItemViewModel.h"
|
2014-11-06 15:17:11 -05:00
|
|
|
#include "ChatViewModel.h"
|
2014-11-03 15:47:28 -05:00
|
|
|
|
|
|
|
|
class FChatItemViewModelImpl
|
|
|
|
|
: public FChatItemViewModel
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
2015-03-13 08:26:18 -04:00
|
|
|
virtual FText GetMessage() const override
|
2014-11-03 15:47:28 -05:00
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
return ComposedMessage;
|
2014-11-03 15:47:28 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual const EChatMessageType::Type GetMessageType() const override
|
|
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
return ChatMessages[0]->MessageType;
|
2014-11-03 15:47:28 -05:00
|
|
|
}
|
|
|
|
|
|
2015-03-13 08:26:18 -04:00
|
|
|
virtual FText GetMessageTimeText() const override
|
2014-11-03 15:47:28 -05:00
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
return MessageTimeAsText;
|
2014-11-03 15:47:28 -05:00
|
|
|
}
|
|
|
|
|
|
2015-03-13 08:26:18 -04:00
|
|
|
virtual FDateTime GetMessageTime() const override
|
2014-11-03 15:47:28 -05:00
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
return ChatMessages.Last()->MessageTime;
|
2014-11-03 15:47:28 -05:00
|
|
|
}
|
|
|
|
|
|
2015-03-13 08:26:18 -04:00
|
|
|
virtual void AddMessage(const TSharedRef<FFriendChatMessage>& ChatMessage) override
|
2014-11-19 05:28:05 -05:00
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
ChatMessages.Add(ChatMessage);
|
|
|
|
|
|
|
|
|
|
//Display the time of the latest message only
|
|
|
|
|
FTicker::GetCoreTicker().RemoveTicker(TickerHandle);
|
|
|
|
|
|
|
|
|
|
FTextBuilder MessageBuilder;
|
|
|
|
|
for (int32 Index = 0; Index < ChatMessages.Num(); Index++)
|
|
|
|
|
{
|
|
|
|
|
if (Index > 0)
|
|
|
|
|
{
|
|
|
|
|
static FString MessageBreak(TEXT("<MessageBreak></>"));
|
|
|
|
|
MessageBuilder.AppendLine(MessageBreak);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MessageBuilder.AppendLine(ChatMessages[Index]->Message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ComposedMessage = MessageBuilder.ToText();
|
|
|
|
|
|
|
|
|
|
if (UpdateTimeStamp(60)) //this will broadcast a changed event
|
|
|
|
|
{
|
|
|
|
|
TickerHandle = FTicker::GetCoreTicker().AddTicker(FTickerDelegate::CreateSP(this, &FChatItemViewModelImpl::UpdateTimeStamp), 60);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual FText GetSenderName() const override
|
|
|
|
|
{
|
|
|
|
|
return ChatMessages[0]->FromName;
|
2014-11-19 05:28:05 -05:00
|
|
|
}
|
|
|
|
|
|
2015-04-09 04:02:47 -04:00
|
|
|
virtual FText GetRecipientName() const override
|
|
|
|
|
{
|
|
|
|
|
return ChatMessages[0]->ToName;
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-03 10:21:53 -05:00
|
|
|
virtual const TSharedPtr<FUniqueNetId> GetSenderID() const override
|
2014-11-14 08:05:34 -05:00
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
return ChatMessages[0]->SenderId;
|
2014-12-03 10:21:53 -05:00
|
|
|
}
|
|
|
|
|
|
2015-04-09 04:02:47 -04:00
|
|
|
virtual const TSharedPtr<FUniqueNetId> GetRecipientID() const override
|
|
|
|
|
{
|
|
|
|
|
return ChatMessages[0]->RecipientId;
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-03 15:47:28 -05:00
|
|
|
const bool IsFromSelf() const override
|
|
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
return ChatMessages[0]->bIsFromSelf;
|
2014-11-03 15:47:28 -05:00
|
|
|
}
|
|
|
|
|
|
2015-03-13 08:26:18 -04:00
|
|
|
DECLARE_DERIVED_EVENT(FChatItemViewModelImpl, FChatItemViewModel::FChangedEvent, FChangedEvent)
|
|
|
|
|
virtual FChatItemViewModel::FChangedEvent& OnChanged() override { return ChangedEvent; }
|
2014-11-03 15:47:28 -05:00
|
|
|
|
2015-03-13 08:26:18 -04:00
|
|
|
virtual ~FChatItemViewModelImpl()
|
2014-11-03 15:47:28 -05:00
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
FTicker::GetCoreTicker().RemoveTicker(TickerHandle);
|
2014-11-03 15:47:28 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
2015-03-13 08:26:18 -04:00
|
|
|
|
|
|
|
|
FChatItemViewModelImpl()
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
bool UpdateTimeStamp(float Delay)
|
|
|
|
|
{
|
|
|
|
|
bool ContinueTicking = true;
|
|
|
|
|
|
|
|
|
|
TSharedRef<FFriendChatMessage> Message = ChatMessages.Last();
|
|
|
|
|
FDateTime Now = FDateTime::UtcNow();
|
|
|
|
|
|
|
|
|
|
if ((Now - Message->MessageTime).GetDuration() <= FTimespan::FromMinutes(1.0))
|
|
|
|
|
{
|
|
|
|
|
static FText NowTimeStamp = NSLOCTEXT("SChatWindow", "Now_TimeStamp", "Now");
|
|
|
|
|
MessageTimeAsText = NowTimeStamp;
|
|
|
|
|
}
|
|
|
|
|
else if ((Now - Message->MessageTime).GetDuration() <= FTimespan::FromMinutes(2.0))
|
|
|
|
|
{
|
|
|
|
|
static FText OneMinuteTimeStamp = NSLOCTEXT("SChatWindow", "1_Minute_TimeStamp", "1 min");
|
|
|
|
|
MessageTimeAsText = OneMinuteTimeStamp;
|
|
|
|
|
}
|
|
|
|
|
else if ((Now - Message->MessageTime).GetDuration() <= FTimespan::FromMinutes(3.0))
|
|
|
|
|
{
|
|
|
|
|
static FText TwoMinuteTimeStamp = NSLOCTEXT("SChatWindow", "2_Minute_TimeStamp", "2 min");
|
|
|
|
|
MessageTimeAsText = TwoMinuteTimeStamp;
|
|
|
|
|
}
|
|
|
|
|
else if ((Now - Message->MessageTime).GetDuration() <= FTimespan::FromMinutes(4.0))
|
|
|
|
|
{
|
|
|
|
|
static FText ThreeMinuteTimeStamp = NSLOCTEXT("SChatWindow", "3_Minute_TimeStamp", "3 min");
|
|
|
|
|
MessageTimeAsText = ThreeMinuteTimeStamp;
|
|
|
|
|
}
|
|
|
|
|
else if ((Now - Message->MessageTime).GetDuration() <= FTimespan::FromMinutes(5.0))
|
|
|
|
|
{
|
|
|
|
|
static FText FourMinuteTimeStamp = NSLOCTEXT("SChatWindow", "4_Minute_TimeStamp", "4 min");
|
|
|
|
|
MessageTimeAsText = FourMinuteTimeStamp;
|
|
|
|
|
}
|
|
|
|
|
else if ((Now - Message->MessageTime).GetDuration() <= FTimespan::FromMinutes(6.0))
|
|
|
|
|
{
|
|
|
|
|
static FText FiveMinuteTimeStamp = NSLOCTEXT("SChatWindow", "5_Minute_TimeStamp", "5 min");
|
|
|
|
|
MessageTimeAsText = FiveMinuteTimeStamp;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MessageTimeAsText = FText::AsTime(ChatMessages.Last()->MessageTime, EDateTimeStyle::Short);
|
|
|
|
|
ContinueTicking = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
OnChanged().Broadcast(SharedThis(this));
|
|
|
|
|
return ContinueTicking;
|
|
|
|
|
}
|
2014-11-03 15:47:28 -05:00
|
|
|
|
|
|
|
|
private:
|
2015-03-13 08:26:18 -04:00
|
|
|
|
|
|
|
|
TArray<TSharedRef<FFriendChatMessage>> ChatMessages;
|
|
|
|
|
|
|
|
|
|
FText ComposedMessage;
|
|
|
|
|
FText MessageTimeAsText;
|
|
|
|
|
FDelegateHandle TickerHandle;
|
|
|
|
|
|
|
|
|
|
FChangedEvent ChangedEvent;
|
|
|
|
|
|
2014-11-03 15:47:28 -05:00
|
|
|
friend FChatItemViewModelFactory;
|
|
|
|
|
};
|
|
|
|
|
|
2015-03-13 08:26:18 -04:00
|
|
|
TSharedRef< FChatItemViewModel > FChatItemViewModelFactory::Create(
|
|
|
|
|
const TSharedRef<FFriendChatMessage>& ChatMessage)
|
2014-11-03 15:47:28 -05:00
|
|
|
{
|
2015-03-13 08:26:18 -04:00
|
|
|
TSharedRef< FChatItemViewModelImpl > ViewModel = MakeShareable(new FChatItemViewModelImpl());
|
|
|
|
|
|
|
|
|
|
ViewModel->AddMessage(ChatMessage);
|
2014-11-03 15:47:28 -05:00
|
|
|
return ViewModel;
|
2014-12-03 10:21:53 -05:00
|
|
|
}
|