Esempio n. 1
0
        public async Task <List <VkProfile> > SearchHints(string q, int count = 9, string filters = null, bool searchGlobal = false, string fields = null)
        {
            var parameters = new Dictionary <string, string>();

            parameters.Add("q", q);

            if (count != 0)
            {
                parameters.Add("limit", count.ToString());
            }

            if (!string.IsNullOrEmpty(filters))
            {
                parameters.Add("filters", filters);
            }

            parameters.Add("search_global", searchGlobal ? "1" : "0");

            if (!string.IsNullOrWhiteSpace(fields))
            {
                parameters.Add("fields", fields);
            }

            _vkontakte.SignMethod(parameters);

            var response = await VkRequest.GetAsync(VkConst.MethodBase + "execute.searchHints", parameters);

            if (response["response"] != null)
            {
                return(new List <VkProfile>(from u in response["response"] select VkProfile.FromJson(u)));
            }

            return(new List <VkProfile>());
        }
Esempio n. 2
0
        public static VkConversation FromJson(JToken json, string apiVersion = null)
        {
            if (json == null)
            {
                throw new Exception("Json can't be null");
            }

            var result = new VkConversation();

            if (json["id"] != null)
            {
                result.Id = (long)json["id"];
            }

            if (json["title"] != null)
            {
                result.Title = (string)json["title"];
            }

            if (json["admin_id"] != null)
            {
                result.AdminId = (long)json["admin_id"];
            }

            if (json["users"] != null)
            {
                result.Users = (from u in json["users"] select VkProfile.FromJson(u)).ToList();
            }

            return(result);
        }
Esempio n. 3
0
        public async Task <VkNewsResponse> Get(string sourceIds = null, string filters = null, int count = 0, string startFrom = null)
        {
            var parameters = new Dictionary <string, string>();

            if (!string.IsNullOrEmpty(sourceIds))
            {
                parameters.Add("source_ids", sourceIds);
            }

            if (!string.IsNullOrEmpty(filters))
            {
                parameters.Add("filters", filters);
            }

            if (count > 0)
            {
                parameters.Add("count", count.ToString());
            }

            if (!string.IsNullOrEmpty(startFrom))
            {
                parameters.Add("start_from", startFrom);
            }

            _vkontakte.SignMethod(parameters);

            var response = await VkRequest.GetAsync(VkConst.MethodBase + "newsfeed.get", parameters);

            if (response.SelectToken("response.items") != null)
            {
                var result = new VkNewsResponse((from n in response["response"]["items"] select VkNewsEntry.FromJson(n)).ToList());

                if (response["response"]["profiles"] != null)
                {
                    var users = (from n in response["response"]["profiles"] select VkProfile.FromJson(n)).ToList();
                    foreach (var entry in result.Items)
                    {
                        entry.Author = users.FirstOrDefault(u => u.Id == entry.SourceId);
                    }
                }

                if (response["response"]["groups"] != null)
                {
                    var groups = (from n in response["response"]["groups"] select VkGroup.FromJson(n)).ToList();
                    foreach (var entry in result.Items.Where(e => e.Author == null))
                    {
                        entry.Author = groups.FirstOrDefault(g => g.Id == Math.Abs(entry.SourceId));
                    }
                }

                if (response["response"]["next_from"] != null)
                {
                    result.NextFrom = response["response"]["next_from"].Value <string>();
                }

                return(result);
            }

            return(null);
        }
Esempio n. 4
0
        public async Task <UserProfile> GetUserProfileByUserId(string userId)
        {
            UserProfile userProfile;

            string[] uids = new string[1];
            uids[0] = userId;
            if (ViewModelLocator.AuthService.IsLoggedInVk(true))
            {
                IEnumerable <VkProfile> vkProfiles = await this._vkontakte.Users.Get(uids, "photo", null);

                IEnumerable <VkProfile> vkProfiles1 = vkProfiles;
                if (vkProfiles1 == null)
                {
                    userProfile = null;
                }
                else
                {
                    VkProfile   vkProfile = vkProfiles1.First <VkProfile>();
                    UserProfile str       = new UserProfile();
                    Int64       id        = vkProfile.Id;
                    str.Uid       = id.ToString();
                    str.FirstName = vkProfile.FirstName;
                    str.LastName  = vkProfile.LastName;
                    str.Photo     = vkProfile.Photo;
                    userProfile   = str;
                }
            }
            else
            {
                userProfile = null;
            }
            return(userProfile);
        }
