コード例 #1
0
        private void IgnoreUnignoreItem(bool ignore, string type, long ownerId, long itemId, Action <BackendResult <bool, ResultCode> > callback)
        {
            Dictionary <string, string> dictionary = new Dictionary <string, string>();
            string index1 = "type";
            string str1   = type;

            dictionary[index1] = str1;
            string index2 = "owner_id";
            string str2   = ownerId.ToString();

            dictionary[index2] = str2;
            string index3 = "item_id";
            string str3   = itemId.ToString();

            dictionary[index3] = str3;
            Dictionary <string, string> parameters = dictionary;

            VKRequestsDispatcher.DispatchRequestToVK <bool>(ignore ? "newsfeed.ignoreItem" : "newsfeed.unignoreItem", parameters, callback, (Func <string, bool>)(jsonStr =>
            {
                VKRequestsDispatcher.GenericRoot <int> genericRoot = JsonConvert.DeserializeObject <VKRequestsDispatcher.GenericRoot <int> >(jsonStr);
                if (genericRoot == null)
                {
                    return(false);
                }
                return(genericRoot.response == 1);
            }), false, true, new CancellationToken?(), null);
        }
コード例 #2
0
        public void GetProfileInfo(long userId, Action <BackendResult <UserData, ResultCode> > callback)
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();
            string index1 = "userId";
            string str1   = userId.ToString();

            parameters[index1] = str1;
            string index2 = "func_v";
            string str2   = "3";

            parameters[index2] = str2;
            VKRequestsDispatcher.DispatchRequestToVK <UserData>("execute.getProfileInfo", parameters, callback, (Func <string, UserData>)(jsonStr =>
            {
                jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "relatives", false);
                jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "wallData", true);
                jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "Groups", false);
                jsonStr = VKRequestsDispatcher.FixArrayToObject(jsonStr, "personal");
                jsonStr = VKRequestsDispatcher.FixArrayToObject(jsonStr, "occupation");
                jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "photos", true);
                jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "subscriptions", true);
                jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "gifts", true);
                int resultCount;
                jsonStr = VKRequestsDispatcher.GetArrayCountAndRemove(jsonStr, "wall", out resultCount);
                VKRequestsDispatcher.GenericRoot <UserData> genericRoot = JsonConvert.DeserializeObject <VKRequestsDispatcher.GenericRoot <UserData> >(jsonStr);
                if (genericRoot.response.user.counters.docs == 0)
                {
                    genericRoot.response.user.counters.docs = genericRoot.response.docsCount;
                }
                return(genericRoot.response);
            }), false, true, new CancellationToken?(), null);
        }
コード例 #3
0
        public void GetProfileInfo(long userId, Action <BackendResult <UserData, ResultCode> > callback)
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            /*
             * parameters["userId"] = userId.ToString();
             * parameters["func_v"] = "3";
             * VKRequestsDispatcher.DispatchRequestToVK<UserData>("execute.getProfileInfo", parameters, callback, (Func<string, UserData>)(jsonStr =>
             * {
             *  jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "relatives", false);
             *  jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "wallData", true);
             *  jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "Groups", false);
             *  jsonStr = VKRequestsDispatcher.FixArrayToObject(jsonStr, "personal");
             *  jsonStr = VKRequestsDispatcher.FixArrayToObject(jsonStr, "occupation");
             *  jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "photos", true);
             *  jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "subscriptions", true);
             *  jsonStr = VKRequestsDispatcher.FixFalseArray(jsonStr, "gifts", true);
             *  int resultCount;
             *  jsonStr = VKRequestsDispatcher.GetArrayCountAndRemove(jsonStr, "wall", out resultCount);
             *  VKRequestsDispatcher.GenericRoot<UserData> genericRoot = JsonConvert.DeserializeObject<VKRequestsDispatcher.GenericRoot<UserData>>(jsonStr);
             *  if (genericRoot.response.user.counters.docs == 0)
             *      genericRoot.response.user.counters.docs = genericRoot.response.docsCount;
             *  return genericRoot.response;
             * }), false, true, new CancellationToken?(), null);*/
            parameters["user_id"]     = userId.ToString();
            parameters["func_v"]      = "2";
            parameters["photo_count"] = "25";
            parameters["gift_count"]  = "25";
            parameters["photo_sizes"] = "1";
            parameters["skip_hidden"] = "1";

            Action <BackendResult <User, ResultCode> > act = (ud) =>
            {
                BackendResult <UserData, ResultCode> res = new BackendResult <UserData, ResultCode>();
                res.ResultData        = new UserData();
                res.ResultData.user   = ud.ResultData;
                res.ResultData.gifts  = ud.ResultData.gifts;
                res.ResultData.photos = ud.ResultData.photos;
                res.ResultCode        = ResultCode.Succeeded;
                callback(res);
            };

            VKRequestsDispatcher.DispatchRequestToVK <User>("execute.getFullProfileNewNew", parameters, act, (Func <string, User>)(jsonStr =>
            {
                //"status":{"text":"На пути достижения цели..."}
                Regex r     = new Regex(".+(\"status\":{\"text\":\"(.*?)\"})");
                Match m     = r.Match(jsonStr);
                string str1 = m.Groups[1].Value;
                string str2 = m.Groups[2].Value;
                jsonStr     = jsonStr.Replace(str1, "\"status\":\"" + str2 + "\"");

                VKRequestsDispatcher.GenericRoot <User> genericRoot = JsonConvert.DeserializeObject <VKRequestsDispatcher.GenericRoot <User> >(jsonStr);
                return(genericRoot.response);
            }), false, true, new CancellationToken?(), null);
        }
