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