File indexing completed on 2024-05-05 04:57:28

0001 /*
0002     This file is part of Choqok, the KDE micro-blogging client
0003 
0004     SPDX-FileCopyrightText: 2010-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 "twitterlistdialog.h"
0010 
0011 #include <QGridLayout>
0012 #include <QLineEdit>
0013 #include <QListWidget>
0014 #include <QPushButton>
0015 
0016 #include <KMessageBox>
0017 #include <KLocalizedString>
0018 
0019 #include "twitteraccount.h"
0020 #include "twitterdebug.h"
0021 #include "twittermicroblog.h"
0022 
0023 TwitterListDialog::TwitterListDialog(TwitterApiAccount *theAccount, QWidget *parent)
0024     : QDialog(parent)
0025 {
0026     if (theAccount) {
0027         account = qobject_cast<TwitterAccount *>(theAccount);
0028         if (!account) {
0029             qCCritical(CHOQOK) << "TwitterListDialog: ERROR, the provided account is not a valid Twitter account";
0030             return;
0031         }
0032     } else {
0033         qCCritical(CHOQOK) << "TwitterListDialog: ERROR, theAccount is NULL";
0034         return;
0035     }
0036     blog = qobject_cast<TwitterMicroBlog *>(account->microblog());
0037     mainWidget = new QWidget(this);
0038     ui.setupUi(mainWidget);
0039     connect(ui.username, &QLineEdit::textChanged, this, &TwitterListDialog::slotUsernameChanged);
0040     connect(ui.loadUserLists, &QPushButton::clicked, this, &TwitterListDialog::loadUserLists);
0041     QRegExp rx(QLatin1String("([a-z0-9_]){1,20}(\\/)"), Qt::CaseInsensitive);
0042     QValidator *val = new QRegExpValidator(rx, nullptr);
0043     ui.username->setValidator(val);
0044     ui.username->setFocus();
0045     listWidget = new QListWidget(this);
0046     QGridLayout *layout = new QGridLayout;
0047     layout->addWidget(ui.label, 0, 0);
0048     layout->addWidget(ui.username, 0, 1);
0049     layout->addWidget(ui.loadUserLists, 0, 2);
0050     layout->addWidget(listWidget, 1, 0, 1, -1);
0051     layout->addWidget(ui.label_2, 2, 0);
0052     layout->addWidget(ui.listname, 2, 1, 1, -1);
0053 
0054     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0055     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
0056     okButton->setDefault(true);
0057     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0058     okButton->setText(i18n("Add"));
0059     QPushButton *cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
0060     cancelButton->setIcon(KStandardGuiItem::close().icon());
0061     connect(buttonBox, &QDialogButtonBox::accepted, this, &TwitterListDialog::accept);
0062     connect(buttonBox, &QDialogButtonBox::rejected, this, &TwitterListDialog::reject);
0063     layout->addWidget(buttonBox, 3, 3, 1, -1);
0064 
0065     mainWidget->setLayout(layout);
0066 
0067     mainWidget->adjustSize();
0068 }
0069 
0070 TwitterListDialog::~TwitterListDialog()
0071 {
0072 }
0073 
0074 void TwitterListDialog::accept()
0075 {
0076     if (ui.listname->text().isEmpty() || ui.username->text().isEmpty()) {
0077         KMessageBox::error(this, i18n("You should provide both list author username and list name."));
0078     } else {
0079         blog->addListTimeline(account, ui.username->text(), ui.listname->text());
0080         QDialog::accept();
0081     }
0082 }
0083 
0084 void TwitterListDialog::slotUsernameChanged(const QString &name)
0085 {
0086     if (name.endsWith(QLatin1Char('/'))) {
0087         QString n = name;
0088         n.chop(1);
0089         ui.username->setText(n);
0090         ui.listname->setFocus();
0091     }
0092     listWidget->clear();
0093     ui.listname->clear();
0094 }
0095 
0096 void TwitterListDialog::loadUserLists()
0097 {
0098     if (ui.username->text().isEmpty()) {
0099         KMessageBox::error(choqokMainWindow, i18n("No user."));
0100         return;
0101     }
0102     connect(blog, &TwitterMicroBlog::userLists, this, &TwitterListDialog::slotLoadUserlists);
0103     blog->fetchUserLists(account, ui.username->text());
0104 }
0105 
0106 void TwitterListDialog::slotLoadUserlists(Choqok::Account *theAccount, QString username,
0107         QList<Twitter::List> list)
0108 {
0109     if (theAccount == account && QString::compare(username, ui.username->text()) == 0 && !list.isEmpty()) {
0110         listWidget->clear();
0111         for (const Twitter::List &l: list) {
0112             QListWidgetItem *item = new QListWidgetItem(listWidget);
0113             QString iText;
0114             if (l.description.isEmpty()) {
0115                 iText = l.fullname;
0116             } else {
0117                 iText = QStringLiteral("%1 [%2]").arg(l.fullname).arg(l.description);
0118             }
0119             item->setText(iText);
0120             item->setData(32, l.slug);
0121             listWidget->addItem(item);
0122         }
0123         connect(listWidget, &QListWidget::itemClicked, this, &TwitterListDialog::slotListItemChanged);
0124     }
0125 }
0126 
0127 void TwitterListDialog::slotListItemChanged(QListWidgetItem *item)
0128 {
0129     ui.listname->setText(item->data(32).toString());
0130 }
0131 
0132 #include "moc_twitterlistdialog.cpp"