コード例 #4
0
        public void AddList(string name, Action <BackendResult <ResponseWithId, ResultCode> > callback)
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters["name"] = name;
            VKRequestsDispatcher.DispatchRequestToVK <ResponseWithId>("friends.addList", parameters, callback, (Func <string, ResponseWithId>)(jsonStr =>
            {
                VKRequestsDispatcher.GenericRoot <FriendsList> genericRoot = JsonConvert.DeserializeObject <VKRequestsDispatcher.GenericRoot <FriendsList> >(jsonStr);
                return(new ResponseWithId()
                {
                    response = genericRoot.response.lid
                });
            }), false, true, new CancellationToken?(), null);
        }
コード例 #5
0
        public void Unsubscribe(string type, long ownerId, long itemId, Action <BackendResult <bool, ResultCode> > callback)
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters["type"]     = type;
            parameters["owner_id"] = ownerId.ToString();
            parameters["item_id"]  = itemId.ToString();
            VKRequestsDispatcher.DispatchRequestToVK <bool>("newsfeed.unsubscribe", parameters, callback, (Func <string, bool>)(jsonStr =>
            {
                VKRequestsDispatcher.GenericRoot <int> genericRoot = JsonConvert.DeserializeObject <VKRequestsDispatcher.GenericRoot <int> >(jsonStr);
                if (genericRoot == null)
                {
                    return(false);
                }
                return(genericRoot.response == 1);
            }), false, true, new CancellationToken?(), null);
        }
