private TLInputGeoPointBase GetGeoPoint(TLUser45 user45) { TLInputGeoPointBase geoPoint = null; if (user45 != null && user45.IsBotInlineGeo) { geoPoint = new TLInputGeoPointEmpty(); if (user45.BotInlineGeoAccess && _watcher != null && _watcher.Status == GeoPositionStatus.Ready && _watcher.Position.Location != GeoCoordinate.Unknown) { geoPoint = new TLInputGeoPoint { Lat = new TLDouble(_watcher.Position.Location.Latitude), Long = new TLDouble(_watcher.Position.Location.Longitude) }; } } return(geoPoint); }
public void UpdateAsync(TLMessage70 message, TLGeoPointBase geoPointBase, Action <TLUpdatesBase> callback, Action <TLRPCError> faultCallback = null) { TLMessage70 m; lock (_liveLocationsSyncRoot) { m = _messages.FirstOrDefault( x => x.Index == message.Index && ((TLMessage)x).ToId.GetType() == message.ToId.GetType() && ((TLMessage)x).ToId.Id.Value == message.ToId.Id.Value) as TLMessage70; } if (m == null || m.InputPeer == null) { faultCallback.SafeInvoke(null); return; } ; var stopGeoLive = false; TLInputGeoPoint inputGeoPoint = null; var geoPoint = geoPointBase as TLGeoPoint; if (geoPoint != null) { inputGeoPoint = new TLInputGeoPoint { Lat = geoPoint.Lat, Long = geoPoint.Long }; } else { stopGeoLive = true; } _mtProtoService.EditMessageAsync(m.InputPeer, message.Id, null, null, null, null, false, stopGeoLive, inputGeoPoint, result => { m.EditDate = TLUtils.DateToUniversalTimeTLInt(_mtProtoService.ClientTicksDelta, DateTime.Now); var mediaGeoLive = m.Media as TLMessageMediaGeoLive; if (mediaGeoLive != null) { mediaGeoLive.EditDate = m.EditDate; } if (stopGeoLive) { Remove(m); } callback.SafeInvoke(result); }, error => { // handle 400 MESSAGE_EDIT_TIME_EXPIRED, MESSAGE_ID_INVALID, ... if (error.CodeEquals(ErrorCode.BAD_REQUEST)) { if (error.TypeEquals(ErrorType.MESSAGE_NOT_MODIFIED)) { m.EditDate = TLUtils.DateToUniversalTimeTLInt(_mtProtoService.ClientTicksDelta, DateTime.Now); var mediaGeoLive = m.Media as TLMessageMediaGeoLive; if (mediaGeoLive != null) { mediaGeoLive.EditDate = m.EditDate; } } else { Remove(m); } } faultCallback.SafeInvoke(error); Execute.ShowDebugMessage("messages.editMessage error " + error); }); }