Esempio n. 5
0
        public async Task <VkItemsResponse <VkWallEntry> > Get(long ownerId, string filter, int count = 0, int offset = 0)
        {
            var parameters = new Dictionary <string, string>();

            if (ownerId != 0)
            {
                parameters.Add("owner_id", ownerId.ToString());
            }

            if (!string.IsNullOrEmpty(filter))
            {
                parameters.Add("filter", filter);
            }

            if (count > 0)
            {
                parameters.Add("count", count.ToString());
            }

            if (offset > 0)
            {
                parameters.Add("offset", offset.ToString());
            }

            parameters.Add("extended", "1");

            _vkontakte.SignMethod(parameters);

            var response = await VkRequest.GetAsync(VkConst.MethodBase + "wall.get", parameters);

            if (response.SelectToken("response.items") != null)
            {
                var result = new VkItemsResponse <VkWallEntry>();
                result.Items      = (from p in response["response"]["items"] where p.HasValues select VkWallEntry.FromJson(p)).ToList();
                result.TotalCount = response["response"]["count"].Value <int>();

                if (response["response"]["profiles"] != null)
                {
                    var users = (from n in response["response"]["profiles"] select VkProfile.FromJson(n)).ToList();
                    foreach (var entry in result.Items)
                    {
                        entry.Author = users.FirstOrDefault(u => u.Id == entry.SourceId);
                    }
                }

                if (response["response"]["groups"] != null)
                {
                    var groups = (from n in response["response"]["groups"] select VkGroup.FromJson(n)).ToList();
                    foreach (var entry in result.Items.Where(e => e.Author == null))
                    {
                        entry.Author = groups.FirstOrDefault(g => g.Id == Math.Abs(entry.SourceId));
                    }
                }

                return(result);
            }

            return(null);
        }
Esempio n. 6
0
 public User(VkProfile profile)
 {
     if (profile == null)
     {
         Debugger.Break();
     }
     _profile = profile;
 }
        public async Task <VkItemsResponse <VkWallEntry> > GetPosts(int count = 0, int offset = 0, bool extended = true)
        {
            if (_vkontakte.AccessToken == null || string.IsNullOrEmpty(_vkontakte.AccessToken.Token) || _vkontakte.AccessToken.HasExpired)
            {
                throw new Exception("Access token is not valid.");
            }

            var parameters = new Dictionary <string, string>();

            if (count > 0)
            {
                parameters.Add("count", count.ToString());
            }

            if (offset > 0)
            {
                parameters.Add("offset", offset.ToString());
            }

            if (extended)
            {
                parameters.Add("extended", "1");
            }

            _vkontakte.SignMethod(parameters);

            var response = await new VkRequest(new Uri(VkConst.MethodBase + "fave.getPosts"), parameters).Execute();

            VkErrorProcessor.ProcessError(response);

            if (response.SelectToken("response.items") != null)
            {
                var result = new VkItemsResponse <VkWallEntry>((from n in response["response"]["items"] select VkWallEntry.FromJson(n)).ToList());

                if (response["response"]["profiles"] != null)
                {
                    var users = (from n in response["response"]["profiles"] select VkProfile.FromJson(n)).ToList();
                    foreach (var entry in result.Items)
                    {
                        entry.Author = users.FirstOrDefault(u => u.Id == entry.SourceId);
                    }
                }

                if (response["response"]["groups"] != null)
                {
                    var groups = (from n in response["response"]["groups"] select VkGroup.FromJson(n)).ToList();
                    foreach (var entry in result.Items.Where(e => e.Author == null))
                    {
                        entry.Author = groups.FirstOrDefault(g => g.Id == Math.Abs(entry.SourceId));
                    }
                }

                return(result);
            }

            return(null);
        }
