MTXStorage: Add support for storing joined rooms
FossilOrigin-Name: 027eb0e2f8e814fdc47db7a5edc266c4988eff89bb9875e3ff99b2b8f59e3908
This commit is contained in:
parent
962fc15935
commit
28b47e985c
2 changed files with 106 additions and 5 deletions
|
@ -28,6 +28,9 @@
|
||||||
{
|
{
|
||||||
SL3Connection *_conn;
|
SL3Connection *_conn;
|
||||||
SL3PreparedStatement *_nextBatchSetStatement, *_nextBatchGetStatement;
|
SL3PreparedStatement *_nextBatchSetStatement, *_nextBatchGetStatement;
|
||||||
|
SL3PreparedStatement *_joinedRoomsAddStatement;
|
||||||
|
SL3PreparedStatement *_joinedRoomsRemoveStatement;
|
||||||
|
SL3PreparedStatement *_joinedRoomsGetStatement;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (instancetype)storageWithPath: (OFString *)path
|
+ (instancetype)storageWithPath: (OFString *)path
|
||||||
|
@ -55,6 +58,18 @@
|
||||||
_nextBatchGetStatement = [[_conn prepareStatement:
|
_nextBatchGetStatement = [[_conn prepareStatement:
|
||||||
@"SELECT next_batch FROM next_batch\n"
|
@"SELECT next_batch FROM next_batch\n"
|
||||||
@"WHERE device_id=$device_id"] retain];
|
@"WHERE device_id=$device_id"] retain];
|
||||||
|
_joinedRoomsAddStatement = [[_conn prepareStatement:
|
||||||
|
@"INSERT INTO joined_rooms (\n"
|
||||||
|
@" user_id, room_id\n"
|
||||||
|
@") VALUES (\n"
|
||||||
|
@" $user_id, $room_id\n"
|
||||||
|
@")"] retain];
|
||||||
|
_joinedRoomsRemoveStatement = [[_conn prepareStatement:
|
||||||
|
@"DELETE FROM joined_rooms\n"
|
||||||
|
@"WHERE user_id=$user_id AND room_id=$room_id"] retain];
|
||||||
|
_joinedRoomsGetStatement = [[_conn prepareStatement:
|
||||||
|
@"SELECT room_id FROM joined_rooms\n"
|
||||||
|
@"WHERE user_id=$user_id"] retain];
|
||||||
|
|
||||||
objc_autoreleasePoolPop(pool);
|
objc_autoreleasePoolPop(pool);
|
||||||
} @catch (id e) {
|
} @catch (id e) {
|
||||||
|
@ -69,6 +84,9 @@
|
||||||
{
|
{
|
||||||
[_nextBatchSetStatement release];
|
[_nextBatchSetStatement release];
|
||||||
[_nextBatchGetStatement release];
|
[_nextBatchGetStatement release];
|
||||||
|
[_joinedRoomsAddStatement release];
|
||||||
|
[_joinedRoomsRemoveStatement release];
|
||||||
|
[_joinedRoomsGetStatement release];
|
||||||
[_conn release];
|
[_conn release];
|
||||||
|
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
|
@ -76,10 +94,16 @@
|
||||||
|
|
||||||
- (void)createTables
|
- (void)createTables
|
||||||
{
|
{
|
||||||
[_conn executeStatement: @"CREATE TABLE IF NOT EXISTS next_batch (\n"
|
[_conn executeStatement:
|
||||||
|
@"CREATE TABLE IF NOT EXISTS next_batch (\n"
|
||||||
@" device_id TEXT PRIMARY KEY,\n"
|
@" device_id TEXT PRIMARY KEY,\n"
|
||||||
@" next_batch TEXT\n"
|
@" next_batch TEXT\n"
|
||||||
@")"];
|
@");\n"
|
||||||
|
@"CREATE TABLE IF NOT EXISTS joined_rooms (\n"
|
||||||
|
@" user_id TEXT,\n"
|
||||||
|
@" room_id TEXT,\n"
|
||||||
|
@" PRIMARY KEY (user_id, room_id)\n"
|
||||||
|
@");"];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)transactionWithBlock: (mtx_storage_transaction_block_t)block
|
- (void)transactionWithBlock: (mtx_storage_transaction_block_t)block
|
||||||
|
@ -115,10 +139,59 @@
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
OFString *nextBatch =
|
OFString *nextBatch =
|
||||||
[[_nextBatchGetStatement rowDictionary][@"next_batch"] retain];
|
[_nextBatchGetStatement.rowDictionary[@"next_batch"] retain];
|
||||||
|
|
||||||
objc_autoreleasePoolPop(pool);
|
objc_autoreleasePoolPop(pool);
|
||||||
|
|
||||||
return [nextBatch autorelease];
|
return [nextBatch autorelease];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)addJoinedRoom: (OFString *)roomID
|
||||||
|
forUser: (OFString *)userID
|
||||||
|
{
|
||||||
|
void *pool = objc_autoreleasePoolPush();
|
||||||
|
|
||||||
|
[_joinedRoomsAddStatement reset];
|
||||||
|
[_joinedRoomsAddStatement bindWithDictionary: @{
|
||||||
|
@"$room_id": roomID,
|
||||||
|
@"$user_id": userID
|
||||||
|
}];
|
||||||
|
[_joinedRoomsAddStatement step];
|
||||||
|
|
||||||
|
objc_autoreleasePoolPop(pool);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeJoinedRoom: (OFString *)roomID
|
||||||
|
forUser: (OFString *)userID
|
||||||
|
{
|
||||||
|
void *pool = objc_autoreleasePoolPush();
|
||||||
|
|
||||||
|
[_joinedRoomsRemoveStatement reset];
|
||||||
|
[_joinedRoomsRemoveStatement bindWithDictionary: @{
|
||||||
|
@"$room_id": roomID,
|
||||||
|
@"$user_id": userID
|
||||||
|
}];
|
||||||
|
[_joinedRoomsRemoveStatement step];
|
||||||
|
|
||||||
|
objc_autoreleasePoolPop(pool);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (OFArray<OFString *> *)joinedRoomsForUser: (OFString *)userID
|
||||||
|
{
|
||||||
|
OFMutableArray *joinedRooms = [OFMutableArray array];
|
||||||
|
void *pool = objc_autoreleasePoolPush();
|
||||||
|
|
||||||
|
[_joinedRoomsGetStatement reset];
|
||||||
|
[_joinedRoomsGetStatement bindWithDictionary: @{
|
||||||
|
@"$user_id": userID
|
||||||
|
}];
|
||||||
|
|
||||||
|
while ([_joinedRoomsGetStatement step])
|
||||||
|
[joinedRooms addObject:
|
||||||
|
_joinedRoomsGetStatement.rowDictionary[@"room_id"]];
|
||||||
|
|
||||||
|
objc_autoreleasePoolPop(pool);
|
||||||
|
|
||||||
|
return [joinedRooms autorelease];
|
||||||
|
}
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -58,6 +58,34 @@ typedef bool (^mtx_storage_transaction_block_t)(void);
|
||||||
* available.
|
* available.
|
||||||
*/
|
*/
|
||||||
- (nullable OFString *)nextBatchForDeviceID: (OFString *)deviceID;
|
- (nullable OFString *)nextBatchForDeviceID: (OFString *)deviceID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Adds the specified room ID to the list of joined rooms for the
|
||||||
|
* specified user ID.
|
||||||
|
*
|
||||||
|
* @param roomID The room ID to add to the list of joined rooms
|
||||||
|
* @param userID The user ID for which to add the room
|
||||||
|
*/
|
||||||
|
- (void)addJoinedRoom: (OFString *)roomID
|
||||||
|
forUser: (OFString *)userID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Removes the specified room ID to the list of joined rooms for the
|
||||||
|
* specified user ID.
|
||||||
|
*
|
||||||
|
* @param roomID The room ID to add to the list of joined rooms
|
||||||
|
* @param userID The user ID for which to add the room
|
||||||
|
*/
|
||||||
|
- (void)removeJoinedRoom: (OFString *)roomID
|
||||||
|
forUser: (OFString *)userID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the joined room IDs for the specified user ID.
|
||||||
|
*
|
||||||
|
* @param userID The user ID for which to return the joined rooms
|
||||||
|
* @return The joined room IDs for the specified user ID
|
||||||
|
*/
|
||||||
|
- (OFArray<OFString *> *)joinedRoomsForUser: (OFString *)userID;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
OF_ASSUME_NONNULL_END
|
OF_ASSUME_NONNULL_END
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue