From d68a348f7e55ee348e8e9acf6d275448080b601b Mon Sep 17 00:00:00 2001 From: Pawel Andruszkiewicz Date: Wed, 8 Apr 2015 11:34:18 +0200 Subject: [PATCH] [Archive] Allow to create multiple instances of ArchiveInstance class. Change-Id: Ic40aa1763bd71166392c0477181859dced902849 --- src/archive/archive_callback_data.cc | 41 ++++++++++++++++------------ src/archive/archive_callback_data.h | 21 ++++++++------ src/archive/archive_extension.cc | 2 +- src/archive/archive_file.cc | 8 +++--- src/archive/archive_instance.cc | 20 +++++--------- src/archive/archive_instance.h | 5 ++-- 6 files changed, 50 insertions(+), 47 deletions(-) diff --git a/src/archive/archive_callback_data.cc b/src/archive/archive_callback_data.cc index a56fa29e..8e2f859d 100755 --- a/src/archive/archive_callback_data.cc +++ b/src/archive/archive_callback_data.cc @@ -40,13 +40,14 @@ using namespace common; //OperationCallbackData //---------------------------------------------------------------------------------------- -OperationCallbackData::OperationCallbackData(ArchiveCallbackType callback_type) : +OperationCallbackData::OperationCallbackData(ArchiveCallbackType callback_type, ArchiveInstance& instance) : m_callback_type(callback_type), m_op_id(-1), m_cid(-1), m_handle(-1), m_is_error(false), - m_is_canceled(false) + m_is_canceled(false), + instance_(instance) { LoggerD("Entered"); } @@ -119,6 +120,10 @@ void OperationCallbackData::setIsCanceled(bool canceled) m_is_canceled = canceled; } +void OperationCallbackData::PostMessage(const char* msg) { + instance_.PostMessage(msg); +} + const ErrorCode& OperationCallbackData::getErrorCode() const { LoggerD("Entered"); @@ -151,8 +156,8 @@ void OperationCallbackData::setArchiveFile(ArchiveFilePtr caller) //OpenCallbackData //---------------------------------------------------------------------------------------- -OpenCallbackData::OpenCallbackData(ArchiveCallbackType callback_type): - OperationCallbackData(callback_type) +OpenCallbackData::OpenCallbackData(ArchiveInstance& instance): + OperationCallbackData(OPEN_CALLBACK_DATA, instance) { LoggerD("Entered"); } @@ -224,8 +229,8 @@ PlatformResult OpenCallbackData::executeOperation(ArchiveFilePtr archive_file_pt //GetEntriesCallbackData //---------------------------------------------------------------------------------------- -GetEntriesCallbackData::GetEntriesCallbackData(ArchiveCallbackType callback_type): - OperationCallbackData(callback_type) +GetEntriesCallbackData::GetEntriesCallbackData(ArchiveInstance& instance): + OperationCallbackData(GET_ENTRIES_CALLBACK_DATA, instance) { LoggerD("Entered"); } @@ -263,8 +268,8 @@ PlatformResult GetEntriesCallbackData::executeOperation(ArchiveFilePtr archive_f //GetEntryByNameCallbackData //---------------------------------------------------------------------------------------- -GetEntryByNameCallbackData::GetEntryByNameCallbackData(ArchiveCallbackType callback_type): - OperationCallbackData(callback_type) +GetEntryByNameCallbackData::GetEntryByNameCallbackData(ArchiveInstance& instance): + OperationCallbackData(GET_ENTRY_BY_NAME_CALLBACK_DATA, instance) { LoggerD("Entered"); } @@ -332,8 +337,8 @@ PlatformResult GetEntryByNameCallbackData::executeOperation(ArchiveFilePtr archi //BaseProgressCallback //---------------------------------------------------------------------------------------- -BaseProgressCallback::BaseProgressCallback(ArchiveCallbackType callback_type): - OperationCallbackData(callback_type), +BaseProgressCallback::BaseProgressCallback(ArchiveCallbackType callback_type, ArchiveInstance& instance): + OperationCallbackData(callback_type, instance), m_overwrite(false) { LoggerD("Entered"); @@ -397,7 +402,7 @@ gboolean BaseProgressCallback::callSuccessCallbackCB(void* data) LoggerD("%s", val.serialize().c_str()); - ArchiveInstance::getInstance().PostMessage(val.serialize().c_str()); + callback->instance_.PostMessage(val.serialize().c_str()); } else { LoggerW("Not calling error callback in such case"); } @@ -430,7 +435,7 @@ void BaseProgressCallback::callProgressCallback(long operationId, LoggerD("%s", val.serialize().c_str()); - ArchiveInstance::getInstance().PostMessage(val.serialize().c_str()); + instance_.PostMessage(val.serialize().c_str()); } void BaseProgressCallback::callProgressCallbackOnMainThread(const double progress, @@ -484,8 +489,8 @@ gboolean BaseProgressCallback::callProgressCallbackCB(void* data) //AddProgressCallback //---------------------------------------------------------------------------------------- -AddProgressCallback::AddProgressCallback(ArchiveCallbackType callback_type): - BaseProgressCallback(callback_type) +AddProgressCallback::AddProgressCallback(ArchiveInstance& instance): + BaseProgressCallback(ADD_PROGRESS_CALLBACK, instance) { LoggerD("Entered"); } @@ -586,8 +591,8 @@ PlatformResult AddProgressCallback::executeOperation(ArchiveFilePtr archive_file //ExtractAllProgressCallback //---------------------------------------------------------------------------------------- -ExtractAllProgressCallback::ExtractAllProgressCallback(ArchiveCallbackType callback_type): - BaseProgressCallback(callback_type), +ExtractAllProgressCallback::ExtractAllProgressCallback(ArchiveInstance& instance): + BaseProgressCallback(EXTRACT_ALL_PROGRESS_CALLBACK, instance), m_files_to_extract(0), m_expected_decompressed_size(0), m_files_extracted(0), @@ -705,8 +710,8 @@ OperationCanceledException::OperationCanceledException(const char* message) //ExtractEntryProgressCallback //---------------------------------------------------------------------------------------- -ExtractEntryProgressCallback::ExtractEntryProgressCallback(): - ExtractAllProgressCallback(), +ExtractEntryProgressCallback::ExtractEntryProgressCallback(ArchiveInstance& instance): + ExtractAllProgressCallback(instance), m_strip_name(false) { LoggerD("Entered"); diff --git a/src/archive/archive_callback_data.h b/src/archive/archive_callback_data.h index 44027572..14a7418e 100644 --- a/src/archive/archive_callback_data.h +++ b/src/archive/archive_callback_data.h @@ -53,10 +53,12 @@ enum ArchiveCallbackType { class ArchiveFile; typedef std::shared_ptr ArchiveFilePtr; +class ArchiveInstance; + class OperationCallbackData { public: - OperationCallbackData(ArchiveCallbackType callback_type); + OperationCallbackData(ArchiveCallbackType callback_type, ArchiveInstance& instance); virtual ~OperationCallbackData(); void setError(const ErrorCode &err_code, @@ -82,11 +84,14 @@ public: bool isCanceled() const; void setIsCanceled(bool canceled); + void PostMessage(const char* msg); + protected: ArchiveCallbackType m_callback_type; long m_op_id; double m_cid; long m_handle; + ArchiveInstance& instance_; private: bool m_is_error; @@ -100,7 +105,7 @@ private: class OpenCallbackData : public OperationCallbackData { public: - OpenCallbackData(ArchiveCallbackType callback_type = OPEN_CALLBACK_DATA); + explicit OpenCallbackData(ArchiveInstance& instance); virtual ~OpenCallbackData(); virtual PlatformResult executeOperation(ArchiveFilePtr archive_file_ptr); @@ -112,7 +117,7 @@ private: class GetEntriesCallbackData : public OperationCallbackData { public: - GetEntriesCallbackData(ArchiveCallbackType callback_type = GET_ENTRIES_CALLBACK_DATA); + explicit GetEntriesCallbackData(ArchiveInstance& instance); virtual ~GetEntriesCallbackData(); ArchiveFileEntryPtrMapPtr getEntries() const; @@ -127,7 +132,7 @@ private: class GetEntryByNameCallbackData : public OperationCallbackData { public: - GetEntryByNameCallbackData(ArchiveCallbackType callback_type = GET_ENTRY_BY_NAME_CALLBACK_DATA); + explicit GetEntryByNameCallbackData(ArchiveInstance& instance); virtual ~GetEntryByNameCallbackData(); const std::string& getName() const; @@ -146,7 +151,7 @@ private: class BaseProgressCallback : public OperationCallbackData { public: - BaseProgressCallback(ArchiveCallbackType callback_type = BASE_PROGRESS_CALLBACK); + BaseProgressCallback(ArchiveCallbackType callback_type, ArchiveInstance& instance); virtual ~BaseProgressCallback(); bool getOverwrite() const; @@ -174,7 +179,7 @@ private: class AddProgressCallback : public BaseProgressCallback { public: - AddProgressCallback(ArchiveCallbackType callback_type = ADD_PROGRESS_CALLBACK); + explicit AddProgressCallback(ArchiveInstance& instance); virtual ~AddProgressCallback(); virtual PlatformResult executeOperation(ArchiveFilePtr archive_file_ptr); @@ -196,7 +201,7 @@ private: class ExtractAllProgressCallback : public BaseProgressCallback { public: - ExtractAllProgressCallback(ArchiveCallbackType callback_type = EXTRACT_ALL_PROGRESS_CALLBACK); + explicit ExtractAllProgressCallback(ArchiveInstance& instance); virtual ~ExtractAllProgressCallback(); filesystem::FilePtr getDirectory() const; @@ -243,7 +248,7 @@ private: class ExtractEntryProgressCallback : public ExtractAllProgressCallback { public: - ExtractEntryProgressCallback(); + explicit ExtractEntryProgressCallback(ArchiveInstance& instance); virtual ~ExtractEntryProgressCallback(); ArchiveFileEntryPtr getArchiveFileEntry(); diff --git a/src/archive/archive_extension.cc b/src/archive/archive_extension.cc index e045825a..c774b933 100644 --- a/src/archive/archive_extension.cc +++ b/src/archive/archive_extension.cc @@ -25,5 +25,5 @@ ArchiveExtension::~ArchiveExtension() common::Instance* ArchiveExtension::CreateInstance() { - return &extension::archive::ArchiveInstance::getInstance(); + return new extension::archive::ArchiveInstance(); } diff --git a/src/archive/archive_file.cc b/src/archive/archive_file.cc index f3088d5d..e9251cba 100644 --- a/src/archive/archive_file.cc +++ b/src/archive/archive_file.cc @@ -127,7 +127,7 @@ gboolean ArchiveFile::openTaskCompleteCB(void *data) LoggerD("%s", val.serialize().c_str()); - ArchiveInstance::getInstance().PostMessage(val.serialize().c_str()); + callback->PostMessage(val.serialize().c_str()); delete callback; callback = NULL; @@ -163,7 +163,7 @@ gboolean ArchiveFile::callErrorCallback(void* data) LoggerD("%s", val.serialize().c_str()); - ArchiveInstance::getInstance().PostMessage(val.serialize().c_str()); + callback->PostMessage(val.serialize().c_str()); delete callback; callback = NULL; @@ -390,7 +390,7 @@ gboolean ArchiveFile::getEntriesTaskCompleteCB(void *data) LoggerD("%s", val.serialize().c_str()); - ArchiveInstance::getInstance().PostMessage(val.serialize().c_str()); + callback->PostMessage(val.serialize().c_str()); delete callback; callback = NULL; @@ -523,7 +523,7 @@ gboolean ArchiveFile::getEntryByNameTaskCompleteCB(void *data) LoggerD("%s", val.serialize().c_str()); - ArchiveInstance::getInstance().PostMessage(val.serialize().c_str()); + callback->PostMessage(val.serialize().c_str()); delete callback; callback = NULL; diff --git a/src/archive/archive_instance.cc b/src/archive/archive_instance.cc index fb9874c6..eb94912f 100644 --- a/src/archive/archive_instance.cc +++ b/src/archive/archive_instance.cc @@ -27,12 +27,6 @@ const std::string kPrivilegeFilesystemRead = "http://tizen.org/privilege/filesy const std::string kPrivilegeFilesystemWrite = "http://tizen.org/privilege/filesystem.write"; } // namespace -ArchiveInstance& ArchiveInstance::getInstance() -{ - static ArchiveInstance instance; - return instance; -} - ArchiveInstance::ArchiveInstance() { LoggerD("Entered"); @@ -77,7 +71,7 @@ void ArchiveInstance::PostError(const PlatformResult& e, double callback_id) { args[ERROR_CALLBACK_CODE] = picojson::value(static_cast(e.error_code())); args[ERROR_CALLBACK_MESSAGE] = picojson::value(e.message()); - ArchiveInstance::getInstance().PostMessage(val.serialize().c_str()); + PostMessage(val.serialize().c_str()); } void ArchiveInstance::Open(const picojson::value& args, picojson::object& out) { @@ -102,7 +96,7 @@ void ArchiveInstance::Open(const picojson::value& args, picojson::object& out) { return; } - OpenCallbackData *callback = new OpenCallbackData(); + OpenCallbackData *callback = new OpenCallbackData(*this); FilePtr file_ptr; @@ -240,7 +234,7 @@ void ArchiveInstance::Add(const picojson::value& args, picojson::object& out) const long operationId = static_cast(v_op_id.get()); const long handle = static_cast(v_handle.get()); - AddProgressCallback *callback = new AddProgressCallback(); + AddProgressCallback *callback = new AddProgressCallback(*this); NodePtr node; PlatformResult result = Node::resolve(Path::create(v_source.get()), &node); @@ -305,7 +299,7 @@ void ArchiveInstance::ExtractAll(const picojson::value& args, picojson::object& const long operationId = static_cast(v_op_id.get()); const long handle = static_cast(v_handle.get()); - ExtractAllProgressCallback *callback = new ExtractAllProgressCallback(); + ExtractAllProgressCallback *callback = new ExtractAllProgressCallback(*this); NodePtr node; PlatformResult result = Node::resolve(Path::create(v_dest_dir.get()), &node); @@ -367,7 +361,7 @@ void ArchiveInstance::GetEntries(const picojson::value& args, picojson::object& const long operationId = static_cast(v_op_id.get()); const long handle = static_cast(v_handle.get()); - GetEntriesCallbackData *callback = new GetEntriesCallbackData(); + GetEntriesCallbackData *callback = new GetEntriesCallbackData(*this); callback->setOperationId(operationId); callback->setCallbackId(callbackId); @@ -414,7 +408,7 @@ void ArchiveInstance::GetEntryByName(const picojson::value& args, picojson::obje const long operationId = static_cast(v_op_id.get()); const long handle = static_cast(v_handle.get()); - GetEntryByNameCallbackData *callback = new GetEntryByNameCallbackData(); + GetEntryByNameCallbackData *callback = new GetEntryByNameCallbackData(*this); callback->setOperationId(operationId); callback->setCallbackId(callbackId); @@ -488,7 +482,7 @@ void ArchiveInstance::Extract(const picojson::value& args, picojson::object& out const long operationId = static_cast(v_op_id.get()); const long handle = static_cast(v_handle.get()); - ExtractEntryProgressCallback *callback = new ExtractEntryProgressCallback(); + ExtractEntryProgressCallback *callback = new ExtractEntryProgressCallback(*this); NodePtr node; PlatformResult result = Node::resolve(Path::create(v_dest_dir.get()), &node); diff --git a/src/archive/archive_instance.h b/src/archive/archive_instance.h index 635a4070..2cdfeb77 100644 --- a/src/archive/archive_instance.h +++ b/src/archive/archive_instance.h @@ -14,13 +14,12 @@ namespace archive { class ArchiveInstance: public common::ParsedInstance { public: - static ArchiveInstance& getInstance(); + ArchiveInstance(); + virtual ~ArchiveInstance(); private: - ArchiveInstance(); ArchiveInstance(ArchiveInstance const&); void operator=(ArchiveInstance const&); - virtual ~ArchiveInstance(); /* ArchiveManager methods */ void Open(const picojson::value& args, picojson::object& out); -- 2.34.1