// TODO make this share code with FeaturedWorkshopItems public static void GetWorkShopItem(ulong publishedFileId, WorkShopItemHandler handleItem) { PublishedFileId_t[] fileIds = new PublishedFileId_t[] { new PublishedFileId_t(publishedFileId) }; UGCQueryHandle_t queryHandle = SteamUGC.CreateQueryUGCDetailsRequest(fileIds, (uint)fileIds.Length); Steamworks.CallResult <Steamworks.SteamUGCQueryCompleted_t> .APIDispatchDelegate onQueryCompleted = (SteamUGCQueryCompleted_t p_callback, bool p_bIOFailure) => { OnQueryCompleted(p_callback, p_bIOFailure, handleItem, publishedFileId); }; SteamWorkshopMain.Instance.Execute <SteamUGCQueryCompleted_t>(SteamUGC.SendQueryUGCRequest(queryHandle), onQueryCompleted); }
private static void OnQueryCompleted(SteamUGCQueryCompleted_t p_callback, bool p_bIOFailure, WorkShopItemHandler handleItem, ulong requestedFileId) { if (p_bIOFailure || p_callback.m_eResult != EResult.k_EResultOK) { Util.LogError($"Failed to query workshop item {requestedFileId}. Result code: {p_callback.m_eResult}"); handleItem(Util.Maybe <WorkshopItem> .CreateEmpty()); return; } // There should just be 1..but doesn't hurt. for (uint i = 0; i < p_callback.m_unNumResultsReturned; i++) { SteamUGCDetails_t itemDetails; if (SteamUGC.GetQueryUGCResult(p_callback.m_handle, i, out itemDetails)) { if (itemDetails.m_eResult != Steamworks.EResult.k_EResultOK) { Util.LogError($"Something is wrong with workshop item {requestedFileId} - returning empty. Result code: {itemDetails.m_eResult}"); handleItem(Util.Maybe <WorkshopItem> .CreateEmpty()); } else { WorkshopItem item = SteamWorkshopMain.Instance.RegisterQueryResultItem(p_callback.m_handle, i, itemDetails); handleItem(Util.Maybe <WorkshopItem> .CreateWith(item)); } } else { Util.LogError($"Could not query details of workshop item {requestedFileId} - returning empty. Result code: {itemDetails.m_eResult}"); handleItem(Util.Maybe <WorkshopItem> .CreateEmpty()); } } }