summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/application_manager/include/application_manager/application_impl.h12
-rw-r--r--src/components/application_manager/src/application_impl.cc88
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc12
-rw-r--r--src/components/application_manager/src/resume_ctrl.cpp3
4 files changed, 102 insertions, 13 deletions
diff --git a/src/components/application_manager/include/application_manager/application_impl.h b/src/components/application_manager/include/application_manager/application_impl.h
index 4cb7393ac1..23c5e3255d 100644
--- a/src/components/application_manager/include/application_manager/application_impl.h
+++ b/src/components/application_manager/include/application_manager/application_impl.h
@@ -53,7 +53,8 @@ class ApplicationImpl : public virtual InitialApplicationDataImpl,
public virtual DynamicApplicationDataImpl {
public:
ApplicationImpl(uint32_t application_id,
- const std::string& global_app_id,
+ const std::string& mobile_app_id,
+ const std::string& app_name,
usage_statistics::StatisticsManager* statistics_manager);
~ApplicationImpl();
@@ -161,8 +162,17 @@ class ApplicationImpl : public virtual InitialApplicationDataImpl,
UsageStatistics& usage_report();
protected:
+
+ /**
+ * @brief Clean up application folder. Persistent files will stay
+ */
void CleanupFiles();
+ /**
+ * @brief Load persistent files from application folder.
+ */
+ void LoadPersistentFiles();
+
private:
uint32_t hash_val_;
diff --git a/src/components/application_manager/src/application_impl.cc b/src/components/application_manager/src/application_impl.cc
index 11ad220756..d8b268d446 100644
--- a/src/components/application_manager/src/application_impl.cc
+++ b/src/components/application_manager/src/application_impl.cc
@@ -31,13 +31,44 @@
*/
#include <string>
+#include <strings.h>
#include <stdlib.h>
#include "application_manager/application_impl.h"
#include "application_manager/message_helper.h"
#include "config_profile/profile.h"
+#include "interfaces/MOBILE_API.h"
#include "utils/file_system.h"
#include "utils/logger.h"
+namespace {
+
+mobile_apis::FileType::eType StringToFileType(const char* str) {
+ if (0 == strcasecmp(str, "json")) {
+ return mobile_apis::FileType::JSON;
+ } else if (0 == strcasecmp(str, "bmp")) {
+ return mobile_apis::FileType::GRAPHIC_BMP;
+ } else if (0 == strcasecmp(str, "jpeg")) {
+ return mobile_apis::FileType::GRAPHIC_JPEG;
+ } else if (0 == strcasecmp(str, "png")) {
+ return mobile_apis::FileType::GRAPHIC_PNG;
+ } else if (0 == strcasecmp(str, "wave")) {
+ return mobile_apis::FileType::AUDIO_WAVE;
+ } else if ((0 == strcasecmp(str, "m4a")) ||
+ (0 == strcasecmp(str, "m4b")) ||
+ (0 == strcasecmp(str, "m4p")) ||
+ (0 == strcasecmp(str, "m4v")) ||
+ (0 == strcasecmp(str, "m4r")) ||
+ (0 == strcasecmp(str, "3gp")) ||
+ (0 == strcasecmp(str, "mp4")) ||
+ (0 == strcasecmp(str, "aac"))) {
+ return mobile_apis::FileType::AUDIO_AAC;
+ } else if (0 == strcasecmp(str, "mp3")) {
+ return mobile_apis::FileType::AUDIO_MP3;
+ } else {
+ return mobile_apis::FileType::BINARY;
+ }
+}
+}
namespace application_manager {
@@ -45,7 +76,8 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "ApplicationManager")
ApplicationImpl::ApplicationImpl(
uint32_t application_id,
- const std::string& global_app_id,
+ const std::string& mobile_app_id,
+ const std::string& app_name,
usage_statistics::StatisticsManager* statistics_manager)
: grammar_id_(0),
app_id_(application_id),
@@ -63,12 +95,18 @@ ApplicationImpl::ApplicationImpl(
system_context_(mobile_api::SystemContext::SYSCTXT_MAIN),
audio_streaming_state_(mobile_api::AudioStreamingState::NOT_AUDIBLE),
device_(0),
- usage_report_(global_app_id, statistics_manager),
+ usage_report_(mobile_app_id, statistics_manager),
protocol_version_(ProtocolVersion::kV3),
alert_in_background_(false) {
+ set_mobile_app_id(smart_objects::SmartObject(mobile_app_id));
+ set_name(app_name);
+
// subscribe application to custom button by default
SubscribeToButton(mobile_apis::ButtonName::CUSTOM_BUTTON);
+
+ // load persistent files
+ LoadPersistentFiles();
}
ApplicationImpl::~ApplicationImpl() {
@@ -300,6 +338,8 @@ ProtocolVersion ApplicationImpl::protocol_version() const {
bool ApplicationImpl::AddFile(AppFile& file) {
if (app_files_.count(file.file_name) == 0) {
+ LOG4CXX_INFO(logger_, "AddFile file " << file.file_name
+ << " File type is " << file.file_type);
app_files_[file.file_name] = file;
return true;
}
@@ -308,6 +348,8 @@ bool ApplicationImpl::AddFile(AppFile& file) {
bool ApplicationImpl::UpdateFile(AppFile& file) {
if (app_files_.count(file.file_name) != 0) {
+ LOG4CXX_INFO(logger_, "UpdateFile file " << file.file_name
+ << " File type is " << file.file_type);
app_files_[file.file_name] = file;
return true;
}
@@ -317,6 +359,8 @@ bool ApplicationImpl::UpdateFile(AppFile& file) {
bool ApplicationImpl::DeleteFile(const std::string& file_name) {
AppFilesMap::iterator it = app_files_.find(file_name);
if (it != app_files_.end()) {
+ LOG4CXX_INFO(logger_, "DeleteFile file " << it->second.file_name
+ << " File type is " << it->second.file_type);
app_files_.erase(it);
return true;
}
@@ -344,6 +388,7 @@ bool ApplicationImpl::IsSubscribedToButton(mobile_apis::ButtonName::eType btn_na
std::set<mobile_apis::ButtonName::eType>::iterator it = subscribed_buttons_.find(btn_name);
return (subscribed_buttons_.end() != it);
}
+
bool ApplicationImpl::UnsubscribeFromButton(mobile_apis::ButtonName::eType btn_name) {
size_t old_size = subscribed_buttons_.size();
subscribed_buttons_.erase(btn_name);
@@ -405,14 +450,15 @@ void ApplicationImpl::CleanupFiles() {
directory_name);
AppFilesMap::const_iterator app_files_it;
- for (std::vector<std::string>::const_iterator it = files.begin();
- it != files.end(); ++it) {
+ std::vector<std::string>::const_iterator it = files.begin();
+ for (; it != files.end(); ++it) {
std::string file_name = directory_name;
file_name += "/";
file_name += *it;
app_files_it = app_files_.find(file_name);
if ((app_files_it == app_files_.end()) ||
(!app_files_it->second.is_persistent)) {
+ LOG4CXX_INFO(logger_, "DeleteFile file " << file_name);
file_system::DeleteFile(file_name);
}
}
@@ -422,4 +468,38 @@ void ApplicationImpl::CleanupFiles() {
app_files_.clear();
}
+void ApplicationImpl::LoadPersistentFiles() {
+ std::string directory_name =
+ profile::Profile::instance()->app_storage_folder();
+ directory_name += "/" + folder_name();
+
+ if (file_system::DirectoryExists(directory_name)) {
+ std::vector<std::string> persistent_files =
+ file_system::ListFiles(directory_name);
+
+ std::vector<std::string>::const_iterator it = persistent_files.begin();
+ for (; it != persistent_files.end(); ++it) {
+ AppFile file;
+ file.is_persistent = true;
+ file.is_download_complete = true;
+ file.file_name = directory_name;
+ file.file_name += "/";
+ file.file_name += *it;
+ file.file_type = mobile_apis::FileType::BINARY;
+ // Search file extension and convert it to the type
+ std::size_t index = it->find_last_of('.');
+ if (index != std::string::npos) {
+ std::string file_type = it->substr(++index);
+ file.file_type = StringToFileType(file_type.c_str());
+ }
+
+ LOG4CXX_INFO(logger_, "Loaded persistent file " << file.file_name
+ << " File type is " << file.file_type);
+ AddFile(file);
+ }
+ }
+}
+
+
+
} // namespace application_manager
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 4664d24f2a..afc315de26 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -300,9 +300,12 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
smart_objects::SmartObject& params = message[strings::msg_params];
- const std::string mobile_app_id = params[strings::app_id].asString();
+ const std::string& mobile_app_id = params[strings::app_id].asString();
+ const std::string& app_name =
+ message[strings::msg_params][strings::app_name].asString();
+
ApplicationSharedPtr application(
- new ApplicationImpl(app_id, mobile_app_id, policy_manager_));
+ new ApplicationImpl(app_id, mobile_app_id, app_name, policy_manager_));
if (!application) {
usage_statistics::AppCounter count_of_rejections_sync_out_of_memory(
policy_manager_, mobile_app_id,
@@ -318,10 +321,6 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
return ApplicationSharedPtr();
}
- const std::string& name =
- message[strings::msg_params][strings::app_name].asString();
-
- application->set_name(name);
application->set_device(device_id);
application->set_grammar_id(GenerateGrammarID());
mobile_api::Language::eType launguage_desired =
@@ -374,7 +373,6 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
version.max_supported_api_version = static_cast<APIVersion>(max_version);
application->set_version(version);
- application->set_mobile_app_id(message[strings::msg_params][strings::app_id]);
ProtocolVersion protocol_version = static_cast<ProtocolVersion>(
message[strings::params][strings::protocol_version].asInt());
application->set_protocol_version(protocol_version);
diff --git a/src/components/application_manager/src/resume_ctrl.cpp b/src/components/application_manager/src/resume_ctrl.cpp
index 97d07b7134..63e2772ee6 100644
--- a/src/components/application_manager/src/resume_ctrl.cpp
+++ b/src/components/application_manager/src/resume_ctrl.cpp
@@ -204,6 +204,7 @@ bool ResumeCtrl::RestoreApplicationData(ApplicationSharedPtr application) {
file.file_name = file_data[strings::sync_file_name].asString();
file.file_type = static_cast<mobile_apis::FileType::eType> (
file_data[strings::file_type].asInt());
+ LOG4CXX_INFO(logger_, "RestoreApplicationData file " << file.file_name);
application->AddFile(file);
}
}
@@ -512,7 +513,7 @@ bool ResumeCtrl::StartResumptionOnlyHMILevel(ApplicationSharedPtr application) {
}
bool ResumeCtrl::CheckPersistenceFilesForResumption(ApplicationSharedPtr application) {
- LOG4CXX_INFO(logger_, "RestoreApplicationData");
+ LOG4CXX_INFO(logger_, "CheckPersistenceFilesForResumption");
DCHECK(application.get());
Json::Value::iterator it = GetSavedApplications().begin();