Esempio n. 8
0
        internal static VkCatalogBlock FromJson(JToken json)
        {
            if (json == null)
            {
                throw new ArgumentException("Json can not be null.");
            }

            var result = new VkCatalogBlock();

            result.Id       = json["id"].Value <int>();
            result.Title    = json["title"].Value <string>();
            result.Subtitle = json["subtitle"].Value <string>();

            result.Type  = json["type"].Value <string>();
            result.Count = json["count"].Value <int>();

            result.Source = json["source"].Value <string>();

            if (json["audios"] != null)
            {
                result.Audios = json["audios"].Select(VkAudio.FromJson).ToList();
            }

            if (json["thumbs"] != null)
            {
                result.Thumbs = json["thumbs"].ToObject <List <VkThumb> >();
            }

            if (json["owners"] != null)
            {
                result.Owners = json["owners"].Select(x =>
                {
                    if (x["type"].Value <string>() != "profile")
                    {
                        return((VkProfileBase)VkGroup.FromJson(x));
                    }
                    else
                    {
                        return((VkProfileBase)VkProfile.FromJson(x));
                    }
                }).ToList();
            }

            if (json["playlists"] != null)
            {
                result.Playlists = json["playlists"].Select(VkPlaylist.FromJson).ToList();
            }

            if (json["extended_playlists"] != null)
            {
                result.ExtendedPlaylists = json["extended_playlists"].Select(VkExtendedPlaylist.FromJson).ToList();
            }

            return(result);
        }
Esempio n. 9
0
 private async void LoadCurrentUser()
 {
     try
     {
         CurrentUser = await ServiceLocator.Vkontakte.Users.Get(AppSettings.AccessToken.UserId, "photo,photo_100");
     }
     catch (Exception ex)
     {
         //LoggingService.Log(ex);
         Debug.WriteLine(ex);
     }
 }
Esempio n. 10
0
 private async void LoadCurrentUser()
 {
     try
     {
         var service = Ioc.Resolve <VkUserService>();
         CurrentUser = await service.GetUser();
     }
     catch (Exception ex)
     {
         Logger.Error(ex, "Unable to load current user");
     }
 }
Esempio n. 11
0
        public async Task <VkItemsResponse <VkWallEntry> > GetPosts(int count = 0, int offset = 0, bool extended = true)
        {
            var parameters = new Dictionary <string, string>();

            if (count > 0)
            {
                parameters.Add("count", count.ToString());
            }

            if (offset > 0)
            {
                parameters.Add("offset", offset.ToString());
            }

            if (extended)
            {
                parameters.Add("extended", "1");
            }

            _vkontakte.SignMethod(parameters);

            var response = await VkRequest.GetAsync(VkConst.MethodBase + "fave.getPosts", parameters);

            if (response.SelectToken("response.items") != null)
            {
                var result = new VkItemsResponse <VkWallEntry>((from n in response["response"]["items"] select VkWallEntry.FromJson(n)).ToList());

                if (response["response"]["profiles"] != null)
                {
                    var users = (from n in response["response"]["profiles"] select VkProfile.FromJson(n)).ToList();
                    foreach (var entry in result.Items)
                    {
                        entry.Author = users.FirstOrDefault(u => u.Id == entry.SourceId);
                    }
                }

                if (response["response"]["groups"] != null)
                {
                    var groups = (from n in response["response"]["groups"] select VkGroup.FromJson(n)).ToList();
                    foreach (var entry in result.Items.Where(e => e.Author == null))
                    {
                        entry.Author = groups.FirstOrDefault(g => g.Id == Math.Abs(entry.SourceId));
                    }
                }

                return(result);
            }

            return(null);
        }
