[=]() { if (isConnected()) {slotRefresh();} });
connect(_account.data(), &AccountState::hasFetchedNavigationApps,
this, &User::slotRebuildNavigationAppList);
+ connect(_account->account().data(), &Account::accountChangedDisplayName, this, &User::nameChanged);
+
+ connect(FolderMan::instance(), &FolderMan::folderListChanged, this, &User::hasLocalFolderChanged);
}
void User::slotBuildNotificationDisplay(const ActivityList &list)
void User::slotRebuildNavigationAppList()
{
+ emit serverHasTalkChanged();
// Rebuild App list
UserAppsModel::instance()->buildAppList();
}
_isCurrentUser = isCurrent;
}
-Folder *User::getFolder()
+Folder *User::getFolder() const
{
foreach (Folder *folder, FolderMan::instance()->map()) {
if (folder->accountState() == _account.data()) {
}
}
+bool User::hasLocalFolder() const
+{
+ return getFolder() != nullptr;
+}
+
bool User::serverHasTalk() const
{
return _account->hasTalk();
return _users.size();
}
-Q_INVOKABLE int UserModel::currentUserId()
+Q_INVOKABLE int UserModel::currentUserId() const
{
return _currentUserId;
}
return _users[id]->avatar(true);
}
-Q_INVOKABLE QString UserModel::currentUserName()
-{
- if (_users.count() >= 1) {
- return _users[_currentUserId]->name();
- } else {
- return QString("No users");
- }
-}
-
Q_INVOKABLE QString UserModel::currentUserServer()
{
if (_users.count() >= 1) {
}
}
+User *UserModel::currentUser() const
+{
+ return _users[currentUserId()];
+}
+
/*-------------------------------------------------------------------------------------*/
ImageProvider::ImageProvider()
class User : public QObject
{
Q_OBJECT
+ Q_PROPERTY(QString name READ name NOTIFY nameChanged)
+ Q_PROPERTY(QString server READ server CONSTANT)
+ Q_PROPERTY(bool hasLocalFolder READ hasLocalFolder NOTIFY hasLocalFolderChanged)
+ Q_PROPERTY(bool serverHasTalk READ serverHasTalk NOTIFY serverHasTalkChanged)
public:
User(AccountStatePtr &account, const bool &isCurrent = false, QObject* parent = 0);
bool isConnected() const;
bool isCurrentUser() const;
void setCurrentUser(const bool &isCurrent);
- Folder *getFolder();
+ Folder *getFolder() const;
ActivityListModel *getActivityModel();
void openLocalFolder();
QString name() const;
QString server(bool shortened = true) const;
+ bool hasLocalFolder() const;
bool serverHasTalk() const;
bool hasActivities() const;
AccountAppList appList() const;
signals:
void guiLog(const QString &, const QString &);
+ void nameChanged();
+ void hasLocalFolderChanged();
+ void serverHasTalkChanged();
public slots:
void slotItemCompleted(const QString &folder, const SyncFileItemPtr &item);
class UserModel : public QAbstractListModel
{
Q_OBJECT
+ Q_PROPERTY(User* currentUser READ currentUser NOTIFY newUserSelected)
public:
static UserModel *instance();
virtual ~UserModel() {};
QImage avatarById(const int &id);
+ User *currentUser() const;
+
Q_INVOKABLE void fetchCurrentActivityModel();
Q_INVOKABLE void openCurrentAccountLocalFolder();
Q_INVOKABLE void openCurrentAccountTalk();
Q_INVOKABLE void openCurrentAccountServer();
Q_INVOKABLE QImage currentUserAvatar();
Q_INVOKABLE int numUsers();
- Q_INVOKABLE QString currentUserName();
Q_INVOKABLE QString currentUserServer();
Q_INVOKABLE bool currentUserHasActivities();
Q_INVOKABLE bool currentUserHasLocalFolder();
Q_INVOKABLE bool currentServerHasTalk();
- Q_INVOKABLE int currentUserId();
+ Q_INVOKABLE int currentUserId() const;
Q_INVOKABLE bool isUserConnected(const int &id);
Q_INVOKABLE void switchCurrentUser(const int &id);
Q_INVOKABLE void login(const int &id);
onVisibleChanged: {\r
currentAccountAvatar.source = ""\r
currentAccountAvatar.source = "image://avatars/currentUser"\r
- currentAccountUser.text = UserModel.currentUserName();\r
- currentAccountServer.text = UserModel.currentUserServer();\r
- openLocalFolderButton.visible = UserModel.currentUserHasLocalFolder();\r
- trayWindowTalkButton.visible = UserModel.currentServerHasTalk();\r
currentAccountStateIndicator.source = ""\r
currentAccountStateIndicator.source = UserModel.isUserConnected(UserModel.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
\r
onRefreshCurrentUserGui: {\r
currentAccountAvatar.source = ""\r
currentAccountAvatar.source = "image://avatars/currentUser"\r
- currentAccountUser.text = UserModel.currentUserName();\r
- currentAccountServer.text = UserModel.currentUserServer();\r
currentAccountStateIndicator.source = ""\r
currentAccountStateIndicator.source = UserModel.isUserConnected(UserModel.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
}\r
onNewUserSelected: {\r
accountMenu.close();\r
- openLocalFolderButton.visible = UserModel.currentUserHasLocalFolder();\r
- trayWindowTalkButton.visible = UserModel.currentServerHasTalk();\r
}\r
}\r
\r
Layout.leftMargin: 6\r
Label {\r
id: currentAccountUser\r
+\r
width: Style.currentAccountLabelWidth\r
- text: UserModel.currentUserName()\r
+ text: UserModel.currentUser.name\r
elide: Text.ElideRight\r
color: "white"\r
font.pixelSize: Style.topLinePixelSize\r
Label {\r
id: currentAccountServer\r
width: Style.currentAccountLabelWidth\r
- text: UserModel.currentUserServer()\r
+ text: UserModel.currentUser.server\r
elide: Text.ElideRight\r
color: "white"\r
font.pixelSize: Style.subLinePixelSize\r
HeaderButton {\r
id: openLocalFolderButton\r
\r
- visible: UserModel.currentUserHasLocalFolder()\r
+ visible: UserModel.currentUser.hasLocalFolder\r
icon.source: "qrc:///client/theme/white/folder.svg"\r
onClicked: UserModel.openCurrentAccountLocalFolder()\r
}\r
HeaderButton {\r
id: trayWindowTalkButton\r
\r
- visible: UserModel.currentServerHasTalk()\r
+ visible: UserModel.currentUser.serverHasTalk\r
icon.source: "qrc:///client/theme/white/talk-app.svg"\r
onClicked: UserModel.openCurrentAccountTalk()\r
}\r