Example #1
0
        private void StopLiveLocation(TLMessage70 message, System.Action callback)
        {
            if (message == null)
            {
                return;
            }

            var mediaGeoLive = message.Media as TLMessageMediaGeoLive;

            if (mediaGeoLive == null)
            {
                return;
            }

            var geoPoint = mediaGeoLive.Geo as TLGeoPoint;

            if (geoPoint == null)
            {
                return;
            }

            var newGeoPoint = new TLGeoPointEmpty();

            var liveLocationsService = IoC.Get <ILiveLocationService>();

            liveLocationsService.UpdateAsync(message, newGeoPoint, result =>
                                             Execute.BeginOnUIThread(() =>
            {
                LiveLocationBadge = null;
                NotifyOfPropertyChange(() => LiveLocationBadge);

                mediaGeoLive.Date     = message.Date;
                mediaGeoLive.EditDate = message.EditDate;
                mediaGeoLive.NotifyOfPropertyChange(() => mediaGeoLive.Geo);
                mediaGeoLive.NotifyOfPropertyChange(() => mediaGeoLive.EditDate);
                mediaGeoLive.NotifyOfPropertyChange(() => mediaGeoLive.Active);

                callback.SafeInvoke();
            }),
                                             error => Execute.BeginOnUIThread(() =>
            {
                if (error == null || error.CodeEquals(ErrorCode.BAD_REQUEST))
                {
                    LiveLocationBadge = null;
                    NotifyOfPropertyChange(() => LiveLocationBadge);

                    mediaGeoLive.Date     = message.Date;
                    mediaGeoLive.EditDate = message.EditDate;
                    mediaGeoLive.NotifyOfPropertyChange(() => mediaGeoLive.Geo);
                    mediaGeoLive.NotifyOfPropertyChange(() => mediaGeoLive.EditDate);
                    mediaGeoLive.NotifyOfPropertyChange(() => mediaGeoLive.Active);

                    callback.SafeInvoke();
                }
            }));
        }
Example #2
0
        public void Add(TLMessage70 message)
        {
            message.InputPeer = _mtProtoService.PeerToInputPeer(message.ToId);

            lock (_liveLocationsSyncRoot)
            {
                _messages.Add(message);
            }

            SetNextTimer();

            TLUtils.SaveObjectToMTProtoFile(_liveLocationsSyncRoot, Constants.LiveLocationsFileName, _messages);

            _eventAggregator.Publish(new LiveLocationAddedEventArgs {
                Message = message
            });
        }
        public static void AddToTTLQueue(TLMessage70 message, TTLParams ttlParams, Action <TLMessage70> callback)
        {
            if (message == null)
            {
                return;
            }
            if (ttlParams == null)
            {
                return;
            }

            if (_ttlQueue == null)
            {
                _ttlQueue = new TTLQueue();
            }

            _ttlQueue.Add(message, ttlParams, callback);
        }
Example #4
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);
            });
        }