Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 63 additions & 5 deletions src/GeniusSDK.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

#include <base/buffer.hpp>
#include <processing/processing_service.hpp>
#include <processing/proto/SGProcessing.pb.h>

namespace
{
Expand Down Expand Up @@ -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,
Expand All @@ -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 );
} );
Expand All @@ -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 )
{
Expand Down Expand Up @@ -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 );
Expand All @@ -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 )
Expand Down Expand Up @@ -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<char *>( 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<char *>( 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<uint8_t *>( malloc( serialized.size() ) );
memcpy( buf, serialized.data(), serialized.size() );

return { serialized.size(), buf };
}
18 changes: 18 additions & 0 deletions src/GeniusSDK.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading