on ed593dc help sign in
unity8/plugins/AccountsService/AccountsService.h
143 lines 5.1 kB history raw
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authors: Michael Terry <michael.terry@canonical.com>
17 */
19#ifndef UNITY_ACCOUNTSSERVICE_H
20#define UNITY_ACCOUNTSSERVICE_H
22#include <QHash>
23#include <QObject>
24#include <QString>
25#include <QVariant>
27class AccountsServiceDBusAdaptor;
28class QDBusInterface;
30class AccountsService: public QObject
32 Q_OBJECT
33 Q_ENUMS(PasswordDisplayHint)
34 Q_PROPERTY (QString user
35 READ user
36 WRITE setUser
37 NOTIFY userChanged)
38 Q_PROPERTY (bool demoEdges
39 READ demoEdges
40 WRITE setDemoEdges
41 NOTIFY demoEdgesChanged)
42 Q_PROPERTY (bool enableLauncherWhileLocked
43 READ enableLauncherWhileLocked
44 NOTIFY enableLauncherWhileLockedChanged)
45 Q_PROPERTY (bool enableIndicatorsWhileLocked
46 READ enableIndicatorsWhileLocked
47 NOTIFY enableIndicatorsWhileLockedChanged)
48 Q_PROPERTY (QString backgroundFile
49 READ backgroundFile
50 NOTIFY backgroundFileChanged)
51 Q_PROPERTY (bool statsWelcomeScreen
52 READ statsWelcomeScreen
53 NOTIFY statsWelcomeScreenChanged)
54 Q_PROPERTY (PasswordDisplayHint passwordDisplayHint
55 READ passwordDisplayHint
56 NOTIFY passwordDisplayHintChanged)
57 Q_PROPERTY (uint failedLogins
58 READ failedLogins
59 WRITE setFailedLogins
60 NOTIFY failedLoginsChanged)
61 Q_PROPERTY(bool hereEnabled
62 READ hereEnabled
63 WRITE setHereEnabled
64 NOTIFY hereEnabledChanged)
65 Q_PROPERTY(QString hereLicensePath
66 READ hereLicensePath
67 NOTIFY hereLicensePathChanged)
68 Q_PROPERTY(bool hereLicensePathValid // qml sees a null string as "", so we use proxy setting for that
69 READ hereLicensePathValid
70 NOTIFY hereLicensePathChanged)
72public:
73 enum PasswordDisplayHint {
74 Keyboard,
75 Numeric,
76 };
78 explicit AccountsService(QObject *parent = 0, const QString & user = QString());
79 ~AccountsService() = default;
81 QString user() const;
82 void setUser(const QString &user);
83 bool demoEdges() const;
84 void setDemoEdges(bool demoEdges);
85 bool enableLauncherWhileLocked() const;
86 bool enableIndicatorsWhileLocked() const;
87 QString backgroundFile() const;
88 bool statsWelcomeScreen() const;
89 PasswordDisplayHint passwordDisplayHint() const;
90 uint failedLogins() const;
91 void setFailedLogins(uint failedLogins);
92 bool hereEnabled() const;
93 void setHereEnabled(bool enabled);
94 QString hereLicensePath() const;
95 bool hereLicensePathValid() const;
97Q_SIGNALS:
98 void userChanged();
99 void demoEdgesChanged();
100 void enableLauncherWhileLockedChanged();
101 void enableIndicatorsWhileLockedChanged();
102 void backgroundFileChanged();
103 void statsWelcomeScreenChanged();
104 void passwordDisplayHintChanged();
105 void failedLoginsChanged();
106 void hereEnabledChanged();
107 void hereLicensePathChanged();
109private Q_SLOTS:
110 void onPropertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
111 void onMaybeChanged(const QString &user);
113private:
114 typedef QVariant (*ProxyConverter)(const QVariant &);
116 void refresh(bool async);
117 void registerProperty(const QString &interface, const QString &property, const QString &signal);
118 void registerProxy(const QString &interface, const QString &property, QDBusInterface *iface, const QString &method, ProxyConverter converter = nullptr);
120 void updateAllProperties(const QString &interface, bool async);
121 void updateProperty(const QString &interface, const QString &property);
122 void updateCache(const QString &interface, const QString &property, const QVariant &value);
124 void setProperty(const QString &interface, const QString &property, const QVariant &value);
125 QVariant getProperty(const QString &interface, const QString &property) const;
127 void emitChangedForProperty(const QString &interface, const QString &property);
129 struct PropertyInfo {
130 QVariant value{};
131 QString signal{};
132 QDBusInterface *proxyInterface{};
133 QString proxyMethod{};
134 ProxyConverter proxyConverter{};
135 };
136 typedef QHash< QString, QHash<QString, PropertyInfo> > PropertyHash;
137 PropertyHash m_properties;
138 AccountsServiceDBusAdaptor *m_service;
139 QDBusInterface *m_unityInput;
140 QString m_user;
141};
143#endif