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); } }
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); }