| Index: compiled/subscription/UserDefinedSubscription.cpp |
| =================================================================== |
| --- a/compiled/subscription/UserDefinedSubscription.cpp |
| +++ b/compiled/subscription/UserDefinedSubscription.cpp |
| @@ -13,30 +13,32 @@ |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| #include <cstdlib> |
| #include "UserDefinedSubscription.h" |
| +#include "../FilterNotifier.h" |
| namespace |
| { |
| enum FilterCategory |
| { |
| + NONE = 0, |
| WHITELIST = 1, |
| BLOCKING = 2, |
| ELEMHIDE = 4, |
| }; |
| const FilterCategory filterTypeToCategory[] = { |
| FilterCategory::BLOCKING, // UNKNOWN |
| - FilterCategory::BLOCKING, // INVALID |
| - FilterCategory::BLOCKING, // COMMENT |
| + FilterCategory::NONE, // INVALID |
| + FilterCategory::NONE, // COMMENT |
| FilterCategory::BLOCKING, // BLOCKING |
| FilterCategory::WHITELIST, // WHITELIST |
| FilterCategory::ELEMHIDE, // ELEMHIDE |
| FilterCategory::ELEMHIDE, // ELEMHIDEEXCEPTION |
| FilterCategory::ELEMHIDE, // ELEMHIDEEMULATION |
| }; |
| static_assert( |
| @@ -68,34 +70,45 @@ void UserDefinedSubscription::MakeDefaul |
| abort(); |
| } |
| mDefaults |= filterTypeToCategory[filter->mType]; |
| } |
| void UserDefinedSubscription::InsertFilterAt(Filter* filter, unsigned pos) |
| { |
| if (pos >= mFilters.size()) |
| - mFilters.emplace_back(filter); |
| - else |
| - mFilters.emplace(mFilters.begin() + pos, filter); |
| + pos = mFilters.size(); |
| + mFilters.emplace(mFilters.begin() + pos, filter); |
| + |
| + if (GetListed()) |
| + { |
| + FilterNotifier::FilterChange(FilterNotifier::Topic::FILTER_ADDED, filter, this, |
| + pos); |
| + } |
| } |
| bool UserDefinedSubscription::RemoveFilterAt(unsigned pos) |
| { |
| if (pos >= mFilters.size()) |
| return false; |
| + FilterPtr filter(mFilters[pos]); |
| mFilters.erase(mFilters.begin() + pos); |
| + if (GetListed()) |
| + { |
| + FilterNotifier::FilterChange(FilterNotifier::Topic::FILTER_REMOVED, |
| + filter.get(), this, pos); |
| + } |
| return true; |
| } |
| OwnedString UserDefinedSubscription::Serialize() const |
| { |
| OwnedString result(Subscription::Serialize()); |
| - if (mDefaults) |
| + if (!IsGeneric()) |
| { |
| result.append(u"defaults="_str); |
| if (mDefaults & FilterCategory::BLOCKING) |
| result.append(u" blocking"_str); |
| if (mDefaults & FilterCategory::WHITELIST) |
| result.append(u" whitelist"_str); |
| if (mDefaults & FilterCategory::ELEMHIDE) |
| result.append(u" elemhide"_str); |