From 570e5ffde236056ad5c70a59681ad6fc1e445717 Mon Sep 17 00:00:00 2001 From: kamathmanu Date: Thu, 12 Aug 2021 09:50:52 -0400 Subject: Added Spinner while rooms load --- src/RoomDirectoryModel.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'src/RoomDirectoryModel.cpp') diff --git a/src/RoomDirectoryModel.cpp b/src/RoomDirectoryModel.cpp index 2c633491..7d6be13e 100644 --- a/src/RoomDirectoryModel.cpp +++ b/src/RoomDirectoryModel.cpp @@ -11,7 +11,6 @@ RoomDirectoryModel::RoomDirectoryModel(QObject *parent, const std::string &s) : QAbstractListModel(parent) , server_(s) - , canFetchMore_(true) { connect(this, &RoomDirectoryModel::fetchedRoomsBatch, @@ -127,6 +126,8 @@ RoomDirectoryModel::data(const QModelIndex &index, int role) const void RoomDirectoryModel::fetchMore(const QModelIndex &) { + if (!canFetchMore_) return; + nhlog::net()->debug("Fetching more rooms from mtxclient..."); mtx::requests::PublicRooms req; @@ -136,10 +137,19 @@ RoomDirectoryModel::fetchMore(const QModelIndex &) // req.third_party_instance_id = third_party_instance_id; auto requested_server = server_; + reachedEndOfPagination_ = false; + emit reachedEndOfPaginationChanged(); + + loadingMoreRooms_ = true; + emit loadingMoreRoomsChanged(); + http::client()->post_public_rooms( req, [requested_server, this, req](const mtx::responses::PublicRooms &res, mtx::http::RequestErr err) { + loadingMoreRooms_ = false; + emit loadingMoreRoomsChanged(); + if (err) { nhlog::net()->error( "Failed to retrieve rooms from mtxclient - {} - {} - {}", @@ -149,7 +159,7 @@ RoomDirectoryModel::fetchMore(const QModelIndex &) } else if (req.filter.generic_search_term == this->userSearchString_ && req.since == this->prevBatch_ && requested_server == this->server_) { nhlog::net()->debug("signalling chunk to GUI thread"); - emit fetchedRoomsBatch(res.chunk, res.prev_batch, res.next_batch); + emit fetchedRoomsBatch(res.chunk, res.next_batch); } }, requested_server); @@ -157,11 +167,9 @@ RoomDirectoryModel::fetchMore(const QModelIndex &) void RoomDirectoryModel::displayRooms(std::vector fetched_rooms, - const std::string &prev_batch, const std::string &next_batch) { - nhlog::net()->debug("Prev batch: {} | Next batch: {}", prevBatch_, nextBatch_); - nhlog::net()->debug("NP batch: {} | NN batch: {}", prev_batch, next_batch); + nhlog::net()->debug("Prev batch: {} | Next batch: {}", prevBatch_, next_batch); if (fetched_rooms.empty()) { nhlog::net()->error("mtxclient helper thread yielded empty chunk!"); @@ -177,7 +185,11 @@ RoomDirectoryModel::displayRooms(std::vector f if (next_batch.empty()) { canFetchMore_ = false; + reachedEndOfPagination_ = true; + emit reachedEndOfPaginationChanged(); } prevBatch_ = next_batch; + + nhlog::ui()->debug ("Finished loading rooms"); } -- cgit 1.5.1