Esempio n. 1
0
 public object Encode()
 {
     return(new Dictionary <string, object> {
         { "__op", "Remove" },
         { "objects", ParseEncoder.Encode(valueList) }
     });
 }
Esempio n. 2
0
        public static Dictionary <string, object> Encode(ParseObjectData objectData)
        {
            if (objectData == null)
            {
                return(null);
            }
            Dictionary <string, object> dict = new Dictionary <string, object> {
                { "className", objectData.ClassName }
            };

            if (!string.IsNullOrEmpty(objectData.ObjectId))
            {
                dict["objectId"] = objectData.ObjectId;
            }
            if (objectData.CreatedAt != null)
            {
                dict["createdAt"] = objectData.CreatedAt.ToUniversalTime();
            }
            if (objectData.UpdatedAt != null)
            {
                dict["updatedAt"] = objectData.UpdatedAt.ToUniversalTime();
            }
            if (objectData.CustomPropertyDict != null)
            {
                foreach (KeyValuePair <string, object> kv in objectData.CustomPropertyDict)
                {
                    string key   = kv.Key;
                    object value = kv.Value;
                    dict[key] = ParseEncoder.Encode(value);
                }
            }
            return(dict);
        }
Esempio n. 3
0
 public object Encode()
 {
     return(new Dictionary <string, object> {
         { "__op", "AddUnique" },
         { "objects", ParseEncoder.Encode(values.ToList()) }
     });
 }
Esempio n. 4
0
 object IParseOperation.Encode()
 {
     return(new Dictionary <string, object> {
         { "__op", "Add" },
         { "objects", ParseEncoder.Encode(valueList) }
     });
 }
Esempio n. 5
0
 public Dictionary <string, object> Encode()
 {
     return(new Dictionary <string, object> {
         { key, new Dictionary <string, object> {
               { op, ParseEncoder.Encode(value) }
           } }
     });
 }
 public Dictionary <string, object> Encode()
 {
     return(new Dictionary <string, object> {
         { "$relatedTo", new Dictionary <string, object> {
               { "object", ParseEncoder.Encode(parent) },
               { "key", key }
           } }
     });
 }
Esempio n. 7
0
        public static async Task <object> RPC(string name, object parameters = null)
        {
            string path         = $"call/{name}";
            object encodeParams = ParseEncoder.Encode(parameters);
            Dictionary <string, object> response = await ParseClient.HttpClient.Post <Dictionary <string, object> >(path,
                                                                                                                    data : encodeParams);

            return(ParseDecoder.Decode(response["result"]));
        }
