session-ios/Signal/src/textsecure/Contacts/TSThread.m

144 lines
4.1 KiB
Mathematica
Raw Normal View History

//
// TSThread.m
// TextSecureKit
//
// Created by Frederic Jacobs on 16/11/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
//
#import "TSThread.h"
2014-11-25 19:06:09 +01:00
#import "Environment.h"
#import "ContactsManager.h"
#import "TSInteraction.h"
#import "TSStorageManager.h"
#import "TSGroup.h"
#import "TSCall.h"
#import "TSOutgoingMessage.h"
#import "TSIncomingMessage.h"
@implementation TSThread
+ (NSString *)collection{
return @"TSThread";
}
- (instancetype)initWithUniqueId:(NSString *)uniqueId{
self = [super initWithUniqueId:uniqueId];
if (self) {
2014-11-25 19:06:09 +01:00
_blocked = NO;
_lastMessageId = 0;
}
return self;
}
- (BOOL)isGroupThread{
NSAssert(false, @"An abstract method on TSThread was called.");
return FALSE;
}
- (uint64_t)lastMessageId{
2014-11-25 19:06:09 +01:00
return _lastMessageId;
}
- (NSDate*)lastMessageDate{
2014-11-25 19:06:09 +01:00
__block NSDate *date;
[[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
date = [TSInteraction fetchObjectWithUniqueID:[TSInteraction stringFromTimeStamp:_lastMessageId] transaction:transaction].date;
}];
if (date) {
return date;
} else{
return [NSDate date];
}
}
- (UIImage*)image{
return nil;
}
2014-11-25 19:06:09 +01:00
- (NSString*)lastMessageLabel{
__block TSInteraction *interaction;
[[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
interaction = [TSInteraction fetchObjectWithUniqueID:[TSInteraction stringFromTimeStamp:_lastMessageId] transaction:transaction];
}];
return interaction.description;
}
- (TSLastActionType)lastAction
{
__block TSInteraction *interaction;
[[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
interaction = [TSInteraction fetchObjectWithUniqueID:[TSInteraction stringFromTimeStamp:_lastMessageId] transaction:transaction];
}];
return [self lastActionForInteraction:interaction];
}
- (TSLastActionType)lastActionForInteraction:(TSInteraction*)interaction
{
if ([interaction isKindOfClass:[TSCall class]])
{
TSCall * callInteraction = (TSCall*)interaction;
BOOL isOutgoing = callInteraction.wasCaller;
switch (callInteraction.callType) {
case TSCallTypeSuccess:
return isOutgoing ? TSLastActionCallOutgoing : TSLastActionCallIncoming;
break;
case TSCallTypeMissed:
return isOutgoing ? TSLastActionCallOutgoingMissed : TSLastActionCallIncomingMissed;
break;
case TSCallTypeBusy:
return isOutgoing ? TSLastActionCallOutgoingMissed : TSLastActionCallIncomingMissed;
break;
case TSCallTypeFailed:
return isOutgoing ? TSLastActionCallOutgoingFailed : TSLastActionNone;
break;
default:
return TSLastActionNone;
break;
}
} else if ([interaction isKindOfClass:[TSOutgoingMessage class]]) {
TSOutgoingMessage * outgoingMessageInteraction = (TSOutgoingMessage*)interaction;
switch (outgoingMessageInteraction.messageState) {
case TSOutgoingMessageStateAttemptingOut:
return TSLastActionNone;
break;
case TSOutgoingMessageStateUnsent:
return TSLastActionMessageUnsent;
break;
case TSOutgoingMessageStateSent:
return TSLastActionMessageSent;
break;
case TSOutgoingMessageStateDelivered:
return TSLastActionMessageDelivered;
break;
default:
return TSLastActionNone;
break;
}
} else if ([interaction isKindOfClass:[TSIncomingMessage class]]) {
return TSLastActionNone;
} else {
return TSLastActionNone;
}
}
2014-11-25 19:06:09 +01:00
- (int)unreadMessages{
return 0;
}
- (NSString *)name{
NSAssert(FALSE, @"Should be implemented in subclasses");
return nil;
}
@end