コード例 #6
0
ファイル: WallService.cs プロジェクト: Makzz90/VKClient_re
        public void GetWallPostByIdWithComments(long postId, long ownerId, int offset, int countToRead, int knownTotalCount, bool needWallPost, Action <BackendResult <GetWallPostResponseData, ResultCode> > callback, long pollId = 0, long pollOwnerId = 0, LikeObjectType likeObjType = LikeObjectType.post)
        {
            long userId = VKRequestsDispatcher.AuthData.user_id;

            if (knownTotalCount != -1 && offset + countToRead > knownTotalCount)
            {
                countToRead = knownTotalCount - offset;
            }
            string str1 = (!needWallPost ? "var likesAll = API.likes.getList({{\"item_id\":{0}, \"owner_id\":{1}, \"count\":20, type:\"{8}\"}});" : " var wallPost = API.wall.getById({{\"posts\":\"{1}_{0}\"}});\r\nvar likesAll = API.likes.getList({{\"item_id\":{0}, \"owner_id\":{1}, \"count\":20, type:wallPost[0].post_type}});" + Environment.NewLine) + "\r\n\r\n\r\n\r\nvar offset = {2};\r\n\r\n\r\nvar comments = API.wall.getComments({{\"post_id\":\"{0}\", \"owner_id\":\"{1}\", \"offset\":offset, \"count\":\"{3}\", \"need_likes\":\"1\", \"sort\":\"desc\", \"preview_length\":\"0\", \"allow_group_comments\":1}});\r\n\r\nvar datUsersNames = [email protected]_to_user + [email protected]_id;\r\nvar users2 = API.users.get({{\"user_ids\":datUsersNames, \"fields\":\"first_name_dat,last_name_dat\"}});\r\n\r\n\r\n\r\nvar userOrGroupIds = likesAll.items;\r\n";

            if (needWallPost)
            {
                str1 += "userOrGroupIds = userOrGroupIds + [email protected]_id + [email protected]_id + [email protected]_id + wallPost[0][email protected]_id + wallPost[0][email protected]_id;\r\n";
            }
            string str2 = str1 + "userOrGroupIds = userOrGroupIds + [email protected]_id;\r\n\r\n\r\nvar userIds = [];\r\nvar groupIds = [];\r\n\r\nvar i = 0;\r\n\r\nvar length = userOrGroupIds.length;\r\n\r\nwhile (i < length)\r\n{{\r\n    var id = parseInt(userOrGroupIds[i]);\r\n    \r\n    if (id > 0)\r\n    {{\r\n       if (userIds.length > 0)\r\n       {{\r\n          userIds = userIds + \",\";\r\n       }}\r\n       userIds = userIds + id;\r\n    }}\r\n    else if (id < 0)\r\n    {{\r\n        id = -id;\r\n        if (groupIds.length > 0)\r\n        {{\r\n            groupIds = groupIds + \",\";\r\n        }}\r\n        groupIds = groupIds + id;\r\n    }}\r\n     \r\n    i = i + 1;\r\n}}\r\n\r\nif ({1} < 0)\r\n{{\r\n    if (groupIds.length > 0) groupIds = groupIds + \",\";\r\n    groupIds = groupIds + ({1} * -1);\r\n}}\r\n\r\nvar users  = API.users.get({{\"user_ids\":userIds, \"fields\":\"sex,photo_max,online,online_mobile\" }});\r\nvar groups = API.groups.getById({{\"group_ids\":groupIds}});";
            string str3 = string.Format(pollId == 0L ? (!needWallPost ? str2 + "return {{\"Users\": users, \"Groups\":groups, \"LikesAll\":likesAll, \"comments\": comments, \"Users2\": users2 }};" : str2 + "return {{\"Users\": users, \"Groups\":groups, \"LikesAll\":likesAll, \"WallPost\":wallPost[0], \"comments\": comments, \"Users2\": users2 }};") : (!needWallPost ? str2 + "\r\nvar poll= API.polls.getById({{\"owner_id\":{7}, \"poll_id\":{6}}});   \r\nreturn {{\"Users\": users, \"Groups\":groups, \"LikesAll\":likesAll, \"comments\": comments, \"Users2\": users2, \"Poll\":poll }};" : str2 + "\r\nvar poll= API.polls.getById({{\"owner_id\":{7}, \"poll_id\":{6}}});   \r\nreturn {{\"Users\": users, \"Groups\":groups, \"LikesAll\":likesAll, \"WallPost\":wallPost[0], \"comments\": comments, \"Users2\": users2, \"Poll\":poll }};"), postId, ownerId, offset, countToRead, knownTotalCount, userId, pollId, pollOwnerId, likeObjType);
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters["code"] = str3;
            VKRequestsDispatcher.DispatchRequestToVK <GetWallPostResponseData>("execute", parameters, callback, (Func <string, GetWallPostResponseData>)(jsonStr =>
            {
                VKRequestsDispatcher.GenericRoot <GetWallPostResponseData> genericRoot = JsonConvert.DeserializeObject <VKRequestsDispatcher.GenericRoot <GetWallPostResponseData> >(VKRequestsDispatcher.FixFalseArray(VKRequestsDispatcher.FixFalseArray(VKRequestsDispatcher.FixFalseArray(VKRequestsDispatcher.FixFalseArray(VKRequestsDispatcher.FixFalseArray(VKRequestsDispatcher.FixFalseArray(jsonStr, "Users", false), "Users2", false), "Groups", false), "Poll", true), "LikesAll", true), "comments", true));
                if (genericRoot.response.LikesAll.items != null)
                {
                    genericRoot.response.LikesAll.users = new List <UserLike>(genericRoot.response.LikesAll.items.Select <long, UserLike>((Func <long, UserLike>)(it => new UserLike()
                    {
                        uid = it
                    })));
                }
                genericRoot.response.Users.Add(AppGlobalStateManager.Current.GlobalState.LoggedInUser);
                genericRoot.response.Comments.Reverse();
                GroupsService.Current.AddCachedGroups((IEnumerable <Group>)genericRoot.response.Groups);
                if (countToRead == 0)
                {
                    genericRoot.response.Comments.Clear();
                }
                if (genericRoot.response.WallPost == null)
                {
                    genericRoot.response.WallPost = new WallPost();
                }
                return(genericRoot.response);
            }), false, true, new CancellationToken?(), null);
        }
