public static int ParseContinuationParameters(JToken jresult, IDictionary <string, object> queryParams, IDictionary <string, object> continuationParams) { var continuation = FindQueryContinuationParameterRoot(jresult); // No more results. if (continuation == null || continuation.Count == 0) { return(CONTINUATION_DONE); } var anyNewValue = false; continuationParams?.Clear(); foreach (var p in continuation.Properties()) { object parsed; if (p.Value is JValue value) { parsed = value.Value; } else { parsed = p.Value.ToString(Formatting.None); } if (!queryParams.TryGetValue(p.Name, out var existingValue) || !ValueEquals(existingValue, parsed)) { anyNewValue = true; } continuationParams?.Add(new KeyValuePair <string, object>(p.Name, parsed)); } return(anyNewValue ? CONTINUATION_AVAILABLE : CONTINUATION_LOOP); bool ValueEquals(object existing, object incoming) { if (Equals(existing, incoming)) { return(true); } if (existing is DateTime dt && incoming is string s) { if (MediaWikiHelper.TryParseDateTime(s, out var dt2)) { // We have called ToUniversalTime() in ToWikiStringValuePairs. return(dt.ToUniversalTime() == dt2.ToUniversalTime()); } } return(false); } }
static bool ValueEquals(object existing, object incoming) { if (Equals(existing, incoming)) { return(true); } if (existing is DateTime dt && incoming is string s) { if (MediaWikiHelper.TryParseDateTime(s, out var dt2)) { // We have called ToUniversalTime() in ToWikiStringValuePairs. return(dt.ToUniversalTime() == dt2.ToUniversalTime()); } } return(false); }