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; })); }
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; })); }); }