Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[nemo-systemsettings] Add updateCurrent to UserInfo. Contributes to J…
…B#47825

Add updateCurrent to UserInfo. Checks if user is current and updates the
status.

Signed-off-by: Tomi Leppänen <tomi.leppanen@jolla.com>
  • Loading branch information
Tomin1 committed Mar 31, 2020
1 parent 66e08cc commit eab99e0
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 6 deletions.
26 changes: 21 additions & 5 deletions src/userinfo.cpp
Expand Up @@ -68,10 +68,10 @@ UserInfoPrivate::UserInfoPrivate(struct passwd *pwd)
: m_uid(pwd->pw_uid)
, m_username(QString::fromUtf8(pwd->pw_name))
, m_name(nameFromGecos(pwd->pw_gecos))
// require_active == false -> both online and active are logged in.
// require_active == true -> only active user is logged in.
// Specifying seat should make sure that remote users are not
// counted as they don't have seats.
, m_loggedIn(sd_uid_is_on_seat(m_uid, 0, "seat0") > 0)
, m_loggedIn(sd_uid_is_on_seat(m_uid, 1, "seat0") > 0)
{
}

Expand Down Expand Up @@ -113,9 +113,7 @@ void UserInfoPrivate::set(struct passwd *pwd)
*/
UserInfo::UserInfo()
{
if (!UserInfoPrivate::s_current.isNull()) {
d_ptr = QSharedPointer<UserInfoPrivate>(UserInfoPrivate::s_current);
}
d_ptr = UserInfoPrivate::s_current.toStrongRef();
if (d_ptr.isNull()) {
uid_t uid = InvalidId;
struct passwd *pwd;
Expand Down Expand Up @@ -251,10 +249,27 @@ bool UserInfo::current() const
return d->m_loggedIn;
}

bool UserInfo::updateCurrent()
{
Q_D(UserInfo);
bool previous = d->m_loggedIn;
d->m_loggedIn = sd_uid_is_on_seat(d->m_uid, 1, "seat0") > 0;
if (d->m_loggedIn != previous) {
if (d->m_loggedIn)
UserInfoPrivate::s_current = d_ptr;
else if (UserInfoPrivate::s_current == d_ptr)
UserInfoPrivate::s_current.clear();
emit d_ptr->currentChanged();
return true;
}
return false;
}

void UserInfo::reset()
{
Q_D(UserInfo);
d->set((isValid()) ? getpwuid(d->m_uid) : nullptr);
updateCurrent();
}

UserInfo &UserInfo::operator=(const UserInfo &other)
Expand Down Expand Up @@ -286,4 +301,5 @@ void UserInfo::connectSignals()
connect(d_ptr.data(), &UserInfoPrivate::usernameChanged, this, &UserInfo::usernameChanged);
connect(d_ptr.data(), &UserInfoPrivate::nameChanged, this, &UserInfo::nameChanged);
connect(d_ptr.data(), &UserInfoPrivate::uidChanged, this, &UserInfo::uidChanged);
connect(d_ptr.data(), &UserInfoPrivate::currentChanged, this, &UserInfo::currentChanged);
}
4 changes: 3 additions & 1 deletion src/userinfo.h
Expand Up @@ -50,7 +50,7 @@ class SYSTEMSETTINGS_EXPORT UserInfo: public QObject
Q_PROPERTY(QString name READ name NOTIFY nameChanged)
Q_PROPERTY(UserType type READ type CONSTANT)
Q_PROPERTY(int uid READ uid NOTIFY uidChanged)
Q_PROPERTY(bool current READ current CONSTANT)
Q_PROPERTY(bool current READ current NOTIFY currentChanged)

friend class UserModel;

Expand Down Expand Up @@ -85,13 +85,15 @@ class SYSTEMSETTINGS_EXPORT UserInfo: public QObject
void usernameChanged();
void nameChanged();
void uidChanged();
void currentChanged();

private:
explicit UserInfo(int uid);
explicit UserInfo(QString username);

void setUsername(QString username);
void setName(QString name);
bool updateCurrent();

void connectSignals();

Expand Down
1 change: 1 addition & 0 deletions src/userinfo_p.h
Expand Up @@ -59,6 +59,7 @@ class UserInfoPrivate : public QObject
void usernameChanged();
void nameChanged();
void uidChanged();
void currentChanged();
};

#endif /* USERINFOPRIVATE_H */

0 comments on commit eab99e0

Please sign in to comment.