| OLD | NEW | 
| (Empty) |  | 
 |   1 #pragma once | 
 |   2  | 
 |   3 #include <vector> | 
 |   4  | 
 |   5 #include "../filter/Filter.h" | 
 |   6 #include "../String.h" | 
 |   7 #include "../intrusive_ptr.h" | 
 |   8 #include "../debug.h" | 
 |   9  | 
 |  10 #define SUBSCRIPTION_PROPERTY(type, name, getter, setter) \ | 
 |  11     private:\ | 
 |  12       type name;\ | 
 |  13     public:\ | 
 |  14       type EMSCRIPTEN_KEEPALIVE getter() const\ | 
 |  15       {\ | 
 |  16         return name;\ | 
 |  17       }\ | 
 |  18       void EMSCRIPTEN_KEEPALIVE setter(type value)\ | 
 |  19       {\ | 
 |  20         if (name != value)\ | 
 |  21         {\ | 
 |  22           type oldvalue = name;\ | 
 |  23           name = value;\ | 
 |  24           DependentString action(u"subscription."_str #name);\ | 
 |  25           EM_ASM_ARGS({\ | 
 |  26             var subscription = new (exports[Subscription_mapping[$2]])($1);\ | 
 |  27             FilterNotifier.triggerListeners(readString($0), subscription, $3, $4
    );\ | 
 |  28           }, &action, this, mType, value, oldvalue);\ | 
 |  29         }\ | 
 |  30       } | 
 |  31  | 
 |  32 #define SUBSCRIPTION_STRING_PROPERTY(name, getter, setter) \ | 
 |  33     private:\ | 
 |  34       OwnedString name;\ | 
 |  35     public:\ | 
 |  36       const String& EMSCRIPTEN_KEEPALIVE getter() const\ | 
 |  37       {\ | 
 |  38         return name;\ | 
 |  39       }\ | 
 |  40       void EMSCRIPTEN_KEEPALIVE setter(const String& value)\ | 
 |  41       {\ | 
 |  42         if (!name.equals(value))\ | 
 |  43         {\ | 
 |  44           OwnedString oldvalue(name);\ | 
 |  45           name = value;\ | 
 |  46           DependentString action(u"subscription."_str #name);\ | 
 |  47           EM_ASM_ARGS({\ | 
 |  48             var subscription = new (exports[Subscription_mapping[$2]])($1);\ | 
 |  49             FilterNotifier.triggerListeners(readString($0), subscription, readSt
    ring($3), readString($4));\ | 
 |  50           }, &action, this, mType, &value, &oldvalue);\ | 
 |  51         }\ | 
 |  52       } | 
 |  53  | 
 |  54 class Subscription : public ref_counted | 
 |  55 { | 
 |  56 protected: | 
 |  57   OwnedString mID; | 
 |  58   std::vector<Filter> mFilters; | 
 |  59  | 
 |  60 public: | 
 |  61   enum Type | 
 |  62   { | 
 |  63     UNKNOWN = 0, | 
 |  64     DOWNLOADABLE = 1, | 
 |  65     USERDEFINED = 2 | 
 |  66   }; | 
 |  67  | 
 |  68   explicit Subscription(Type type, const String& id); | 
 |  69   ~Subscription(); | 
 |  70  | 
 |  71   Type mType; | 
 |  72  | 
 |  73   EMSCRIPTEN_KEEPALIVE const String& GetID() const | 
 |  74   { | 
 |  75     return mID; | 
 |  76   } | 
 |  77  | 
 |  78   SUBSCRIPTION_STRING_PROPERTY(mTitle, GetTitle, SetTitle); | 
 |  79   SUBSCRIPTION_PROPERTY(bool, mDisabled, GetDisabled, SetDisabled); | 
 |  80  | 
 |  81   EMSCRIPTEN_KEEPALIVE OwnedString Serialize() const; | 
 |  82   EMSCRIPTEN_KEEPALIVE OwnedString SerializeFilters() const; | 
 |  83  | 
 |  84   static EMSCRIPTEN_KEEPALIVE Subscription* FromID(const String& id); | 
 |  85 }; | 
 |  86  | 
 |  87 typedef intrusive_ptr<Subscription> SubscriptionPtr; | 
| OLD | NEW |