chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 12:35:01 +08:00
commit a2e318a963
2974 changed files with 158180 additions and 0 deletions
@@ -0,0 +1,19 @@
//
// TLMessageManager+ConversationRecord.h
// TLChat
//
// Created by 李伯坤 on 16/3/20.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLMessageManager.h"
@interface TLMessageManager (ConversationRecord)
- (BOOL)addConversationByMessage:(TLMessage *)message;
- (void)conversationRecord:(void (^)(NSArray *))complete;
- (BOOL)deleteConversationByPartnerID:(NSString *)partnerID;
@end
@@ -0,0 +1,42 @@
//
// TLMessageManager+ConversationRecord.m
// TLChat
//
// Created by 李伯坤 on 16/3/20.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLMessageManager+ConversationRecord.h"
#import "TLMessageManager+MessageRecord.h"
@implementation TLMessageManager (ConversationRecord)
- (BOOL)addConversationByMessage:(TLMessage *)message
{
NSString *partnerID = message.friendID;
NSInteger type = 0;
if (message.partnerType == TLPartnerTypeGroup) {
partnerID = message.groupID;
type = 1;
}
BOOL ok = [self.conversationStore addConversationByUid:message.userID fid:partnerID type:type date:message.date];
return ok;
}
- (void)conversationRecord:(void (^)(NSArray *))complete
{
NSArray *data = [self.conversationStore conversationsByUid:self.userID];
complete(data);
}
- (BOOL)deleteConversationByPartnerID:(NSString *)partnerID
{
BOOL ok = [self deleteMessagesByPartnerID:partnerID];
if (ok) {
ok = [self.conversationStore deleteConversationByUid:self.userID fid:partnerID];
}
return ok;
}
@end
@@ -0,0 +1,51 @@
//
// TLMessageManager+MessageRecord.h
// TLChat
//
// Created by 李伯坤 on 16/3/20.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLMessageManager.h"
@interface TLMessageManager (MessageRecord)
#pragma mark - 查询
/**
* 查询聊天记录
*/
- (void)messageRecordForPartner:(NSString *)partnerID
fromDate:(NSDate *)date
count:(NSUInteger)count
complete:(void (^)(NSArray *, BOOL))complete;
/**
* 查询聊天文件
*/
- (void)chatFilesForPartnerID:(NSString *)partnerID
completed:(void (^)(NSArray *))completed;
/**
* 查询聊天图片
*/
- (void)chatImagesAndVideosForPartnerID:(NSString *)partnerID
completed:(void (^)(NSArray *))completed;
#pragma mark - 删除
/**
* 删除单条聊天记录
*/
- (BOOL)deleteMessageByMsgID:(NSString *)msgID;
/**
* 删除与某好友的聊天记录
*/
- (BOOL)deleteMessagesByPartnerID:(NSString *)partnerID;
/**
* 删除所有聊天记录
*/
- (BOOL)deleteAllMessages;
@end
@@ -0,0 +1,65 @@
//
// TLMessageManager+MessageRecord.m
// TLChat
//
// Created by 李伯坤 on 16/3/20.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLMessageManager+MessageRecord.h"
#import "TLChatViewController.h"
#import "TLChatNotificationKey.h"
@implementation TLMessageManager (MessageRecord)
- (void)messageRecordForPartner:(NSString *)partnerID
fromDate:(NSDate *)date
count:(NSUInteger)count
complete:(void (^)(NSArray *, BOOL))complete
{
[self.messageStore messagesByUserID:self.userID partnerID:partnerID fromDate:date count:count complete:^(NSArray *data, BOOL hasMore) {
complete(data, hasMore);
}];
}
- (void)chatFilesForPartnerID:(NSString *)partnerID
completed:(void (^)(NSArray *))completed
{
NSArray *data = [self.messageStore chatFilesByUserID:self.userID partnerID:partnerID];
completed(data);
}
- (void)chatImagesAndVideosForPartnerID:(NSString *)partnerID
completed:(void (^)(NSArray *))completed
{
NSArray *data = [self.messageStore chatImagesAndVideosByUserID:self.userID partnerID:partnerID];
completed(data);
}
- (BOOL)deleteMessageByMsgID:(NSString *)msgID
{
return [self.messageStore deleteMessageByMessageID:msgID];
}
- (BOOL)deleteMessagesByPartnerID:(NSString *)partnerID
{
BOOL ok = [self.messageStore deleteMessagesByUserID:self.userID partnerID:partnerID];
if (ok) {
[[NSNotificationCenter defaultCenter] postNotificationName:NOTI_CHAT_VIEW_RESET object:nil];
}
return ok;
}
- (BOOL)deleteAllMessages
{
BOOL ok = [self.messageStore deleteMessagesByUserID:self.userID];
if (ok) {
[[NSNotificationCenter defaultCenter] postNotificationName:NOTI_CHAT_VIEW_RESET object:nil];
ok = [self.conversationStore deleteConversationsByUid:self.userID];
}
return ok;
}
@end
@@ -0,0 +1,37 @@
//
// TLMessageManager.h
// TLChat
//
// Created by 李伯坤 on 16/3/13.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "TLDBMessageStore.h"
#import "TLDBConversationStore.h"
#import "TLMessage.h"
#import "TLMessageManagerChatVCDelegate.h"
#import "TLMessageManagerConvVCDelegate.h"
@interface TLMessageManager : NSObject
@property (nonatomic, assign) id<TLMessageManagerChatVCDelegate>messageDelegate;
@property (nonatomic, assign) id<TLMessageManagerConvVCDelegate>conversationDelegate;
@property (nonatomic, strong, readonly) NSString *userID;
@property (nonatomic, strong) TLDBMessageStore *messageStore;
@property (nonatomic, strong) TLDBConversationStore *conversationStore;
+ (TLMessageManager *)sharedInstance;
#pragma mark - 发送
- (void)sendMessage:(TLMessage *)message
progress:(void (^)(TLMessage *, CGFloat))progress
success:(void (^)(TLMessage *))success
failure:(void (^)(TLMessage *))failure;
@end
@@ -0,0 +1,158 @@
//
// TLMessageManager.m
// TLChat
//
// Created by 李伯坤 on 16/3/13.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLMessageManager.h"
#import "TLMessageManager+ConversationRecord.h"
#import "TLUserHelper.h"
#import "TLNetwork.h"
#import "TLFriendHelper.h"
#import "TLTextMessage.h"
#import "TLImageMessage.h"
static TLMessageManager *messageManager;
@implementation TLMessageManager
+ (TLMessageManager *)sharedInstance
{
static dispatch_once_t once;
dispatch_once(&once, ^{
messageManager = [[TLMessageManager alloc] init];
});
return messageManager;
}
- (void)sendMessage:(TLMessage *)message
progress:(void (^)(TLMessage *, CGFloat))progress
success:(void (^)(TLMessage *))success
failure:(void (^)(TLMessage *))failure
{
// 图灵机器人
[self p_sendMessageToReboot:message];
BOOL ok = [self.messageStore addMessage:message];
if (!ok) {
DDLogError(@"存储Message到DB失败");
}
else { // 存储到conversation
ok = [self addConversationByMessage:message];
if (!ok) {
DDLogError(@"存储Conversation到DB失败");
}
}
}
#pragma mark - # Private
- (void)p_sendMessageToReboot:(TLMessage *)message
{
if (message.messageType == TLMessageTypeText) {
// 聊天的用户
TLUser *user;
if (message.partnerType == TLPartnerTypeGroup) {
TLGroup *group = [[TLFriendHelper sharedFriendHelper] getGroupInfoByGroupID:message.groupID];
NSInteger index = arc4random() % group.count;
user = group.users[index];
}
else {
user = [[TLFriendHelper sharedFriendHelper] getFriendInfoByUserID:message.friendID];
}
NSString *text = [message.content objectForKey:@"text"];
NSString *apiKey = ({
NSString *key;
if ([user.userID isEqualToString:@"1001"]) { // 曾小贤
key = @"00916307c7b24533a23d6115224540f3";
}
else if ([user.userID isEqualToString:@"1002"]) { // 陈美嘉
key = @"5f5f8d7d613f4d81a6ff354cb428ccbc";
}
else {
key = @"44eb0b4ab0a640f192bd469551a7c03e";
}
key;
});
NSDictionary *json = @{@"reqType" : @"0",
@"userInfo" : @{
@"apiKey" : apiKey,
@"userId" : @"100454",
},
@"perception" : @{
@"inputText" : @{
@"text" : text,
}
},
};
NSString *url = @"http://openapi.tuling123.com/openapi/api/v2";
TLBaseRequest *request = [TLBaseRequest requestWithMethod:TLRequestMethodPOST url:url parameters:json];
[request startRequestWithSuccessAction:^(TLResponse *response) {
NSDictionary *json = response.responseObject;
NSArray *results = [json objectForKey:@"results"];
for (NSDictionary *item in results) {
NSDictionary *values = [item objectForKey:@"values"];
if (values[@"text"]) {
NSString *text = values[@"text"];
TLTextMessage *textMessage = [[TLTextMessage alloc] init];
textMessage.partnerType = message.partnerType;
textMessage.text = text;
textMessage.ownerTyper = TLMessageOwnerTypeFriend;
textMessage.userID = message.userID;
textMessage.date = [NSDate date];
textMessage.friendID = user.userID;
textMessage.fromUser = (id <TLChatUserProtocol>)user;
textMessage.groupID = message.groupID;
[self.messageStore addMessage:textMessage];
if (self.messageDelegate && [self.messageDelegate respondsToSelector:@selector(didReceivedMessage:)]) {
[self.messageDelegate didReceivedMessage:textMessage];
}
}
else if (values[@"image"]) {
NSString *imageURL = values[@"image"];
TLImageMessage *imageMessage = [[TLImageMessage alloc] init];
imageMessage.partnerType = message.partnerType;
imageMessage.imageURL = imageURL;
imageMessage.ownerTyper = TLMessageOwnerTypeFriend;
imageMessage.userID = message.userID;
imageMessage.friendID = user.userID;
imageMessage.date = [NSDate date];
imageMessage.fromUser = (id <TLChatUserProtocol>)user;
imageMessage.imageSize = CGSizeMake(120, 120);
imageMessage.groupID = message.groupID;
[self.messageStore addMessage:imageMessage];
if (self.messageDelegate && [self.messageDelegate respondsToSelector:@selector(didReceivedMessage:)]) {
[self.messageDelegate didReceivedMessage:imageMessage];
}
}
}
} failureAction:nil];
}
}
#pragma mark - # Getters
- (TLDBMessageStore *)messageStore
{
if (_messageStore == nil) {
_messageStore = [[TLDBMessageStore alloc] init];
}
return _messageStore;
}
- (TLDBConversationStore *)conversationStore
{
if (_conversationStore == nil) {
_conversationStore = [[TLDBConversationStore alloc] init];
}
return _conversationStore;
}
- (NSString *)userID
{
return [TLUserHelper sharedHelper].userID;
}
@end
@@ -0,0 +1,15 @@
//
// TLMessageManagerChatVCDelegate.h
// TLChat
//
// Created by 李伯坤 on 16/3/21.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol TLMessageManagerChatVCDelegate <NSObject>
- (void)didReceivedMessage:(TLMessage *)message;
@end
@@ -0,0 +1,15 @@
//
// TLMessageManagerConvVCDelegate.h
// TLChat
//
// Created by 李伯坤 on 16/3/21.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol TLMessageManagerConvVCDelegate <NSObject>
- (void)updateConversationData;
@end