summaryrefslogtreecommitdiff
path: root/src/adblock
diff options
context:
space:
mode:
Diffstat (limited to 'src/adblock')
-rw-r--r--src/adblock/adblockmanager.cpp87
-rw-r--r--src/adblock/adblockmanager.h6
2 files changed, 57 insertions, 36 deletions
diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp
index 8005c7e5..9777bb94 100644
--- a/src/adblock/adblockmanager.cpp
+++ b/src/adblock/adblockmanager.cpp
@@ -120,22 +120,31 @@ void AdBlockManager::loadSettings()
QDateTime lastUpdate = QDateTime::fromString(settingsGroup.readEntry("lastUpdate", QString()));
int days = settingsGroup.readEntry("updateInterval", 7);
- if (today > lastUpdate.addDays(days))
+ bool allSubscriptionsNeedUpdate = (today > lastUpdate.addDays(days));
+ if (allSubscriptionsNeedUpdate)
{
settingsGroup.writeEntry("lastUpdate", today.toString());
-
- updateSubscriptions();
- return;
}
- // else
- // load automatic and local rules
+ // (Eventually) update and load automatic rules
KConfigGroup filtersGroup(_adblockConfig, "FiltersList");
- for (int i = 1; i <= 60; ++i)
+ for (int i = 0; i < 60; i++)
{
- QString n = QString::number(i);
- bool filterActive = filtersGroup.readEntry("FilterEnabled-" + n, false);
- if (filterActive)
+ QString n = QString::number(i + 1);
+ if (!filtersGroup.hasKey("FilterEnabled-" + n))
+ continue;
+
+ bool isFilterEnabled = filtersGroup.readEntry("FilterEnabled-" + n, false);
+ if (!isFilterEnabled)
+ continue;
+
+ bool fileExists = subscriptionFileExists(i);
+ if (allSubscriptionsNeedUpdate || !fileExists)
+ {
+ kDebug() << "FILE SHOULDN'T EXIST. updating subscription";
+ updateSubscription(i);
+ }
+ else
{
QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n);
loadRules(rulesFilePath);
@@ -315,38 +324,46 @@ void AdBlockManager::applyHidingRules(WebPage *page)
}
-void AdBlockManager::updateSubscriptions()
+void AdBlockManager::updateSubscription(int i)
{
KConfigGroup filtersGroup(_adblockConfig, "FiltersList");
+ QString n = QString::number(i + 1);
- int i = 1;
- QString n = QString::number(i);
+ QString fUrl = filtersGroup.readEntry("FilterURL-" + n, QString());
+ KUrl subUrl = KUrl(fUrl);
- while (filtersGroup.hasKey("FilterName-" + n))
- {
- bool isFilterEnabled = filtersGroup.readEntry("FilterEnabled-" + n, false);
- if (isFilterEnabled)
- {
- QString fUrl = filtersGroup.readEntry("FilterURL-" + n, QString());
- KUrl subUrl = KUrl(fUrl);
+ QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n);
+ KUrl destUrl = KUrl(rulesFilePath);
- kDebug() << "Filter ENABLED: " << fUrl;
- QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n);
- KUrl destUrl = KUrl(rulesFilePath);
-
- KIO::FileCopyJob* job = KIO::file_copy(subUrl , destUrl, -1, KIO::HideProgressInfo);
- job->metaData().insert("ssl_no_client_cert", "TRUE");
- job->metaData().insert("ssl_no_ui", "TRUE");
- job->metaData().insert("UseCache", "false");
- job->metaData().insert("cookies", "none");
- job->metaData().insert("no-auth", "true");
- }
+ KIO::FileCopyJob* job = KIO::file_copy(subUrl , destUrl, -1, KIO::HideProgressInfo);
+ job->metaData().insert("ssl_no_client_cert", "TRUE");
+ job->metaData().insert("ssl_no_ui", "TRUE");
+ job->metaData().insert("UseCache", "false");
+ job->metaData().insert("cookies", "none");
+ job->metaData().insert("no-auth", "true");
- i++;
- n = QString::number(i);
- }
+ connect(job, SIGNAL(finished(KJob *)), this, SLOT(slotFinished(KJob *)));
+}
- loadSettings();
+
+void AdBlockManager::slotFinished(KJob *job)
+{
+ if (job->error())
+ return;
+
+ KIO::FileCopyJob *fJob = qobject_cast<KIO::FileCopyJob *>(job);
+ KUrl url = fJob->destUrl();
+ url.setProtocol(QString()); // this is needed to load local url well :(
+ loadRules(url.url());
+}
+
+
+bool AdBlockManager::subscriptionFileExists(int i)
+{
+ QString n = QString::number(i + 1);
+
+ QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n);
+ return QFile::exists(rulesFilePath);
}
diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h
index 30daa27e..469f87cb 100644
--- a/src/adblock/adblockmanager.h
+++ b/src/adblock/adblockmanager.h
@@ -164,7 +164,9 @@ public:
void clearElementsLists();
private:
- void updateSubscriptions();
+ void updateSubscription(int);
+ bool subscriptionFileExists(int);
+
void loadRules(const QString &);
private Q_SLOTS:
@@ -172,6 +174,8 @@ private Q_SLOTS:
void showSettings();
void showBlockedItemDialog();
+ void slotFinished(KJob *);
+
Q_SIGNALS:
void reloadCurrentPage();