Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            });
        }