Index: compiled/subscription/Subscription.cpp |
=================================================================== |
--- a/compiled/subscription/Subscription.cpp |
+++ b/compiled/subscription/Subscription.cpp |
@@ -34,16 +34,33 @@ Subscription::Subscription(Type type, co |
annotate_address(this, "Subscription"); |
} |
Subscription::~Subscription() |
{ |
knownSubscriptions.erase(mID); |
} |
+Filter* Subscription::FilterAt(unsigned index) |
+{ |
+ if (index >= mFilters.size()) |
+ return nullptr; |
+ |
+ FilterPtr result(mFilters[index]); |
+ return result.release(); |
+} |
+ |
+int Subscription::IndexOfFilter(Filter* filter) |
+{ |
+ for (unsigned i = 0; i < mFilters.size(); i++) |
+ if (mFilters[i] == filter) |
+ return i; |
+ return -1; |
+} |
+ |
OwnedString Subscription::Serialize() const |
{ |
OwnedString result(u"[Subscription]\nurl="_str); |
result.append(mID); |
result.append(u'\n'); |
if (!mTitle.empty()) |
{ |
result.append(u"title="_str); |
@@ -53,18 +70,27 @@ OwnedString Subscription::Serialize() co |
if (mDisabled) |
result.append(u"disabled=true\n"_str); |
return result; |
} |
OwnedString Subscription::SerializeFilters() const |
{ |
- // TODO |
- return OwnedString(); |
+ if (!mFilters.size()) |
+ return OwnedString(); |
+ |
+ OwnedString result(u"[Subscription filters]\n"_str); |
+ for (const auto& filter : mFilters) |
+ { |
+ // TODO: Escape [ characters |
+ result.append(filter->GetText()); |
+ result.append(u'\n'); |
+ } |
+ return result; |
} |
Subscription* Subscription::FromID(const String& id) |
{ |
if (id.empty()) |
{ |
// Generate a new random ID |
unsigned seed = knownSubscriptions.size(); |
@@ -85,19 +111,19 @@ Subscription* Subscription::FromID(const |
if (knownSubscription) |
{ |
knownSubscription->second->AddRef(); |
return knownSubscription->second; |
} |
SubscriptionPtr subscription; |
if (!id.empty() && id[0] == '~') |
- subscription = new UserDefinedSubscription(id); |
+ subscription = SubscriptionPtr(new UserDefinedSubscription(id), false); |
else |
- subscription = new DownloadableSubscription(id); |
+ subscription = SubscriptionPtr(new DownloadableSubscription(id), false); |
// This is a hack: we looked up the entry using id but create it using |
// subscription->mID. This works because both are equal at this point. |
// However, id refers to a temporary buffer which will go away. |
enter_context("Adding to known subscriptions"); |
knownSubscription.assign(subscription->mID, subscription.get()); |
exit_context(); |