using common::tools::ReportSuccess;
using common::tools::ReportError;
-ContentInstance::ContentInstance() : noti_handle_(nullptr) {
+ContentInstance::ContentInstance() :
+ noti_handle_(nullptr),
+ listener_data_(nullptr) {
using std::placeholders::_1;
using std::placeholders::_2;
media_content_unset_db_updated_cb_v2(noti_handle_);
noti_handle_ = nullptr;
}
+ if (listener_data_) {
+ delete listener_data_;
+ listener_data_ = nullptr;
+ }
}
static gboolean CompletedCallback(const std::shared_ptr<ReplyCallbackData>& user_data) {
ReplyCallbackData* cbData = static_cast<ReplyCallbackData*>(user_data);
+ if (!uuid) {
+ LOGGER(ERROR) << "Provided uuid is NULL, ignoring";
+ return;
+ }
+
if (error != MEDIA_CONTENT_ERROR_NONE) {
LOGGER(ERROR) << "Media content changed callback error: " << error;
- delete cbData;
return;
}
}
} else {
LOGGER(DEBUG) << "Media item is not a file and not directory, skipping.";
- delete cbData;
return;
}
LoggerD("entered");
CHECK_EXIST(args, "listenerId", out)
- ReplyCallbackData* cbData = new ReplyCallbackData();
+ if (!listener_data_) {
+ listener_data_ = new ReplyCallbackData();
+ }
- cbData->instance = this;
- cbData->args = args;
+ listener_data_->instance = this;
+ listener_data_->args = args;
if (ContentManager::getInstance()->isConnected()) {
- cbData->cbType = ContentManagerSetchangelistenerCallback;
+ listener_data_->cbType = ContentManagerSetchangelistenerCallback;
} else {
- cbData->cbType = ContentManagerErrorCallback;
+ listener_data_->cbType = ContentManagerErrorCallback;
}
if (ContentManager::getInstance()->setChangeListener(¬i_handle_,
changedContentCallback,
- static_cast<void*>(cbData)).IsError()) {
+ static_cast<void*>(listener_data_)).IsError()) {
ReportError(common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "The callback did not register properly"), &out);
}
}
ContentManagerErrorCallback
};
+class ContentInstance;
+
+typedef struct _ReplyCallbackData {
+ _ReplyCallbackData()
+ : instance(nullptr),
+ cbType(ContentManagerFindCallback),
+ callbackId(-1.0),
+ isSuccess(common::ErrorCode::NO_ERROR) {
+ }
+ ContentInstance* instance;
+ ContentCallbacks cbType;
+ double callbackId;
+ picojson::value args;
+ picojson::value result;
+ common::PlatformResult isSuccess;
+} ReplyCallbackData;
class ContentInstance : public common::ParsedInstance {
public:
void PlaylistGetNumberOfTracks(const picojson::value& args, picojson::object& out);
media_content_noti_h noti_handle_;
+ ReplyCallbackData* listener_data_;
};
-typedef struct _ReplyCallbackData {
- _ReplyCallbackData()
- : instance(nullptr),
- cbType(ContentManagerFindCallback),
- callbackId(-1.0),
- isSuccess(common::ErrorCode::NO_ERROR) {
- }
- ContentInstance* instance;
- ContentCallbacks cbType;
- double callbackId;
- picojson::value args;
- picojson::value result;
- common::PlatformResult isSuccess;
-} ReplyCallbackData;
-
} // namespace content
} // namespace extension