コード例 #1
0
        public int GetHashCode(IJsonMember obj)
        {
            if (obj == null)
            {
                return(0);
            }

            unchecked
            {
                var hashCode = obj.Id?.GetHashCode() ?? 0;
                hashCode = (hashCode * 397) ^ (obj.AvatarHash?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ (obj.Bio?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ (obj.FullName?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ (obj.Initials?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ (obj.MemberType?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ obj.Status.GetHashCode();
                hashCode = (hashCode * 397) ^ (obj.Url?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ (obj.Username?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ obj.AvatarSource.GetHashCode();
                hashCode = (hashCode * 397) ^ obj.Confirmed.GetHashCode();
                hashCode = (hashCode * 397) ^ (obj.Email?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ (obj.GravatarHash?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ GetCollectionHashCode(obj.LoginTypes);
                hashCode = (hashCode * 397) ^ GetCollectionHashCode(obj.Trophies);
                hashCode = (hashCode * 397) ^ (obj.UploadedAvatarHash?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ GetCollectionHashCode(obj.OneTimeMessagesDismissed);
                hashCode = (hashCode * 397) ^ obj.Similarity.GetHashCode();
                hashCode = (hashCode * 397) ^ (obj.Prefs?.GetHashCode() ?? 0);
                return(hashCode);
            }
        }
コード例 #2
0
        private static IJsonMember FindElementInCollection(IJsonMember member, string indexOrKey)
        {
            var array = member as JsonArray;

            if (array != null)
            {
                int index;

                if (int.TryParse(indexOrKey, out index))
                {
                    return(array[index]);
                }
            }

            var dictionary = member as JsonObject;

            if (dictionary != null)
            {
                IJsonMember element;

                if (dictionary.TryGetValue(indexOrKey, out element))
                {
                    return(dictionary[indexOrKey]);
                }
            }

            return(null);
        }
コード例 #3
0
        public bool Equals(IJsonMember x, IJsonMember y)
        {
            if (x == null && y != null)
            {
                return(false);
            }
            if (x != null && y == null)
            {
                return(false);
            }
            if (x == null)
            {
                return(true);
            }

            return(x.AvatarHash == y.AvatarHash &&
                   x.AvatarSource == y.AvatarSource &&
                   x.Bio == y.Bio &&
                   x.Confirmed == y.Confirmed &&
                   x.Email == y.Email &&
                   x.FullName == y.FullName &&
                   x.GravatarHash == y.GravatarHash &&
                   x.Id == y.Id &&
                   x.Initials == y.Initials &&
                   (x.LoginTypes?.SequenceEqual(y.LoginTypes) ?? true) &&
                   x.MemberType == y.MemberType &&
                   (x.OneTimeMessagesDismissed?.SequenceEqual(y.OneTimeMessagesDismissed) ?? true) &&
                   Instance.Equals(x.Prefs, y.Prefs) &&
                   x.Similarity == y.Similarity &&
                   x.Status == y.Status &&
                   (x.Trophies?.SequenceEqual(y.Trophies) ?? true) &&
                   x.UploadedAvatarHash == y.UploadedAvatarHash &&
                   x.Url == y.Url &&
                   x.Username == y.Username);
        }
コード例 #4
0
        /// <summary>
        /// Writes member to Json text and returns it.
        /// </summary>
        /// <param name="member">The target member.</param>
        public string Write(IJsonMember member)
        {
            WriteMember(member);

            string result = m_builder.ToString();

            Reset();

            return(result);
        }
コード例 #5
0
        /// <summary>
        /// Writes member to Json text and returns it.
        /// </summary>
        /// <param name="member">The target member.</param>
        /// <param name="readable">If true, format to readable layout. Otherwise used compact layout. Default is false.</param>
        public static string Write(IJsonMember member, bool readable = false)
        {
            var    writer = new JsonWriter();
            string result = writer.Write(member);

            if (readable)
            {
                result = ToReadable(result);
            }

            return(result);
        }
コード例 #6
0
        public void FromJson(JsonValue json, JsonSerializer serializer)
        {
            if (json.Type != JsonValueType.Object)
            {
                return;
            }
            var obj = json.Object;

            Id            = obj.TryGetString("id");
            MemberCreator = obj.Deserialize <IJsonMember>(serializer, "idMemberCreator");
            Data          = obj.Deserialize <IJsonNotificationData>(serializer, "data");
            Unread        = obj.TryGetBoolean("unread");
            Type          = obj.Deserialize <NotificationType?>(serializer, "type");
            Date          = obj.Deserialize <DateTime?>(serializer, "date");
        }
コード例 #7
0
        internal static async Task <string> GetId(TrelloAuthorization auth, CancellationToken ct)
        {
            var endpoint = EndpointFactory.Build(EntityRequestType.Service_Read_Me);

            _myJson = await JsonRepository.Execute <IJsonMember>(auth, endpoint, ct);

            // If this object exists in the cache already as a regular Member, it needs to be replaced.
            var meAsMember = TrelloConfiguration.Cache.Find <Member>(_myJson.Id);

            if (meAsMember != null)
            {
                TrelloConfiguration.Cache.Remove(meAsMember);
            }

            return(_myJson.Id);
        }
コード例 #8
0
        private static string GetId()
        {
            var endpoint = EndpointFactory.Build(EntityRequestType.Service_Read_Me);

            _myJson = JsonRepository.Execute <IJsonMember>(TrelloAuthorization.Default, endpoint);

            // If this object exists in the cache already as a regular Member, it needs to be replaced.
            var meAsMember = TrelloConfiguration.Cache.Find <Member>(m => m.Id == _myJson.Id);

            if (meAsMember != null)
            {
                TrelloConfiguration.Cache.Remove(meAsMember);
            }

            return(_myJson.Id);
        }
コード例 #9
0
        /// <summary>
        /// Finds the value of member by specified path.
        /// <para>If member cannot be found or value cannot be converted to specified type, returns default value.</para>
        /// </summary>
        /// <typeparam name="T">The target type of value.</typeparam>
        /// <param name="member">The target member for search.</param>
        /// <param name="path">The path for search of member.</param>
        /// <param name="defaultValue">The default value, if find was failed.</param>
        public static T FindValue <T>(IJsonMember member, string path, T defaultValue = default(T))
        {
            var target = Find(member, path);

            if (target != null)
            {
                try
                {
                    return((T)Convert.ChangeType(target.GetValue(), typeof(T)));
                }
                catch
                {
                    return(defaultValue);
                }
            }

            return(defaultValue);
        }
コード例 #10
0
        public void FromJson(JsonValue json, JsonSerializer serializer)
        {
            if (json.Type != JsonValueType.Object)
            {
                return;
            }
            var obj = json.Object;

            Id            = obj.TryGetString("id");
            MemberCreator = obj.Deserialize <IJsonMember>(serializer, "idMemberCreator");
            Data          = obj.Deserialize <IJsonNotificationData>(serializer, "data");
            Unread        = obj.TryGetBoolean("unread");

            try
            {
                Type = obj.Deserialize <NotificationType?>(serializer, "type");
            }
            catch (TargetInvocationException tie)
            {
                bool shouldThrow = true;

                if (tie.InnerException != null && tie.InnerException is ArgumentException ae)
                {
                    if (!string.IsNullOrWhiteSpace(ae.Message) && ae.Message.StartsWith("Requested value '") && ae.Message.EndsWith("' was not found."))
                    {
                        // Error parsing notification type - default to Unknown
                        shouldThrow = false;
                        Type        = NotificationType.Unknown;
                    }
                }

                if (shouldThrow)
                {
                    throw;
                }
            }

            Date = obj.Deserialize <DateTime?>(serializer, "date");
        }
コード例 #11
0
        public void FromJson(JsonValue json, JsonSerializer serializer)
        {
            if (json.Type != JsonValueType.Object)
            {
                return;
            }
            var obj = json.Object;

            Id            = obj.TryGetString("id");
            MemberCreator = obj.Deserialize <IJsonMember>(serializer, "idMemberCreator");
            Data          = obj.Deserialize <IJsonNotificationData>(serializer, "data");
            Unread        = obj.TryGetBoolean("unread");
            Type          = obj.Deserialize <NotificationType?>(serializer, "type");
#if IOS
            var      dateString = obj.TryGetString("date");
            DateTime date;
            if (DateTime.TryParseExact(dateString, "yyyy-MM-ddThh:mm:ss.fffZ", CultureInfo.CurrentCulture, DateTimeStyles.None, out date))
            {
                Date = date.ToLocalTime();
            }
#else
            Date = obj.Deserialize <DateTime?>(serializer, "date");
#endif
        }
コード例 #12
0
        public static IJsonMember Find(IJsonMember member, string path)
        {
            var names  = path.Split('.');
            var target = member;

            for (int i = 0; i < names.Length; i++)
            {
                if (target.MemberType == JsonMemberType.Array || target.MemberType == JsonMemberType.Object)
                {
                    target = FindElementInCollection(target, names[i]);

                    if (target == null)
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }
            }

            return(target);
        }
コード例 #13
0
        private void WriteMember(IJsonMember member)
        {
            switch (member.MemberType)
            {
            case JsonMemberType.Value:
            {
                if (member is JsonNull)
                {
                    WriteNumber("null");
                }
                else
                {
                    var typeCode = Type.GetTypeCode(member.GetValueType());

                    switch (typeCode)
                    {
                    case TypeCode.Boolean:
                    {
                        var value = (JsonValue <bool>)member;

                        WriteNumber(value.Value ? bool.TrueString : bool.FalseString);
                        break;
                    }

                    case TypeCode.Byte:
                    case TypeCode.Decimal:
                    case TypeCode.Double:
                    case TypeCode.Int16:
                    case TypeCode.Int32:
                    case TypeCode.Int64:
                    case TypeCode.SByte:
                    case TypeCode.Single:
                    case TypeCode.UInt16:
                    case TypeCode.UInt32:
                    case TypeCode.UInt64:
                    {
                        string value = Convert.ToString(member.GetValue(), CultureInfo.InvariantCulture);

                        WriteNumber(value);
                        break;
                    }

                    case TypeCode.Char:
                    case TypeCode.String:
                    {
                        string value = Convert.ToString(member.GetValue(), CultureInfo.InvariantCulture);

                        WriteString(value);
                        break;
                    }

                    case TypeCode.DateTime:
                    case TypeCode.DBNull:
                    case TypeCode.Empty:
                    case TypeCode.Object:
                    {
                        Debug.LogWarningFormat("Unexpected member value type, member will be skipped: '{0}'.", member);
                        break;
                    }
                    }
                }
                break;
            }

            case JsonMemberType.Array:
            {
                WriteArray((JsonArray)member);
                break;
            }

            case JsonMemberType.Object:
            {
                WriteObject((JsonObject)member);
                break;
            }
            }
        }
コード例 #14
0
 private static MemberSearchResult GetResult(IJsonMember json, TrelloAuthorization auth)
 {
     return(new MemberSearchResult(json.GetFromCache <Member>(auth), json.Similarity));
 }
コード例 #15
0
 internal Member(IJsonMember json, TrelloAuthorization auth)
     : this(json.Id, false, auth)
 {
     _context.Merge(json);
 }
コード例 #16
0
 public JsonPair(string name, IJsonMember value)
 {
     this.Name  = name;
     this.Value = value;
 }