/******************************************************** * * * Copyright (C) Microsoft. All rights reserved. * * * ********************************************************/ // Sentient Client UGC API // // Include this to get access to all UGC related Sentient features #pragma once // Local headers #include "SenClientMarkers.h" #include "SenClientUGCLeaderboards.h" #include "SenClientUGCTypes.h" // Sentient headers #include "SenClientSys.h" #include "SenClientCulture.h" namespace Sentient { /********************************** ***** UGC Creation Functions ***** **********************************/ /// @brief Generate a unique ID that will be used to /// identify a given instance of UGC. This ID /// will is referenced by every other UGC function. /// /// @param[in] userIndex /// The index of the initiating user on the console. /// Note: This is NOT a XUID. /// /// @param[out] outResult /// The unique ID that has been generated and provisioned /// for an instance of UGC. /// /// @param[in] userCallback /// If this call returns a success code, /// the userCallback will be called at the end of the /// asynchronous process. /// /// @param[in] userCallbackData /// Data to be passed to the @a userCallback on completion. /// /// @return TBD /// /// @details All UGC functions require a uniquely provisioned UGC ID. /// /// @related All UGC related functions. HRESULT SenUGCCreatePublishingUGCID( int userIndex, SenUGCID *outResult, SenSysCompletedCallback userCallback, void *userCallbackData ); /// /// @brief Async output information for SenUGCUpload or Download callers /// /// @details Contains progress or retry information in addition to a cancellation token /// struct SenUGCProgressInfo { SenHandle out_taskHandle; /// token for canceling the upload process INT8 percentageComplete; /// 1-100, how much percent is complete of upload process for blob size_t bytesCompleted; /// how many bytes have been successfully transmitted for the task HRESULT lastStepResult; /// sentient client SDK HRESULT value int numRetries; /// does not reset between internal steps for a long-running task }; //************************************ // Method: SenUGCUpload // FullName: Sentient::SenUGCUpload // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenUGCID ugcID // Parameter: const SenUGCMetaData * metaData // Parameter: int nrMainDataBlobs // Parameter: const void * * mainDataBlobs // Parameter: const size_t * mainDataBlobSizes // Parameter: bool pushToFeed // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Upload the metadata, as well as one or more binary data blobs to the server. // There are multiple data blobs supported (the exact number is defined in // SenUGCMainData_NrBlobs). One use would be that a game may want store a // preview thumbnail that can be downloaded without having to download the // rest of the UGC. This could save bandwidth and make the game more responsive. // Note: data blob 0 should be the main level data blob, for the automatic // download counter to work. // The metadata will also have a data blob associated, but this should be // kept to a minimum, as UGC download menus will probably want to download // metadata for a lot of UGCs at once. // Note: if a level has been uploaded with main data before, and the creator // wants to just modify the metadata, they can upload the metadata with the // maindatablobs being NULL. // NOTE: for large items, use the SenUGCUploadMainData method with the SenUGCProgressInfo // signature so you can get the running progress and a cancellation token // to abort the upload (allowing UI for the user, etc) //************************************ HRESULT SenUGCUpload( int userIndex, SenUGCID ugcID, const SenUGCMetaData *metaData, int nrMainDataBlobs, const void **mainDataBlobs, const size_t *mainDataBlobSizes, SenSysCompletedCallback userCallback, void *userCallbackData ); //************************************ // Method: SenUGCUploadMetadata // FullName: Sentient::SenUGCUploadMetadata // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenUGCID ugcID // Parameter: const SenUGCMetaData * metaData // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Upload the metadata and one binary data blob to the server. // NOTE: data blob at index 0 should be the main level data blob, for the automatic // download counter to work. // The metadata will also have a data blob associated, but this should be // kept to a minimum, as UGC download menus will probably want to download // metadata for a lot of UGCs at once. // NOTE: If a creator uploads metadata again, it will overwrite the previous // stored blob with the new one. //************************************ HRESULT SenUGCUploadMetadata( int userIndex, SenUGCID ugcID, const SenUGCMetaData* metaData, SenSysCompletedCallback userCallback, void* userCallbackData); //************************************ // Method: SenUGCUploadMainData // FullName: Sentient::SenUGCUploadMainData // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenUGCID ugcID // Parameter: int mainDataBlobIndex // Parameter: const void * mainDataBlob // Parameter: const size_t mainDataBlobSize // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Parameter: SenUGCProcessInfo* out_ugcUploadInfo // Upload one binary data blob to the server. // This SenUGCUpload method with the SenUGCProcessInfo signature is so you // can get the progress percentage and a cancellation token, which can // be used to abort the upload. This is useful for large uploads where // you may want to allow the user to cancel. // NOTE: This call is asynchronous ONLY and will error for synchronous // attempts with a NULL param for userCallback. // There are multiple data blobs supported (the exact number is defined in // SenUGCMainData_NrBlobs) on subsequent calls. Slot zero is to be used by a // game to store a preview thumbnail, which can then be downloaded without // having to download the rest of the UGC. This could save bandwidth and // make the game more responsive. // NOTE: data blob at index 0 should be the main level data blob, for the automatic // download counter to work. // The metadata will also have a data blob associated, but this should be // kept to a minimum, as UGC download menus will probably want to download // metadata for a lot of UGCs at once. // NOTE: if a level has been uploaded with main data before, and the creator // wants to just modify the metadata, they can upload the metadata with the // main data blob being NULL. // NOTE: If a creator uploads a data blob again, it will overwrite the previous // stored blob with the new one. //************************************ HRESULT SenUGCUploadMainDataBlob( int userIndex, SenUGCID ugcID, int mainDataBlobIndex, const void* mainDataBlob, const size_t mainDataBlobSize, SenSysCompletedCallback userCallback, void* userCallbackData, SenUGCProgressInfo* out_progressInfo); //************************************ // Method: SenUGCDelete // FullName: Sentient::SenUGCDelete // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenUGCID ugcID // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Delete the UGC - only the user that created the UGC can delete it. //************************************ HRESULT SenUGCDelete( int userIndex, SenUGCID ugcID, SenSysCompletedCallback userCallback, void* userCallbackData ); /************************************* ***** UGC Consumption Functions ***** *************************************/ //************************************ // Method: SenUGCEnumerate // FullName: Sentient::SenUGCEnumerate // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenSysTitleID titleID // Parameter: SenUGCSortBy sortBy // Parameter: SenUGCType type // Parameter: SenUGCAuthorType authorType // Parameter: int nrAuthors // Parameter: const XUID * authorList // Parameter: SenUGCMetaDataFlags metaDataFlagFilter // Parameter: SenUGCPublishState minPublishStateFilter // Parameter: SenUGCPublishState maxPublishStateFilter // Parameter: SenSysDateTime newerThan // Parameter: SenUGCDescriptor descriptor // Parameter: int maxNrResults // Parameter: SenUGCSearchResult * outBuffer // Parameter: unsigned int * outNrResults // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Search the database for all the UGCs that match various search criteria. // outBuffer should be an preallocated array of [sizeof(SenUGCSearchResult)*maxNrResults] bytes. //************************************ HRESULT SenUGCEnumerate( int userIndex, SenSysTitleID titleID, SenUGCSortBy sortBy, SenUGCType type, SenUGCAuthorType authorType, int nrAuthors, const PlayerUID *authorList, SenUGCMetaDataFlags metaDataFlagFilter, SYSTEMTIME *newerThan, SenUGCDescriptor descriptor, int maxNrResults, SenUGCSearchResult *outBuffer, UINT *outNrResults, SenSysCompletedCallback userCallback, void* userCallbackData ); /// @brief public /// /// @param[in] userIndex /// @param[in] titleID /// @param[in] sortBy /// @param[in] type /// @param[in] authorType /// @param[in] nrAuthors /// @param[in] authorList /// @param[in] metaDataFlagFilter /// @param[in] newerThan /// @param[in] nrDescriptors /// @param[in] descriptors /// @param[in] maxNrResults /// @param[out] outBuffer /// @param[out] outNrResults /// @param[in] userCallback /// @param[in] userCallbackData /// /// @return Search the database for all the UGCs that match various search criteria. /// outBuffer should be an preallocated array of [sizeof(SenUGCSearchResult)*maxNrResults] bytes. /// /// @details Enumerate by name will perform a look based on a various search criteria. The Collection /// of descriptors will perform an equality lookup on Descriptor /// /// @related SenUGCEnumerate HRESULT SenUGCEnumerate( int userIndex, SenSysTitleID titleID, SenUGCSortBy sortBy, SenUGCType type, SenUGCAuthorType authorType, int nrAuthors, const PlayerUID *authorList, SenUGCMetaDataFlags metaDataFlagFilter, SYSTEMTIME *newerThan, int nrDescriptors, INT64 *descriptors, int maxNrResults, SenUGCSearchResult *outBuffer, UINT *outNrResults, SenSysCompletedCallback userCallback, void* userCallbackData ); /// @brief public /// /// @param[in] userIndex /// @param[in] titleID /// @param[in] sortBy /// @param[in] type /// @param[in] authorType /// @param[in] nrAuthors /// @param[in] authorList /// @param[in] metaDataFlagFilter /// @param[in] newerThan /// @param[in] nrDescriptors /// @param[in] descriptors /// @param[in] maxNrResults /// @param[out] outBuffer /// @param[out] outNrResults /// @param[in] userCallback /// @param[in] userCallbackData /// /// @return Search the database for all the UGCs that match various search criteria. /// outBuffer should be an preallocated array of [sizeof(SenUGCSearchResult)*maxNrResults] bytes. /// /// @details Enumerate by Descriptor using a Logical And against all submitted Descriptor values. /// The API filters the results on a specific UGC Type as well as an author /// list type. Author List type of Everyone is NOT supported. /// Note: The collection of descriptor bit masks is constrained to four. /// /// @related SenUGCEnumerate HRESULT SenUGCEnumerateByDescriptorWithLogicalAnd( int userIndex, SenSysTitleID titleID, SenUGCSortBy sortBy, SenUGCType type, SenUGCAuthorType authorType, int nrAuthors, const PlayerUID *authorList, SenUGCMetaDataFlags metaDataFlagFilter, SYSTEMTIME *newerThan, int nrDescriptors, INT64 *descriptors, int maxNrResults, SenUGCSearchResult *outBuffer, UINT *outNrResults, SenSysCompletedCallback userCallback, void* userCallbackData ); /// @brief public /// /// @param[in] userIndex /// @param[in] titleID /// @param[in] type /// @param[in] authorType /// @param[in] nrAuthors /// @param[in] authorList /// @param[in] name /// @param[in] maxNrResults /// @param[out] outBuffer /// @param[out] outNrResults /// @param[in] userCallback /// @param[in] userCallbackData /// /// @return Search the database for all the UGCs that match various search criteria. /// outBuffer should be an preallocated array of [sizeof(SenUGCSearchResult)*maxNrResults] bytes. /// /// @details Enumerate by name will perform a wild card lookup on UGC name. The lookup will return anything /// in the range of "%%". The API filters the results on a specific UGC Type as well as an author /// list type. Author List type of Everyone is NOT supported. /// /// @related SenUGCEnumerate __declspec(deprecated("Use SenUGCEnumerateByName() instead")) HRESULT SenUGCEnumerate( int userIndex, SenSysTitleID titleID, SenUGCType type, SenUGCAuthorType authorType, int nrAuthors, const PlayerUID *authorList, const wchar_t *name, int maxNrResults, SenUGCSearchResult *outBuffer, UINT *outNrResults, SenSysCompletedCallback userCallback, void* userCallbackData ); /// @brief public /// /// @param[in] userIndex /// @param[in] titleID /// @param[in] type /// @param[in] authorType /// @param[in] nrAuthors /// @param[in] authorList /// @param[in] name /// @param[in] performWildCardLookup /// @param[in] maxNrResults /// @param[out] outBuffer /// @param[out] outNrResults /// @param[in] userCallback /// @param[in] userCallbackData /// /// @return Search the database for all the UGCs that match various search criteria. /// outBuffer should be an preallocated array of [sizeof(SenUGCSearchResult)*maxNrResults] bytes. /// /// @details Enumerate by name will perform an exact or wild card string lookup on UGC name. The API filters the results /// on a specific UGC Type as well as an author list type. Author List type of Everyone is NOT supported. /// /// @related SenUGCEnumerate HRESULT SenUGCEnumerateByName( int userIndex, SenSysTitleID titleID, SenUGCType type, SenUGCAuthorType authorType, int nrAuthors, const PlayerUID *authorList, const wchar_t *name, bool performWildCardLookup, int maxNrResults, SenUGCSearchResult *outBuffer, UINT *outNrResults, SenSysCompletedCallback userCallback, void* userCallbackData ); //************************************ // Method: SenUGCDownloadMetaData // FullName: Sentient::SenUGCDownloadMetaData // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenSysTitleID titleID // Parameter: int nrUGCs // Parameter: const SenUGCID * ugcIDList // Parameter: SenUGCDownloadedMetaData2 * outBuffer // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Download the metadata for an array of UGCs // Note that the metadata structure is a superset of the uploaded metadata, // with various other information exposed. // outBuffer should be an preallocated array of [(sizeof(SenUGCDownloadedMetaData)+SenUGCMetaData::BlobSizeLimit)*nrUGCs] bytes. // This new signature is compatible with resubmission feature and 64-bit UGC Ids. //************************************ HRESULT SenUGCDownloadMetaData( int userIndex, SenSysTitleID titleID, int nrUGCs, const SenUGCID *ugcIDList, SenUGCDownloadedMetaData2 *out_metaData, size_t *out_metaDataCount, SenSysCompletedCallback userCallback, void *userCallbackData ); __declspec(deprecated("Use signature with SenUGCDownloadedMetaData2.")) HRESULT SenUGCDownloadMetaData( int userIndex, SenSysTitleID titleID, int nrUGCs, const SenUGCID *ugcIDList, SenUGCDownloadedMetaData *out_metaData, size_t *out_metaDataCount, SenSysCompletedCallback userCallback, void *userCallbackData ); //************************************ // Method: SenUGCDownloadMainDataBlob // FullName: Sentient::SenUGCDownloadMainDataBlob // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenUGCID ugcID // Parameter: int mainDataBlobID // Parameter: size_t bufferSize // Parameter: UINT blobVersion // Parameter: void * outBuffer // Parameter: size_t * outSize // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Download a single blob of UGC data // note that zero byte downloads will fail. // ID, blobVersion, and bufferSize should be coming // from SenUGCDownloadedMetaData. // outBuffer should be an preallocated array of bufferSize bytes. //************************************ HRESULT SenUGCDownloadMainDataBlob( int userIndex, SenSysTitleID titleID, SenUGCID ugcID, UINT mainDataBlobIndex, size_t bufferSize, UINT blobVersion, void *outBuffer, size_t *outSize, SenSysCompletedCallback userCallback, void *userCallbackData ); __declspec(deprecated("Use signature with blobVersion.")) HRESULT SenUGCDownloadMainDataBlob( int userIndex, SenSysTitleID titleID, SenUGCID ugcID, int mainDataBlobIndex, size_t bufferSize, void *outBuffer, size_t *outBytesReceived, SenSysCompletedCallback userCallback, void *userCallbackData ); //************************************ // Method: SenUGCDownloadMainDataBlob // FullName: Sentient::SenUGCDownloadMainDataBlob // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenUGCID ugcID // Parameter: int mainDataBlobID // Parameter: size_t bufferSize // Parameter: UINT blobVersion // Parameter: void * outBuffer // Parameter: size_t * outBytesReceived // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Download a single blob of UGC data // NOTE: zero byte downloads will fail. // ID, mainDataRevision and bufferSize should be coming from a // SenUGCDownloadedMetaData2 (where bufferSize comes from // SenUGCDownloadedMetaData2's BlobInfo[mainDataBlobID].Size). // outBuffer should be an preallocated array of bufferSize bytes. // This signature includes an out param to include the progress // percentage and cancellation token, etc to monitor and abort // long running downloads (can be wired up to UI for users). // BlobVersion is the version of the blob you want to download, // which is available on the metadata information for the // main data blobs (via DownloadMetaData). //************************************ HRESULT SenUGCDownloadMainDataBlob( int userIndex, SenSysTitleID titleID, SenUGCID ugcID, UINT mainDataBlobIndex, size_t bufferSize, UINT blobVersion, void *outBuffer, size_t *outBytesReceived, SenSysCompletedCallback userCallback, void *userCallbackData, SenUGCProgressInfo* out_progressInfo); __declspec(deprecated("Use signature with blobVersion.")) HRESULT SenUGCDownloadMainDataBlob( int userIndex, SenSysTitleID titleID, SenUGCID ugcID, int mainDataBlobIndex, size_t bufferSize, void *outBuffer, size_t *outBytesReceived, SenSysCompletedCallback userCallback, void *userCallbackData, SenUGCProgressInfo* out_progressInfo); /********************************************** ***** UGC Reviewing and Rating Functions ***** **********************************************/ //************************************ // Method: SenUGCSetReviewScore // FullName: Sentient::SenUGCSetReviewScore // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenUGCID ugcId // Parameter: SenUGCReviewScoreType type // Parameter: UINT score // Parameter: bool isFavorite // Parameter: SenSysCompletedCallback callback // Parameter: void * callbackData //************************************ HRESULT SenUGCSetReviewScore( int userIndex, SenUGCID ugcId, SenUGCReviewScoreType type, unsigned int score, bool isFavorite, SenSysCompletedCallback callback, void *callbackData ); //************************************ // Method: SenUGCGetReviewScore // FullName: Sentient::SenUGCGetReviewScore // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenUGCID ugcId // Parameter: SenUGCReviewScoreType type // Parameter: UINT * out_score // Parameter: SenSysCompletedCallback callback // Parameter: void * callbackData //************************************ HRESULT SenUGCGetReviewScore( int userIndex, SenUGCID ugcId, SenUGCReviewScoreType type, unsigned int *out_score, SenSysCompletedCallback callback, void *callbackData ); //************************************ // Method: SenUGCSetFavoriteFlag // FullName: Sentient::SenUGCSetFavoriteFlag // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenSysTitleID titleID // Parameter: SenUGCID ugcID // Parameter: bool isFavorite // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Users can flag the UGCs that they really like, which can be used for // the search results //************************************ HRESULT SenUGCSetFavoriteFlag( int userIndex, SenSysTitleID titleID, SenUGCID ugcID, BOOL isFavorite, SenSysCompletedCallback userCallback, void *userCallbackData ); //************************************ // Method: SenUGCGetFavoriteFlag // FullName: Sentient::SenUGCGetFavoriteFlag // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenSysTitleID titleID // Parameter: SenUGCID ugcID // Parameter: BOOL * outResult // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Users can flag the UGCs that they really like, which can be used for // the search results //************************************ HRESULT SenUGCGetFavoriteFlag( int userIndex, SenSysTitleID titleID, SenUGCID ugcID, BOOL *outResult, SenSysCompletedCallback userCallback, void *userCallbackData ); //************************************ // Method: SenUGCGetFriendFavoriteCount // FullName: Sentient::SenUGCGetFriendFavoriteCount // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenSysTitleID titleID // Parameter: SenUGCID ugcID // Parameter: int * outResult // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Find out how many friends of the user have flagged this UGC as // a favorite (inclusive the user's favorite flag also) //************************************ HRESULT SenUGCGetFriendFavoriteCount( int userIndex, SenSysTitleID titleID, SenUGCID ugcID, int *outResult, SenSysCompletedCallback userCallback, void *userCallbackData ); //************************************ // Method: SenUGCAddToCustomCounters // FullName: Sentient::SenUGCAddToCustomCounters // Access: public // Returns: HRESULT // Qualifier: // Parameter: int userIndex // Parameter: SenSysTitleID titleID // Parameter: SenUGCID ugcID // Parameter: INT64 customCounters[SenUGCDownloadedMetaData_NrCustomCounters] // Parameter: SenSysCompletedCallback userCallback // Parameter: void * userCallbackData // Users can add to a fixed number of global counters stored on the // servers, to count up a few basic stats per UGC (number of deaths, // number of enemies killed, total playtime etc.) //************************************ HRESULT SenUGCAddToCustomCounters( int userIndex, SenSysTitleID titleID, SenUGCID ugcID, INT64 customCounters[SenUGCDownloadedMetaData_NrCustomCounters], SenSysCompletedCallback userCallback, void* userCallbackData ); /// @brief API to flag a given piece of UGC as offensive. /// /// @param[in] userIndex /// The index of the initiating user on the console. /// Note: This is NOT a XUID. /// /// @param[in] ugcID /// The unique ID for an instance of UGC. /// /// @param[in] offensivenessFlag /// Offensive flag type. /// /// @param[in] reason /// Reason for marking a given piece of UGC as offensive. /// /// @param[in] userCallback /// If this call returns a success code, /// the userCallback will be called at the end of the /// asynchronous process. /// /// @param[in] userCallbackData /// Data to be passed to the @a userCallback on completion. /// /// @return Check SUCCEEDED( hresult ) or FAILED( hresult ) to determine success. /// Specific values include: /// /// @details Users can flag a level that they think is offensive. The goal is that /// the Sentient system will automatically be able to take down /// levels after enough people have flagged a UGC as bad. /// The number of votes to take something down will depend on the /// reliability of the reviewers (number of offensiveness flags vs number of /// downloads etc.) as well as the number of offensive uploads by the creator. /// This function is also used by moderators to confirm or deny something as /// being offensive. /// /// @related HRESULT SenUGCSetOffensivenessFlag( int userIndex, SenUGCID ugcID, SenUGCOffensivenessFlag offensivenessFlag, const wchar_t *reason, SenSysCompletedCallback userCallback, void *userCallbackData ); /// @brief This function will return whether or not a particular /// piece of UGC has been banned. /// /// @param[in] userIndex /// The index of the initiating user on the console. /// Note: This is NOT a XUID. /// /// @param[in] The unique ID for UGC. /// /// @param[in] True if content is banned (and should not be viewed by user). /// /// @param[in] userCallback /// If this call returns a success code, /// the userCallback will be called at the end of the /// asynchronous process. /// /// @param[in] userCallbackData /// Data to be passed to the @a userCallback on completion. /// /// @return Check SUCCEEDED( hresult ) or FAILED( hresult ) to determine success. /// Specific values include: /// /// @details Any piece of UGC can been banned by a moderator or /// moderation engine. This API allows clients to verify /// if a given piece of UGC has been banned. /// /// @related SenUGCCreatePublishingUGCID() /// @related SenUGCSetOffensivenessFlag() /// @related SenUGCPublish() HRESULT SenUGCIsBanned( int userIndex, SenUGCID ugcID, BOOL *out_result, SenSysCompletedCallback userCallback, void *userCallbackData ); /********************* ***** UGC Feeds ***** *********************/ /// @brief UGC Feed information /// /// @details When enumerating feeds, these are the available feeds that can be retrieved. /// struct SenUGCFeedInfo { SenUGCFeedType feedType; wchar_t Name[32]; wchar_t Description[128]; }; /// @brief Retrieves a specific feed based on feedtype. /// /// @param[in] userIndex /// The index of the initiating user on the console. /// Note: This is NOT a XUID. ///` /// @param[in] titleID /// /// @param[in] feedType /// Feed Type identifier for for the given feed being retrieved. /// /// @param[in] maxNumberOfFeedItems /// Used to indicate the number of items to be returned by @a out_feedInfo. /// If the actual number of items exceeds this, you will receive an error. /// /// @param[out] out_buffer /// Pointer to the collection of structures to fill with SenUGCFeedItem data. /// /// @param[out] out_buffersize /// The number of entries actually enumerated by the call. /// /// @param[in] userCallback /// If this call returns a success code, /// the userCallback will be called at the end of the /// asynchronous process. /// /// @param[in] userCallbackData /// Data to be passed to the @a userCallback on completion. /// /// @return Check SUCCEEDED( hresult ) or FAILED( hresult ) to determine success. /// Specific values include: /// E_POINTER: out_buffer or out_buffersize are null. /// /// @details /// /// @related SenUGCEnumerateFeeds() HRESULT SenUGCGetFeed( int userIndex, SenSysTitleID titleID, SenUGCFeedType feedType, size_t maxNumberOfFeedItems, SenUGCFeedItem *out_buffer, UINT *out_buffersize, SenSysCompletedCallback userCallback, void *userCallbackData ); /// @brief Retrieves a collection of feeds that are viewable by the /// current user. /// /// @param[in] userIndex /// The index of the initiating user on the console. /// Note: This is NOT a XUID. /// /// @param[in] culture /// This is the result of a call to SenCultureFind() or SenCultureGet*(). /// You may also pass NULL to use the culture set with SenCultureSetCurrent(). /// May be NULL for default culture. /// /// @param[in] maxResults /// Used to indicate the number of items to be returned by @a out_feedInfo. /// If the actual number of items exceeds this, you will receive an error. /// /// @param[out] out_feedInfo /// Pointer to a collection of structures to fill with SenUGCFeedInfo data. /// /// @param[out] out_resultCount /// The number of entries actually enumerated by the call. /// /// @param[in] userCallback /// If this call returns a success code, /// the userCallback will be called at the end of the /// asynchronous process. /// /// @param[in] userCallbackData /// Data to be passed to the @a userCallback on completion. /// /// @return Check SUCCEEDED( hresult ) or FAILED( hresult ) to determine success. /// Specific values include: /// E_POINTER: out_feedInfo or out_resultCount are null. /// /// @details /// /// @related SenUGCGetFeed() HRESULT SenUGCEnumerateFeeds( int userIndex, size_t maxResults, SenUGCFeedInfo *out_feedInfo, size_t *out_resultCount, SenSysCompletedCallback userCallback, void *userCallbackData); /// @brief API that publishes UGC and makes the content accessible /// to everyone on the Sentient service. /// /// @param[in] userIndex /// The index of the initiating user on the console. /// Note: This is NOT a XUID. /// /// @param[in] ugcID /// The unique ID for an instance of UGC. /// /// @param[in] leaderboardDefinition /// Optional parameter. Definition for a Leaderboard that /// will be created and associated to newly published UGC. /// /// @param[out] out_leaderboardId /// Created Leaderboard Id. Only returned to the client if /// a Leaderboards Definition is passed to the server. /// /// @param[in] userCallback /// If this call returns a success code, /// the userCallback will be called at the end of the /// asynchronous process. /// /// @return Check SUCCEEDED( hresult ) or FAILED( hresult ) to determine success. /// Specific values include: /// /// @details UGC is only accessible to the author until it has been published. /// The user making the call must be the author of the UGC item. /// The call will fail if this UGC item has previously been published. /// By supplying an optional Leaderboard definition a Leaderboard is automatically // allocated and associated with the UGC item. /// This is the preferred way of creating UGC Leaderboards. /// /// @related SenCreateLeaderboard() HRESULT SenUGCPublish( int userIndex, SenUGCID ugcID, const SenLeaderboardDefinition *leaderboardDefinition, SenLeaderboardId *out_leaderboardId, SenSysCompletedCallback userCallback, void *userCallbackData); /// @brief API that publishes a new version of a UGC item and makes the revised content accessible /// to everyone on the Sentient service. /// /// @param[in] userIndex /// The index of the initiating user on the console. /// Note: This is NOT a XUID. /// /// @param[in] ugcID /// The unique ID for an instance of UGC. /// /// @param[in] userCallback /// If this call returns a success code, /// the userCallback will be called at the end of the /// asynchronous process. /// /// @return Check SUCCEEDED( hresult ) or FAILED( hresult ) to determine success. /// Specific values include: /// /// @details New versions of UGC are only accessible to the author until it has been republished. /// The user making the call must be the author of the UGC item. /// /// @related SenUGCPublish() HRESULT SenUGCRepublish( int userIndex, SenUGCID ugcID, SenSysCompletedCallback userCallback, void* userCallbackData); } // namespace Sentient