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"