diff --git a/src/GeniusSDK.cpp b/src/GeniusSDK.cpp index 79f7140..c0d4872 100644 --- a/src/GeniusSDK.cpp +++ b/src/GeniusSDK.cpp @@ -30,6 +30,7 @@ #include #include +#include namespace { @@ -216,7 +217,7 @@ const char *GeniusSDKInit( const char *base_path, bool autodht, bool process, ui { return SDKInitHelper( base_path, [&]( const auto &config ) - { return sgns::GeniusNode::New( config, autodht, process, baseport, is_full_node ); } ); + { return sgns::GeniusNode::New( config, autodht, baseport, is_full_node ); } ); } const char *GeniusSDKInitWithKey( const char *base_path, @@ -232,7 +233,6 @@ const char *GeniusSDKInitWithKey( const char *base_path, return sgns::GeniusNode::NewFromPrivateKey( config, eth_private_key, autodht, - process, baseport, is_full_node ); } ); @@ -242,7 +242,6 @@ const char *GeniusSDKInitWithKeyAndDevConfig( const char *base_path, const char *dev_config, const char *eth_private_key, bool autodht, - bool process, uint16_t baseport, bool is_full_node ) { @@ -272,7 +271,6 @@ const char *GeniusSDKInitWithKeyAndDevConfig( const char *base_path, GeniusNodeInstance = sgns::GeniusNode::NewFromPrivateKey( load_config_ret.value(), eth_private_key, autodht, - process, baseport, is_full_node ); ret_val.append( load_config_ret.value().BaseWritePath ); @@ -290,7 +288,7 @@ const char *GeniusSDKInitWithMnemonic( const char *base_path, return SDKInitHelper( base_path, [&]( const auto &config ) - { return sgns::GeniusNode::NewFromMnemonic( config, mnemonic, autodht, process, baseport, is_full_node ); } ); + { return sgns::GeniusNode::NewFromMnemonic( config, mnemonic, autodht, baseport, is_full_node ); } ); } const char *GeniusSDKInitMinimal( const char *base_path, const char *eth_private_key, uint16_t baseport ) @@ -875,3 +873,63 @@ GeniusProcessingStatusInfo GeniusSDKGetProcessingStatus() result.percentage = status_info.percentage; return result; } + +const char *GeniusSDKGetMyTaskIds( uint64_t limit, uint64_t offset ) +{ + if ( !GeniusNodeInstance ) + { + return nullptr; + } + + auto task_ids = GeniusNodeInstance->GetMyTaskIds( limit, offset ); + + if ( task_ids.empty() ) + { + char *ret = reinterpret_cast( malloc( 1 ) ); + ret[0] = '\0'; + return ret; + } + + // Calculate total size: each ID + '\n' separator, last entry gets '\0' instead + size_t total_size = 0; + for ( const auto &id : task_ids ) + { + total_size += id.size() + 1; // id + separator + } + + char *ret = reinterpret_cast( malloc( total_size ) ); + char *dest = ret; + for ( size_t i = 0; i < task_ids.size(); ++i ) + { + memcpy( dest, task_ids[i].data(), task_ids[i].size() ); + dest += task_ids[i].size(); + *dest++ = ( i + 1 < task_ids.size() ) ? '\n' : '\0'; + } + + return ret; +} + +GeniusArray GeniusSDKGetTaskResult( const char *task_id ) +{ + if ( !GeniusNodeInstance || task_id == nullptr ) + { + return { 0, nullptr }; + } + + auto result = GeniusNodeInstance->GetTaskResult( std::string( task_id ) ); + if ( !result.has_value() ) + { + return { 0, nullptr }; + } + + std::string serialized; + if ( !result.value().SerializeToString( &serialized ) ) + { + return { 0, nullptr }; + } + + uint8_t *buf = reinterpret_cast( malloc( serialized.size() ) ); + memcpy( buf, serialized.data(), serialized.size() ); + + return { serialized.size(), buf }; +} diff --git a/src/GeniusSDK.h b/src/GeniusSDK.h index c51d0cf..2619b99 100644 --- a/src/GeniusSDK.h +++ b/src/GeniusSDK.h @@ -526,6 +526,24 @@ GNUS_VISIBILITY_DEFAULT GeniusTransactionStatus_t GeniusSDKGetTransactionStatus( */ GNUS_VISIBILITY_DEFAULT GeniusProcessingStatusInfo GeniusSDKGetProcessingStatus(); +/** + * @brief Returns the task IDs of jobs submitted by the active account. + * @param[in] limit Maximum number of task IDs to return. + * @param[in] offset Number of task IDs to skip from the end of the list. + * @return A null-terminated string containing newline-separated task IDs, + * or null if the SDK is not initialized. Must be freed with GeniusSDKFree(). + */ +GNUS_VISIBILITY_DEFAULT const char *GeniusSDKGetMyTaskIds( uint64_t limit, uint64_t offset ); + +/** + * @brief Retrieves the completed result for a specific task. + * @param[in] task_id A null-terminated string representing the task ID (ipfs_block_id). + * @return A GeniusArray containing the serialized protobuf bytes of TaskResult, + * or {0, nullptr} if the task is not found or SDK is not initialized. + * On success, the ptr field must be freed with GeniusSDKFree(). + */ +GNUS_VISIBILITY_DEFAULT GeniusArray GeniusSDKGetTaskResult( const char *task_id ); + GNUS_EXPORT_END #endif