summaryrefslogtreecommitdiff
path: root/qt4/TelepathyQt4/account-factory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt4/TelepathyQt4/account-factory.cpp')
-rw-r--r--qt4/TelepathyQt4/account-factory.cpp157
1 files changed, 157 insertions, 0 deletions
diff --git a/qt4/TelepathyQt4/account-factory.cpp b/qt4/TelepathyQt4/account-factory.cpp
new file mode 100644
index 000000000..5dcac4b5a
--- /dev/null
+++ b/qt4/TelepathyQt4/account-factory.cpp
@@ -0,0 +1,157 @@
+/**
+ * This file is part of TelepathyQt4
+ *
+ * @copyright Copyright (C) 2010 Collabora Ltd. <http://www.collabora.co.uk/>
+ * @copyright Copyright (C) 2010 Nokia Corporation
+ * @license LGPL 2.1
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <TelepathyQt4/AccountFactory>
+
+#include "TelepathyQt4/_gen/account-factory.moc.hpp"
+
+#include <TelepathyQt4/Account>
+
+namespace Tp
+{
+
+/**
+ * \class AccountFactory
+ * \ingroup utils
+ * \headerfile TelepathyQt4/account-factory.h <TelepathyQt4/AccountFactory>
+ *
+ * \brief The AccountFactory class is responsible for constructing Account
+ * objects according to application-defined settings.
+ *
+ * The class is used by AccountManager and other classes which construct Account
+ * proxy instances to enable sharing instances of application-defined Account
+ * subclasses with certain features always ready.
+ */
+
+/**
+ * Create a new AccountFactory object.
+ *
+ * Optionally, the \a features to make ready on all constructed proxies can be specified. The
+ * default is to make no features ready. It should be noted that unlike Account::becomeReady(),
+ * FeatureCore isn't assumed. If no features are specified, which is the default behavior, no
+ * Account::becomeReady() call is made at all and the proxy won't be Account::isReady().
+ *
+ * \param bus The QDBusConnection for proxies constructed using this factory to use.
+ * \param features The features to make ready on constructed Accounts.
+ * \return An AccountFactoryPtr object pointing to the newly created
+ * AccountFactory object.
+ */
+AccountFactoryPtr AccountFactory::create(const QDBusConnection &bus, const Features &features)
+{
+ return AccountFactoryPtr(new AccountFactory(bus, features));
+}
+
+/**
+ * Construct a new AccountFactory object.
+ *
+ * As in create(), it should be noted that unlike Account::becomeReady(), FeatureCore isn't assumed.
+ * If no \a features are specified, no Account::becomeReady() call is made at all and the proxy
+ * won't be Account::isReady().
+ *
+ * \param bus The QDBusConnection for proxies constructed using this factory to use.
+ * \param features The features to make ready on constructed Accounts.
+ */
+AccountFactory::AccountFactory(const QDBusConnection &bus, const Features &features)
+ : FixedFeatureFactory(bus)
+{
+ addFeatures(features);
+}
+
+/**
+ * Class destructor.
+ */
+AccountFactory::~AccountFactory()
+{
+}
+
+/**
+ * Constructs an Account proxy and begins making it ready.
+ *
+ * If a valid proxy already exists in the factory cache for the given combination of \a busName and
+ * \a objectPath, it is returned instead. All newly created proxies are automatically cached until
+ * they're either DBusProxy::invalidated() or the last reference to them outside the factory has
+ * been dropped.
+ *
+ * The proxy can be accessed immediately after this function returns using PendingReady::proxy().
+ * The ready operation only finishes, however, when the features specified by features(), if any,
+ * are made ready as much as possible. If the service doesn't support a given feature, they won't
+ * obviously be ready even if the operation finished successfully, as is the case for
+ * Account::becomeReady().
+ *
+ * \param busName The bus/service name of the D-Bus account object the proxy is constructed for.
+ * (Usually #TP_QT4_ACCOUNT_MANAGER_BUS_NAME).
+ * \param objectPath The object path of the account.
+ * \param connFactory The connection factory to use for the Account.
+ * \param chanFactory The channel factory to use for the Account.
+ * \param contactFactory The channel factory to use for the Account.
+ * \return A PendingReady operation with the proxy in PendingReady::proxy().
+ */
+PendingReady *AccountFactory::proxy(const QString &busName, const QString &objectPath,
+ const ConnectionFactoryConstPtr &connFactory,
+ const ChannelFactoryConstPtr &chanFactory,
+ const ContactFactoryConstPtr &contactFactory) const
+{
+ DBusProxyPtr proxy = cachedProxy(busName, objectPath);
+ if (proxy.isNull()) {
+ proxy = construct(busName, objectPath, connFactory, chanFactory, contactFactory);
+ }
+
+ return nowHaveProxy(proxy);
+}
+
+/**
+ * Can be used by subclasses to override the Account subclass constructed by the factory.
+ *
+ * This is automatically called by proxy() to construct proxy instances if no valid cached proxy is
+ * found.
+ *
+ * The default implementation constructs Tp::Account objects.
+ *
+ * \param busName The bus/service name of the D-Bus account object the proxy is constructed for.
+ * (Usually #TP_QT4_ACCOUNT_MANAGER_BUS_NAME).
+ * \param objectPath The object path of the account.
+ * \param connFactory The connection factory to use for the Account.
+ * \param chanFactory The channel factory to use for the Account.
+ * \param contactFactory The channel factory to use for the Account.
+ * \return A pointer to the constructed Account object.
+ */
+AccountPtr AccountFactory::construct(const QString &busName, const QString &objectPath,
+ const ConnectionFactoryConstPtr &connFactory,
+ const ChannelFactoryConstPtr &chanFactory,
+ const ContactFactoryConstPtr &contactFactory) const
+{
+ return Account::create(dbusConnection(), busName, objectPath, connFactory, chanFactory,
+ contactFactory);
+}
+
+/**
+ * Identity transform, as is appropriate for Account objects.
+ *
+ * \param uniqueOrWellKnown The name to transform.
+ * \return \a uniqueOrWellKnown
+ */
+QString AccountFactory::finalBusNameFrom(const QString &uniqueOrWellKnown) const
+{
+ return uniqueOrWellKnown;
+}
+
+}