Esempio n. 8
0
        public static async Task <Dictionary <string, object> > Run(string name,
                                                                    Dictionary <string, object> parameters = null)
        {
            string path         = $"functions/{name}";
            object encodeParams = ParseEncoder.Encode(parameters);
            Dictionary <string, object> response = await ParseClient.HttpClient.Post <Dictionary <string, object> >(path,
                                                                                                                    data : encodeParams);

            return(response);
        }
 public Dictionary <string, object> Encode()
 {
     if (conditionList == null || conditionList.Count == 0)
     {
         return(null);
     }
     if (conditionList.Count == 1)
     {
         IParseQueryCondition cond = conditionList[0];
         return(cond.Encode());
     }
     return(new Dictionary <string, object> {
         { composition, ParseEncoder.Encode(conditionList) }
     });
 }
        static async Task SaveBatches(Stack <ParseBatch> batches)
        {
            while (batches.Count > 0)
            {
                ParseBatch         batch        = batches.Pop();
                List <ParseObject> dirtyObjects = batch.objects.Where(item => item.IsDirty)
                                                  .ToList();

                List <Dictionary <string, object> > requestList = dirtyObjects.Select(item => {
                    string path = item.ObjectId == null ?
                                  $"/parse/classes/{item.ClassName}" :
                                  $"/parse/classes/{item.ClassName}/{item.ClassName}";
                    string method = item.ObjectId == null ? "POST" : "PUT";
                    Dictionary <string, object> body = ParseEncoder.Encode(item.operationDict) as Dictionary <string, object>;
                    return(new Dictionary <string, object> {
                        { "path", path },
                        { "method", method },
                        { "body", body }
                    });
                }).ToList();

                Dictionary <string, object> data = new Dictionary <string, object> {
                    { "requests", ParseEncoder.Encode(requestList) }
                };

                List <Dictionary <string, object> > results = await ParseClient.HttpClient.Post <List <Dictionary <string, object> > >("batch", data : data);

                List <ParseObjectData> resultList = results.Select(item => {
                    if (item.TryGetValue("error", out object error))
                    {
                        Dictionary <string, object> err = error as Dictionary <string, object>;
                        int code       = (int)err["code"];
                        string message = (string)err["error"];
                        throw new ParseException(code, message as string);
                    }
                    return(ParseObjectData.Decode(item["success"] as IDictionary));
                }).ToList();

                for (int i = 0; i < dirtyObjects.Count; i++)
                {
                    ParseObject     obj     = dirtyObjects[i];
                    ParseObjectData objData = resultList[i];
                    obj.Merge(objData);
                }
            }
        }
        public static async Task <IEnumerable <ParseObject> > FetchAll(IEnumerable <ParseObject> objects)
        {
            if (objects == null || objects.Count() == 0)
            {
                throw new ArgumentNullException(nameof(objects));
            }

            IEnumerable <ParseObject>           uniqueObjects = objects.Where(item => item.ObjectId != null);
            List <Dictionary <string, object> > requestList   = uniqueObjects.Select(item => {
                string path = $"/parse/classes/{item.ClassName}/{item.ObjectId}";
                return(new Dictionary <string, object> {
                    { "path", path },
                    { "method", "GET" }
                });
            }).ToList();

            Dictionary <string, object> data = new Dictionary <string, object> {
                { "requests", ParseEncoder.Encode(requestList) }
            };
            List <Dictionary <string, object> > results = await ParseClient.HttpClient.Post <List <Dictionary <string, object> > >("batch",
                                                                                                                                   data : data);

            Dictionary <string, ParseObjectData> dict = new Dictionary <string, ParseObjectData>();

            foreach (Dictionary <string, object> item in results)
            {
                if (item.TryGetValue("error", out object error))
                {
                    int    code    = (int)error;
                    string message = item["error"] as string;
                    throw new ParseException(code, message);
                }
                Dictionary <string, object> d = item["success"] as Dictionary <string, object>;
                string objectId = d["objectId"] as string;
                dict[objectId] = ParseObjectData.Decode(d);
            }
            foreach (ParseObject obj in objects)
            {
                ParseObjectData objData = dict[obj.ObjectId];
                obj.Merge(objData);
            }
            return(objects);
        }
 public static async Task DeleteAll(List <ParseObject> objectList)
 {
     if (objectList == null || objectList.Count == 0)
     {
         throw new ArgumentNullException(nameof(objectList));
     }
     IEnumerable <ParseObject>           objects     = objectList.Where(item => item.ObjectId != null);
     HashSet <ParseObject>               objectSet   = new HashSet <ParseObject>(objects);
     List <Dictionary <string, object> > requestList = objectSet.Select(item => {
         string path = $"/parse/classes/{item.ClassName}/{item.ObjectId}";
         return(new Dictionary <string, object> {
             { "path", path },
             { "method", "DELETE" }
         });
     }).ToList();
     Dictionary <string, object> data = new Dictionary <string, object> {
         { "requests", ParseEncoder.Encode(requestList) }
     };
     await ParseClient.HttpClient.Post <List <object> >("batch", data : data);
 }
        public async Task <ParseObject> Save(bool fetchWhenSave = false, ParseQuery <ParseObject> query = null)
        {
            if (ParseBatch.HasCircleReference(this, new HashSet <ParseObject>()))
            {
                throw new ArgumentException("Found a circle dependency when save.");
            }

            Stack <ParseBatch> batches = ParseBatch.BatchObjects(new List <ParseObject> {
                this
            }, false);

            if (batches.Count > 0)
            {
                await SaveBatches(batches);
            }

            string path = ObjectId == null ? $"classes/{ClassName}" : $"classes/{ClassName}/{ObjectId}";
            Dictionary <string, object> queryParams = new Dictionary <string, object>();

            if (fetchWhenSave)
            {
                queryParams["fetchWhenSave"] = true;
            }
            if (query != null)
            {
                queryParams["where"] = query.BuildWhere();
            }
            Dictionary <string, object> response = ObjectId == null ?
                                                   await ParseClient.HttpClient.Post <Dictionary <string, object> >(path, data : ParseEncoder.Encode(operationDict) as Dictionary <string, object>, queryParams : queryParams) :
                                                   await ParseClient.HttpClient.Put <Dictionary <string, object> >(path, data : ParseEncoder.Encode(operationDict) as Dictionary <string, object>, queryParams : queryParams);

            ParseObjectData data = ParseObjectData.Decode(response);

            Merge(data);
            return(this);
        }
 public object Encode()
 {
     return(ParseEncoder.Encode(value));
 }