コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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);
 }