internal static Item From(SteamNative.SteamUGCDetails_t details, Workshop workshop) { var item = new Item(details.PublishedFileId, workshop); item.Title = details.Title; item.Description = details.Description; item.OwnerId = details.SteamIDOwner; item.Tags = details.Tags.Split(','); item.Score = details.Score; item.VotesUp = details.VotesUp; item.VotesDown = details.VotesDown; item.Modified = new DateTime(details.TimeUpdated); item.Created = new DateTime(details.TimeCreated); item.UpdateState(); return(item); }
void ResultCallback(SteamNative.SteamUGCQueryCompleted_t data, bool bFailed) { if (bFailed) { throw new System.Exception("Steam UGC Query failed: " + data.Result.ToString()); } var gotFiles = 0; for (int i = 0; i < data.NumResultsReturned; i++) { if (_resultSkip > 0) { _resultSkip--; continue; } SteamNative.SteamUGCDetails_t details = new SteamNative.SteamUGCDetails_t(); if (!workshop.ugc.GetQueryUGCResult(data.Handle, (uint)i, ref details)) { continue; } // We already have this file, so skip it if (_results.Any(x => x.Id == details.PublishedFileId)) { continue; } var item = Item.From(details, workshop); item.SubscriptionCount = GetStat(data.Handle, i, ItemStatistic.NumSubscriptions); item.FavouriteCount = GetStat(data.Handle, i, ItemStatistic.NumFavorites); item.FollowerCount = GetStat(data.Handle, i, ItemStatistic.NumFollowers); item.WebsiteViews = GetStat(data.Handle, i, ItemStatistic.NumUniqueWebsiteViews); item.ReportScore = GetStat(data.Handle, i, ItemStatistic.ReportScore); string url = null; if (workshop.ugc.GetQueryUGCPreviewURL(data.Handle, (uint)i, out url)) { item.PreviewImageUrl = url; } _results.Add(item); _resultsRemain--; gotFiles++; if (_resultsRemain <= 0) { break; } } TotalResults = TotalResults > data.TotalMatchingResults ? TotalResults : (int)data.TotalMatchingResults; Callback.Dispose(); Callback = null; _resultPage++; if (_resultsRemain > 0 && gotFiles > 0) { RunInternal(); } else { Items = _results.ToArray(); if (OnResult != null) { OnResult(this); } } }