Esempio n. 12
0
        public async Task <List <VkProfile> > GetUsersAndGroupsById(IEnumerable <string> userIds, IEnumerable <string> groupIds = null, string fields = null, string nameCase = null)
        {
            var parameters = new Dictionary <string, string>();

            if (userIds != null)
            {
                parameters.Add("user_ids", string.Join(",", userIds));
            }

            if (groupIds != null)
            {
                parameters.Add("group_ids", string.Join(",", groupIds));
            }

            if (!string.IsNullOrWhiteSpace(fields))
            {
                parameters.Add("fields", fields);
            }

            if (!string.IsNullOrWhiteSpace(nameCase))
            {
                parameters.Add("name_case", nameCase);
            }

            _vkontakte.SignMethod(parameters);

            var response = await VkRequest.GetAsync(VkConst.MethodBase + "execute.getUsersAndGroupsById", parameters);

            if (response["response"] != null)
            {
                var result     = new List <VkProfile>();
                var usersToken = response.SelectToken("response.users");
                if (usersToken != null)
                {
                    result.AddRange((from u in usersToken select VkProfile.FromJson(u)).ToList());
                }

                var gruopsToken = response.SelectToken("response.groups");
                if (gruopsToken != null)
                {
                    result.AddRange((from u in gruopsToken select VkProfile.FromJson(u)).ToList());
                }

                return(result);
            }

            return(new List <VkProfile>());
        }
Esempio n. 13
0
        private async Task <List <Message> > LoadMoreMessages(CancellationToken token, uint count)
        {
            try
            {
                bool isChat     = Dialog.Message.ChatId != 0;
                var  vkMessages = await ServiceLocator.Vkontakte.Execute.GetChatHistoryAndMarkAsRead(!isChat?Dialog.User.Profile.Id : 0, chatId : isChat?Dialog.Message.ChatId : 0, count : (int)count, offset : Messages.Count, markAsRead : !AppSettings.DontMarkMessagesAsRead);

                if (!vkMessages.Items.IsNullOrEmpty())
                {
                    TaskFinished("history"); //таска может быть активна, тогда LoadingIndicator будет накладываться на список
                    _hasUnreadMessages = true;

                    return(vkMessages.Items.Select(m =>
                    {
                        VkProfile sender = null;

                        if (!isChat)
                        {
                            sender = !m.IsOut ? Dialog.User.Profile : null;
                        }
                        else
                        {
                            sender = Dialog.Users?.FirstOrDefault(u => u.Id == m.UserId);
                        }
                        return new Message(m, sender);
                    }).ToList());
                }
            }
            catch (VkInvalidTokenException)
            {
                Messenger.Default.Send(new LoginStateChangedMessage()
                {
                    IsLoggedIn = false
                });

                Navigator.Main.Navigate(typeof(LoginView), clearHistory: true);
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "Unable to load more messages in coversation");
            }

            return(null);
        }
Esempio n. 14
0
        private void OnMessageUserAuthChanged(MessageUserAuthChanged message)
        {
            if (message.IsLoggedIn)
            {
                LoadCurrentUser();
            }
            else
            {
                if (AppState.VkToken == null) //if we already logged out, do nothing
                {
                    return;
                }

                CurrentUser = null;
                AppState.Reset();

                App.Current.NavigationService.Navigate(typeof(LoginView), clearHistory: true);
            }
        }
Esempio n. 15
0
        public static string FormatUserLastSeen(VkProfile user)
        {
            var date = user.LastSeen;

            var hours  = (DateTime.Now.ToUniversalTime() - date).TotalHours;
            var days   = (DateTime.Now.ToUniversalTime() - date).TotalDays;
            var result = (user.Sex == VkSex.Female ? Localizator.String("UserStatusLastSeenFemale") : Localizator.String("UserStatusLastSeenMale")) + " ";

            if (date.Date == DateTime.Now.ToUniversalTime().Date)
            {
                result += Localizator.String("UserStatusLastSeenToday") + " " + date.ToString("t");
            }
            else if ((DateTime.Today - date.Date) == TimeSpan.FromDays(1))
            {
                result += Localizator.String("UserStatusLastSeenYesterday") + " " + date.ToString("t");
            }
            else
            {
                result += date.ToString(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName == "ru" ? "dd.MM" : "MM/dd");
            }

            return(result);
        }
