Ejemplo n.º 1
0
        public void PutPageContent(string title, ContentPageMetadata meta, byte[] pageContent)
        {
            if (title == null || meta == null)
            {
                return;
            }

            var serializedMetadata = _dbInstance.Get(Encoding.UTF8.GetBytes($"{title}@Metadata"));

            if (serializedMetadata != null)
            {
                using (var metadataStream = new MemoryStream(serializedMetadata))
                {
                    var prevMetadata = (ContentPageMetadata)_formatter.Deserialize(metadataStream);
                    if (prevMetadata.ChangeSetId > meta.ChangeSetId)
                    {
                        // Update is not required
                        _logger.LogWarning($"Cache update request for {title} has rev {prevMetadata.ChangeSetId} > {meta.ChangeSetId}");
                        return;
                    }
                }
            }

            using (var metadataStream = new MemoryStream())
            {
                _formatter.Serialize(metadataStream, meta);
                _dbInstance.Put(Encoding.UTF8.GetBytes($"{title}@Metadata"), metadataStream.GetBuffer());
                _dbInstance.Put(Encoding.UTF8.GetBytes($"{title}@Content"), pageContent);
            }
        }
Ejemplo n.º 2
0
        public async Task <(ContentPageMetadata, byte[])> GetPageAsync(
            string title, ulong?revId = null)
        {
            var apiParams = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("action", "parse"),
                new KeyValuePair <string, string>("format", "json"),
                new KeyValuePair <string, string>("formatversion", "2")
            };

            if (revId != null)
            {
                apiParams.Add(new KeyValuePair <string, string>("oldid", revId.Value.ToString("G")));
            }
            else
            {
                apiParams.Add(new KeyValuePair <string, string>("page", title));
            }

            var metadata = new ContentPageMetadata();

            using (var httpHandler = new HttpClientHandler {
                CookieContainer = _cookieContainer, UseCookies = true
            })
                using (var httpClient = new HttpClient(httpHandler))
                    using (var apiContent = new FormUrlEncodedContent(apiParams))
                        using (var apiResult = await httpClient.PostAsync(_cred.Value.Endpoint, apiContent))
                        {
                            apiResult.EnsureSuccessStatusCode();
                            dynamic apiResponse = JsonConvert.DeserializeObject(await apiResult.Content.ReadAsStringAsync());

                            if (apiResponse.parse != null)
                            {
                                ulong  changesetId   = apiResponse.parse.revid;
                                ulong  pageId        = apiResponse.parse.pageid;
                                string parsedContent = apiResponse.parse.text;

                                metadata.ChangeSetId = changesetId;
                                metadata.PageId      = pageId;

                                return(metadata, (parsedContent != null) ? Encoding.UTF8.GetBytes(parsedContent) : null);
                            }
                        }

            return(null, null);
        }