diff --git a/cockatrice/src/client/tabs/tab_replays.cpp b/cockatrice/src/client/tabs/tab_replays.cpp index 8382c1c39..8c023d671 100644 --- a/cockatrice/src/client/tabs/tab_replays.cpp +++ b/cockatrice/src/client/tabs/tab_replays.cpp @@ -27,7 +27,8 @@ #include #include -TabReplays::TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client) : Tab(_tabSupervisor), client(_client) +TabReplays::TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client, const ServerInfo_User *currentUserInfo) + : Tab(_tabSupervisor), client(_client) { localDirModel = new QFileSystemModel(this); localDirModel->setRootPath(SettingsCache::instance().getReplaysPath()); @@ -147,6 +148,10 @@ TabReplays::TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client) : connect(client, SIGNAL(replayAddedEventReceived(const Event_ReplayAdded &)), this, SLOT(replayAddedEventReceived(const Event_ReplayAdded &))); + + connect(client, &AbstractClient::userInfoChanged, this, &TabReplays::handleConnected); + connect(client, &AbstractClient::statusChanged, this, &TabReplays::handleConnectionChanged); + setRemoteEnabled(currentUserInfo && currentUserInfo->user_level() & ServerInfo_User::IsRegistered); } void TabReplays::retranslateUi() @@ -165,6 +170,35 @@ void TabReplays::retranslateUi() aDeleteRemoteReplay->setText(tr("Delete")); } +void TabReplays::handleConnected(const ServerInfo_User &userInfo) +{ + setRemoteEnabled(userInfo.user_level() & ServerInfo_User::IsRegistered); +} + +/** + * This is only responsible for handling the disconnect. The connect is already handled elsewhere + */ +void TabReplays::handleConnectionChanged(ClientStatus status) +{ + if (status == StatusDisconnected) { + setRemoteEnabled(false); + } +} + +void TabReplays::setRemoteEnabled(bool enabled) +{ + aOpenRemoteReplay->setEnabled(enabled); + aDownload->setEnabled(enabled); + aKeep->setEnabled(enabled); + aDeleteRemoteReplay->setEnabled(enabled); + + if (enabled) { + serverDirView->refreshTree(); + } else { + serverDirView->clearTree(); + } +} + void TabReplays::actLocalDoubleClick(const QModelIndex &curLeft) { if (!localDirModel->isDir(curLeft)) { diff --git a/cockatrice/src/client/tabs/tab_replays.h b/cockatrice/src/client/tabs/tab_replays.h index 187d2078b..3926710a8 100644 --- a/cockatrice/src/client/tabs/tab_replays.h +++ b/cockatrice/src/client/tabs/tab_replays.h @@ -1,8 +1,10 @@ #ifndef TAB_REPLAYS_H #define TAB_REPLAYS_H +#include "../game_logic/abstract_client.h" #include "tab.h" +class ServerInfo_User; class Response; class AbstractClient; class QTreeView; @@ -29,9 +31,14 @@ private: QAction *aOpenReplaysFolder; QAction *aOpenRemoteReplay, *aDownload, *aKeep, *aDeleteRemoteReplay; + void setRemoteEnabled(bool enabled); + void downloadNodeAtIndex(const QModelIndex &curLeft, const QModelIndex &curRight); private slots: + void handleConnected(const ServerInfo_User &userInfo); + void handleConnectionChanged(ClientStatus status); + void actLocalDoubleClick(const QModelIndex &curLeft); void actRenameLocal(); void actOpenLocalReplay(); @@ -58,7 +65,7 @@ signals: void openReplay(GameReplay *replay); public: - TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client); + TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client, const ServerInfo_User *currentUserInfo); void retranslateUi() override; QString getTabText() const override { diff --git a/cockatrice/src/client/tabs/tab_supervisor.cpp b/cockatrice/src/client/tabs/tab_supervisor.cpp index b06272922..123f77bf1 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.cpp +++ b/cockatrice/src/client/tabs/tab_supervisor.cpp @@ -512,7 +512,7 @@ void TabSupervisor::actTabReplays(bool checked) { SettingsCache::instance().setTabReplaysOpen(checked); if (checked && !tabReplays) { - tabReplays = new TabReplays(this, client); + tabReplays = new TabReplays(this, client, userInfo); connect(tabReplays, &TabReplays::openReplay, this, &TabSupervisor::openReplay); myAddTab(tabReplays, aTabReplays); connect(tabReplays, &Tab::closed, this, [this] {