Esempio n. 16
0
        private void OnLoginStateChanged(LoginStateChangedMessage message)
        {
            if (message.IsLoggedIn)
            {
                //PushHelper.Start();

                //InitializeLongPoll();
                LoadCurrentUser();

                try
                {
                    ServiceLocator.Vkontakte.Stats.TrackVisitor();
                }
                catch { }
            }
            else
            {
                ServiceLocator.LongPollHandler.Stop();
                PushHelper.Stop();
                AppSettings.AccessToken = null;
                ServiceLocator.Vkontakte.AccessToken = null;
                CurrentUser = null;
            }
        }
Esempio n. 17
0
        private async void Load()
        {
            var t = TaskStarted("history");

            try
            {
                bool isChat = Dialog.Message.ChatId != 0;
                if (isChat)
                {
                    var users = await ServiceLocator.UserService.GetChatUsers(Dialog.Message.ChatId);

                    Dialog.Users = users;

                    if (Dialog.Users == null)
                    {
                        Dialog.Users = new List <VkProfile>();
                    }

                    if (!Dialog.Users.Contains(ViewModelLocator.Main.CurrentUser))
                    {
                        Dialog.Users.Add(ViewModelLocator.Main.CurrentUser);
                    }
                }

                var vkMessages = await ServiceLocator.Vkontakte.Execute.GetChatHistoryAndMarkAsRead(!isChat?Dialog.User.Profile.Id : 0, chatId : isChat?Dialog.Message.ChatId : 0, count : DeviceHelper.IsMobile()? 20 : 50, markAsRead : !AppSettings.DontMarkMessagesAsRead);

                if (!vkMessages.Items.IsNullOrEmpty())
                {
                    if (isChat)
                    {
                        var userIds = vkMessages.Items.Where(m => !Dialog.Users.Any(u => m.UserId == u.Id)).Select(m => m.UserId).ToList();

                        var users = await ServiceLocator.UserService.GetById(userIds);

                        if (!users.IsNullOrEmpty())
                        {
                            Dialog.Users.AddRange(users);
                        }
                    }

                    Messages.AddRange(vkMessages.Items.Select(m =>
                    {
                        VkProfile sender = null;
                        if (!isChat)
                        {
                            sender = !m.IsOut ? Dialog.User.Profile : null;
                        }
                        else
                        {
                            sender = Dialog.Users?.FirstOrDefault(u => u.Id == m.UserId);
                        }
                        return(new Message(m, sender));
                    }).Reverse().ToList());
                    _totalCount = vkMessages.TotalCount;
                    //Messages.OnMoreItemsRequested = LoadMoreMessages;
                    //Messages.HasMoreItemsRequested = () => _totalCount > Messages.Count;
                }
            }
            catch (VkInvalidTokenException)
            {
                Messenger.Default.Send(new LoginStateChangedMessage()
                {
                    IsLoggedIn = false
                });

                Navigator.Main.Navigate(typeof(LoginView), clearHistory: true);
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "Unable to load messages in coversation");

                t.Error = Localizator.String("Errors/ChatHistoryCommonError");
            }

            t.IsWorking = false;
        }
Esempio n. 18
0
        public async Task <IEnumerable <VkProfile> > Get(string uid, string fields, string nameCase, int count, int offset, bool sortByRating = true)
        {
            Dictionary <string, string> dictionary = new Dictionary <string, string>();

            if (!string.IsNullOrEmpty(uid))
            {
                dictionary.Add("uid", uid);
            }
            if (!string.IsNullOrWhiteSpace(fields))
            {
                dictionary.Add("fields", fields);
            }
            if (!string.IsNullOrWhiteSpace(nameCase))
            {
                dictionary.Add("name_case", nameCase);
            }
            if (count > 0)
            {
                dictionary.Add("count", count.ToString());
            }
            if (offset > 0)
            {
                dictionary.Add("offset", offset.ToString());
            }
            if (sortByRating)
            {
                dictionary.Add("order", "hints");
            }
            dictionary.Add("access_token", Vkontakte.Instance.AccessToken.Token);
            JObject jObject = await new VkRequest(new Uri("https://api.vk.com/method/friends.get"), dictionary, "GET").Execute();

            VkErrorProcessor.ProcessError(jObject);
            IEnumerable <VkProfile> result;

            if (jObject["response"].HasValues)
            {
                result = Enumerable.Select <JToken, VkProfile>(jObject["response"], (JToken u) => VkProfile.FromJson(u));
            }
            else
            {
                result = null;
            }
            return(result);
        }
