Add DbManager::SelectCurrent() method 31/237431/3
authorSangyoon Jang <jeremy.jang@samsung.com>
Tue, 30 Jun 2020 11:14:34 +0000 (20:14 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Tue, 30 Jun 2020 11:25:53 +0000 (20:25 +0900)
Change-Id: Ic61c7eaf6690f2897654bb2fab6254d423edfc18
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/theme_provider/db_manager.cc
src/theme_provider/db_manager.h
src/theme_provider/theme_info_proxy.cc
test/unit_tests/test_theme_info_proxy.cc

index 270158e..9ad3936 100644 (file)
@@ -45,6 +45,8 @@ const char kSelectQuery[] =
     "SELECT details FROM theme WHERE id = ?";
 const char kSelectDefaultQuery[] =
     "SELECT details FROM theme WHERE is_default = 'true'";
+const char kSelectCurrentQuery[] =
+    "SELECT details FROM theme WHERE id = (SELECT current FROM THEME_SETTING)";
 const char kSelectIdsQuery[] = "SELECT id FROM theme";
 const char kCreateThemeSettingTableQuery[] =
     "CREATE TABLE IF NOT EXISTS theme_setting (\n"
@@ -211,6 +213,27 @@ tizen_base::Bundle DbManager::SelectDefault() {
   return b;
 }
 
+tizen_base::Bundle DbManager::SelectCurrent() {
+  std::unique_ptr<SQLiteStatement> stmt =
+      conn_->PrepareStatement(kSelectCurrentQuery);
+  if (!stmt) {
+    LOG(ERROR) << "Failed to prepare statement";
+    return {};
+  }
+
+  if (stmt->Step() != SQLiteStatement::StepResult::ROW) {
+    LOG(ERROR) << "Failed to select default ThemeInfo";
+    return {};
+  }
+
+  int idx = 0;
+  std::vector<unsigned char> v = stmt->GetColumnBlob(idx++);
+  std::string raw(reinterpret_cast<char const*>(v.data()), v.size());
+  tizen_base::Bundle b(raw);
+
+  return b;
+}
+
 std::vector<std::string> DbManager::SelectIds() {
   std::unique_ptr<SQLiteStatement> stmt =
       conn_->PrepareStatement(kSelectIdsQuery);
index 5d51723..ee49e10 100644 (file)
@@ -31,6 +31,7 @@ class DbManager {
   bool Delete(const std::string& id);
   tizen_base::Bundle Select(const std::string& id);
   tizen_base::Bundle SelectDefault();
+  tizen_base::Bundle SelectCurrent();
   std::vector<std::string> SelectIds();
   bool UpdateCurrentId(const std::string& id);
   void AddPackageEventListener(IThemePackageEvent* listener);
index bb83949..f7973f7 100644 (file)
@@ -21,6 +21,10 @@ ThemeInfoProxy::ThemeInfoProxy(const std::string& db_path) {
       std::make_shared<loader::ThemeInfo>(db_manager_->SelectDefault());
   if (!default_theme_)
     LOG(WARNING) << "Cannot load default theme";
+  cur_theme_ =
+      std::make_shared<loader::ThemeInfo>(db_manager_->SelectCurrent());
+  if (!cur_theme_)
+    LOG(WARNING) << "Cannot load current theme";
 }
 
 std::shared_ptr<loader::ThemeInfo> ThemeInfoProxy::LoadTheme(
index 8fd94a4..6c25585 100644 (file)
@@ -48,6 +48,7 @@ class ThemeInfoProxyTest : public testing::Test {
     b.Add("is_default", "true");
     b.Add("some_default_key", "some_default_value");
     db_manager.Insert(b);
+    db_manager.UpdateCurrentId("default_id");
 
     proxy_ = std::make_unique<ThemeInfoProxy>(kTestDb);
     b_.Add("id", "testid");
@@ -149,3 +150,7 @@ TEST_F(ThemeInfoProxyTest, GetThemeIds) {
 TEST_F(ThemeInfoProxyTest, GetDefaultTheme) {
   EXPECT_NE(proxy_->GetDefaultTheme(), nullptr);
 }
+
+TEST_F(ThemeInfoProxyTest, GetLoadedTheme) {
+  EXPECT_NE(proxy_->GetLoadedTheme(), nullptr);
+}