diff --git a/Facepunch.Steamworks/Structs/UgcItem.cs b/Facepunch.Steamworks/Structs/UgcItem.cs index cb89ee8..58ac730 100644 --- a/Facepunch.Steamworks/Structs/UgcItem.cs +++ b/Facepunch.Steamworks/Structs/UgcItem.cs @@ -93,7 +93,17 @@ public Item( PublishedFileId id ) : this() /// public bool IsAcceptedForUse => details.AcceptedForUse; - public bool IsInstalled => (State & ItemState.Installed) == ItemState.Installed; + /// + /// The number of upvotes of this item + /// + public uint VotesUp => details.VotesUp; + + /// + /// The number of downvotes of this item + /// + public uint VotesDown => details.VotesDown; + + public bool IsInstalled => (State & ItemState.Installed) == ItemState.Installed; public bool IsDownloading => (State & ItemState.Downloading) == ItemState.Downloading; public bool IsDownloadPending => (State & ItemState.DownloadPending) == ItemState.DownloadPending; public bool IsSubscribed => (State & ItemState.Subscribed) == ItemState.Subscribed; @@ -122,7 +132,7 @@ public bool Download( bool highPriority = false ) return SteamUGC.Internal.DownloadItem( Id, highPriority ); } - private ItemState State => (ItemState) SteamUGC.Internal.GetItemState( Id ); + private ItemState State => (ItemState) SteamUGC.Internal.GetItemState( Id ); public static async Task GetAsync( PublishedFileId id, int maxageseconds = 60 * 30 ) { @@ -156,10 +166,28 @@ public bool HasTag( string find ) return Tags.Contains( find, StringComparer.OrdinalIgnoreCase ); } - /// - /// Allows the user to rate a workshop item up or down. - /// - public async Task Vote( bool up ) + /// + /// Allows the user to subscribe to this item + /// + public async Task Subscribe () + { + var result = await SteamUGC.Internal.SubscribeItem( _id ); + return result?.Result == Result.OK; + } + + /// + /// Allows the user to unsubscribe from this item + /// + public async Task Unsubscribe () + { + var result = await SteamUGC.Internal.UnsubscribeItem( _id ); + return result?.Result == Result.OK; + } + + /// + /// Allows the user to rate a workshop item up or down. + /// + public async Task Vote( bool up ) { var r = await SteamUGC.Internal.SetUserItemVote( Id, up ); return r?.Result == Result.OK; @@ -204,10 +232,10 @@ public async Task Vote( bool up ) public ulong NumSecondsPlayedDuringTimePeriod { get; internal set; } public ulong NumPlaytimeSessionsDuringTimePeriod { get; internal set; } - /// - /// The URL to the preview image for this item - /// - public string PreviewImageUrl { get; internal set; } + /// + /// The URL to the preview image for this item + /// + public string PreviewImageUrl { get; internal set; } /// /// Edit this item diff --git a/Facepunch.Steamworks/Structs/UgcQuery.cs b/Facepunch.Steamworks/Structs/UgcQuery.cs index 4302b55..e69ef1c 100644 --- a/Facepunch.Steamworks/Structs/UgcQuery.cs +++ b/Facepunch.Steamworks/Structs/UgcQuery.cs @@ -14,6 +14,7 @@ public struct Query UGCQuery queryType; AppId consumerApp; AppId creatorApp; + string searchText; public Query( UgcType type ) : this() { @@ -90,6 +91,8 @@ internal Query LimitUser( SteamId steamid ) public Query SortByVoteScore() { userSort = UserUGCListSortOrder.VoteScoreDesc; return this; } public Query SortByModeration() { userSort = UserUGCListSortOrder.ForModeration; return this; } + public Query WhereSearchText(string searchText) { this.searchText = searchText; return this; } + #endregion #region Files @@ -227,6 +230,11 @@ void ApplyConstraints( UGCQueryHandle_t handle ) { SteamUGC.Internal.SetRankedByTrendDays( handle, (uint)trendDays.Value ); } + + if ( !string.IsNullOrEmpty( searchText ) ) + { + SteamUGC.Internal.SetSearchText( handle, searchText ); + } } #endregion