Beispiel #1
0
        public void GetVenues(GeoCoordinate location)
        {
            if (_previousLocaiton != null)
            {
                if (_previousLocaiton.GetDistanceTo(location) < 100.0)
                {
                    return;
                }
            }

            if (_foursquareBot == null)
            {
                IoC.Get <IMTProtoService>().ResolveUsernameAsync(new TLString("foursquare"),
                                                                 result =>
                {
                    if (result.Peer is TLPeerUser && result.Users.Count > 0)
                    {
                        _foursquareBot = result.Users[0];
                        GetVenues(location);
                    }
                });

                return;
            }
            IsWorking = true;
            Status    = Venues.Count > 0 ? Status : AppResources.Loading;
            IoC.Get <IMTProtoService>().GetInlineBotResultsAsync(
                _foursquareBot.ToInputUser(),
                new TLInputPeerSelf(),
                new TLInputGeoPoint {
                Lat = new TLDouble(location.Latitude), Long = new TLDouble(location.Longitude)
            },
                TLString.Empty, TLString.Empty,
                result =>
            {
                _previousLocaiton = location;

                var venues = new List <TLMessageMediaVenue>();
                foreach (var inlineResult in result.Results)
                {
                    var inlineMessageMediaVenue = inlineResult.SendMessage as TLBotInlineMessageMediaVenue78;
                    if (inlineMessageMediaVenue == null)
                    {
                        continue;
                    }

                    Uri iconSource = null;
                    if (!TLString.IsNullOrEmpty(inlineMessageMediaVenue.VenueType))
                    {
                        // get icon with provided size (32, 44, 64 or 88)
                        // https://foursquare.com/img/categories_v2/food/icecream_bg_32.png
                        //
                        iconSource = new Uri(string.Format(Constants.FoursquireCategoryIconUrl, inlineMessageMediaVenue.VenueType, 64));
                    }

                    var mediaVenue = new TLMessageMediaVenue72
                    {
                        VenueId    = inlineMessageMediaVenue.VenueId,
                        Title      = inlineMessageMediaVenue.Title,
                        Address    = inlineMessageMediaVenue.Address,
                        Provider   = inlineMessageMediaVenue.Provider,
                        Geo        = inlineMessageMediaVenue.Geo,
                        VenueType  = inlineMessageMediaVenue.VenueType,
                        IconSource = iconSource
                    };

                    venues.Add(mediaVenue);
                }

                Execute.BeginOnUIThread(() =>
                {
                    Venues.Clear();
                    foreach (var venue in venues)
                    {
                        Venues.Add(venue);
                    }

                    IsWorking = false;
                    Status    = Venues.Count > 0 ? AppResources.NearbyPlaces : AppResources.NoResults;
                });
            },
                error => Execute.BeginOnUIThread(() =>
            {
                IsWorking = false;
                Venues.Clear();
                Status = AppResources.NoResults;
            }));
        }
Beispiel #2
0
        public void Search(string inputText)
        {
            if (inputText == null)
            {
                return;
            }

            var text = inputText.Trim();

            Execute.BeginOnUIThread(TimeSpan.FromMilliseconds(300), () =>
            {
                if (!string.Equals(Text, text))
                {
                    return;
                }

                List <TLMessageMediaVenue> cachedResult;
                if (_cache.TryGetValue(text, out cachedResult))
                {
                    Items.Clear();
                    foreach (var venue in cachedResult)
                    {
                        Items.Add(venue);
                    }

                    IsWorking = false;
                    Status    = Items.Count > 0 ? string.Empty : AppResources.NoResults;

                    return;
                }

                if (_foursquareBot == null)
                {
                    IoC.Get <IMTProtoService>().ResolveUsernameAsync(new TLString("foursquare"),
                                                                     result =>
                    {
                        if (result.Peer is TLPeerUser && result.Users.Count > 0)
                        {
                            _foursquareBot = result.Users[0];
                            Search(inputText);
                        }
                    });

                    return;
                }
                IsWorking = true;
                Status    = Items.Count > 0 ? Status : AppResources.Loading;
                IoC.Get <IMTProtoService>().GetInlineBotResultsAsync(
                    _foursquareBot.ToInputUser(),
                    new TLInputPeerSelf(),
                    new TLInputGeoPoint {
                    Lat = new TLDouble(Location.Latitude), Long = new TLDouble(Location.Longitude)
                },
                    TLString.Empty, TLString.Empty,
                    result =>
                {
                    var venues = new List <TLMessageMediaVenue>();
                    foreach (var inlineResult in result.Results)
                    {
                        var inlineMessageMediaVenue = inlineResult.SendMessage as TLBotInlineMessageMediaVenue78;
                        if (inlineMessageMediaVenue == null)
                        {
                            continue;
                        }

                        Uri iconSource = null;
                        if (!TLString.IsNullOrEmpty(inlineMessageMediaVenue.VenueType))
                        {
                            // get icon with provided size (32, 44, 64 or 88)
                            // https://foursquare.com/img/categories_v2/food/icecream_bg_32.png
                            //
                            iconSource = new Uri(string.Format("https://foursquare.com/img/categories_v2/{0}_{1}.png", inlineMessageMediaVenue.VenueType, 64));
                        }

                        var mediaVenue = new TLMessageMediaVenue72
                        {
                            VenueId    = inlineMessageMediaVenue.VenueId,
                            Title      = inlineMessageMediaVenue.Title,
                            Address    = inlineMessageMediaVenue.Address,
                            Provider   = inlineMessageMediaVenue.Provider,
                            Geo        = inlineMessageMediaVenue.Geo,
                            VenueType  = inlineMessageMediaVenue.VenueType,
                            IconSource = iconSource
                        };

                        venues.Add(mediaVenue);
                    }

                    Execute.BeginOnUIThread(() =>
                    {
                        _cache[text] = venues;

                        if (!string.Equals(Text, text))
                        {
                            return;
                        }

                        Items.Clear();
                        foreach (var venue in venues)
                        {
                            Items.Add(venue);
                        }

                        IsWorking = false;
                        Status    = Items.Count > 0 ? string.Empty : AppResources.NoResults;
                    });
                },
                    error => Execute.BeginOnUIThread(() =>
                {
                    IsWorking = false;
                    Items.Clear();
                    Status = AppResources.NoResults;
                }));
            });
        }