private object GetObjects(Type modelType, string userFacebookId, global::Facebook.FacebookClient client) { var typeName = GetTypeName(modelType); if (String.IsNullOrEmpty(typeName)) { return(null); } var objects = facebookObjectStorageService.GetObjects(userFacebookId); if (objects == null || objects.Count == 0 /* || Some other time period has been met and we should sync again */) { return(LoadObjects(client, modelType, userFacebookId, "me/" + typeName + facebookService.GetFields(modelType))); } var castedObjects = (IList)Activator.CreateInstance(modelType); foreach (var obj in objects) { castedObjects.Add(obj); } return(castedObjects); }
private object GetUser(Type modelType, string facebookId, global::Facebook.FacebookClient client) { var user = facebookUserStorageService.GetUser(facebookId); //TODO: (ErikPo) Fill in the other half of this condition if (user == null /* or this is the first time the app has started */) { object userFields = client.Get("me" + (!String.IsNullOrEmpty(fields) ? "?fields=" + fields.Replace(" ", String.Empty) : facebookService.GetFields(modelType))); if (modelType == typeof(FacebookUser)) { return(new FacebookUser { Data = userFields }); } else if (modelType == typeof(object)) { return((dynamic)userFields); } user = (FacebookUser)Activator.CreateInstance(modelType); user.Data = userFields; var facebookFields = GetUserFields(modelType); PropertyInfo userProperty; string facebookFieldName; object fieldValue; foreach (var field in facebookFields) { if (field.Value != null && field.Value.Ignore) { continue; } userProperty = field.Key; facebookFieldName = field.Value != null ? field.Value.JsonField : String.Empty; if (!String.IsNullOrEmpty(facebookFieldName)) { fieldValue = GetFBFieldValue(userFields, facebookFieldName.Split('.')); } else { fieldValue = GetFBFieldValue(userFields, new[] { userProperty.Name }); } if (fieldValue != null) { userProperty.SetValue(user, fieldValue, null); } } facebookUserStorageService.AddUser(user); } return(user); }