AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} THEME_PLUGIN_SRCS)
ADD_LIBRARY(${TARGET_TIZEN_THEME_PLUGIN} SHARED ${THEME_PLUGIN_SRCS})
-TARGET_LINK_LIBRARIES(${TARGET_TIZEN_THEME_PLUGIN} PRIVATE ${TARGET_TIZEN_THEME})
+TARGET_LINK_LIBRARIES(${TARGET_TIZEN_THEME_PLUGIN} PRIVATE ${TARGET_TIZEN_THEME} ${TARGET_TIZEN_THEME_PROVIDER})
TARGET_INCLUDE_DIRECTORIES(${TARGET_TIZEN_THEME_PLUGIN} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}../)
APPLY_PKG_CONFIG(${TARGET_TIZEN_THEME_PLUGIN} PUBLIC
const char* pkgid, const char* appid, GList* metadata) {
if (AutosetData::GetInst().autoset_id.empty())
return 0;
+ ttm::dbus::RequestBroker& broker = ttm::dbus::RequestBroker::GetInst();
+ if (!broker.GetConnection())
+ return 0;
tizen_base::Bundle b;
b.Add(ttm::dbus::kCmdDataKey, AutosetData::GetInst().autoset_id);
- tizen_base::Bundle reply =
- ttm::dbus::RequestBroker::GetInst().SendData(
- ttm::dbus::Command::SET_ID, b);
+ tizen_base::Bundle reply = broker.SendData(ttm::dbus::Command::SET_ID, b);
if (reply.GetString(ttm::dbus::kCmdResultKey) != "ok")
return -1;
return 0;
#include "theme/loader/theme_info.h"
#include "theme/utils/logging.h"
#include "theme_plugin/theme_info_builder.h"
+#include "theme_provider/theme_info_proxy.h"
namespace {
using ttm::dbus::Command;
using ttm::dbus::RequestBroker;
bool ThemeParser::Commit(ThemeOperation operation,
- const loader::ThemeInfo& theme) {
+ const loader::ThemeInfo& theme) {
+ RequestBroker& broker = RequestBroker::GetInst();
+ if (!broker.GetConnection()) {
+ if (getuid() == 0) {
+ // in case of root, this installation processed during image creation or
+ // platform update.
+ return ForceCommit(operation, theme);
+ } else {
+ LOG(ERROR) << "Cannot connect with theme-provider";
+ return false;
+ }
+ }
+
tizen_base::Bundle theme_info = theme.Serialize();
tizen_base::Bundle reply;
switch (operation) {
case ThemeOperation::ADD:
LOG(DEBUG) << "Add Theme: " << theme.GetId();
- reply = RequestBroker::GetInst().SendData(Command::ADD, theme_info);
+ reply = broker.SendData(Command::ADD, theme_info);
break;
case ThemeOperation::UPDATE:
LOG(DEBUG) << "Update Theme: " << theme.GetId();
- reply = RequestBroker::GetInst().SendData(Command::UPDATE, theme_info);
+ reply = broker.SendData(Command::UPDATE, theme_info);
break;
case ThemeOperation::REMOVE:
LOG(DEBUG) << "Remove Theme: " << theme.GetId();
- reply = RequestBroker::GetInst().SendData(Command::REMOVE, theme_info);
+ reply = broker.SendData(Command::REMOVE, theme_info);
break;
default:
return false;
return true;
}
+bool ThemeParser::ForceCommit(ThemeOperation operation,
+ const loader::ThemeInfo& theme) {
+ ttm::provider::ThemeInfoProxy proxy("/opt/dbspace/.tizen_theme.db");
+ switch (operation) {
+ case ThemeOperation::ADD:
+ return proxy.SaveTheme(theme);
+ case ThemeOperation::UPDATE:
+ return proxy.UpdateTheme(theme);
+ case ThemeOperation::REMOVE:
+ return proxy.RemoveTheme(theme.GetId());
+ }
+ return false;
+}
+
} // namespace plugin
} // namespace ttm
const std::string parent_key, ThemeInfoBuilder* builder);
bool ExtractJson(const Json::Value& node,
std::string parent_key, ThemeInfoBuilder* builder, int depth);
+ bool ForceCommit(ThemeOperation operation, const loader::ThemeInfo& theme);
std::string path_;
bool auto_file_key_gen_;
WillOnce(DoAll(
SetArgPointee<0>(PM_PRIVILEGE_PUBLIC),
Return(PMINFO_R_OK)));
+ GDBusConnection* conn =
+ reinterpret_cast<GDBusConnection*>(g_object_new(G_TYPE_OBJECT, NULL));
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_bus_get_sync(_, _, _)).WillRepeatedly(Return(conn));
GDBusMessage* msg =
reinterpret_cast<GDBusMessage*>(g_object_new(G_TYPE_OBJECT, NULL));
EXPECT_CALL(GetMock<GioMock>(),
WillRepeatedly(DoAll(
SetArgPointee<1>(const_cast<char*>(root_path)),
Return(PMINFO_R_OK)));
+ GDBusConnection* conn =
+ reinterpret_cast<GDBusConnection*>(g_object_new(G_TYPE_OBJECT, NULL));
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_bus_get_sync(_, _, _)).WillRepeatedly(Return(conn));
GDBusMessage* msg =
reinterpret_cast<GDBusMessage*>(g_object_new(G_TYPE_OBJECT, NULL));
EXPECT_CALL(GetMock<GioMock>(),
WillRepeatedly(DoAll(
SetArgPointee<1>(const_cast<char*>(root_path)),
Return(PMINFO_R_OK)));
+ GDBusConnection* conn =
+ reinterpret_cast<GDBusConnection*>(g_object_new(G_TYPE_OBJECT, NULL));
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_bus_get_sync(_, _, _)).WillRepeatedly(Return(conn));
GDBusMessage* msg =
reinterpret_cast<GDBusMessage*>(g_object_new(G_TYPE_OBJECT, NULL));
EXPECT_CALL(GetMock<GioMock>(),
auto info = parser.Inflate("testid", "testpkgid", 5001, false);
EXPECT_FALSE(info.IsValid());
- EXPECT_CALL(GetMock<GioMock>(),
- g_dbus_message_new_method_call(_, _, _, _)).WillOnce(Return(nullptr));
EXPECT_FALSE(
parser.Commit(ttm::plugin::ThemeParser::ThemeOperation::ADD, info));
}
auto info = parser.Inflate("testid", "testpkgid", 5001, false);
EXPECT_FALSE(info.IsValid());
- EXPECT_CALL(GetMock<GioMock>(),
- g_dbus_message_new_method_call(_, _, _, _)).WillOnce(Return(nullptr));
EXPECT_FALSE(
parser.Commit(ttm::plugin::ThemeParser::ThemeOperation::UPDATE, info));
}
auto info = parser.Inflate("testid", "testpkgid", 5001, false);
EXPECT_FALSE(info.IsValid());
- EXPECT_CALL(GetMock<GioMock>(),
- g_dbus_message_new_method_call(_, _, _, _)).WillOnce(Return(nullptr));
EXPECT_FALSE(
parser.Commit(ttm::plugin::ThemeParser::ThemeOperation::REMOVE, info));
}