steam ugc
[vg.git] / vg_steam_ugc.h
diff --git a/vg_steam_ugc.h b/vg_steam_ugc.h
new file mode 100644 (file)
index 0000000..5204192
--- /dev/null
@@ -0,0 +1,778 @@
+#ifndef VG_STEAM_UGC_H
+#define VG_STEAM_UGC_H
+
+#include "vg_steam.h"
+#include "vg_steam_remote_storage.h"
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+ ;
+ #pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+ #pragma pack( push, 8 )
+#endif 
+
+typedef void ISteamUGC;
+typedef u64 UGCQueryHandle_t;
+typedef u64 UGCUpdateHandle_t;
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+/* Matching UGC types for queries */
+typedef enum EUGCMatchingUGCType EUGCMatchingUGCType;
+enum EUGCMatchingUGCType{
+   /* both mtx items and ready-to-use items */
+   k_EUGCMatchingUGCType_Items            = 0,      
+   k_EUGCMatchingUGCType_Items_Mtx        = 1,
+   k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+   k_EUGCMatchingUGCType_Collections      = 3,
+   k_EUGCMatchingUGCType_Artwork          = 4,
+   k_EUGCMatchingUGCType_Videos           = 5,
+   k_EUGCMatchingUGCType_Screenshots      = 6,
+   
+   /* both web guides and integrated guides */
+   k_EUGCMatchingUGCType_AllGuides        = 7,
+   k_EUGCMatchingUGCType_WebGuides        = 8,
+   k_EUGCMatchingUGCType_IntegratedGuides = 9,
+   
+   /* ready-to-use items and integrated guides */
+   k_EUGCMatchingUGCType_UsableInGame     = 10,  
+   k_EUGCMatchingUGCType_ControllerBindings= 11,
+
+   /* game managed items (not managed by users) */
+   k_EUGCMatchingUGCType_GameManagedItems  = 12, 
+   
+   /* @note: will only be valid for CreateQueryUserUGCRequest requests */
+   k_EUGCMatchingUGCType_All               = ~0, 
+};
+
+/* 
+ * Different lists of published UGC for a user.
+ * If the current logged in user is different than the specified user, then some
+ * options may not be allowed.
+ */
+typedef enum EUserUGCList EUserUGCList;
+enum EUserUGCList{
+   k_EUserUGCList_Published,
+   k_EUserUGCList_VotedOn,
+   k_EUserUGCList_VotedUp,
+   k_EUserUGCList_VotedDown,
+   k_EUserUGCList_WillVoteLater,
+   k_EUserUGCList_Favorited,
+   k_EUserUGCList_Subscribed,
+   k_EUserUGCList_UsedOrPlayed,
+   k_EUserUGCList_Followed,
+};
+
+/* 
+ * Sort order for user published UGC lists (defaults to creation order 
+ * descending)
+ */
+typedef enum EUserUGCListSortOrder EUserUGCListSortOrder;
+enum EUserUGCListSortOrder{
+   k_EUserUGCListSortOrder_CreationOrderDesc,
+   k_EUserUGCListSortOrder_CreationOrderAsc,
+   k_EUserUGCListSortOrder_TitleAsc,
+   k_EUserUGCListSortOrder_LastUpdatedDesc,
+   k_EUserUGCListSortOrder_SubscriptionDateDesc,
+   k_EUserUGCListSortOrder_VoteScoreDesc,
+   k_EUserUGCListSortOrder_ForModeration,
+};
+
+/*
+ * Combination of sorting and filtering for queries across all UGC
+ */
+typedef enum EUGCQuery EUGCQuery;
+enum EUGCQuery{
+   k_EUGCQuery_RankedByVote                                 = 0,
+   k_EUGCQuery_RankedByPublicationDate                      = 1,
+   k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate        = 2,
+   k_EUGCQuery_RankedByTrend                                = 3,
+   k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate    = 4,
+   k_EUGCQuery_CreatedByFriendsRankedByPublicationDate      = 5,
+   k_EUGCQuery_RankedByNumTimesReported                     = 6,
+   k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate= 7,
+   k_EUGCQuery_NotYetRated                                  = 8,
+   k_EUGCQuery_RankedByTotalVotesAsc                        = 9,
+   k_EUGCQuery_RankedByVotesUp                              = 10,
+   k_EUGCQuery_RankedByTextSearch                           = 11,
+   k_EUGCQuery_RankedByTotalUniqueSubscriptions             = 12,
+   k_EUGCQuery_RankedByPlaytimeTrend                        = 13,
+   k_EUGCQuery_RankedByTotalPlaytime                        = 14,
+   k_EUGCQuery_RankedByAveragePlaytimeTrend                 = 15,
+   k_EUGCQuery_RankedByLifetimeAveragePlaytime              = 16,
+   k_EUGCQuery_RankedByPlaytimeSessionsTrend                = 17,
+   k_EUGCQuery_RankedByLifetimePlaytimeSessions             = 18,
+   k_EUGCQuery_RankedByLastUpdatedDate                      = 19,
+};
+
+typedef enum EItemUpdateStatus EItemUpdateStatus;
+enum EItemUpdateStatus{
+   /* The item update handle was invalid, job might be finished, listen too 
+    * SubmitItemUpdateResult_t */
+   k_EItemUpdateStatusInvalid         = 0, 
+
+   /* The item update is processing configuration data */
+   k_EItemUpdateStatusPreparingConfig = 1, 
+
+   /* The item update is reading and processing content files */
+   k_EItemUpdateStatusPreparingContent= 2, 
+
+   /* The item update is uploading content changes to Steam */
+   k_EItemUpdateStatusUploadingContent= 3, 
+
+   /* The item update is uploading new preview file image */
+   k_EItemUpdateStatusUploadingPreviewFile= 4, 
+   
+   /* The item update is committing all changes */
+   k_EItemUpdateStatusCommittingChanges   = 5  
+};
+
+typedef enum EItemState EItemState;
+enum EItemState{
+   /* item not tracked on client */
+   k_EItemStateNone           = 0,
+
+   /* current user is subscribed to this item. Not just cached. */
+   k_EItemStateSubscribed     = 1,
+
+   /* item was created with ISteamRemoteStorage */
+   k_EItemStateLegacyItem     = 2,
+   
+   /* item is installed and usable (but maybe out of date) */
+   k_EItemStateInstalled      = 4,
+   
+   /* items needs an update. Either because it's not installed yet or creator 
+    * updated content */
+   k_EItemStateNeedsUpdate    = 8,
+
+   /* item update is currently downloading */
+   k_EItemStateDownloading    = 16,
+   
+   /* DownloadItem() was called for this item, content isn't available until 
+    * DownloadItemResult_t is fired */
+   k_EItemStateDownloadPending= 32,   
+};
+
+typedef enum EItemStatistic EItemStatistic;
+enum EItemStatistic{
+   k_EItemStatistic_NumSubscriptions                  = 0,
+   k_EItemStatistic_NumFavorites                      = 1,
+   k_EItemStatistic_NumFollowers                      = 2,
+   k_EItemStatistic_NumUniqueSubscriptions            = 3,
+   k_EItemStatistic_NumUniqueFavorites                = 4,
+   k_EItemStatistic_NumUniqueFollowers                = 5,
+   k_EItemStatistic_NumUniqueWebsiteViews             = 6,
+   k_EItemStatistic_ReportScore                       = 7,
+   k_EItemStatistic_NumSecondsPlayed                  = 8,
+   k_EItemStatistic_NumPlaytimeSessions               = 9,
+   k_EItemStatistic_NumComments                       = 10,
+   k_EItemStatistic_NumSecondsPlayedDuringTimePeriod    = 11,
+   k_EItemStatistic_NumPlaytimeSessionsDuringTimePeriod = 12,
+};
+
+typedef enum EItemPreviewType EItemPreviewType;
+enum EItemPreviewType{
+   /* standard image file expected (e.g. jpg, png, gif, etc.) */
+   k_EItemPreviewType_Image = 0, 
+
+   k_EItemPreviewType_YouTubeVideo = 1, /* video id is stored */
+   k_EItemPreviewType_Sketchfab = 2, /* model id is stored */
+
+   /* 
+    * standard image file expected - cube map in the layout
+    * +---+---+-------+
+    * |   |Up |       |
+    * +---+---+---+---+
+    * | L | F | R | B |
+    * +---+---+---+---+
+    * |   |Dn |       |
+    * +---+---+---+---+
+    */
+   k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3,
+   
+   /* standard image file expected */
+   k_EItemPreviewType_EnvironmentMap_LatLong = 4,
+
+   /* you can specify your own types above this value */
+   k_EItemPreviewType_ReservedMax = 255,
+};
+
+const u32 kNumUGCResultsPerPage = 50;
+const u32 k_cchDeveloperMetadataMax = 5000;
+
+/* Details for a single published file/UGC */
+typedef struct SteamUGCDetails_t SteamUGCDetails_t;
+struct SteamUGCDetails_t{
+   PublishedFileId_t m_nPublishedFileId;
+   EResult m_eResult; /* The result of the operation. */
+   EWorkshopFileType m_eFileType; /* Type of the file */
+   AppId_t m_nCreatorAppID; /*ID of the app that created this file. */
+   AppId_t m_nConsumerAppID; /* ID of the app that will consume this file. */
+   char m_rgchTitle[k_cchPublishedDocumentTitleMax]; /* title of document */
+   
+   /* description of document */
+   char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; 
+   u64 m_ulSteamIDOwner; /* Steam ID of the user who created this content. */
+   u32 m_rtimeCreated; /* time when the published file was created */
+   u32 m_rtimeUpdated; /* time when the published file was last updated */
+   
+   /* time when the user added the published file to their list (not always 
+    * applicable) */
+   u32 m_rtimeAddedToUserList; 
+   ERemoteStoragePublishedFileVisibility m_eVisibility; /* visibility */
+   int m_bBanned; /* whether the file was banned */
+
+   /* developer has specifically flagged this item as accepted in the Workshop*/
+   int m_bAcceptedForUse; 
+
+   /* whether the list of tags was too long to be returned in the provided 
+    * buffer */
+   int m_bTagsTruncated;
+   
+   /* comma separated list of all tags associated with this file */
+   char m_rgchTags[k_cchTagListMax]; 
+   
+   /* file/url information */
+   UGCHandle_t m_hFile; /* The handle of the primary file */
+   UGCHandle_t m_hPreviewFile; /* The handle of the preview file */
+   
+   /* The cloud filename of the primary file */
+   char m_pchFileName[k_cchFilenameMax];
+   
+   /* Size of the primary file */
+   i32 m_nFileSize;
+   i32 m_nPreviewFileSize; /* Size of the preview file */
+   char m_rgchURL[k_cchPublishedFileURLMax]; /* URL (for a video or a website)*/
+
+   /* voting information */
+   u32 m_unVotesUp; /* number of votes up */
+   u32 m_unVotesDown; /* number of votes down */
+   float m_flScore; /* calculated score */
+
+   /* collection details */
+   u32 m_unNumChildren;                     
+};
+
+/* 
+ * Callback for querying UGC 
+ */
+typedef struct SteamUGCQueryCompleted_t SteamUGCQueryCompleted_t;
+struct SteamUGCQueryCompleted_t{
+   UGCQueryHandle_t m_handle;
+   EResult m_eResult;
+   u32 m_unNumResultsReturned;
+   u32 m_unTotalMatchingResults;
+   
+   /* indicates whether this data was retrieved from the local on-disk cache */
+   int m_bCachedData; 
+   
+   /* If a paging cursor was used, then this will be the next cursor to get the 
+    * next result set. */
+   char m_rgchNextCursor[k_cchPublishedFileURLMax]; 
+};
+enum { k_iSteamUGCQueryCompleted = k_iSteamUGCCallbacks + 31 };
+
+/* 
+ * Callback for requesting details on one piece of UGC 
+ */
+typedef struct SteamUGCRequestUGCDetailsResult_t 
+               SteamUGCRequestUGCDetailsResult_t;
+struct SteamUGCRequestUGCDetailsResult_t{
+   SteamUGCDetails_t m_details;
+   
+   /* indicates whether this data was retrieved from the local on-disk cache */
+   int m_bCachedData; 
+};
+enum { k_iSteamUGCRequestUGCDetailsResult = k_iSteamUGCCallbacks + 2 };
+
+
+/*
+ * Purpose: result for ISteamUGC::CreateItem() 
+ */
+typedef struct CreateItemResult_t CreateItemResult_t;
+struct CreateItemResult_t{
+   EResult m_eResult;
+   
+   /* new item got this UGC PublishFileID */
+   PublishedFileId_t m_nPublishedFileId; 
+   int m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+enum { k_iCreateItemResult = k_iSteamUGCCallbacks + 3 };
+
+
+/*
+ * Purpose: result for ISteamUGC::SubmitItemUpdate() 
+ */
+typedef struct SubmitItemUpdateResult_t SubmitItemUpdateResult_t;
+struct SubmitItemUpdateResult_t{
+   EResult m_eResult;
+   int m_bUserNeedsToAcceptWorkshopLegalAgreement;
+   PublishedFileId_t m_nPublishedFileId;
+};
+enum { k_iSubmitItemUpdateResult = k_iSteamUGCCallbacks + 4 };
+
+
+/*
+ * Purpose: a Workshop item has been installed or updated
+ */
+typedef struct ItemInstalled_t ItemInstalled_t;
+struct ItemInstalled_t{
+   AppId_t m_unAppID;
+   PublishedFileId_t m_nPublishedFileId;
+};
+enum { k_iItemInstalled = k_iSteamUGCCallbacks + 5 };
+
+
+/*
+ * Purpose: result of DownloadItem(), existing item files can be accessed again
+ */
+typedef struct DownloadItemResult_t DownloadItemResult_t;
+struct DownloadItemResult_t{
+   AppId_t m_unAppID;
+   PublishedFileId_t m_nPublishedFileId;
+   EResult m_eResult;
+};
+enum { k_iDownloadItemResult = k_iSteamUGCCallbacks + 6 };
+
+/*
+ * Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+ */
+typedef struct UserFavoriteItemsListChanged_t UserFavoriteItemsListChanged_t;
+struct UserFavoriteItemsListChanged_t{
+   PublishedFileId_t m_nPublishedFileId;
+   EResult m_eResult;
+   int m_bWasAddRequest;
+};
+enum { k_iUserFavoriteItemsListChanged = k_iSteamUGCCallbacks + 7 };
+
+/*
+ * Purpose: The result of a call to SetUserItemVote()
+ */
+typedef struct SetUserItemVoteResult_t SetUserItemVoteResult_t;
+struct SetUserItemVoteResult_t{
+   PublishedFileId_t m_nPublishedFileId;
+   EResult m_eResult;
+   int m_bVoteUp;
+};
+enum { k_iSetUserItemVoteResult = k_iSteamUGCCallbacks + 8 };
+
+/*
+ * Purpose: The result of a call to GetUserItemVote()
+ */
+typedef struct GetUserItemVoteResult_t GetUserItemVoteResult_t;
+struct GetUserItemVoteResult_t{
+   PublishedFileId_t m_nPublishedFileId;
+   EResult m_eResult;
+   int m_bVotedUp;
+   int m_bVotedDown;
+   int m_bVoteSkipped;
+};
+enum { k_iGetUserItemVoteResult = k_iSteamUGCCallbacks + 9 };
+
+/*
+ * Purpose: The result of a call to StartPlaytimeTracking()
+ */
+typedef struct StartPlaytimeTrackingResult_t StartPlaytimeTrackingResult_t;
+struct StartPlaytimeTrackingResult_t{
+   EResult m_eResult;
+};
+enum { k_iStartPlaytimeTrackingResult = k_iSteamUGCCallbacks + 10 };
+
+/*
+ * Purpose: The result of a call to StopPlaytimeTracking()
+ */
+typedef struct StopPlaytimeTrackingResult_t StopPlaytimeTrackingResult_t;
+struct StopPlaytimeTrackingResult_t{
+   EResult m_eResult;
+};
+enum { k_iStopPlaytimeTrackingResult = k_iSteamUGCCallbacks + 11 };
+
+/*
+ * Purpose: The result of a call to AddDependency
+ */
+typedef struct AddUGCDependencyResult_t AddUGCDependencyResult_t;
+struct AddUGCDependencyResult_t{
+   EResult m_eResult;
+   PublishedFileId_t m_nPublishedFileId;
+   PublishedFileId_t m_nChildPublishedFileId;
+};
+enum { k_iAddUGCDependecyResult = k_iSteamUGCCallbacks + 12 };
+
+/*
+ * Purpose: The result of a call to RemoveDependency
+ */
+typedef struct RemoveUGCDependencyResult_t RemoveUGCDependencyResult_t;
+struct RemoveUGCDependencyResult_t{
+   EResult m_eResult;
+   PublishedFileId_t m_nPublishedFileId;
+   PublishedFileId_t m_nChildPublishedFileId;
+};
+enum { k_iRemoveUGCDependecyResult = k_iSteamUGCCallbacks + 13 };
+
+
+/*
+ * Purpose: The result of a call to AddAppDependency
+ */
+typedef struct AddAppDependencyResult_t AddAppDependencyResult_t;
+struct AddAppDependencyResult_t{
+   EResult m_eResult;
+   PublishedFileId_t m_nPublishedFileId;
+   AppId_t m_nAppID;
+};
+enum { k_iAddAppDependencyResult = k_iSteamUGCCallbacks + 14 };
+
+/*
+ * Purpose: The result of a call to RemoveAppDependency
+ */
+typedef struct RemoveAppDependencyResult_t RemoveAppDependencyResult_t;
+struct RemoveAppDependencyResult_t{
+   EResult m_eResult;
+   PublishedFileId_t m_nPublishedFileId;
+   AppId_t m_nAppID;
+};
+enum { k_iRemoveAppDependencyResult = k_iSteamUGCCallbacks + 15 };
+
+/*
+ * Purpose: The result of a call to GetAppDependencies.  Callback may be called
+ *         multiple times until all app dependencies have been returned.
+ */
+typedef struct GetAppDependenciesResult_t GetAppDependenciesResult_t;
+struct GetAppDependenciesResult_t{
+   EResult m_eResult;
+   PublishedFileId_t m_nPublishedFileId;
+   AppId_t m_rgAppIDs[32];
+   u32 m_nNumAppDependencies;      // number returned in this struct
+   u32 m_nTotalNumAppDependencies;   // total found
+};
+enum { k_iGetAppDependeniesResult = k_iSteamUGCCallbacks + 16 };
+
+/*
+ * Purpose: The result of a call to DeleteItem
+ */
+typedef struct DeleteItemResult_t DeleteItemResult_t;
+struct DeleteItemResult_t{
+   EResult m_eResult;
+   PublishedFileId_t m_nPublishedFileId;
+};
+enum { k_iDeleteItemResult = k_iSteamUGCCallbacks + 17 };
+
+
+/*
+ * Purpose: signal that the list of subscribed items changed
+ */
+typedef struct UserSubscribedItemsListChanged_t 
+               UserSubscribedItemsListChanged_t;
+struct UserSubscribedItemsListChanged_t{
+   AppId_t m_nAppID;
+};
+enum { k_iUserSubscribedItemsListChanged = k_iSteamUGCCallbacks + 18 };
+
+
+/*
+ * Purpose: Status of the user's acceptable/rejection of the app's specific 
+ * Workshop EULA
+ */
+typedef struct WorkshopEULAStatus_t WorkshopEULAStatus_t;
+struct WorkshopEULAStatus_t{
+   EResult m_eResult;
+   AppId_t m_nAppID;
+   u32 m_unVersion;
+   RTime32 m_rtAction;
+   int m_bAccepted;
+   int m_bNeedsAction;
+};
+enum { k_iWorkshopEULAStatus = k_iSteamUGCCallbacks + 20 };
+
+#pragma pack( pop )
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION016"
+
+ISteamUGC *SteamAPI_SteamUGC_v016();
+ISteamUGC *SteamAPI_SteamUGC() 
+{ 
+   return SteamAPI_SteamUGC_v016(); 
+}
+ISteamUGC *SteamAPI_SteamGameServerUGC_v016();
+ISteamUGC *SteamAPI_SteamGameServerUGC() 
+{ 
+   return SteamAPI_SteamGameServerUGC_v016(); 
+}
+UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest( 
+      ISteamUGC *self, AccountID_t unAccountID, EUserUGCList eListType, 
+      EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, 
+      AppId_t nCreatorAppID, AppId_t nConsumerAppID, u32 unPage );
+
+UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequestPage( 
+      ISteamUGC *self, EUGCQuery eQueryType, 
+      EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, 
+      AppId_t nCreatorAppID, AppId_t nConsumerAppID, u32 unPage );
+
+UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequestCursor( 
+      ISteamUGC *self, EUGCQuery eQueryType, 
+      EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, 
+      AppId_t nCreatorAppID, AppId_t nConsumerAppID, const char * pchCursor );
+
+UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest( 
+      ISteamUGC *self, PublishedFileId_t *pvecPublishedFileID, 
+      u32 unNumPublishedFileIDs );
+
+SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest( ISteamUGC* self, 
+      UGCQueryHandle_t handle );
+
+int SteamAPI_ISteamUGC_GetQueryUGCResult( 
+      ISteamUGC *self, UGCQueryHandle_t handle, u32 index, 
+      SteamUGCDetails_t *pDetails );
+
+u32 SteamAPI_ISteamUGC_GetQueryUGCNumTags( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index );
+
+int SteamAPI_ISteamUGC_GetQueryUGCTag( 
+      ISteamUGC* self, UGCQueryHandle_t handle, u32 index, u32 indexTag, 
+      char * pchValue, u32 cchValueSize );
+
+int SteamAPI_ISteamUGC_GetQueryUGCTagDisplayName( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index, u32 indexTag, char * pchValue, 
+      u32 cchValueSize );
+
+int SteamAPI_ISteamUGC_GetQueryUGCPreviewURL( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index, char * pchURL, u32 cchURLSize );
+
+int SteamAPI_ISteamUGC_GetQueryUGCMetadata( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index, char * pchMetadata, 
+      u32 cchMetadatasize );
+
+int SteamAPI_ISteamUGC_GetQueryUGCChildren( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index, 
+      PublishedFileId_t *pvecPublishedFileID, u32 cMaxEntries );
+
+int SteamAPI_ISteamUGC_GetQueryUGCStatistic( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index, EItemStatistic eStatType, 
+      u64 *pStatValue );
+
+u32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index );
+
+int SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index, u32 previewIndex, 
+      char *pchURLOrVideoID, u32 cchURLSize, char *pchOriginalFileName, 
+      u32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType );
+
+u32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index );
+
+int SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index, u32 keyValueTagIndex, char *pchKey, 
+      u32 cchKeySize, char * pchValue, u32 cchValueSize );
+
+int SteamAPI_ISteamUGC_GetQueryFirstUGCKeyValueTag( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 index, const char *pchKey, char *pchValue, 
+      u32 cchValueSize );
+
+int SteamAPI_ISteamUGC_ReleaseQueryUGCRequest( ISteamUGC* self, 
+      UGCQueryHandle_t handle );
+
+int SteamAPI_ISteamUGC_AddRequiredTag( ISteamUGC* self, UGCQueryHandle_t handle,
+      const char * pTagName );
+
+int SteamAPI_ISteamUGC_AddRequiredTagGroup( ISteamUGC* self, 
+      UGCQueryHandle_t handle, const SteamParamStringArray_t * pTagGroups );
+
+int SteamAPI_ISteamUGC_AddExcludedTag( ISteamUGC* self, UGCQueryHandle_t handle,
+      const char * pTagName );
+
+int SteamAPI_ISteamUGC_SetReturnOnlyIDs( ISteamUGC* self, 
+      UGCQueryHandle_t handle, int bReturnOnlyIDs );
+
+int SteamAPI_ISteamUGC_SetReturnKeyValueTags( ISteamUGC* self, 
+      UGCQueryHandle_t handle, int bReturnKeyValueTags );
+
+int SteamAPI_ISteamUGC_SetReturnLongDescription( ISteamUGC* self, 
+      UGCQueryHandle_t handle, int bReturnLongDescription );
+
+int SteamAPI_ISteamUGC_SetReturnMetadata( ISteamUGC* self, 
+      UGCQueryHandle_t handle, int bReturnMetadata );
+
+int SteamAPI_ISteamUGC_SetReturnChildren( ISteamUGC* self, 
+      UGCQueryHandle_t handle, int bReturnChildren );
+
+int SteamAPI_ISteamUGC_SetReturnAdditionalPreviews( ISteamUGC* self, 
+      UGCQueryHandle_t handle, int bReturnAdditionalPreviews );
+
+int SteamAPI_ISteamUGC_SetReturnTotalOnly( ISteamUGC* self, 
+      UGCQueryHandle_t handle, int bReturnTotalOnly );
+
+int SteamAPI_ISteamUGC_SetReturnPlaytimeStats( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 unDays );
+
+int SteamAPI_ISteamUGC_SetLanguage( ISteamUGC* self, UGCQueryHandle_t handle, 
+      const char * pchLanguage );
+
+int SteamAPI_ISteamUGC_SetAllowCachedResponse( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 unMaxAgeSeconds );
+
+int SteamAPI_ISteamUGC_SetCloudFileNameFilter( ISteamUGC* self, 
+      UGCQueryHandle_t handle, const char * pMatchCloudFileName );
+
+int SteamAPI_ISteamUGC_SetMatchAnyTag( ISteamUGC* self, UGCQueryHandle_t handle,
+      int bMatchAnyTag );
+
+int SteamAPI_ISteamUGC_SetSearchText( ISteamUGC* self, UGCQueryHandle_t handle,
+      const char * pSearchText );
+
+int SteamAPI_ISteamUGC_SetRankedByTrendDays( ISteamUGC* self, 
+      UGCQueryHandle_t handle, u32 unDays );
+
+int SteamAPI_ISteamUGC_SetTimeCreatedDateRange( ISteamUGC* self, 
+      UGCQueryHandle_t handle, RTime32 rtStart, RTime32 rtEnd );
+
+int SteamAPI_ISteamUGC_SetTimeUpdatedDateRange( ISteamUGC* self, 
+      UGCQueryHandle_t handle, RTime32 rtStart, RTime32 rtEnd );
+
+int SteamAPI_ISteamUGC_AddRequiredKeyValueTag( ISteamUGC* self, 
+      UGCQueryHandle_t handle, const char * pKey, const char * pValue );
+
+SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID, u32 unMaxAgeSeconds );
+
+SteamAPICall_t SteamAPI_ISteamUGC_CreateItem( ISteamUGC* self, 
+      AppId_t nConsumerAppId, EWorkshopFileType eFileType );
+
+UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate( ISteamUGC* self, 
+      AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID );
+
+int SteamAPI_ISteamUGC_SetItemTitle( ISteamUGC* self, UGCUpdateHandle_t handle, 
+      const char * pchTitle );
+
+int SteamAPI_ISteamUGC_SetItemDescription( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pchDescription );
+
+int SteamAPI_ISteamUGC_SetItemUpdateLanguage( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pchLanguage );
+
+int SteamAPI_ISteamUGC_SetItemMetadata( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pchMetaData );
+
+int SteamAPI_ISteamUGC_SetItemVisibility( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, 
+      ERemoteStoragePublishedFileVisibility eVisibility );
+
+int SteamAPI_ISteamUGC_SetItemTags( ISteamUGC* self, 
+      UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags );
+
+int SteamAPI_ISteamUGC_SetItemContent( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pszContentFolder );
+
+int SteamAPI_ISteamUGC_SetItemPreview( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pszPreviewFile );
+
+int SteamAPI_ISteamUGC_SetAllowLegacyUpload( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, int bAllowLegacyUpload );
+
+int SteamAPI_ISteamUGC_RemoveAllItemKeyValueTags( ISteamUGC* self, 
+      UGCUpdateHandle_t handle );
+
+int SteamAPI_ISteamUGC_RemoveItemKeyValueTags( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pchKey );
+
+int SteamAPI_ISteamUGC_AddItemKeyValueTag( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue );
+
+int SteamAPI_ISteamUGC_AddItemPreviewFile( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pszPreviewFile, 
+      EItemPreviewType type );
+
+int SteamAPI_ISteamUGC_AddItemPreviewVideo( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pszVideoID );
+
+int SteamAPI_ISteamUGC_UpdateItemPreviewFile( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, u32 index, const char * pszPreviewFile );
+
+int SteamAPI_ISteamUGC_UpdateItemPreviewVideo( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, u32 index, const char * pszVideoID );
+
+int SteamAPI_ISteamUGC_RemoveItemPreview( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, u32 index );
+
+SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, const char * pchChangeNote );
+
+EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress( ISteamUGC* self, 
+      UGCUpdateHandle_t handle, u64 * punBytesProcessed, u64 * punBytesTotal );
+
+SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID, int bVoteUp );
+
+SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites( ISteamUGC* self, 
+      AppId_t nAppId, PublishedFileId_t nPublishedFileID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites( ISteamUGC* self,
+      AppId_t nAppId, PublishedFileId_t nPublishedFileID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem( ISteamUGC* self,
+      PublishedFileId_t nPublishedFileID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem( ISteamUGC* self,
+      PublishedFileId_t nPublishedFileID );
+
+u32 SteamAPI_ISteamUGC_GetNumSubscribedItems( ISteamUGC* self );
+
+u32 SteamAPI_ISteamUGC_GetSubscribedItems( ISteamUGC* self, 
+      PublishedFileId_t * pvecPublishedFileID, u32 cMaxEntries );
+
+u32 SteamAPI_ISteamUGC_GetItemState( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID );
+
+int SteamAPI_ISteamUGC_GetItemInstallInfo( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID, u64 * punSizeOnDisk, char * pchFolder, 
+      u32 cchFolderSize, u32 * punTimeStamp );
+
+int SteamAPI_ISteamUGC_GetItemDownloadInfo( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID, u64 * punBytesDownloaded, 
+      u64 * punBytesTotal );
+
+int SteamAPI_ISteamUGC_DownloadItem( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID, int bHighPriority );
+
+int SteamAPI_ISteamUGC_BInitWorkshopForGameServer( ISteamUGC* self, 
+      DepotId_t unWorkshopDepotID, const char * pszFolder );
+
+void SteamAPI_ISteamUGC_SuspendDownloads( ISteamUGC* self, int bSuspend );
+
+SteamAPICall_t SteamAPI_ISteamUGC_StartPlaytimeTracking( ISteamUGC* self, 
+      PublishedFileId_t * pvecPublishedFileID, u32 unNumPublishedFileIDs );
+
+SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTracking( ISteamUGC* self,
+      PublishedFileId_t * pvecPublishedFileID, u32 unNumPublishedFileIDs );
+
+SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems( 
+      ISteamUGC* self );
+
+SteamAPICall_t SteamAPI_ISteamUGC_AddDependency( ISteamUGC* self, 
+      PublishedFileId_t nParentPublishedFileID, 
+      PublishedFileId_t nChildPublishedFileID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_RemoveDependency( ISteamUGC* self, 
+      PublishedFileId_t nParentPublishedFileID, 
+      PublishedFileId_t nChildPublishedFileID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_AddAppDependency( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID, AppId_t nAppID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_RemoveAppDependency( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID, AppId_t nAppID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_GetAppDependencies( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID );
+
+SteamAPICall_t SteamAPI_ISteamUGC_DeleteItem( ISteamUGC* self, 
+      PublishedFileId_t nPublishedFileID );
+
+int SteamAPI_ISteamUGC_ShowWorkshopEULA( ISteamUGC* self );
+
+SteamAPICall_t SteamAPI_ISteamUGC_GetWorkshopEULAStatus( ISteamUGC* self );
+
+#endif /* VG_STEAM_UGC_H */