OLD | NEW |
1 #include <cstdio> | 1 #include <cstdio> |
2 #include <cstdlib> | 2 #include <cstdlib> |
3 | 3 |
4 #include "Subscription.h" | 4 #include "Subscription.h" |
5 #include "DownloadableSubscription.h" | 5 #include "DownloadableSubscription.h" |
6 #include "UserDefinedSubscription.h" | 6 #include "UserDefinedSubscription.h" |
7 #include "../StringMap.h" | 7 #include "../StringMap.h" |
8 | 8 |
9 namespace | 9 namespace |
10 { | 10 { |
11 StringMap<Subscription*> knownSubscriptions(16); | 11 StringMap<Subscription*> knownSubscriptions(16); |
12 } | 12 } |
13 | 13 |
14 Subscription::Subscription(Type type, const String& id) | 14 Subscription::Subscription(Type type, const String& id) |
15 : mType(type), mID(id), mDisabled(false) | 15 : mType(type), mID(id), mDisabled(false) |
16 { | 16 { |
17 annotate_address(this, "Subscription"); | 17 annotate_address(this, "Subscription"); |
18 } | 18 } |
19 | 19 |
20 Subscription::~Subscription() | 20 Subscription::~Subscription() |
21 { | 21 { |
22 knownSubscriptions.erase(mID); | 22 knownSubscriptions.erase(mID); |
23 } | 23 } |
24 | 24 |
| 25 Filter* Subscription::FilterAt(unsigned index) |
| 26 { |
| 27 if (index >= mFilters.size()) |
| 28 return nullptr; |
| 29 |
| 30 FilterPtr result(mFilters[index]); |
| 31 return result.release(); |
| 32 } |
| 33 |
| 34 int Subscription::IndexOfFilter(Filter* filter) |
| 35 { |
| 36 for (unsigned i = 0; i < mFilters.size(); i++) |
| 37 if (mFilters[i] == filter) |
| 38 return i; |
| 39 return -1; |
| 40 } |
| 41 |
25 OwnedString Subscription::Serialize() const | 42 OwnedString Subscription::Serialize() const |
26 { | 43 { |
27 OwnedString result(u"[Subscription]\nurl="_str); | 44 OwnedString result(u"[Subscription]\nurl="_str); |
28 result.append(mID); | 45 result.append(mID); |
29 result.append(u'\n'); | 46 result.append(u'\n'); |
30 if (!mTitle.empty()) | 47 if (!mTitle.empty()) |
31 { | 48 { |
32 result.append(u"title="_str); | 49 result.append(u"title="_str); |
33 result.append(mTitle); | 50 result.append(mTitle); |
34 result.append(u'\n'); | 51 result.append(u'\n'); |
35 } | 52 } |
36 if (mDisabled) | 53 if (mDisabled) |
37 result.append(u"disabled=true\n"_str); | 54 result.append(u"disabled=true\n"_str); |
38 | 55 |
39 return result; | 56 return result; |
40 } | 57 } |
41 | 58 |
42 OwnedString Subscription::SerializeFilters() const | 59 OwnedString Subscription::SerializeFilters() const |
43 { | 60 { |
44 // TODO | 61 if (!mFilters.size()) |
45 return OwnedString(); | 62 return OwnedString(); |
| 63 |
| 64 OwnedString result(u"[Subscription filters]\n"_str); |
| 65 for (unsigned i = 0; i < mFilters.size(); i++) |
| 66 { |
| 67 // TODO: Escape [ characters |
| 68 result.append(mFilters[i]->GetText()); |
| 69 result.append(u'\n'); |
| 70 } |
| 71 return result; |
46 } | 72 } |
47 | 73 |
48 Subscription* Subscription::FromID(const String& id) | 74 Subscription* Subscription::FromID(const String& id) |
49 { | 75 { |
50 if (id.empty()) | 76 if (id.empty()) |
51 { | 77 { |
52 // Generate a new random ID | 78 // Generate a new random ID |
53 unsigned seed = knownSubscriptions.size(); | 79 unsigned seed = knownSubscriptions.size(); |
54 OwnedString randomID(u"~user~000000"_str); | 80 OwnedString randomID(u"~user~000000"_str); |
55 do | 81 do |
(...skipping 10 matching lines...) Expand all Loading... |
66 | 92 |
67 auto knownSubscription = knownSubscriptions.find(id); | 93 auto knownSubscription = knownSubscriptions.find(id); |
68 if (knownSubscription) | 94 if (knownSubscription) |
69 { | 95 { |
70 knownSubscription->second->AddRef(); | 96 knownSubscription->second->AddRef(); |
71 return knownSubscription->second; | 97 return knownSubscription->second; |
72 } | 98 } |
73 | 99 |
74 SubscriptionPtr subscription; | 100 SubscriptionPtr subscription; |
75 if (!id.empty() && id[0] == '~') | 101 if (!id.empty() && id[0] == '~') |
76 subscription = new UserDefinedSubscription(id); | 102 subscription = SubscriptionPtr(new UserDefinedSubscription(id), false); |
77 else | 103 else |
78 subscription = new DownloadableSubscription(id); | 104 subscription = SubscriptionPtr(new DownloadableSubscription(id), false); |
79 | 105 |
80 // This is a hack: we looked up the entry using id but create it using | 106 // This is a hack: we looked up the entry using id but create it using |
81 // subscription->mID. This works because both are equal at this point. | 107 // subscription->mID. This works because both are equal at this point. |
82 // However, id refers to a temporary buffer which will go away. | 108 // However, id refers to a temporary buffer which will go away. |
83 enter_context("Adding to known subscriptions"); | 109 enter_context("Adding to known subscriptions"); |
84 knownSubscription.assign(subscription->mID, subscription.get()); | 110 knownSubscription.assign(subscription->mID, subscription.get()); |
85 exit_context(); | 111 exit_context(); |
86 | 112 |
87 return subscription.release(); | 113 return subscription.release(); |
88 } | 114 } |
OLD | NEW |