Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Render display names of users and rooms according to the spec - take 2 #4

Merged
merged 9 commits into from
May 3, 2016
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ else ( CMAKE_VERSION VERSION_LESS "3.1" )
target_compile_features(qmatrixclient PRIVATE cxx_lambdas)
target_compile_features(qmatrixclient PRIVATE cxx_auto_type)
target_compile_features(qmatrixclient PRIVATE cxx_generalized_initializers)
target_compile_features(qmatrixclient PRIVATE cxx_nullptr)
endif ( CMAKE_VERSION VERSION_LESS "3.1" )

target_link_libraries(qmatrixclient Qt5::Core Qt5::Network Qt5::Gui)
Expand Down
63 changes: 28 additions & 35 deletions connectionprivate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,45 +75,47 @@ void ConnectionPrivate::resolveServer(QString domain)

void ConnectionPrivate::processState(State* state)
{
QString roomId = state->event()->roomId();
if( state->event()->type() == QMatrixClient::EventType::RoomMember )
{
QMatrixClient::RoomMemberEvent* e = static_cast<QMatrixClient::RoomMemberEvent*>(state->event());
User* user = q->user(e->userId());
user->processEvent(e);
}
if( !roomId.isEmpty() )
{
Room* room;
if( !roomMap.contains(roomId) )
{
room = q->createRoom(roomId);
roomMap.insert( roomId, room );
emit q->newRoom(room);
} else {
room = roomMap.value(roomId);
}
room->addInitialState(state);
}

if ( Room* r = provideRoom(state->event()->roomId()) )
r->addInitialState(state);
}

void ConnectionPrivate::processRooms(const QList<SyncRoomData>& data)
{
for( const SyncRoomData& roomData: data )
{
Room* room;
if( !roomMap.contains(roomData.roomId) )
{
room = q->createRoom(roomData.roomId);
roomMap.insert( roomData.roomId, room );
emit q->newRoom(room);
} else {
room = roomMap.value(roomData.roomId);
}
room->updateData(roomData);
if ( Room* r = provideRoom(roomData.roomId) )
r->updateData(roomData);
}
}

Room* ConnectionPrivate::provideRoom(QString id)
{
if (id.isEmpty())
{
qDebug() << "ConnectionPrivate::provideRoom() with empty id, doing nothing";
return nullptr;
}

if (roomMap.contains(id))
return roomMap.value(id);

// Not yet in the map, create a new one.
Room* room = q->createRoom(id);
if (!room)
qCritical() << "Failed to create a room!!!" << id;

roomMap.insert( id, room );
emit q->newRoom(room);
return room;
}

void ConnectionPrivate::connectDone(KJob* job)
{
PasswordLogin* realJob = static_cast<PasswordLogin*>(job);
Expand Down Expand Up @@ -166,17 +168,8 @@ void ConnectionPrivate::gotJoinRoom(KJob* job)
JoinRoomJob* joinJob = static_cast<JoinRoomJob*>(job);
if( !joinJob->error() )
{
QString roomId = joinJob->roomId();
Room* room;
if( roomMap.contains(roomId) )
{
room = roomMap.value(roomId);
} else {
room = q->createRoom(roomId);
roomMap.insert( roomId, room );
emit q->newRoom(room);
}
emit q->joinedRoom(room);
if ( Room* r = provideRoom(joinJob->roomId()) )
emit q->joinedRoom(r);
}
else
{
Expand Down
2 changes: 2 additions & 0 deletions connectionprivate.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ namespace QMatrixClient

void processState( State* state );
void processRooms( const QList<SyncRoomData>& data );
/** Finds a room with this id or creates a new one and adds it to roomMap. */
Room* provideRoom( QString id );

Connection* q;
ConnectionData* data;
Expand Down
Loading