Esempio n. 19
0
        public async Task <UserProfile> GetUserProfile(string userid = null)
        {
            UserProfile userProfile;

            String[] userId;
            if (ViewModelLocator.AuthService.IsLoggedInVk(true))
            {
                if (userid == null)
                {
                    userId = new String[] { this._vkontakte.AccessToken.UserId };
                }
                else
                {
                    userId = new string[] { userid };
                }

                IEnumerable <VkProfile> vkProfiles = await this._vkontakte.Users.Get(userId, "bdate,photo,photo_medium,photo_big,city,education,country,schools", null);

                IEnumerable <VkProfile> vkProfiles1 = vkProfiles;
                if (vkProfiles1 == null)
                {
                    userProfile = null;
                }
                else
                {
                    VkProfile   vkProfile = vkProfiles1.First <VkProfile>();
                    UserProfile str       = new UserProfile();
                    Int64       id        = vkProfile.Id;
                    str.Uid            = id.ToString();
                    str.FirstName      = vkProfile.FirstName;
                    str.LastName       = vkProfile.LastName;
                    str.Photo          = vkProfile.Photo;
                    str.PhotoBig       = vkProfile.PhotoBig;
                    str.PhotoMedium    = vkProfile.PhotoMedium;
                    str.UniversityName = vkProfile.Education;
                    if (!(String.IsNullOrEmpty(vkProfile.City) || vkProfile.City == "0"))
                    {
                        IEnumerable <VkCity> citiesRes = await this._vkontakte.City.Get(new string[] { vkProfile.City });

                        if (citiesRes.Any())
                        {
                            str.City = citiesRes.First().Name;
                        }
                    }
                    if (!(String.IsNullOrEmpty(vkProfile.Country) || vkProfile.Country == "0"))
                    {
                        IEnumerable <VkCountry> countryRes = await this._vkontakte.Country.Get(new string[] { vkProfile.Country });

                        if (countryRes.Any())
                        {
                            str.Country = countryRes.First().Name;
                        }
                    }

                    if (!String.IsNullOrEmpty(vkProfile.Birthday))
                    {
                        str.BirthDate = String.Empty;
                        string[] dateElements = vkProfile.Birthday.Split(new Char[] { '.' });
                        if (!String.IsNullOrEmpty(dateElements[1]))
                        {
                            switch (dateElements[1])
                            {
                            case "1": dateElements[1] = "января"; break;

                            case "2": dateElements[1] = "фервраля"; break;

                            case "3": dateElements[1] = "марта"; break;

                            case "4": dateElements[1] = "апреля"; break;

                            case "5": dateElements[1] = "мая"; break;

                            case "6": dateElements[1] = "июня"; break;

                            case "7": dateElements[1] = "июля"; break;

                            case "8": dateElements[1] = "августа"; break;

                            case "9": dateElements[1] = "сентября"; break;

                            case "10": dateElements[1] = "октября"; break;

                            case "11": dateElements[1] = "ноября"; break;

                            case "12": dateElements[1] = "декабря"; break;

                            default: break;
                            }
                        }
                        if (dateElements.Length == 3)
                        {
                            str.BirthDate = dateElements[0] + " " + dateElements[1] + " " + dateElements[2];
                        }
                        else if (dateElements.Length == 2)
                        {
                            str.BirthDate = dateElements[0] + " " + dateElements[1];
                        }
                    }
                    userProfile = str;
                }
            }
            else
            {
                userProfile = null;
            }
            return(userProfile);
        }
Esempio n. 20
0
 public Message(VkMessage message, VkProfile sender)
 {
     MessageContent = message;
     Sender         = sender;
 }