using namespace WrtDB;
-#undef TRUE
-#undef FALSE
-#define TRUE 0
-#define FALSE -1
-
#ifdef __cplusplus
#define EXPORT_API __attribute__((visibility("default")))
extern "C"
{
#endif
-inline WidgetUpdateMode::Type translateWidgetUpdateMode(
- wrt_widget_update_mode_t updateMode)
+inline InstallMode::Type translateInstallMode(
+ WrtInstallMode installMode)
{
- if (updateMode == WRT_WIM_POLICY_DIRECTORY_FORCE_INSTALL) {
- return WidgetUpdateMode::PolicyDirectoryForceInstall;
- }
-
- WidgetUpdateMode::Type result = WidgetUpdateMode::Zero;
- if (updateMode & WRT_WIM_NOT_INSTALLED) {
- result = result | WidgetUpdateMode::NotInstalled;
- }
-
- if (updateMode & WRT_WIM_INCOMING_VERSION_NOT_STD) {
- result = result | WidgetUpdateMode::IncomingVersionNotStd;
- }
-
- if (updateMode & WRT_WIM_EXISTING_VERSION_NOT_STD) {
- result = result | WidgetUpdateMode::ExistingVersionNotStd;
- }
-
- if (updateMode & WRT_WIM_BOTH_VERSIONS_NOT_STD) {
- result = result | WidgetUpdateMode::BothVersionsNotStd;
- }
-
- if (updateMode & WRT_WIM_EXISTING_VERSION_OLDER) {
- result = result | WidgetUpdateMode::ExistingVersionOlder;
- }
-
- if (updateMode & WRT_WIM_EXISTING_VERSION_EQUAL) {
- result = result | WidgetUpdateMode::ExistingVersionEqual;
- }
-
- if (updateMode & WRT_WIM_EXISTING_VERSION_NEWER) {
- result = result | WidgetUpdateMode::ExistingVersionNewer;
+ if (WRT_INSTALL_MODE_INSTALL_WGT == installMode) {
+ return InstallMode::INSTALL_MODE_WGT;
+ } else if (WRT_INSTALL_MODE_INSTALL_DIRECTORY == installMode) {
+ return InstallMode::INSTALL_MODE_DIRECTORY;
+ } else if (WRT_INSTALL_MODE_INSTALL_PRELOAD == installMode) {
+ return InstallMode::INSTALL_MODE_PRELOAD;
+ } else if (WRT_INSTALL_MODE_REINSTALL == installMode) {
+ return InstallMode::REINSTALL_MODE_DIRECTORY;
}
-
- return result;
+ Assert(true && "wrong argument is inputed");
}
-const char PLUGIN_INSTALL_SEMAPHORE[] = "/.wrt_plugin_install_lock";
-static int wrt_count_plugin;
-
static std::string cutOffFileName(const std::string& path)
{
size_t found = path.find_last_of("/");
static bool checkPaths()
{
bool if_ok = true;
- if_ok &= (checkPath(cutOffFileName(
- GlobalConfig::GetWrtDatabaseFilePath())));
- if (!if_ok) {
- LogError(
- "Path <" << GlobalConfig::GetWrtDatabaseFilePath() <<
- "> does not exist.");
- }
+ if_ok &= (checkPath(cutOffFileName(GlobalConfig::GetWrtDatabaseFilePath())));
if_ok &= (checkPath(GlobalConfig::GetDevicePluginPath()));
- if (!if_ok) {
- LogError(
- "Path <" << GlobalConfig::GetDevicePluginPath() <<
- "> does not exist.");
- }
-
if_ok &= (checkPath(GlobalConfig::GetUserInstalledWidgetPath()));
- if (!if_ok) {
- LogError(
- "Path <" << GlobalConfig::GetUserInstalledWidgetPath() <<
- "> does not exist.");
- }
-
if_ok &= (checkPath(GlobalConfig::GetUserPreloadedWidgetPath()));
- if (!if_ok) {
- LogError(
- "Path <" << GlobalConfig::GetUserPreloadedWidgetPath() <<
- "> does not exist.");
- }
- return if_ok;
-}
-
-void plugin_install_status_cb(WrtErrStatus status,
- void* userparam)
-{
- Assert(userparam);
-
- wrt_plugin_data *plugin_data = static_cast<wrt_plugin_data*>(userparam);
-
- if (--wrt_count_plugin < 1) {
- LogDebug("All plugins installation completed");
-
- LogDebug("Call SetAllinstallpluginsCallback");
- plugin_data->plugin_installed_cb(plugin_data->user_data);
- }
-
- if (status == WRT_SUCCESS) {
- LogInfo(
- "plugin installation is successful: " <<
- plugin_data->plugin_path);
- return;
- }
-
- LogError("Fail to install plugin : " << plugin_data->plugin_path);
-
- switch (status) {
- case WRT_INSTALLER_ERROR_PLUGIN_INSTALLATION_FAILED:
- LogError("Failed : Plugin install path is wrong");
- break;
- case WRT_INSTALLER_ERROR_UNKNOWN:
- LogError("Failed : Unkown Error");
- break;
- default:
- break;
- }
-}
-
-void plugin_install_progress_cb(float percent,
- const char* description,
- void* userdata)
-{
- char *plugin_path = static_cast<char*>(userdata);
- LogInfo("Install plugin : " << plugin_path <<
- ", Progress : " << percent <<
- ", Description : " << description);
+ return if_ok;
}
-EXPORT_API int wrt_installer_init(void *userdata,
+EXPORT_API void wrt_installer_init(void *userdata,
WrtInstallerInitCallback callback)
{
// Set DPL/LOG MID
if (callback) {
callback(WRT_INSTALLER_ERROR_FATAL_ERROR, userdata);
}
- return TRUE;
+ return;
}
// Initialize ValidationCore - this must be done before AttachDatabases
InstallerMainThreadSingleton::Instance().AttachDatabases();
- //checking for correct DB version
- // if (!WrtDB::WrtDatabase::CheckTableExist(DB_CHECKSUM_STR))
- // {
- // LogError("WRONG VERSION OF WRT DATABASE");
- // Assert(false && "WRONG VERSION OF WRT DATABASE");
- // return FALSE;
- // }
- LogWarning("Database check not implemented!");
-
LogInfo("Prepare libxml2 to work in multithreaded program.");
xmlInitParser();
DPL::Exception::DisplayKnownException(ex);
if (callback) {
callback(WRT_INSTALLER_ERROR_FATAL_ERROR, userdata);
+ return;
}
- return FALSE;
}
- // OK
- return TRUE;
+ return;
}
EXPORT_API void wrt_installer_shutdown()
void* userdata,
WrtInstallerStatusCallback status_cb,
WrtProgressCallback progress_cb,
- wrt_widget_update_mode_t update_mode,
+ WrtInstallMode installMode,
bool quiet,
- bool preload,
std::shared_ptr<PackageManager::
IPkgmgrSignal> pkgmgrInterface
)
InstallerCallbacksTranslate::installProgressCallback,
new InstallerCallbacksTranslate::StatusCallbackStruct(
userdata, status_cb, progress_cb),
- translateWidgetUpdateMode(update_mode),
+ translateInstallMode(installMode),
quiet,
- preload,
pkgmgrInterface)));
}
UNHANDLED_EXCEPTION_HANDLER_END
UNHANDLED_EXCEPTION_HANDLER_END
}
-EXPORT_API void wrt_install_all_plugins(
- WrtAllPluginInstalledCallback installed_cb,
- void *user_param)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- std::string installRequest =
- std::string(GlobalConfig::GetPluginInstallInitializerName());
-
- LogDebug("Install new plugins");
-
- Try {
- DPL::Semaphore lock(PLUGIN_INSTALL_SEMAPHORE);
- }
- Catch(DPL::Semaphore::Exception::Base){
- LogError("Failed to create installation lock");
- return;
- }
-
- struct stat tmp;
-
- if (-1 == stat(installRequest.c_str(), &tmp) ||
- !S_ISREG(tmp.st_mode))
- {
- if (ENOENT == errno) {
- LogDebug("Plugin installation not required");
-
- LogDebug("Call SetAllinstallPluginCallback");
- installed_cb(user_param);
-
- DPL::Semaphore::Remove(PLUGIN_INSTALL_SEMAPHORE);
- return;
- }
- LogWarning("Opening installation request file failed");
- }
-
- std::string PLUGIN_PATH =
- std::string(GlobalConfig::GetDevicePluginPath());
-
- DIR *dir;
- dir = opendir(PLUGIN_PATH.c_str());
- if (!dir) {
- DPL::Semaphore::Remove(PLUGIN_INSTALL_SEMAPHORE);
- return;
- }
-
- LogInfo("Plugin DIRECTORY IS" << PLUGIN_PATH);
- struct dirent libdir;
- struct dirent *result;
- int return_code;
-
- errno = 0;
-
- std::list<std::string> pluginsPaths;
-
- for (return_code = readdir_r(dir, &libdir, &result);
- result != NULL && return_code == 0;
- return_code = readdir_r(dir, &libdir, &result))
- {
- if (strcmp(libdir.d_name, ".") == 0 ||
- strcmp(libdir.d_name, "..") == 0)
- {
- continue;
- }
-
- std::string path = PLUGIN_PATH;
- path += "/";
- path += libdir.d_name;
-
- struct stat tmp;
-
- if (stat(path.c_str(), &tmp) == -1) {
- LogError("Failed to open file" << path);
- continue;
- }
-
- if (!S_ISDIR(tmp.st_mode)) {
- LogError("Not a directory" << path);
- continue;
- }
-
- pluginsPaths.push_back(path);
- }
-
- wrt_count_plugin = pluginsPaths.size();
-
- FOREACH(it, pluginsPaths) {
- wrt_plugin_data *plugin_data = new wrt_plugin_data;
-
- plugin_data->plugin_installed_cb = installed_cb;
- plugin_data->plugin_path = const_cast<char*>(it->c_str());
- plugin_data->user_data = user_param;
-
- wrt_install_plugin(
- it->c_str(), static_cast<void*>(plugin_data),
- plugin_install_status_cb,
- plugin_install_progress_cb);
- }
-
- if (return_code != 0 || errno != 0) {
- LogError("readdir_r() failed with " << DPL::GetErrnoString());
- }
-
- errno = 0;
- if (-1 == TEMP_FAILURE_RETRY(closedir(dir))) {
- LogError("Failed to close dir: " << PLUGIN_PATH << " with error: "
- << DPL::GetErrnoString());
- }
-
- if (0 != unlink(installRequest.c_str())) {
- LogError("Failed to remove file initializing plugin "
- "installation");
- }
-
- Try {
- DPL::Semaphore::Remove(PLUGIN_INSTALL_SEMAPHORE);
- }
- Catch(DPL::Semaphore::Exception::Base){
- LogInfo("Failed to remove installation lock");
- }
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-EXPORT_API int wrt_installer_init_for_tests(void *userdata,
- WrtInstallerInitCallback callback)
-{
- // Set DPL/LOG MID
- DPL::Log::LogSystemSingleton::Instance().SetTag("WRT");
-
- try {
- LogInfo("[WRT-API] INITIALIZING WRT INSTALLER...");
- LogInfo("[WRT-API] BUILD: " << __TIMESTAMP__);
-
- // Touch InstallerController Singleton
- InstallerMainThreadSingleton::Instance().
- TouchArchitectureOnlyInstaller();
-
- // Check paths
- if (!checkPaths()) {
- if (callback) {
- callback(WRT_INSTALLER_ERROR_FATAL_ERROR, userdata);
- }
- return TRUE;
- }
-
- CONTROLLER_POST_SYNC_EVENT(
- Logic::InstallerController,
- InstallerControllerEvents::
- InitializeEvent());
-
- if (callback) {
- LogInfo("[WRT-API] WRT INSTALLER INITIALIZATION CALLBACK");
- callback(WRT_SUCCESS, userdata);
- }
- } catch (const DPL::Exception& ex) {
- LogError("Internal Error during Init:");
- DPL::Exception::DisplayKnownException(ex);
- if (callback) {
- callback(WRT_INSTALLER_ERROR_FATAL_ERROR, userdata);
- }
- return FALSE;
- }
-
- // OK
- return TRUE;
-}
-
-EXPORT_API void wrt_installer_shutdown_for_tests()
-{
- try {
- LogInfo("[WRT-API] DEINITIALIZING WRT INSTALLER...");
-
- // Installer termination
- CONTROLLER_POST_SYNC_EVENT(
- Logic::InstallerController,
- InstallerControllerEvents::
- TerminateEvent());
-
- // Global deinit check
- LogInfo("Cleanup libxml2 global values.");
- xmlCleanupParser();
- } catch (const DPL::Exception& ex) {
- LogError("Internal Error during Shutdown:");
- DPL::Exception::DisplayKnownException(ex);
- }
-}
-
-EXPORT_API WrtErrStatus wrt_get_widget_by_guid(std::string & tzAppid,
- const std::string & guid)
-{
- try {
- LogInfo("[WRT-API] GETTING WIDGET PACKAGE NAME BY WidgetID : "
- << guid);
-
- WidgetGUID widget_guid = DPL::FromUTF8String(guid);
- WrtDB::WidgetDAOReadOnly dao(widget_guid);
- tzAppid = DPL::ToUTF8String(dao.getTzAppId());
- return WRT_SUCCESS;
- } catch (WidgetDAOReadOnly::Exception::WidgetNotExist&) {
- LogError("Error package name is not found");
- return WRT_INSTALLER_ERROR_FATAL_ERROR;
- } catch (const DPL::Exception& ex) {
- LogError("Internal Error during get widget id by package name");
- DPL::Exception::DisplayKnownException(ex);
- return WRT_INSTALLER_ERROR_FATAL_ERROR;
- }
-}
#ifdef __cplusplus
}
#endif