File indexing completed on 2024-04-28 04:55:38

0001 /*
0002     This file is part of Choqok, the KDE micro-blogging client
0003 
0004     SPDX-FileCopyrightText: 2008-2012 Mehrdad Momeny <mehrdad.momeny@gmail.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0007 */
0008 
0009 #include "twitterapishowthread.h"
0010 
0011 #include <QScrollArea>
0012 #include <QVBoxLayout>
0013 
0014 #include <KLocalizedString>
0015 
0016 #include "postwidget.h"
0017 #include "twitterapiaccount.h"
0018 #include "twitterapidebug.h"
0019 
0020 class TwitterApiShowThread::Private
0021 {
0022 public:
0023     Private(Choqok::Account *currentAccount)
0024         : account(currentAccount)
0025     {}
0026     QVBoxLayout *mainLayout;
0027     Choqok::Account *account;
0028     QString desiredPostId;
0029 };
0030 
0031 TwitterApiShowThread::TwitterApiShowThread(Choqok::Account *account, Choqok::Post *finalPost,
0032         QWidget *parent)
0033     : QWidget(parent), d(new Private(account))
0034 {
0035     qCDebug(CHOQOK);
0036     setupUi();
0037     setWindowTitle(i18n("Conversation"));
0038     connect(account->microblog(), &Choqok::MicroBlog::postFetched, this, &TwitterApiShowThread::slotAddNewPost);
0039     Choqok::UI::PostWidget *widget = d->account->microblog()->createPostWidget(d->account, finalPost, this);
0040     if (widget) {
0041         addPostWidgetToUi(widget);
0042         Choqok::Post *ps = new Choqok::Post;
0043         ps->postId = finalPost->replyToPostId;
0044         d->desiredPostId = finalPost->replyToPostId;
0045         d->account->microblog()->fetchPost(d->account, ps);
0046     }
0047 }
0048 
0049 TwitterApiShowThread::~TwitterApiShowThread()
0050 {
0051     delete d;
0052 }
0053 
0054 void TwitterApiShowThread::setupUi()
0055 {
0056     qCDebug(CHOQOK);
0057     QVBoxLayout *gridLayout;
0058     QScrollArea *scrollArea;
0059     QWidget *scrollAreaWidgetContents;
0060     QVBoxLayout *verticalLayout_2;
0061     QSpacerItem *verticalSpacer;
0062     gridLayout = new QVBoxLayout(this);
0063     gridLayout->setMargin(0);
0064     gridLayout->setObjectName(QLatin1String("gridLayout"));
0065     scrollArea = new QScrollArea(this);
0066     scrollArea->setObjectName(QLatin1String("scrollArea"));
0067     scrollArea->setFrameShape(QFrame::NoFrame);
0068     scrollArea->setWidgetResizable(true);
0069     scrollAreaWidgetContents = new QWidget();
0070     scrollAreaWidgetContents->setObjectName(QLatin1String("scrollAreaWidgetContents"));
0071     scrollAreaWidgetContents->setGeometry(QRect(0, 0, 254, 300));
0072     verticalLayout_2 = new QVBoxLayout(scrollAreaWidgetContents);
0073     verticalLayout_2->setMargin(1);
0074     d->mainLayout = new QVBoxLayout();
0075     verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
0076 
0077     d->mainLayout->addItem(verticalSpacer);
0078     d->mainLayout->setSpacing(3);
0079     d->mainLayout->setMargin(1);
0080 
0081     verticalLayout_2->addLayout(d->mainLayout);
0082 
0083     scrollArea->setWidget(scrollAreaWidgetContents);
0084 
0085     gridLayout->addWidget(scrollArea);
0086 }
0087 
0088 void TwitterApiShowThread::slotAddNewPost(Choqok::Account *theAccount, Choqok::Post *post)
0089 {
0090     qCDebug(CHOQOK);
0091     if (theAccount == d->account && post->postId == d->desiredPostId) {
0092         Choqok::UI::PostWidget *widget = d->account->microblog()->createPostWidget(d->account, post, this);
0093         if (widget) {
0094             addPostWidgetToUi(widget);
0095             Choqok::Post *ps = new Choqok::Post;
0096             ps->postId = post->replyToPostId;
0097             d->desiredPostId = ps->postId;
0098             d->account->microblog()->fetchPost(d->account, ps);
0099         }
0100     }
0101 }
0102 
0103 void TwitterApiShowThread::addPostWidgetToUi(Choqok::UI::PostWidget *widget)
0104 {
0105     qCDebug(CHOQOK);
0106     widget->initUi();
0107     widget->setRead();
0108     widget->setFocusProxy(this);
0109     widget->setObjectName(widget->currentPost()->postId);
0110     connect(widget, &Choqok::UI::PostWidget::resendPost, this, &TwitterApiShowThread::forwardResendPost);
0111     connect(widget, &Choqok::UI::PostWidget::resendPost, this, &TwitterApiShowThread::raiseMainWindow);
0112     connect(widget, &Choqok::UI::PostWidget::reply, this, &TwitterApiShowThread::raiseMainWindow);
0113     connect(widget, &Choqok::UI::PostWidget::reply, this, &TwitterApiShowThread::forwardReply);
0114 //         connect( widget, SIGNAL(aboutClosing(QString,PostWidget*)),
0115 //                 SLOT(postWidgetClosed(QString,PostWidget*)) );
0116     d->mainLayout->insertWidget(0, widget);
0117     //         d->posts.insert(widget->currentPost().postId, widget);
0118     Choqok::UI::Global::SessionManager::self()->emitNewPostWidgetAdded(widget, d->account);
0119 }
0120 
0121 void TwitterApiShowThread::raiseMainWindow()
0122 {
0123     Choqok::UI::Global::mainWindow()->activateWindow();
0124 }
0125 
0126 #include "moc_twitterapishowthread.cpp"