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