main.cpp 4.44 KB
Newer Older
Jesus Fernandez's avatar
Jesus Fernandez committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#include "ui_twitterdialog.h"
#include "twittertimelinemodel.h"

#include <functional>

#include <QUrl>
#include <QProcess>
#include <QApplication>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QCommandLineParser>
#include <QCommandLineOption>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    app.setApplicationName("Twitter Timeline");
    app.setApplicationDisplayName("Twitter Timeline");
    app.setOrganizationDomain("qt.io");
    app.setOrganizationName("The Qt Company");

    QCommandLineParser parser;
    QCommandLineOption token(QStringList() << "k" << "consumer-key", "Application consumer key",
                             "key");
    QCommandLineOption secret(QStringList() << "s" << "consumer-secret",
                              "Application consumer secret", "secret");
    QCommandLineOption connect(QStringList() << "c" << "connect",
                               "Connects to twitter. Requires consumer-key and consumer-secret");

    parser.addOptions({ token, secret, connect });
    parser.process(app);

    struct TwitterDialog : QDialog, Ui::TwitterDialog {
        TwitterTimelineModel model;

        TwitterDialog()
            : QDialog()
        {
            setupUi(this);
            view->setModel(&model);
            view->horizontalHeader()->hideSection(0);
            view->horizontalHeader()->hideSection(1);
        }
    } twitterDialog;

    const auto authenticate = [&]() {
Jesus Fernandez's avatar
Jesus Fernandez committed
87 88 89
        const auto clientIdentifier = twitterDialog.clientIdLineEdit->text();
        const auto clientSharedSecret = twitterDialog.clientSecretLineEdit->text();
        twitterDialog.model.authenticate(qMakePair(clientIdentifier, clientSharedSecret));
Jesus Fernandez's avatar
Jesus Fernandez committed
90 91
    };
    const auto buttonSlot = [&]() {
Jesus Fernandez's avatar
Jesus Fernandez committed
92
        if (twitterDialog.model.status() != Twitter::Status::Granted)
Jesus Fernandez's avatar
Jesus Fernandez committed
93 94 95 96 97 98 99 100 101 102
            authenticate();
        else
            twitterDialog.model.updateTimeline();
    };

    twitterDialog.clientIdLineEdit->setText(parser.value(token));
    twitterDialog.clientSecretLineEdit->setText(parser.value(secret));
    if (parser.isSet(connect)) {
        if (parser.value(token).isEmpty() || parser.value(secret).isEmpty()) {
            parser.showHelp();
Jesus Fernandez's avatar
Jesus Fernandez committed
103
        } else {
Jesus Fernandez's avatar
Jesus Fernandez committed
104 105 106 107 108 109 110 111 112 113 114 115
            authenticate();
            twitterDialog.view->setFocus();
        }
    }

    QObject::connect(twitterDialog.pushButton, &QPushButton::clicked, buttonSlot);
    QObject::connect(&twitterDialog.model, &TwitterTimelineModel::authenticated,
                     std::bind(&QPushButton::setText, twitterDialog.pushButton, "&Update"));

    twitterDialog.show();
    return app.exec();
}