22#include "ui_fcm_dialog.h"
30#include <QInputDialog>
35 : QDialog(parent, Qt::WindowStaysOnTopHint)
43 ui->labelPath->hide();
45 if (isRightToLeft()) {
46 ui->flashCookieTree->headerItem()->setTextAlignment(0, Qt::AlignRight | Qt::AlignVCenter);
47 ui->flashCookieTree->setLayoutDirection(Qt::LeftToRight);
48 ui->whiteList->setLayoutDirection(Qt::LeftToRight);
49 ui->blackList->setLayoutDirection(Qt::LeftToRight);
52 connect(ui->flashCookieTree, &QTreeWidget::currentItemChanged,
this, &FCM_Dialog::currentItemChanged);
53 connect(ui->removeAll, &QAbstractButton::clicked,
this, &FCM_Dialog::removeAll);
54 connect(ui->removeOne, &QAbstractButton::clicked,
this, &FCM_Dialog::removeCookie);
55 connect(ui->close, &QDialogButtonBox::clicked,
this, &QWidget::close);
56 connect(ui->close2, &QDialogButtonBox::clicked,
this, &QWidget::close);
57 connect(ui->close3, &QDialogButtonBox::clicked,
this, &QWidget::close);
58 connect(ui->search, &QLineEdit::textChanged,
this, &FCM_Dialog::filterString);
59 connect(ui->reloadFromDisk, &QAbstractButton::clicked,
this, &FCM_Dialog::reloadFromDisk);
61 connect(ui->whiteAdd, SIGNAL(clicked()),
this, SLOT(addWhitelist()));
62 connect(ui->whiteRemove, &QAbstractButton::clicked,
this, &FCM_Dialog::removeWhitelist);
63 connect(ui->blackAdd, SIGNAL(clicked()),
this, SLOT(addBlacklist()));
64 connect(ui->blackRemove, &QAbstractButton::clicked,
this, &FCM_Dialog::removeBlacklist);
66 connect(ui->autoMode, &QAbstractButton::toggled, ui->notification, &QWidget::setEnabled);
67 connect(ui->autoMode, &QAbstractButton::toggled, ui->labelNotification, &QWidget::setEnabled);
69 ui->autoMode->setChecked(m_manager->
readSettings().value(
QL1S(
"autoMode")).toBool());
70 ui->notification->setEnabled(m_manager->
readSettings().value(
QL1S(
"autoMode")).toBool());
71 ui->notification->setChecked(m_manager->
readSettings().value(
QL1S(
"notification")).toBool());
72 ui->deleteAllOnStartExit->setChecked(m_manager->
readSettings().value(
QL1S(
"deleteAllOnStartExit")).toBool());
74 ui->labelNotification->setEnabled(ui->autoMode->isChecked());
76 ui->search->setPlaceholderText(tr(
"Search"));
78 ui->flashCookieTree->sortItems(0, Qt::AscendingOrder);
79 ui->flashCookieTree->header()->setDefaultSectionSize(220);
80 ui->flashCookieTree->setFocus();
82 ui->flashCookieTree->setContextMenuPolicy(Qt::CustomContextMenu);
83 connect(ui->flashCookieTree, &QWidget::customContextMenuRequested,
this, &FCM_Dialog::cookieTreeContextMenuRequested);
85 auto* removeShortcut =
new QShortcut(QKeySequence(
QSL(
"Del")),
this);
86 connect(removeShortcut, &QShortcut::activated,
this, &FCM_Dialog::deletePressed);
91void FCM_Dialog::removeAll()
93 QMessageBox::StandardButton button = QMessageBox::warning(
this, tr(
"Confirmation"),
94 tr(
"Are you sure you want to delete all flash cookies on your computer?"), QMessageBox::Yes | QMessageBox::No);
95 if (button != QMessageBox::Yes) {
99 const QList<FlashCookie> &flashCookies = m_manager->
flashCookies();
100 for (
const FlashCookie &flashCookie : flashCookies) {
104 ui->flashCookieTree->clear();
109void FCM_Dialog::removeCookie()
111 QTreeWidgetItem* current = ui->flashCookieTree->currentItem();
116 const QVariant data = current->data(0, Qt::UserRole + 10);
119 const QString origin = current->text(0);
120 const QList<FlashCookie> &flashCookies = m_manager->
flashCookies();
121 for (
const FlashCookie &flashCookie : flashCookies) {
122 if (flashCookie.origin == origin) {
127 ui->flashCookieTree->deleteItem(current);
130 const FlashCookie flashCookie = qvariant_cast<FlashCookie>(data);
133 QTreeWidgetItem* parentItem = current->parent();
134 ui->flashCookieTree->deleteItem(current);
136 if (parentItem->childCount() == 0) {
137 ui->flashCookieTree->deleteItem(parentItem);
142void FCM_Dialog::currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* parent)
148 ui->textEdit->clear();
149 const QVariant data = current->data(0, Qt::UserRole + 10);
151 ui->name->setText(tr(
"<flash cookie not selected>"));
152 ui->size->setText(tr(
"<flash cookie not selected>"));
153 ui->server->setText(tr(
"<flash cookie not selected>"));
154 ui->lastModified->setText(tr(
"<flash cookie not selected>"));
156 ui->removeOne->setText(tr(
"Remove flash cookies"));
158 ui->labelPath->hide();
162 const FlashCookie flashCookie = qvariant_cast<FlashCookie>(data);
166 suffix = tr(
" (settings)");
168 ui->name->setText(flashCookie.
name + suffix);
169 ui->size->setText(QString::number(flashCookie.
size) + tr(
" Byte"));
170 ui->textEdit->setPlainText(flashCookie.
contents);
171 ui->server->setText(flashCookie.
origin);
172 ui->path->setText(
QSL(
"<a href=\"%1\">%2</a>").arg(QUrl::fromLocalFile(flashCookie.
path).toString(), QDir::toNativeSeparators(flashCookie.
path)));
175 ui->removeOne->setText(tr(
"Remove flash cookie"));
177 ui->labelPath->show();
183 disconnect(ui->search, &QLineEdit::textChanged,
this, &FCM_Dialog::filterString);
185 ui->textEdit->clear();
186 connect(ui->search, &QLineEdit::textChanged,
this, &FCM_Dialog::filterString);
193 QTimer::singleShot(0,
this, &FCM_Dialog::refreshFlashCookiesTree);
194 QTimer::singleShot(0,
this, &FCM_Dialog::refreshFilters);
199 ui->tabWidget->setCurrentIndex(index);
202void FCM_Dialog::refreshFlashCookiesTree()
204 const QList<FlashCookie> &flashCookies = m_manager->
flashCookies();
206 QApplication::setOverrideCursor(Qt::WaitCursor);
207 ui->flashCookieTree->clear();
210 QPointer<FCM_Dialog> guard =
this;
211 QHash<QString, QTreeWidgetItem*> hash;
212 for (
int i = 0;
i < flashCookies.count(); ++
i) {
214 QTreeWidgetItem* item;
216 QString cookieOrigin = flashCookie.
origin;
217 if (cookieOrigin.startsWith(QLatin1Char(
'.'))) {
218 cookieOrigin.remove(0, 1);
221 QTreeWidgetItem* findParent = hash.value(cookieOrigin);
223 item =
new QTreeWidgetItem(findParent);
226 auto* newParent =
new QTreeWidgetItem(ui->flashCookieTree);
227 newParent->setText(0, cookieOrigin);
229 ui->flashCookieTree->addTopLevelItem(newParent);
230 hash[cookieOrigin] = newParent;
232 item =
new QTreeWidgetItem(newParent);
237 suffix = tr(
" (settings)");
241 suffix += tr(
" [new]");
242 QFont font = item->font(0);
244 item->setFont(0, font);
245 item->parent()->setExpanded(
true);
248 item->setText(0, flashCookie.
name + suffix);
249 item->setData(0, Qt::UserRole + 10, QVariant::fromValue(flashCookie));
250 ui->flashCookieTree->addTopLevelItem(item);
254 QApplication::processEvents();
263 QApplication::restoreOverrideCursor();
266void FCM_Dialog::refreshFilters()
268 ui->whiteList->clear();
269 ui->blackList->clear();
271 ui->whiteList->addItems(m_manager->
readSettings().value(
QL1S(
"flashCookiesWhitelist")).toStringList());
272 ui->blackList->addItems(m_manager->
readSettings().value(
QL1S(
"flashCookiesBlacklist")).toStringList());
275void FCM_Dialog::addWhitelist()
277 const QString origin = QInputDialog::getText(
this, tr(
"Add to whitelist"), tr(
"Origin:"));
279 addWhitelist(origin);
282void FCM_Dialog::addWhitelist(
const QString &origin)
284 if (origin.isEmpty()) {
288 if (!ui->blackList->findItems(origin, Qt::MatchFixedString).isEmpty()) {
289 QMessageBox::information(
this, tr(
"Already whitelisted!"), tr(
"The server \"%1\" is already in blacklist, please remove it first.").arg(origin));
293 if (ui->whiteList->findItems(origin, Qt::MatchFixedString).isEmpty()) {
294 ui->whiteList->addItem(origin);
298void FCM_Dialog::removeWhitelist()
300 delete ui->whiteList->currentItem();
303void FCM_Dialog::addBlacklist()
305 const QString origin = QInputDialog::getText(
this, tr(
"Add to blacklist"), tr(
"Origin:"));
307 addBlacklist(origin);
310void FCM_Dialog::addBlacklist(
const QString &origin)
312 if (origin.isEmpty()) {
316 if (!ui->whiteList->findItems(origin, Qt::MatchFixedString).isEmpty()) {
317 QMessageBox::information(
this, tr(
"Already whitelisted!"), tr(
"The origin \"%1\" is already in whitelist, please remove it first.").arg(origin));
321 if (ui->blackList->findItems(origin, Qt::MatchFixedString).isEmpty()) {
322 ui->blackList->addItem(origin);
326void FCM_Dialog::removeBlacklist()
328 delete ui->blackList->currentItem();
331void FCM_Dialog::deletePressed()
333 if (ui->flashCookieTree->hasFocus()) {
336 else if (ui->whiteList->hasFocus()) {
339 else if (ui->blackList->hasFocus()) {
344void FCM_Dialog::autoModeChanged(
bool state)
346 ui->notification->setEnabled(
state);
349void FCM_Dialog::filterString(
const QString &
string)
351 if (
string.isEmpty()) {
352 for (
int i = 0;
i < ui->flashCookieTree->topLevelItemCount(); ++
i) {
353 ui->flashCookieTree->topLevelItem(
i)->setHidden(
false);
358 for (
int i = 0;
i < ui->flashCookieTree->topLevelItemCount(); ++
i) {
359 QString text =
QL1C(
'.') + ui->flashCookieTree->topLevelItem(
i)->text(0);
360 ui->flashCookieTree->topLevelItem(
i)->setHidden(!text.contains(
string, Qt::CaseInsensitive));
361 ui->flashCookieTree->topLevelItem(
i)->setExpanded(
true);
366void FCM_Dialog::reloadFromDisk()
371void FCM_Dialog::cookieTreeContextMenuRequested(
const QPoint &pos)
374 QAction* actAddBlacklist = menu.addAction(tr(
"Add to blacklist"));
375 QAction* actAddWhitelist = menu.addAction(tr(
"Add to whitelist"));
377 QTreeWidgetItem* item = ui->flashCookieTree->itemAt(pos);
383 ui->flashCookieTree->setCurrentItem(item);
385 QAction* activatedAction = menu.exec(ui->flashCookieTree->viewport()->mapToGlobal(pos));
387 const QString origin = item->childCount() > 0 ? item->text(0)
388 : item->data(0, Qt::UserRole + 10).value<
FlashCookie>().origin;
390 if (activatedAction == actAddBlacklist) {
391 addBlacklist(origin);
393 else if (activatedAction == actAddWhitelist) {
394 addWhitelist(origin);
398void FCM_Dialog::closeEvent(QCloseEvent* e)
402 QStringList flashWhitelist;
403 QStringList flashBlacklist;
405 for (
int i = 0;
i < ui->whiteList->count(); ++
i) {
406 flashWhitelist.append(ui->whiteList->item(
i)->text());
409 for (
int i = 0;
i < ui->blackList->count(); ++
i) {
410 flashBlacklist.append(ui->blackList->item(
i)->text());
413 QVariantHash settingsHash;
414 settingsHash.insert(
QL1S(
"autoMode"), QVariant(ui->autoMode->isChecked()));
415 settingsHash.insert(
QL1S(
"deleteAllOnStartExit"), QVariant(ui->deleteAllOnStartExit->isChecked()));
416 settingsHash.insert(
QL1S(
"notification"), QVariant(ui->notification->isChecked()));
417 settingsHash.insert(
QL1S(
"flashCookiesWhitelist"), flashWhitelist);
418 settingsHash.insert(
QL1S(
"flashCookiesBlacklist"), flashBlacklist);
424void FCM_Dialog::keyPressEvent(QKeyEvent* e)
426 if (e->key() == Qt::Key_Escape) {
430 QWidget::keyPressEvent(e);
FCM_Dialog(FCM_Plugin *manager, QWidget *parent=nullptr)
void refreshView(bool forceReload=false)
QStringList newCookiesList()
QVariantHash readSettings() const
void removeCookie(const FlashCookie &flashCookie)
QString flashPlayerDataPath() const
QList< FlashCookie > flashCookies()
void writeSettings(const QVariantHash &hashSettings)
static QIcon standardIcon(QStyle::StandardPixmap icon)
QDateTime lastModification