| Home · All Classes · All Namespaces · Modules · Functions · Files

roster/roster-window.cpp

    #include "roster-window.h"
    #include "_gen/roster-window.moc.hpp"

    #include "roster-widget.h"

    #include <TelepathyQt/Types>
    #include <TelepathyQt/ChannelFactory>
    #include <TelepathyQt/Connection>
    #include <TelepathyQt/ConnectionFactory>
    #include <TelepathyQt/ContactFactory>
    #include <TelepathyQt/PendingOperation>
    #include <TelepathyQt/PendingReady>

    #include <QDebug>

    using namespace Tp;

    RosterWindow::RosterWindow(const QString &accountName, QWidget *parent)
        : QMainWindow(parent)
    {
        setWindowTitle(QLatin1String("Roster"));

        setupGui();

        ChannelFactoryPtr channelFactory = ChannelFactory::create(
                QDBusConnection::sessionBus());
        ConnectionFactoryPtr connectionFactory = ConnectionFactory::create(
                QDBusConnection::sessionBus(), Connection::FeatureConnected |
                    Connection::FeatureRoster | Connection::FeatureRosterGroups);
        ContactFactoryPtr contactFactory = ContactFactory::create(
                Contact::FeatureAlias | Contact::FeatureSimplePresence);

        mAccount = Account::create(TP_QT_ACCOUNT_MANAGER_BUS_NAME,
                TP_QT_ACCOUNT_OBJECT_PATH_BASE + QLatin1Char('/') + accountName,
                connectionFactory, channelFactory, contactFactory);
        connect(mAccount->becomeReady(Account::FeatureCore),
                SIGNAL(finished(Tp::PendingOperation *)),
                SLOT(onAccountReady(Tp::PendingOperation *)));

        resize(240, 320);
    }

    RosterWindow::~RosterWindow()
    {
    }

    void RosterWindow::setupGui()
    {
        mRoster = new RosterWidget();
        setCentralWidget(mRoster);
    }

    void RosterWindow::onAccountReady(Tp::PendingOperation *op)
    {
        if (op->isError()) {
            qWarning() << "Account cannot become ready - " <<
                op->errorName() << '-' << op->errorMessage();
            QCoreApplication::exit(1);
            return;
        }

        qDebug() << "Account ready";
        connect(mAccount.data(),
                SIGNAL(connectionChanged(Tp::ConnectionPtr)),
                SLOT(onAccountConnectionChanged(Tp::ConnectionPtr)));

        if (mAccount->connection().isNull()) {
            qDebug() << "The account given has no Connection. Please set it online to continue.";
        }

        onAccountConnectionChanged(mAccount->connection());
    }

    void RosterWindow::onAccountConnectionChanged(const ConnectionPtr &conn)
    {
        if (conn) {
            mRoster->setConnection(conn);
        } else {
            mRoster->unsetConnection();
        }
    }