PageRenderTime 26ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/examples/twitterdemo/tweeter.cpp

https://gitlab.com/k1-801/o2
C++ | 135 lines | 105 code | 27 blank | 3 comment | 6 complexity | 91bf626f17d19e414bd5eb3c2d4e23f4 MD5 | raw file
  1. #include <QNetworkAccessManager>
  2. #include <QNetworkRequest>
  3. #include <QDesktopServices>
  4. #include <QDebug>
  5. #include "tweeter.h"
  6. #include "o0globals.h"
  7. #include "o1requestor.h"
  8. #include "o0settingsstore.h"
  9. const char O2_CONSUMER_KEY[] = "2vHeyIxjywIadjEhvbDpg";
  10. const char O2_CONSUMER_SECRET[] = "Xfwe195Kp3ZpcCKgkYs7RKfugTm8EfpLkQvsKfX2vvs";
  11. const int localPort = 8888;
  12. Tweeter::Tweeter(QObject *parent) :
  13. QObject(parent) {
  14. }
  15. void Tweeter::doOAuth() {
  16. o1Twitter_ = new O1Twitter(this);
  17. o1Twitter_->setClientId(O2_CONSUMER_KEY);
  18. o1Twitter_->setClientSecret(O2_CONSUMER_SECRET);
  19. o1Twitter_->setLocalPort(localPort);
  20. // Create a store object for writing the received tokens
  21. O0SettingsStore *store = new O0SettingsStore(O2_ENCRYPTION_KEY);
  22. store->setGroupKey("twitter");
  23. o1Twitter_->setStore(store);
  24. // Connect signals
  25. connect(o1Twitter_, SIGNAL(linkedChanged()), this, SLOT(onLinkedChanged()));
  26. connect(o1Twitter_, SIGNAL(linkingFailed()), this, SIGNAL(linkingFailed()));
  27. connect(o1Twitter_, SIGNAL(linkingSucceeded()), this, SLOT(onLinkingSucceeded()));
  28. connect(o1Twitter_, SIGNAL(openBrowser(QUrl)), this, SLOT(onOpenBrowser(QUrl)));
  29. connect(o1Twitter_, SIGNAL(closeBrowser()), this, SLOT(onCloseBrowser()));
  30. qDebug() << "Starting OAuth...";
  31. o1Twitter_->unlink(); // For the sake of this demo
  32. o1Twitter_->link();
  33. }
  34. void Tweeter::doXAuth(const QString &username, const QString &password) {
  35. oxTwitter_ = new OXTwitter(this);
  36. oxTwitter_->setClientId(O2_CONSUMER_KEY);
  37. oxTwitter_->setClientSecret(O2_CONSUMER_SECRET);
  38. oxTwitter_->setLocalPort(localPort);
  39. oxTwitter_->setUsername(username);
  40. oxTwitter_->setPassword(password);
  41. // Create a store object for writing the received tokens
  42. O0SettingsStore *store = new O0SettingsStore(O2_ENCRYPTION_KEY);
  43. store->setGroupKey("twitter");
  44. oxTwitter_->setStore(store);
  45. connect(oxTwitter_, SIGNAL(linkedChanged()), this, SLOT(onLinkedChanged()));
  46. connect(oxTwitter_, SIGNAL(linkingFailed()), this, SIGNAL(linkingFailed()));
  47. connect(oxTwitter_, SIGNAL(linkingSucceeded()), this, SLOT(onLinkingSucceeded()));
  48. connect(oxTwitter_, SIGNAL(openBrowser(QUrl)), this, SLOT(onOpenBrowser(QUrl)));
  49. connect(oxTwitter_, SIGNAL(closeBrowser()), this, SLOT(onCloseBrowser()));
  50. qDebug() << "Starting XAuth...";
  51. qDebug() << "Username:" << username << "Password:" << password;
  52. oxTwitter_->unlink(); // For the sake of this demo
  53. oxTwitter_->link();
  54. }
  55. void Tweeter::postStatusUpdate(const QString &message) {
  56. if (!o1Twitter_->linked()) {
  57. qWarning() << "Application is not linked to Twitter!";
  58. emit statusPosted();
  59. return;
  60. }
  61. qDebug() << "Status update message:" << message.toLatin1().constData();
  62. QNetworkAccessManager* manager = new QNetworkAccessManager(this);
  63. O1Twitter* o1 = o1Twitter_;
  64. O1Requestor* requestor = new O1Requestor(manager, o1, this);
  65. QByteArray paramName("status");
  66. QList<O0RequestParameter> reqParams = QList<O0RequestParameter>();
  67. reqParams << O0RequestParameter(paramName, message.toLatin1());
  68. QByteArray postData = O1::createQueryParameters(reqParams);
  69. QUrl url = QUrl("https://api.twitter.com/1.1/statuses/update.json");
  70. QNetworkRequest request(url);
  71. request.setHeader(QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM);
  72. QNetworkReply *reply = requestor->post(request, reqParams, postData);
  73. connect(reply, SIGNAL(finished()), this, SLOT(tweetReplyDone()));
  74. }
  75. void Tweeter::onOpenBrowser(const QUrl &url) {
  76. qDebug() << "Opening browser with URL" << url.toString();
  77. QDesktopServices::openUrl(url);
  78. }
  79. void Tweeter::onCloseBrowser() {
  80. }
  81. void Tweeter::onLinkedChanged() {
  82. qDebug() << "Linked changed!";
  83. }
  84. void Tweeter::onLinkingSucceeded() {
  85. O1Twitter *o1t = qobject_cast<O1Twitter *>(sender());
  86. if (!o1t->linked()) {
  87. return;
  88. }
  89. QVariantMap extraTokens = o1t->extraTokens();
  90. if (!extraTokens.isEmpty()) {
  91. emit extraTokensReady(extraTokens);
  92. qDebug() << "Extra tokens in response:";
  93. foreach (QString key, extraTokens.keys()) {
  94. qDebug() << "\t" << key << ":" << (extraTokens.value(key).toString().left(3) + "...");
  95. }
  96. }
  97. emit linkingSucceeded();
  98. }
  99. void Tweeter::tweetReplyDone() {
  100. QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
  101. if (reply->error() != QNetworkReply::NoError) {
  102. qDebug() << "ERROR:" << reply->errorString();
  103. qDebug() << "Content:" << reply->readAll();
  104. } else {
  105. qDebug() << "Tweet posted sucessfully!";
  106. }
  107. emit statusPosted();
  108. }