コード例 #7
0
 private static void DoDispatch <R>(string baseUrl, string methodName, Dictionary <string, string> parameters, Action <BackendResult <R, ResultCode> > callback, Func <string, R> customDeserializationFunc = null, bool lowPriority = false, bool pageDataRequest = true, CancellationToken?cancellationToken = null, Action confirmationRequiredHandler = null)
 {
     parameters["v"] = VKConstants.API_VERSION;
     if (!string.IsNullOrEmpty(VKRequestsDispatcher._autorizationData != null ? VKRequestsDispatcher._autorizationData.access_token : null))
     {
         parameters["access_token"] = VKRequestsDispatcher._autorizationData.access_token;
     }
     VKRequestsDispatcher.AddLangParameter(parameters);
     if (!string.IsNullOrEmpty(VKRequestsDispatcher._autorizationData != null ? VKRequestsDispatcher._autorizationData.secret : null))
     {
         if (parameters.ContainsKey("sig"))
         {
             parameters.Remove("sig");
         }
         string str1 = JsonWebRequest.ConvertDictionaryToQueryString(parameters, false);
         if (str1 != string.Empty)
         {
             str1 = "?" + str1;
         }
         string str2 = VKRequestsDispatcher.HashString("/method/" + methodName + str1 + VKRequestsDispatcher._autorizationData.secret);
         parameters["sig"] = str2.ToLower();
     }
     JsonWebRequest.SendHTTPRequestAsync(!VKRequestsDispatcher.USE_HTTP ? "https://" + baseUrl : "http://" + baseUrl, parameters, (Action <JsonResponseData>)(jsonResp =>
     {
         BackendResult <R, ResultCode> backendResult = new BackendResult <R, ResultCode>(ResultCode.CommunicationFailed);
         if (jsonResp.IsSucceeded)
         {
             VKRequestsDispatcher.ResultData resultFromJson = VKRequestsDispatcher.GetResultFromJson(JObject.Parse(jsonResp.JsonString));
             backendResult.ResultCode = resultFromJson.ResultCode;
             backendResult.Error      = resultFromJson.error;
             if (backendResult.ResultCode == ResultCode.UserAuthorizationFailed)
             {
                 if (!string.IsNullOrEmpty(VKRequestsDispatcher._autorizationData != null ? VKRequestsDispatcher._autorizationData.access_token : null))
                 {
                     Logger.Instance.Error("RECEIVED AUTHORIZATION FAILURE!!! JSON STR = " + jsonResp.JsonString ?? "");
                     LogoutRequestHandler.InvokeLogoutRequest();
                 }
             }
             if (backendResult.ResultCode == ResultCode.CaptchaRequired)
             {
                 CaptchaUserRequestHandler.InvokeCaptchaRequest(new CaptchaUserRequest()
                 {
                     CaptchaSid = resultFromJson.captcha_sid,
                     Url        = resultFromJson.captcha_img
                 }, (Action <CaptchaUserResponse>)(captchaResp =>
                 {
                     if (!captchaResp.IsCancelled)
                     {
                         Dictionary <string, string> parameters1 = parameters;
                         parameters1["captcha_sid"] = captchaResp.Request.CaptchaSid;
                         parameters1["captcha_key"] = captchaResp.EnteredString;
                         VKRequestsDispatcher.DoDispatch <R>(baseUrl, methodName, parameters1, callback, customDeserializationFunc, lowPriority, pageDataRequest, cancellationToken, null);
                     }
                     else
                     {
                         VKRequestsDispatcher.InvokeCallback((Action)(() => callback(new BackendResult <R, ResultCode>(ResultCode.CaptchaControlCancelled))), cancellationToken);
                     }
                 }));
             }
             else if (backendResult.ResultCode == ResultCode.ValidationRequired)
             {
                 if (resultFromJson.validation_type == "2fa_app" || resultFromJson.validation_type == "2fa_sms")
                 {
                     if (parameters.ContainsKey("force_sms") || parameters.ContainsKey("code"))
                     {
                         R r = customDeserializationFunc != null ? customDeserializationFunc("") : default(R);
                         VKRequestsDispatcher.InvokeCallback((Action)(() => callback(new BackendResult <R, ResultCode>(ResultCode.Succeeded, r))), cancellationToken);
                     }
                     else
                     {
                         CaptchaUserRequestHandler.InvokeValidation2FARequest(new Validation2FAUserRequest()
                         {
                             username       = parameters.ContainsKey("username") ? parameters["username"] : "",
                             password       = parameters.ContainsKey("password") ? parameters["password"] : "",
                             phoneMask      = resultFromJson.phone_mask,
                             validationType = resultFromJson.validation_type,
                             validationSid  = resultFromJson.validation_sid
                         }, (Action <ValidationUserResponse>)(valResp => VKRequestsDispatcher.ProcessValidationResponse <R>(valResp, baseUrl, methodName, parameters, callback, customDeserializationFunc, lowPriority, pageDataRequest, cancellationToken)));
                     }
                 }
                 else
                 {
                     CaptchaUserRequestHandler.InvokeValidationRequest(new ValidationUserRequest()
                     {
                         ValidationUri = resultFromJson.redirect_uri
                     }, (Action <ValidationUserResponse>)(valResp => VKRequestsDispatcher.ProcessValidationResponse <R>(valResp, baseUrl, methodName, parameters, callback, customDeserializationFunc, lowPriority, pageDataRequest, cancellationToken)));
                 }
             }
             else if (backendResult.ResultCode == ResultCode.ConfirmationRequired)
             {
                 if (!VKRequestsDispatcher.GetIsResponseCancelled(cancellationToken))
                 {
                     Action action = confirmationRequiredHandler;
                     if (action != null)
                     {
                         action();
                     }
                     IBackendConfirmationHandler confirmationHandler = ServiceLocator.Resolve <IBackendConfirmationHandler>();
                     if (confirmationHandler != null)
                     {
                         confirmationHandler.Confirm(resultFromJson.confirmation_text, (Action <bool>)(confirmed =>
                         {
                             if (confirmed)
                             {
                                 parameters["confirm"] = "1";
                                 VKRequestsDispatcher.DoDispatch <R>(baseUrl, methodName, parameters, callback, customDeserializationFunc, lowPriority, pageDataRequest, cancellationToken, null);
                             }
                             else
                             {
                                 VKRequestsDispatcher.InvokeCallback((Action)(() => callback(new BackendResult <R, ResultCode>(ResultCode.ConfirmationCancelled))), cancellationToken);
                             }
                         }));
                     }
                 }
             }
             else if (backendResult.ResultCode == ResultCode.NotEnoughMoney)
             {
                 if (!VKRequestsDispatcher.GetIsResponseCancelled(cancellationToken))
                 {
                     IBackendNotEnoughMoneyHandler enoughMoneyHandler = ServiceLocator.Resolve <IBackendNotEnoughMoneyHandler>();
                     Action action1 = (() => VKRequestsDispatcher.DoDispatch <R>(baseUrl, methodName, parameters, callback, customDeserializationFunc, lowPriority, pageDataRequest, cancellationToken, null));
                     Action action2 = (Action)(() => VKRequestsDispatcher.InvokeCallback((Action)(() => callback(new BackendResult <R, ResultCode>(ResultCode.BalanceRefillCancelled))), cancellationToken));
                     if (enoughMoneyHandler != null)
                     {
                         Action refilledCallback  = action1;
                         Action cancelledCallback = action2;
                         enoughMoneyHandler.RequestBalanceRefill(refilledCallback, cancelledCallback);
                     }
                 }
             }
             else if (backendResult.ResultCode == ResultCode.Succeeded)
             {
                 try
                 {
                     List <ExecuteError> executeErrorList = null;
                     R r;
                     if (customDeserializationFunc != null)
                     {
                         r = customDeserializationFunc(jsonResp.JsonString);
                     }
                     else if (typeof(R) == typeof(VKClient.Common.Backend.DataObjects.ResponseWithId))
                     {
                         r = JsonConvert.DeserializeObject <R>(jsonResp.JsonString);
                     }
                     else
                     {
                         VKRequestsDispatcher.GenericRoot <R> genericRoot = JsonConvert.DeserializeObject <VKRequestsDispatcher.GenericRoot <R> >(jsonResp.JsonString);
                         r = genericRoot.response;
                         executeErrorList = genericRoot.execute_errors;
                     }
                     backendResult.ResultData    = r;
                     backendResult.ExecuteErrors = executeErrorList;
                 }
                 catch (Exception ex)
                 {
                     Logger.Instance.Error("Error during deserialization", ex);
                     backendResult.ResultCode = ResultCode.DeserializationError;
                 }
             }
         }
         if (backendResult.ResultCode == ResultCode.CaptchaRequired || backendResult.ResultCode == ResultCode.ValidationRequired || (backendResult.ResultCode == ResultCode.ConfirmationRequired || backendResult.ResultCode == ResultCode.NotEnoughMoney))
         {
             return;
         }
         VKRequestsDispatcher.InvokeCallback((Action)(() =>
         {
             Action <BackendResult <R, ResultCode> > action = callback;
             if (action == null)
             {
                 return;
             }
             BackendResult <R, ResultCode> backendResult1 = backendResult;
             action(backendResult1);
         }), cancellationToken);
     }), true, lowPriority, pageDataRequest);
 }