Index: src/MTXClient.m ================================================================== --- src/MTXClient.m +++ src/MTXClient.m @@ -421,10 +421,13 @@ objc_autoreleasePoolPop(pool); } - (void)processRoomsSync: (OFDictionary *)rooms { + [self processJoinedRooms: rooms[@"join"]]; + [self processInvitedRooms: rooms[@"invite"]]; + [self processLeftRooms: rooms[@"leave"]]; } - (void)processPresenceSync: (OFDictionary *)presence { } @@ -434,6 +437,32 @@ } - (void)processToDeviceSync: (OFDictionary *)toDevice { } + +- (void)processJoinedRooms: (OFDictionary *)rooms +{ + if (rooms == nil) + return; + + for (OFString *roomID in rooms) + [_storage addJoinedRoom: roomID + forUser: _userID]; +} + +- (void)processInvitedRooms: (OFDictionary *)rooms +{ + if (rooms == nil) + return; +} + +- (void)processLeftRooms: (OFDictionary *)rooms +{ + if (rooms == nil) + return; + + for (OFString *roomID in rooms) + [_storage removeJoinedRoom: roomID + forUser: _userID]; +} @end Index: src/MTXSQLite3Storage.m ================================================================== --- src/MTXSQLite3Storage.m +++ src/MTXSQLite3Storage.m @@ -57,11 +57,11 @@ @")"] retain]; _nextBatchGetStatement = [[_conn prepareStatement: @"SELECT next_batch FROM next_batch\n" @"WHERE device_id=$device_id"] retain]; _joinedRoomsAddStatement = [[_conn prepareStatement: - @"INSERT INTO joined_rooms (\n" + @"INSERT OR REPLACE INTO joined_rooms (\n" @" user_id, room_id\n" @") VALUES (\n" @" $user_id, $room_id\n" @")"] retain]; _joinedRoomsRemoveStatement = [[_conn prepareStatement: