Skip to content

Commit

Permalink
if desktop client sent a first reply: wait for the menu data
Browse files Browse the repository at this point in the history
may need the user to wait a bit longer but should prevent missing the
context menu

should still be robust since we only wait indefinitely if desktop client
sent a first reply

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
  • Loading branch information
mgallien committed Mar 19, 2024
1 parent 747efd4 commit a396d1d
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,10 @@ NCClientInterface::ContextMenuInfo NCClientInterface::FetchInfo(const std::wstri
ContextMenuInfo info;
std::wstring response;
int sleptCount = 0;
while (sleptCount < 20) {
constexpr auto noReplyTimeout = 20;
constexpr auto replyTimeout = 200;
bool receivedReplayFromDesktopClient = false;
while ((!receivedReplayFromDesktopClient && sleptCount < noReplyTimeout) || (receivedReplayFromDesktopClient && sleptCount < replyTimeout)) {
if (socket.ReadLine(&response)) {
if (StringUtil::begins_with(response, wstring(L"REGISTER_PATH:"))) {
wstring responsePath = response.substr(14); // length of REGISTER_PATH
Expand All @@ -65,6 +68,9 @@ NCClientInterface::ContextMenuInfo NCClientInterface::FetchInfo(const std::wstri
if (!StringUtil::extractChunks(response, commandName, flags, title))
continue;
info.menuItems.push_back({ commandName, flags, title });
} else if (StringUtil::begins_with(response, wstring(L"GET_MENU_ITEMS:BEGIN"))) {
receivedReplayFromDesktopClient = true;
continue;
} else if (StringUtil::begins_with(response, wstring(L"GET_MENU_ITEMS:END"))) {
break; // Stop once we completely received the last sent request
}
Expand Down
2 changes: 1 addition & 1 deletion src/gui/socketapi/socketapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1352,7 +1352,7 @@ SocketApi::FileData SocketApi::FileData::parentFolder() const

void SocketApi::command_GET_MENU_ITEMS(const QString &argument, OCC::SocketListener *listener)
{
listener->sendMessage(QString("GET_MENU_ITEMS:BEGIN"));
listener->sendMessage(QString("GET_MENU_ITEMS:BEGIN"), true);
const QStringList files = split(argument);

// Find the common sync folder.
Expand Down

0 comments on commit a396d1d

Please sign in to comment.