chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
//
|
||||
// TLDBFriendSQL.h
|
||||
// TLChat
|
||||
//
|
||||
// Created by 李伯坤 on 16/3/22.
|
||||
// Copyright © 2016年 李伯坤. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef TLDBFriendSQL_h
|
||||
#define TLDBFriendSQL_h
|
||||
|
||||
#define FRIENDS_TABLE_NAME @"friends"
|
||||
|
||||
#define SQL_CREATE_FRIENDS_TABLE @"CREATE TABLE IF NOT EXISTS %@(\
|
||||
uid TEXT,\
|
||||
fid TEXT,\
|
||||
username TEXT,\
|
||||
nikename TEXT, \
|
||||
avatar TEXT,\
|
||||
remark TEXT,\
|
||||
ext1 TEXT,\
|
||||
ext2 TEXT,\
|
||||
ext3 TEXT,\
|
||||
ext4 TEXT,\
|
||||
ext5 TEXT,\
|
||||
PRIMARY KEY(uid, fid))"
|
||||
|
||||
#define SQL_UPDATE_FRIEND @"REPLACE INTO %@ ( uid, fid, username, nikename, avatar, remark, ext1, ext2, ext3, ext4, ext5) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
|
||||
#define SQL_SELECT_FRIENDS @"SELECT * FROM %@ WHERE uid = %@"
|
||||
|
||||
#define SQL_DELETE_FRIEND @"DELETE FROM %@ WHERE uid = '%@' and fid = '%@'"
|
||||
|
||||
#endif /* TLDBFriendSQL_h */
|
||||
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// TLDBFriendStore.h
|
||||
// TLChat
|
||||
//
|
||||
// Created by 李伯坤 on 16/3/22.
|
||||
// Copyright © 2016年 李伯坤. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TLDBBaseStore.h"
|
||||
|
||||
@class TLUser;
|
||||
@interface TLDBFriendStore : TLDBBaseStore
|
||||
|
||||
- (BOOL)updateFriendsData:(NSArray *)friendData
|
||||
forUid:(NSString *)uid;
|
||||
|
||||
- (BOOL)addFriend:(TLUser *)user forUid:(NSString *)uid;
|
||||
|
||||
- (NSMutableArray *)friendsDataByUid:(NSString *)uid;
|
||||
|
||||
- (BOOL)deleteFriendByFid:(NSString *)fid forUid:(NSString *)uid;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,106 @@
|
||||
//
|
||||
// TLDBFriendStore.m
|
||||
// TLChat
|
||||
//
|
||||
// Created by 李伯坤 on 16/3/22.
|
||||
// Copyright © 2016年 李伯坤. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TLDBFriendStore.h"
|
||||
#import "TLDBFriendSQL.h"
|
||||
#import "TLDBManager.h"
|
||||
#import "TLUser.h"
|
||||
|
||||
@implementation TLDBFriendStore
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if (self = [super init]) {
|
||||
self.dbQueue = [TLDBManager sharedInstance].commonQueue;
|
||||
BOOL ok = [self createTable];
|
||||
if (!ok) {
|
||||
DDLogError(@"DB: 好友表创建失败");
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (BOOL)createTable
|
||||
{
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_CREATE_FRIENDS_TABLE, FRIENDS_TABLE_NAME];
|
||||
return [self createTable:FRIENDS_TABLE_NAME withSQL:sqlString];
|
||||
}
|
||||
|
||||
- (BOOL)addFriend:(TLUser *)user forUid:(NSString *)uid
|
||||
{
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_UPDATE_FRIEND, FRIENDS_TABLE_NAME];
|
||||
NSArray *arrPara = [NSArray arrayWithObjects:
|
||||
TLNoNilString(uid),
|
||||
TLNoNilString(user.userID),
|
||||
TLNoNilString(user.username),
|
||||
TLNoNilString(user.nikeName),
|
||||
TLNoNilString(user.avatarURL),
|
||||
TLNoNilString(user.remarkName),
|
||||
@"", @"", @"", @"", @"", nil];
|
||||
BOOL ok = [self excuteSQL:sqlString withArrParameter:arrPara];
|
||||
return ok;
|
||||
}
|
||||
|
||||
- (BOOL)updateFriendsData:(NSArray *)friendData forUid:(NSString *)uid
|
||||
{
|
||||
NSArray *oldData = [self friendsDataByUid:uid];
|
||||
if (oldData.count > 0) {
|
||||
// 建立新数据的hash表,用于删除数据库中的过时数据
|
||||
NSMutableDictionary *newDataHash = [[NSMutableDictionary alloc] init];
|
||||
for (TLUser *user in friendData) {
|
||||
[newDataHash setValue:@"YES" forKey:user.userID];
|
||||
}
|
||||
for (TLUser *user in oldData) {
|
||||
if ([newDataHash objectForKey:user.userID] == nil) {
|
||||
BOOL ok = [self deleteFriendByFid:user.userID forUid:uid];
|
||||
if (!ok) {
|
||||
DDLogError(@"DBError: 删除过期好友失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (TLUser *user in friendData) {
|
||||
BOOL ok = [self addFriend:user forUid:uid];
|
||||
if (!ok) {
|
||||
return ok;
|
||||
}
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (NSMutableArray *)friendsDataByUid:(NSString *)uid
|
||||
{
|
||||
__block NSMutableArray *data = [[NSMutableArray alloc] init];
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_SELECT_FRIENDS, FRIENDS_TABLE_NAME, uid];
|
||||
|
||||
[self excuteQuerySQL:sqlString resultBlock:^(FMResultSet *retSet) {
|
||||
while ([retSet next]) {
|
||||
TLUser *user = [[TLUser alloc] init];
|
||||
user.userID = [retSet stringForColumn:@"uid"];
|
||||
user.username = [retSet stringForColumn:@"username"];
|
||||
user.nikeName = [retSet stringForColumn:@"nikename"];
|
||||
user.avatarURL = [retSet stringForColumn:@"avatar"];
|
||||
user.remarkName = [retSet stringForColumn:@"remark"];
|
||||
[data addObject:user];
|
||||
}
|
||||
[retSet close];
|
||||
}];
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
- (BOOL)deleteFriendByFid:(NSString *)fid forUid:(NSString *)uid
|
||||
{
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_DELETE_FRIEND, FRIENDS_TABLE_NAME, uid, fid];
|
||||
BOOL ok = [self excuteSQL:sqlString, nil];
|
||||
return ok;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,60 @@
|
||||
//
|
||||
// TLDBGroupSQL.h
|
||||
// TLChat
|
||||
//
|
||||
// Created by 李伯坤 on 16/4/17.
|
||||
// Copyright © 2016年 李伯坤. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef TLDBGroupSQL_h
|
||||
#define TLDBGroupSQL_h
|
||||
|
||||
#pragma mark - # GROUPS
|
||||
|
||||
#define GROUPS_TABLE_NAME @"groups"
|
||||
|
||||
#define SQL_CREATE_GROUPS_TABLE @"CREATE TABLE IF NOT EXISTS %@(\
|
||||
uid TEXT,\
|
||||
gid TEXT,\
|
||||
name TEXT,\
|
||||
ext1 TEXT,\
|
||||
ext2 TEXT,\
|
||||
ext3 TEXT,\
|
||||
ext4 TEXT,\
|
||||
ext5 TEXT,\
|
||||
PRIMARY KEY(uid, gid))"
|
||||
|
||||
#define SQL_UPDATE_GROUP @"REPLACE INTO %@ ( uid, gid, name, ext1, ext2, ext3, ext4, ext5) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )"
|
||||
|
||||
#define SQL_SELECT_GROUPS @"SELECT * FROM %@ WHERE uid = %@"
|
||||
|
||||
#define SQL_DELETE_GROUP @"DELETE FROM %@ WHERE uid = '%@' and gid = '%@'"
|
||||
|
||||
|
||||
|
||||
#pragma mark - # GROUP MEMBERS
|
||||
#define GROUP_MEMBER_TABLE_NAMGE @"group_members"
|
||||
|
||||
#define SQL_CREATE_GROUP_MEMBERS_TABLE @"CREATE TABLE IF NOT EXISTS %@(\
|
||||
uid TEXT,\
|
||||
gid TEXT,\
|
||||
fid TEXT,\
|
||||
username TEXT,\
|
||||
nikename TEXT, \
|
||||
avatar TEXT,\
|
||||
remark TEXT,\
|
||||
ext1 TEXT,\
|
||||
ext2 TEXT,\
|
||||
ext3 TEXT,\
|
||||
ext4 TEXT,\
|
||||
ext5 TEXT,\
|
||||
PRIMARY KEY(uid, gid, fid))"
|
||||
|
||||
#define SQL_UPDATE_GROUP_MEMBER @"REPLACE INTO %@ ( uid, gid, fid, username, nikename, avatar, remark, ext1, ext2, ext3, ext4, ext5) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
|
||||
#define SQL_SELECT_GROUP_MEMBERS @"SELECT * FROM %@ WHERE uid = %@"
|
||||
|
||||
#define SQL_DELETE_GROUP_MEMBER @"DELETE FROM %@ WHERE uid = '%@' and gid = '%@' and fid = '%@'"
|
||||
|
||||
|
||||
#endif /* TLDBGroupSQL_h */
|
||||
@@ -0,0 +1,24 @@
|
||||
//
|
||||
// TLDBGroupStore.h
|
||||
// TLChat
|
||||
//
|
||||
// Created by 李伯坤 on 16/4/17.
|
||||
// Copyright © 2016年 李伯坤. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TLDBBaseStore.h"
|
||||
#import "TLGroup.h"
|
||||
|
||||
@interface TLDBGroupStore : TLDBBaseStore
|
||||
|
||||
- (BOOL)updateGroupsData:(NSArray *)groupData
|
||||
forUid:(NSString *)uid;
|
||||
|
||||
- (BOOL)addGroup:(TLGroup *)group forUid:(NSString *)uid;
|
||||
|
||||
|
||||
- (NSMutableArray *)groupsDataByUid:(NSString *)uid;
|
||||
|
||||
- (BOOL)deleteGroupByGid:(NSString *)gid forUid:(NSString *)uid;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,188 @@
|
||||
//
|
||||
// TLDBGroupStore.m
|
||||
// TLChat
|
||||
//
|
||||
// Created by 李伯坤 on 16/4/17.
|
||||
// Copyright © 2016年 李伯坤. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TLDBGroupStore.h"
|
||||
#import "TLDBGroupSQL.h"
|
||||
#import "TLGroup.h"
|
||||
|
||||
@implementation TLDBGroupStore
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if (self = [super init]) {
|
||||
self.dbQueue = [TLDBManager sharedInstance].commonQueue;
|
||||
BOOL ok = [self createTable];
|
||||
if (!ok) {
|
||||
DDLogError(@"DB: 讨论组表创建失败");
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (BOOL)createTable
|
||||
{
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_CREATE_GROUPS_TABLE, GROUPS_TABLE_NAME];
|
||||
BOOL ok = [self createTable:GROUPS_TABLE_NAME withSQL:sqlString];
|
||||
if (ok) {
|
||||
sqlString = [NSString stringWithFormat:SQL_CREATE_GROUP_MEMBERS_TABLE, GROUP_MEMBER_TABLE_NAMGE];
|
||||
ok = [self createTable:GROUP_MEMBER_TABLE_NAMGE withSQL:sqlString];
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
- (BOOL)addGroup:(TLGroup *)group forUid:(NSString *)uid
|
||||
{
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_UPDATE_GROUP, GROUPS_TABLE_NAME];
|
||||
NSArray *arrPara = [NSArray arrayWithObjects:
|
||||
TLNoNilString(uid),
|
||||
TLNoNilString(group.groupID),
|
||||
TLNoNilString(group.groupName),
|
||||
@"", @"", @"", @"", @"", nil];
|
||||
BOOL ok = [self excuteSQL:sqlString withArrParameter:arrPara];
|
||||
if (ok) {
|
||||
// 将通讯录成员插入数据库
|
||||
ok = [self addGroupMembers:group.users forUid:uid andGid:group.groupID];
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
- (BOOL)updateGroupsData:(NSArray *)groupData forUid:(NSString *)uid
|
||||
{
|
||||
NSArray *oldData = [self groupsDataByUid:uid];
|
||||
if (oldData.count > 0) {
|
||||
// 建立新数据的hash表,用于删除数据库中的过时数据
|
||||
NSMutableDictionary *newDataHash = [[NSMutableDictionary alloc] init];
|
||||
for (TLGroup *group in groupData) {
|
||||
[newDataHash setValue:@"YES" forKey:group.groupID];
|
||||
}
|
||||
for (TLGroup *group in oldData) {
|
||||
if ([newDataHash objectForKey:group.groupID] == nil) {
|
||||
BOOL ok = [self deleteGroupByGid:group.groupID forUid:uid];
|
||||
if (!ok) {
|
||||
DDLogError(@"DBError: 删除过期讨论组失败!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 将数据插入数据库
|
||||
for (TLGroup *group in groupData) {
|
||||
BOOL ok = [self addGroup:group forUid:uid];
|
||||
if (!ok) {
|
||||
return ok;
|
||||
}
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
- (NSMutableArray *)groupsDataByUid:(NSString *)uid
|
||||
{
|
||||
__block NSMutableArray *data = [[NSMutableArray alloc] init];
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_SELECT_GROUPS, GROUPS_TABLE_NAME, uid];
|
||||
|
||||
[self excuteQuerySQL:sqlString resultBlock:^(FMResultSet *retSet) {
|
||||
while ([retSet next]) {
|
||||
TLGroup *group = [[TLGroup alloc] init];
|
||||
group.groupID = [retSet stringForColumn:@"gid"];
|
||||
group.groupName = [retSet stringForColumn:@"name"];
|
||||
[data addObject:group];
|
||||
}
|
||||
[retSet close];
|
||||
}];
|
||||
|
||||
// 获取讨论组成员
|
||||
for (TLGroup *group in data) {
|
||||
group.users = [self groupMembersForUid:uid andGid:group.groupID];
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
- (BOOL)deleteGroupByGid:(NSString *)gid forUid:(NSString *)uid
|
||||
{
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_DELETE_GROUP, GROUPS_TABLE_NAME, uid, gid];
|
||||
BOOL ok = [self excuteSQL:sqlString, nil];
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - # Group Members
|
||||
- (BOOL)addGroupMember:(TLUser *)user forUid:(NSString *)uid andGid:(NSString *)gid
|
||||
{
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_UPDATE_GROUP_MEMBER, GROUP_MEMBER_TABLE_NAMGE];
|
||||
NSArray *arrPara = [NSArray arrayWithObjects:
|
||||
TLNoNilString(uid),
|
||||
TLNoNilString(gid),
|
||||
TLNoNilString(user.userID),
|
||||
TLNoNilString(user.username),
|
||||
TLNoNilString(user.nikeName),
|
||||
TLNoNilString(user.avatarURL),
|
||||
TLNoNilString(user.remarkName),
|
||||
@"", @"", @"", @"", @"", nil];
|
||||
BOOL ok = [self excuteSQL:sqlString withArrParameter:arrPara];
|
||||
return ok;
|
||||
}
|
||||
|
||||
- (BOOL)addGroupMembers:(NSArray *)users forUid:(NSString *)uid andGid:(NSString *)gid
|
||||
{
|
||||
NSArray *oldData = [self groupMembersForUid:uid andGid:gid];
|
||||
if (oldData.count > 0) {
|
||||
// 建立新数据的hash表,用于删除数据库中的过时数据
|
||||
NSMutableDictionary *newDataHash = [[NSMutableDictionary alloc] init];
|
||||
for (TLUser *user in users) {
|
||||
[newDataHash setValue:@"YES" forKey:user.userID];
|
||||
}
|
||||
for (TLUser *user in oldData) {
|
||||
if ([newDataHash objectForKey:user.userID] == nil) {
|
||||
BOOL ok = [self deleteGroupMemberForUid:uid gid:gid andFid:user.userID];
|
||||
if (!ok) {
|
||||
DDLogError(@"DBError: 删除过期好友失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (TLUser *user in users) {
|
||||
BOOL ok = [self addGroupMember:user forUid:uid andGid:gid];
|
||||
if (!ok) {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (NSMutableArray *)groupMembersForUid:(NSString *)uid andGid:(NSString *)gid
|
||||
{
|
||||
__block NSMutableArray *data = [[NSMutableArray alloc] init];
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_SELECT_GROUP_MEMBERS, GROUP_MEMBER_TABLE_NAMGE, uid];
|
||||
|
||||
[self excuteQuerySQL:sqlString resultBlock:^(FMResultSet *retSet) {
|
||||
while ([retSet next]) {
|
||||
TLUser *user = [[TLUser alloc] init];
|
||||
user.userID = [retSet stringForColumn:@"uid"];
|
||||
user.username = [retSet stringForColumn:@"username"];
|
||||
user.nikeName = [retSet stringForColumn:@"nikename"];
|
||||
user.avatarURL = [retSet stringForColumn:@"avatar"];
|
||||
user.remarkName = [retSet stringForColumn:@"remark"];
|
||||
[data addObject:user];
|
||||
}
|
||||
[retSet close];
|
||||
}];
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
- (BOOL)deleteGroupMemberForUid:(NSString *)uid gid:(NSString *)gid andFid:(NSString *)fid
|
||||
{
|
||||
NSString *sqlString = [NSString stringWithFormat:SQL_DELETE_GROUP_MEMBER, GROUP_MEMBER_TABLE_NAMGE, uid, gid, fid];
|
||||
BOOL ok = [self excuteSQL:sqlString, nil];
|
||||
return ok;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user