From: Przemyslaw Ciezkowski Date: Thu, 18 Dec 2014 14:30:04 +0000 (+0100) Subject: [TVChannel] getProgramList body X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~510 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=17c9800bebc2ebc02c7562f08a1a2daee2d7698c;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [TVChannel] getProgramList body [Verification] tizen.tvchannel.getProgramList(tizen.tvchannel.getCurrentChannel("MAIN"), tizen.time.getCurrentDateTime(), function(){console.log("succ", arguments);}, function(e){console.log("err", e);}); Change-Id: I7f97bf8ef2661a757f4f93f53a5b27f1bad07334 Signed-off-by: Przemyslaw Ciezkowski --- diff --git a/src/tvchannel/tvchannel_api.js b/src/tvchannel/tvchannel_api.js index e36054be..fc71a63c 100644 --- a/src/tvchannel/tvchannel_api.js +++ b/src/tvchannel/tvchannel_api.js @@ -378,8 +378,8 @@ TVChannelManager.prototype.getProgramList = function(channelInfo, } ]); native.call('TVChannelManager_getProgramList', { - channelInfo: args.channelInfo, - startTime: args.startTime, + channelId: args.channelInfo._serviceId, + startTime: args.startTime.getTime(), duration: args.duration }, function(msg) { if (msg.error) { diff --git a/src/tvchannel/tvchannel_instance.cc b/src/tvchannel/tvchannel_instance.cc index 9202a638..84492b81 100644 --- a/src/tvchannel/tvchannel_instance.cc +++ b/src/tvchannel/tvchannel_instance.cc @@ -33,6 +33,10 @@ TVChannelInstance::TVChannelInstance() { std::bind(&TVChannelInstance::getChannelList, this, std::placeholders::_1, std::placeholders::_2)); + RegisterHandler("TVChannelManager_getProgramList", + std::bind(&TVChannelInstance::getProgramList, this, + std::placeholders::_1, + std::placeholders::_2)); RegisterHandler("TVChannelManager_tune", std::bind(&TVChannelInstance::tune, this, std::placeholders::_1, std::placeholders::_2)); @@ -143,7 +147,11 @@ picojson::value TVChannelInstance::channelInfoToJson( channel.insert( std::make_pair("serviceName", picojson::value(pChannel->getServiceName()))); - + // internal property + channel.insert( + std::make_pair("_serviceId", + picojson::value( + static_cast(pChannel->getServiceID())))); return picojson::value(channel); } @@ -347,5 +355,59 @@ void TVChannelInstance::getChannelListResult( PostMessage(result.serialize().c_str()); } +void TVChannelInstance::getProgramList( + const picojson::value& args, picojson::object& out) { + LOGD("Enter"); + std::function)> + asyncWork = std::bind( + &TVChannelManager::getProgramList, + TVChannelManager::getInstance(), + std::placeholders::_1); + std::function)> + afterWork = std::bind( + &TVChannelInstance::getProgramListResult, + this, + std::placeholders::_1); + std::shared_ptr data( + new TVChannelManager::GetProgramListData()); + data->channelId = static_cast( + args.get("channelId").get()); + data->startTime = static_cast( + args.get("startTime").get()); + if (args.contains("duration")) { + data->duration = + static_cast(args.get("duration").get()); + } else { + data->duration = UINT32_MAX; + } + data->callbackId = args.get("callbackId").get(); + TaskQueue::GetInstance().Queue( + asyncWork, + afterWork, + data); + picojson::value result; + ReportSuccess(result, out); +} + +void TVChannelInstance::getProgramListResult( + const std::shared_ptr& data) { + picojson::value::object dict; + dict["callbackId"] = picojson::value(data->callbackId); + if (data->error) { + dict["error"] = data->error->ToJSON(); + } else { + picojson::value::array programs; + auto it = data->programs.begin(); + for (; it != data->programs.end(); ++it) { + programs.push_back(programInfoToJson( + std::unique_ptr(*it))); + } + data->programs.clear(); + dict["programInfos"] = picojson::value(programs); + } + picojson::value result(dict); + PostMessage(result.serialize().c_str()); +} + } // namespace tvchannel } // namespace extension diff --git a/src/tvchannel/tvchannel_instance.h b/src/tvchannel/tvchannel_instance.h index a0496e94..e8b1688b 100644 --- a/src/tvchannel/tvchannel_instance.h +++ b/src/tvchannel/tvchannel_instance.h @@ -39,6 +39,9 @@ class TVChannelInstance: const std::unique_ptr &pChannel); picojson::value programInfoToJson( const std::unique_ptr &pProgram); + void getProgramList(const picojson::value& args, picojson::object& out); + void getProgramListResult( + const std::shared_ptr& data); void tune(picojson::value const& args, picojson::object& out); void tuneTask(std::shared_ptr const& _tuneData); diff --git a/src/tvchannel/tvchannel_manager.cc b/src/tvchannel/tvchannel_manager.cc index 2dc9208a..f9ab7568 100644 --- a/src/tvchannel/tvchannel_manager.cc +++ b/src/tvchannel/tvchannel_manager.cc @@ -6,6 +6,7 @@ #include #include #include +#include #include "tvchannel/channel_info.h" #include "tvchannel/program_info.h" #include "common/logger.h" @@ -439,6 +440,43 @@ void TVChannelManager::getChannelList( } } +void TVChannelManager::getProgramList( + const std::shared_ptr& data) { + LOGD("Enter"); + try { + IServiceGuide* guide; + int ret = TVServiceAPI::CreateServiceGuide(&guide); + if (TV_SERVICE_API_SUCCESS != ret) { + LOGE("Failed to create service guide: %d", ret); + throw common::UnknownException("Failed to create service guide"); + } + + std::map programList; + ret = guide->GetProgramList(data->channelId, + data->startTime, data->duration, programList); + if (TV_SERVICE_API_METHOD_FAILURE == ret) { + LOGE("Failed to get program list."); + throw common::NotFoundException("Failed to get program list."); + } + LOGD("Found programs: %d", programList.size()); + + auto it = programList.begin(); + for (; it != programList.end(); ++it) { + ProgramInfo *programInfo = new ProgramInfo(); + programInfo->fromApiData(*(it->second)); + data->programs.push_back(programInfo); + delete it->second; + } + programList.clear(); + } catch (common::PlatformException& e) { + data->error.reset(new common::PlatformException(e.name(), e.message())); + } catch (...) { + data->error.reset( + new common::UnknownException("Couldn't find channels")); + } +} + + TVChannelManager::~TVChannelManager() { TVServiceAPI::Destroy(); } diff --git a/src/tvchannel/tvchannel_manager.h b/src/tvchannel/tvchannel_manager.h index adf76ffc..a3639178 100644 --- a/src/tvchannel/tvchannel_manager.h +++ b/src/tvchannel/tvchannel_manager.h @@ -16,6 +16,7 @@ #include "tvchannel/types.h" #include "tvchannel/tune_option.h" #include "common/platform_exception.h" +#include "tvchannel/program_info.h" namespace common { class PlatformException; @@ -107,6 +108,17 @@ class TVChannelManager { void getChannelList(const std::shared_ptr& data); + struct GetProgramListData { + TCServiceId channelId; + u_int32_t startTime; + u_int32_t duration; + std::shared_ptr error; + double callbackId; + std::list programs; + }; + + void getProgramList(const std::shared_ptr& data); + private: EventListener* m_listener; // Not copyable, assignable, movable