Exemple #1
0
        public async Task <GetPublishedFileDetailsResponse> GetPublishedFileDetailsAsync(IReadOnlyList <string> fileIds)
        {
            var parsedResponse = new GetPublishedFileDetailsResponse();

            if (fileIds.Count < 1)
            {
                return(parsedResponse);
            }
            if (this._cached)
            {
                this.CheckCache(ref this._publishedFileDetailsCached, this._publishedFileDetailsCacheFile);
                if (this._publishedFileDetailsCacheFile.Exists &&
                    (!this._publishedFileDetailsCacheFile.LastWriteTime.ExpiredSince(10)))
                {
                    foreach (var item in fileIds.Select(fileId => this._publishedFileDetailsCached.FirstOrDefault(x =>
                                                                                                                  $"{x.Response.PublishedFileId}" == fileId)).Where(item => item != null))
                    {
                        parsedResponse.Response.PublishedFileDetails.Add(item.Response);
                    }

                    if (parsedResponse.Response.PublishedFileDetails.Count >= fileIds.Count)
                    {
                        return(parsedResponse);
                    }
                }
            }

            var values = new Dictionary <string, string> {
                { "itemcount", fileIds.Count.ToString() }
            };

            for (var i = 0; i < fileIds.Count; i++)
            {
                values.Add($"publishedfileids[{i}]", fileIds[i]);
            }
            var content = new FormUrlEncodedContent(values);
            var url     = new Uri("https://api.steampowered.com/ISteamRemoteStorage/GetPublishedFileDetails/v1/");

            this.Log().Debug($"[Steam] POST to {url} with payload {content.ToJson(false)} and values {values.ToJson(false)}");
            var response = await this._httpClient.PostAsync(url, content).ConfigureAwait(false);

            var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            try
            {
                parsedResponse = JsonConvert.DeserializeObject <GetPublishedFileDetailsResponse>(responseString);
            }
            catch (Exception ex)
            {
                this.Log().Error(ex, $"[Steam] Could not deserialize response: {responseString}");
            }

            if (!this._cached)
            {
                return(parsedResponse);
            }
            foreach (var item in parsedResponse.Response.PublishedFileDetails)
            {
                this._publishedFileDetailsCached.RemoveAll(x => x.Response.PublishedFileId == item.PublishedFileId);
                this._publishedFileDetailsCached.Add(CachedResponse <PublishedFileDetail> .FromResponse(item));
            }

            File.WriteAllText(this._publishedFileDetailsCacheFile.FullName,
                              JsonConvert.SerializeObject(this._publishedFileDetailsCached));

            return(parsedResponse);
        }