37#if defined(Q_OS_WIN) || defined(Q_OS_OS2)
38#include <QProcessEnvironment>
52 QString
id()
const override
54 return QSL(
"fcm-icon");
57 QString
name()
const override
59 return tr(
"Flash Cookie Manager button");
70 m_settingsPath = settingsPath;
75 m_timer =
new QTimer(
this);
77 connect(m_timer, &QTimer::timeout,
this, &FCM_Plugin::autoRefresh);
85 removeAllButWhitelisted();
89 const auto windows =
mApp->windows();
91 mainWindowCreated(window);
103 removeAllButWhitelisted();
106 const auto windows =
mApp->windows();
108 mainWindowDeleted(window);
116 return (QString::fromLatin1(
Qz::VERSION) == QLatin1String(FALKON_VERSION));
123 showFlashCookieManager();
124 m_fcmDialog->showPage(2);
129 auto* showFCM =
new QAction(QIcon(
QSL(
":/flashcookiemanager/data/flash-cookie-manager.png")), tr(
"Flash Cookie Manager"), menu);
130 connect(showFCM, &QAction::triggered,
this, &FCM_Plugin::showFlashCookieManager);
131 menu->addAction(showFCM);
141 if (m_flashCookies.isEmpty()) {
144 return m_flashCookies;
149 return m_newCookiesList;
154 m_newCookiesList.clear();
159 m_flashCookies.clear();
162bool FCM_Plugin::isBlacklisted(
const FlashCookie &flashCookie)
167bool FCM_Plugin::isWhitelisted(
const FlashCookie &flashCookie)
172void FCM_Plugin::removeAllButWhitelisted()
174 for (
const FlashCookie &flashCookie : std::as_const(m_flashCookies)) {
175 if (isWhitelisted(flashCookie)) {
183QString FCM_Plugin::sharedObjectDirName()
const
187 return QLatin1String(
QL1S(
"/#SharedObjects/"));
190 return QLatin1String(
QL1S(
"/SharedObjects/"));
201 if (m_settingsHash.isEmpty()) {
202 m_settingsHash.insert(
QL1S(
"autoMode"), QVariant(
false));
203 m_settingsHash.insert(
QL1S(
"deleteAllOnStartExit"), QVariant(
false));
204 m_settingsHash.insert(
QL1S(
"notification"), QVariant(
false));
205 m_settingsHash.insert(
QL1S(
"flashCookiesWhitelist"), QVariant());
206 m_settingsHash.insert(
QL1S(
"flashCookiesBlacklist"), QVariant());
208 QSettings settings(m_settingsPath +
QL1S(
"/extensions.ini"), QSettings::IniFormat);
209 settings.beginGroup(
QL1S(
"FlashCookieManager"));
210 QVariantHash::iterator
i = m_settingsHash.begin();
211 while (
i != m_settingsHash.end()) {
212 *
i = settings.value(
i.key(),
i.value());
219 return m_settingsHash;
224 m_settingsHash = hashSettings;
226 QSettings settings(m_settingsPath +
QL1S(
QL1S(
"/extensions.ini")), QSettings::IniFormat);
227 settings.beginGroup(
QL1S(
"FlashCookieManager"));
228 QVariantHash::const_iterator
i = m_settingsHash.constBegin();
229 while (
i != m_settingsHash.constEnd()) {
230 settings.setValue(
i.key(),
i.value());
241 if (m_flashCookies.contains(flashCookie)) {
242 m_flashCookies.removeOne(flashCookie);
243 if (QFile(flashCookie.
path +
QL1C(
'/') + flashCookie.
name).remove()) {
244 QDir dir(flashCookie.
path);
245 dir.rmpath(flashCookie.
path);
250void FCM_Plugin::autoRefresh()
252 if (m_fcmDialog && m_fcmDialog->isVisible()) {
256 QList<FlashCookie> oldflashCookies = m_flashCookies;
258 QStringList newCookieList;
260 for (
const FlashCookie &flashCookie : std::as_const(m_flashCookies)) {
261 if (isBlacklisted(flashCookie)) {
266 if (isWhitelisted(flashCookie)) {
270 bool newCookie =
true;
271 for (
const FlashCookie &oldFlashCookie : std::as_const(oldflashCookies)) {
272 if (QString(oldFlashCookie.path + oldFlashCookie.name) ==
273 QString(flashCookie.
path + flashCookie.
name)) {
280 newCookieList << flashCookie.
path +
QL1C(
'/') + flashCookie.
name;
285 m_newCookiesList << newCookieList;
300void FCM_Plugin::showFlashCookieManager()
306 m_fcmDialog->refreshView();
307 m_fcmDialog->showPage(0);
309 m_fcmDialog->raise();
324 if (m_fcmDialog && m_fcmDialog->parent() == window) {
325 m_fcmDialog->setParent(
nullptr);
331 delete m_statusBarIcons.value(window);
332 m_statusBarIcons.remove(window);
335void FCM_Plugin::startStopTimer()
338 if (!m_timer->isActive()) {
339 if (m_flashCookies.isEmpty()) {
353 if (m_statusBarIcons.contains(mainWindow)) {
354 return m_statusBarIcons.value(mainWindow);
358 icon->setIcon(QIcon(
QSL(
":/flashcookiemanager/data/flash-cookie-manager.png")));
359 icon->setTitle(tr(
"Flash Cookie Manager"));
360 icon->setToolTip(tr(
"Show Flash Cookie Manager"));
363 m_statusBarIcons.insert(mainWindow, icon);
368void FCM_Plugin::loadFlashCookies()
370 m_flashCookies.clear();
374void FCM_Plugin::loadFlashCookies(QString path)
377 QStringList entryList = solDir.entryList();
378 entryList.removeAll(
QL1S(
"."));
379 entryList.removeAll(
QL1S(
".."));
381 for (QString entry : std::as_const(entryList)) {
382 if (path.endsWith(
QL1S(
"#SharedObjects")) && entry ==
QL1S(
"#AppContainer")) {
387 path.replace(
QL1C(
'\\'),
QL1C(
'/'));
388 QFileInfo entryInfo(path +
QL1C(
'/') + entry);
389 if (entryInfo.isDir()) {
390 loadFlashCookies(entryInfo.filePath());
392 else if (entryInfo.isFile() && entryInfo.suffix() ==
QL1S(
"sol")) {
393 insertFlashCookie(entryInfo.filePath());
398void FCM_Plugin::insertFlashCookie(
const QString &path)
401 if (!solFile.open(QFile::ReadOnly)) {
405 QByteArray file = solFile.readAll();
406 for (
int i = 0;
i < file.size(); ++
i) {
407 if (!((file.at(
i) >=
'a' && file.at(
i) <=
'z') || (file.at(
i) >=
'A' && file.at(
i) <=
'Z') ||
408 (file.at(
i) >=
'0' && file.at(
i) <=
'9'))) {
413 QString fileStr = QString(QString::fromUtf8(file));
414 fileStr = fileStr.split(
QL1C(
'.'), Qt::SkipEmptyParts).join(
QL1S(
"\n"));
416 QFileInfo solFileInfo(solFile);
420 flashCookie.
name = solFileInfo.fileName();
421 flashCookie.
path = solFileInfo.canonicalPath();
422 flashCookie.
size = (int)solFile.size();
424 flashCookie.
origin = extractOriginFrom(path);
426 m_flashCookies << flashCookie;
429QString FCM_Plugin::extractOriginFrom(
const QString &path)
431 QString origin = path;
434 if (origin.indexOf(
QL1C(
'/')) != -1) {
435 origin.remove(0, origin.indexOf(
QL1C(
'/')) + 1);
440 if (origin ==
QL1S(
"settings.sol")) {
441 return tr(
"!default");
443 else if (origin.startsWith(
QL1C(
'#'))) {
451 int index = origin.indexOf(
QL1C(
'/'));
455 origin.remove(index, origin.size());
456 if (origin ==
QL1S(
"localhost") || origin ==
QL1S(
"local")) {
457 origin =
QL1S(
"!localhost");
463#include "fcm_plugin.moc"
NavigationBar * navigationBar() const
StatusBar * statusBar() const
TabbedWebView * weView() const
static QString currentProfilePath()
bool testPlugin() override
void init(InitState state, const QString &settingsPath) override
QStringList newCookiesList()
QVariantHash readSettings() const
void showSettings(QWidget *parent) override
void populateExtensionsMenu(QMenu *menu) override
void removeCookie(const FlashCookie &flashCookie)
QString flashPlayerDataPath() const
QList< FlashCookie > flashCookies()
void setFlashCookies(const QList< FlashCookie > &flashCookies)
void writeSettings(const QVariantHash &hashSettings)
void removeToolButton(AbstractButtonInterface *button)
void addToolButton(AbstractButtonInterface *button)
void mainWindowDeleted(BrowserWindow *window)
void mainWindowCreated(BrowserWindow *window)
void addButton(AbstractButtonInterface *button)
void removeButton(AbstractButtonInterface *button)
void addNotification(QWidget *notif)
const int refreshInterval
int value(const QColor &c)
FALKON_EXPORT const char * VERSION
QDateTime lastModification