/*---------------------------------------------------------------------- | PLT_MediaController::FindActionDesc +---------------------------------------------------------------------*/ NPT_Result PLT_MediaController::FindActionDesc(PLT_DeviceDataReference& device, const char* service_type, const char* action_name, PLT_ActionDesc*& action_desc) { // look for the service PLT_Service* service; if (NPT_FAILED(device->FindServiceByType(service_type, service))) { NPT_LOG_FINE_1("Service %s not found", (const char*)service_type); return NPT_FAILURE; } action_desc = service->FindActionDesc(action_name); if (action_desc == NULL) { NPT_LOG_FINE_1("Action %s not found in service", action_name); return NPT_FAILURE; } return NPT_SUCCESS; }
/*---------------------------------------------------------------------- | PLT_MediaBrowser::Browse +---------------------------------------------------------------------*/ NPT_Result PLT_MediaBrowser::Browse(PLT_DeviceDataReference& device, const char* obj_id, NPT_UInt32 start_index, NPT_UInt32 count, bool browse_metadata, const char* filter, const char* sort_criteria, void* userdata) { // look for the service PLT_Service* service; NPT_String type; type = "urn:schemas-upnp-org:service:ContentDirectory:1"; if (NPT_FAILED(device->FindServiceByType(type, service))) { NPT_LOG_WARNING_1("Service %s not found", (const char*)type); return NPT_FAILURE; } PLT_ActionDesc* action_desc = service->FindActionDesc("Browse"); if (action_desc == NULL) { NPT_LOG_WARNING("Action Browse not found in service"); return NPT_FAILURE; } PLT_ActionReference action(new PLT_Action(action_desc)); // Set the object id PLT_Arguments args; if (NPT_FAILED(action->SetArgumentValue("ObjectID", obj_id))) { return NPT_ERROR_INVALID_PARAMETERS; } // set the browse_flag if (NPT_FAILED(action->SetArgumentValue("BrowseFlag", browse_metadata?"BrowseMetadata":"BrowseDirectChildren"))) { return NPT_ERROR_INVALID_PARAMETERS; } // set the Filter if (NPT_FAILED(action->SetArgumentValue("Filter", filter))) { return NPT_ERROR_INVALID_PARAMETERS; } // set the Starting Index if (NPT_FAILED(action->SetArgumentValue("StartingIndex", NPT_String::FromInteger(start_index)))) { return NPT_ERROR_INVALID_PARAMETERS; } // set the Requested Count if (NPT_FAILED(action->SetArgumentValue("RequestedCount", NPT_String::FromInteger(count)))) { return NPT_ERROR_INVALID_PARAMETERS; } // set the Requested Count if (NPT_FAILED(action->SetArgumentValue("SortCriteria", sort_criteria))) { return NPT_ERROR_INVALID_PARAMETERS; } // set the arguments on the action, this will check the argument values if (NPT_FAILED(m_CtrlPoint->InvokeAction(action, userdata))) { return NPT_ERROR_INVALID_PARAMETERS; } return NPT_SUCCESS; }