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;
|
||||
SL3PreparedStatement *_nextBatchSetStatement, *_nextBatchGetStatement;
|
||||
SL3PreparedStatement *_joinedRoomsAddStatement;
|
||||
SL3PreparedStatement *_joinedRoomsRemoveStatement;
|
||||
SL3PreparedStatement *_joinedRoomsGetStatement;
|
||||
}
|
||||
|
||||
+ (instancetype)storageWithPath: (OFString *)path
|
||||
|
@ -55,6 +58,18 @@
|
|||
_nextBatchGetStatement = [[_conn prepareStatement:
|
||||
@"SELECT next_batch FROM next_batch\n"
|
||||
@"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);
|
||||
} @catch (id e) {
|
||||
|
@ -69,6 +84,9 @@
|
|||
{
|
||||
[_nextBatchSetStatement release];
|
||||
[_nextBatchGetStatement release];
|
||||
[_joinedRoomsAddStatement release];
|
||||
[_joinedRoomsRemoveStatement release];
|
||||
[_joinedRoomsGetStatement release];
|
||||
[_conn release];
|
||||
|
||||
[super dealloc];
|
||||
|
@ -76,10 +94,16 @@
|
|||
|
||||
- (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"
|
||||
@" 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
|
||||
|
@ -115,10 +139,59 @@
|
|||
return nil;
|
||||
|
||||
OFString *nextBatch =
|
||||
[[_nextBatchGetStatement rowDictionary][@"next_batch"] retain];
|
||||
[_nextBatchGetStatement.rowDictionary[@"next_batch"] retain];
|
||||
|
||||
objc_autoreleasePoolPop(pool);
|
||||
|
||||
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
|
||||
|
|
|
@ -58,6 +58,34 @@ typedef bool (^mtx_storage_transaction_block_t)(void);
|
|||
* available.
|
||||
*/
|
||||
- (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
|
||||
|
||||
OF_ASSUME_NONNULL_END
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue