void UpdateSubscriptionStatus(const AdblockPlus::SubscriptionPtr subscription) { D(D_WARN, "UpdateSubscriptionStatus()"); std::string downloadStatus = subscription->GetProperty("downloadStatus")->IsNull() ? "" : subscription->GetProperty("downloadStatus")->AsString(); int64_t lastDownload = subscription->GetProperty("lastDownload")->AsInt(); std::string status = "synchronize_never"; int64_t time = 0; if (subscription->IsUpdating()) { status = "synchronize_in_progress"; } else if (!downloadStatus.empty() && downloadStatus != "synchronize_ok") { status = downloadStatus; } else if (lastDownload > 0) { time = lastDownload; status = "synchronize_last_at"; } JNIEnv* jniEnv = NULL; int stat = globalJvm->GetEnv((void **)&jniEnv, JNI_VERSION_1_6); if (stat == JNI_EDETACHED) { if (globalJvm->AttachCurrentThread(&jniEnv, NULL) != 0) throw std::runtime_error("Failed to get JNI environment"); } jstring jUrl = jniEnv->NewStringUTF(subscription->GetProperty("url")->AsString().c_str()); jstring jStatus = jniEnv->NewStringUTF(status.c_str()); jlong jTime = time * 1000; static jclass cls = jniEnv->GetObjectClass(jniObject); static jmethodID mid = jniEnv->GetMethodID(cls, "onFilterChanged", "(Ljava/lang/String;Ljava/lang/String;J)V"); if (mid) jniEnv->CallVoidMethod(jniObject, mid, jUrl, jStatus, jTime); jniEnv->DeleteLocalRef(jUrl); jniEnv->DeleteLocalRef(jStatus); if (stat == JNI_EDETACHED) globalJvm->DetachCurrentThread(); }
TEST_F(FilterEngineTest, SubscriptionProperties) { AdblockPlus::SubscriptionPtr subscription = filterEngine->GetSubscription("foo"); ASSERT_TRUE(subscription->GetProperty("stringFoo")->IsUndefined()); ASSERT_TRUE(subscription->GetProperty("intFoo")->IsUndefined()); ASSERT_TRUE(subscription->GetProperty("boolFoo")->IsUndefined()); subscription->SetProperty("stringFoo", "y"); subscription->SetProperty("intFoo", 24); subscription->SetProperty("boolFoo", true); ASSERT_EQ("y", subscription->GetProperty("stringFoo")->AsString()); ASSERT_EQ(24, subscription->GetProperty("intFoo")->AsInt()); ASSERT_TRUE(subscription->GetProperty("boolFoo")->AsBool()); }