54#include <QNetworkReply>
92 QFile file(m_filePath);
99 if (!file.open(QFile::ReadOnly)) {
100 qWarning() <<
"AdBlockSubscription::" << __FUNCTION__ <<
"Unable to open adblock file for reading" << m_filePath;
105 QTextStream textStream(&file);
106 textStream.setEncoding(QStringConverter::Utf8);
108 textStream.readLine(1024);
109 textStream.readLine(1024);
110 QString header = textStream.readLine(1024);
112 if (!header.startsWith(QLatin1String(
"[Adblock")) || m_title.isEmpty()) {
113 qWarning() <<
"AdBlockSubscription::" << __FUNCTION__ <<
"invalid format of adblock file" << m_filePath;
121 while (!textStream.atEnd()) {
122 const QString line = textStream.readLine().trimmed();
123 if (line.isEmpty()) {
134 if (
m_rules.isEmpty() && !m_updated) {
145 if (
m_reply || !m_url.isValid()) {
149 m_reply =
mApp->networkManager()->get(QNetworkRequest(m_url));
155 if (
m_reply != qobject_cast<QNetworkReply*>(sender())) {
160 const QByteArray response = QString::fromUtf8(
m_reply->readAll()).toUtf8();
162 if (
m_reply->error() != QNetworkReply::NoError ||
163 !response.startsWith(QByteArray(
"[Adblock")) ||
185 QSaveFile file(m_filePath);
187 if (!file.open(QFile::WriteOnly)) {
188 qWarning() <<
"AdBlockSubscription::" << __FUNCTION__ <<
"Unable to open adblock file for writing:" << m_filePath;
193 file.write(
QSL(
"Title: %1\nUrl: %2\n").arg(
title(),
url().toString()).toUtf8());
226 mApp->reloadUserStyleSheet();
244 mApp->reloadUserStyleSheet();
297 const QString ddg1 =
QSL(
"@@||duckduckgo.com^$document");
298 const QString ddg2 =
QSL(
"duckduckgo.com#@#.has-ad");
303 if (!file.exists()) {
307 if (file.open(QFile::WriteOnly | QFile::Append)) {
308 QTextStream stream(&file);
309 stream.setEncoding(QStringConverter::Utf8);
311 if (!rules.contains(ddg1 +
QL1S(
"\n")))
312 stream << ddg1 << Qt::endl;
314 if (!rules.contains(
QL1S(
"\n") + ddg2))
315 stream << ddg2 << Qt::endl;
326 if (!file.open(QFile::ReadWrite | QFile::Truncate)) {
327 qWarning() <<
"AdBlockSubscription::" << __FUNCTION__ <<
"Unable to open adblock file for writing:" <<
filePath();
331 QTextStream textStream(&file);
332 textStream.setEncoding(QStringConverter::Utf8);
333 textStream <<
"Title: " <<
title() << Qt::endl;
334 textStream <<
"Url: " <<
url().toString() << Qt::endl;
335 textStream <<
"[Adblock Plus 1.1.1]" << Qt::endl;
385 mApp->reloadUserStyleSheet();
404 mApp->reloadUserStyleSheet();
424 mApp->reloadUserStyleSheet();
int addRule(AdBlockRule *rule) override
void loadSubscription(const QStringList &disabledRules) override
bool removeRule(int offset) override
bool removeFilter(const QString &filter)
bool canBeRemoved() const override
void saveSubscription() override
AdBlockCustomList(QObject *parent=nullptr)
const AdBlockRule * replaceRule(AdBlockRule *rule, int offset) override
bool containsFilter(const QString &filter) const
bool canEditRules() const override
void removeDisabledRule(const QString &filter)
static AdBlockManager * instance()
void addDisabledRule(const QString &filter)
void setEnabled(bool enabled)
virtual const AdBlockRule * replaceRule(AdBlockRule *rule, int offset)
virtual bool canBeRemoved() const
virtual bool canEditRules() const
virtual void saveSubscription()
AdBlockSubscription(const QString &title, QObject *parent=nullptr)
void subscriptionDownloaded()
const AdBlockRule * rule(int offset) const
virtual int addRule(AdBlockRule *rule)
void subscriptionChanged()
void subscriptionError(const QString &message)
void setFilePath(const QString &path)
void subscriptionUpdated()
virtual void loadSubscription(const QStringList &disabledRules)
void updateSubscription()
QVector< AdBlockRule * > m_rules
const AdBlockRule * disableRule(int offset)
virtual bool removeRule(int offset)
virtual bool saveDownloadedData(const QByteArray &data)
const AdBlockRule * enableRule(int offset)
QVector< AdBlockRule * > allRules() const
void setUrl(const QUrl &url)
static QString currentProfilePath()