private List<VisualBubble> ProcessFullMessage(Message message,bool useCurrentTime) { var peerUser = message.ToId as PeerUser; var peerChat = message.ToId as PeerChat; var peerChannel = message.ToId as PeerChannel; var direction = message.FromId == _settings.AccountId ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming; if (!string.IsNullOrWhiteSpace(message.MessageProperty)) { TextBubble tb = null; if (peerUser != null) { var address = direction == Bubble.BubbleDirection.Incoming ? message.FromId : peerUser.UserId; var addressStr = address.ToString(CultureInfo.InvariantCulture); tb = new TextBubble( useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, direction, addressStr, null, false, this, message.MessageProperty, message.Id.ToString(CultureInfo.InvariantCulture)); } else if (peerChat != null) { var address = peerChat.ChatId.ToString(CultureInfo.InvariantCulture); var participantAddress = message.FromId.ToString(CultureInfo.InvariantCulture); tb = new TextBubble( useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, direction, address, participantAddress, true, this, message.MessageProperty, message.Id.ToString(CultureInfo.InvariantCulture)); } else if (peerChannel != null) { var address = peerChannel.ChannelId.ToString(CultureInfo.InvariantCulture); var participantAddress = message.FromId.ToString(CultureInfo.InvariantCulture); tb = new TextBubble( useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, direction, address, participantAddress, true, this, message.MessageProperty, message.Id.ToString(CultureInfo.InvariantCulture)); tb.ExtendedParty = true; } if (tb == null) return null; if (direction == Bubble.BubbleDirection.Outgoing) { tb.Status = Bubble.BubbleStatus.Sent; } return new List<VisualBubble> { tb }; } else { if (peerUser != null) { var address = direction == Bubble.BubbleDirection.Incoming ? message.FromId : peerUser.UserId; var addressStr = address.ToString(CultureInfo.InvariantCulture); var bubble = MakeMediaBubble(message, useCurrentTime, true, addressStr); return bubble; } else if (peerChat != null) { var address = peerChat.ChatId.ToString(CultureInfo.InvariantCulture); var participantAddress = message.FromId.ToString(CultureInfo.InvariantCulture); var bubble = MakeMediaBubble(message, useCurrentTime, false, address, participantAddress); return bubble; } else if (peerChannel != null) { var address = peerChannel.ChannelId.ToString(CultureInfo.InvariantCulture); var participantAddress = message.FromId.ToString(CultureInfo.InvariantCulture); var bubbles = MakeMediaBubble(message, useCurrentTime, false, address, participantAddress); foreach (var bubble in bubbles) { bubble.ExtendedParty = true; } return bubbles; } } return null; }
private void AddQuotedMessageToBubble(Message replyMessage, VisualBubble bubble) { if (replyMessage == null) { return; } if(!string.IsNullOrEmpty(replyMessage.MessageProperty)) { bubble.QuotedType = VisualBubble.MediaType.Text; bubble.QuotedContext = replyMessage.MessageProperty; } else { var messageMedia = replyMessage.Media; var messageMediaPhoto = messageMedia as MessageMediaPhoto; var messageMediaDocument = messageMedia as MessageMediaDocument; var messageMediaGeo = messageMedia as MessageMediaGeo; var messageMediaVenue = messageMedia as MessageMediaVenue; var messageMediaContact = messageMedia as MessageMediaContact; if (messageMediaPhoto != null) { bubble.QuotedType = VisualBubble.MediaType.Image; bubble.HasQuotedThumbnail = true; bubble.QuotedThumbnail = GetCachedPhotoBytes(messageMediaPhoto.Photo); } if(messageMediaDocument != null) { var document = messageMediaDocument.Document as Document; if(document!=null) { if (document.MimeType.Contains("audio")) { bubble.QuotedType = VisualBubble.MediaType.Audio; bubble.QuotedSeconds = GetAudioTime(document); } else if (document.MimeType.Contains("video")) { bubble.QuotedType = VisualBubble.MediaType.File; bubble.QuotedContext = "Video"; } else { bubble.QuotedType = VisualBubble.MediaType.File; bubble.QuotedContext = GetDocumentFileName(document); } } } if(messageMediaGeo != null) { var geoPoint = messageMediaGeo.Geo as GeoPoint; if (geoPoint != null) { bubble.QuotedType = VisualBubble.MediaType.Location; bubble.QuotedContext = (int)geoPoint.Lat + "," + (int)geoPoint.Long; bubble.QuotedLocationLatitude = geoPoint.Lat; bubble.QuotedLocationLongitude = geoPoint.Long; bubble.HasQuotedThumbnail = true; } } if(messageMediaVenue != null) { var geoPoint = messageMediaVenue.Geo as GeoPoint; if (geoPoint != null) { bubble.QuotedType = VisualBubble.MediaType.Location; bubble.QuotedContext = messageMediaVenue.Title; bubble.QuotedLocationLatitude = geoPoint.Lat; bubble.QuotedLocationLongitude = geoPoint.Long; bubble.HasQuotedThumbnail = true; } } if(messageMediaContact != null) { bubble.QuotedType = VisualBubble.MediaType.Contact; bubble.QuotedContext = messageMediaContact.FirstName + " " + messageMediaContact.LastName; } } bubble.QuotedAddress = replyMessage.FromId.ToString(CultureInfo.InvariantCulture); bubble.QuotedIdService = replyMessage.Id.ToString(CultureInfo.InvariantCulture); }
private VisualBubble MakeGeoBubble(GeoPoint geoPoint,Message message,bool isUser,bool useCurrentTime,string addressStr,string participantAddress,string name) { LocationBubble bubble; if (isUser) { bubble = new LocationBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, null, false, this, geoPoint.Long, geoPoint.Lat, "", null, message.Id.ToString(CultureInfo.InvariantCulture)); } else { bubble = new LocationBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, participantAddress, true, this, geoPoint.Long, geoPoint.Lat, "", null, message.Id.ToString(CultureInfo.InvariantCulture)); } if (name != null) { bubble.Name = name; } if (bubble.Direction == Bubble.BubbleDirection.Outgoing) { bubble.Status = Bubble.BubbleStatus.Sent; } return bubble; }
private ContactBubble MakeContactBubble(Message message, bool isUser, bool useCurrentTime, string addressStr, string participantAddress, byte[] vCardData, string name) { ContactBubble bubble; if (isUser) { bubble = new ContactBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, null, false, this, name, vCardData, message.Id.ToString(CultureInfo.InvariantCulture)); } else { bubble = new ContactBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, participantAddress, true, this, name, vCardData, message.Id.ToString(CultureInfo.InvariantCulture)); } if (bubble.Direction == Bubble.BubbleDirection.Outgoing) { bubble.Status = Bubble.BubbleStatus.Sent; } return bubble; }
private List<VisualBubble> MakeMediaBubble(Message message, bool useCurrentTime, bool isUser, string addressStr, string participantAddress = null) { DebugPrint(">>>>>>> Making media bubble"); var messageMedia = message.Media; var messageMediaPhoto = messageMedia as MessageMediaPhoto; var messageMediaDocument = messageMedia as MessageMediaDocument; var messageMediaGeo = messageMedia as MessageMediaGeo; var messageMediaVenue = messageMedia as MessageMediaVenue; var messageMediaContact = messageMedia as MessageMediaContact; if (messageMediaPhoto != null) { var fileLocation = GetPhotoFileLocation(messageMediaPhoto.Photo); var fileSize = GetPhotoFileSize(messageMediaPhoto.Photo); var dimensions = GetPhotoDimensions(messageMediaPhoto.Photo); var cachedPhoto = GetCachedPhotoBytes(messageMediaPhoto.Photo); FileInformation fileInfo = new FileInformation { FileLocation = fileLocation, Size = fileSize, FileType = "image", Document = new Document() }; using (var memoryStream = new MemoryStream()) { Serializer.Serialize<FileInformation>(memoryStream, fileInfo); ImageBubble imageBubble = null; if (isUser) { imageBubble = new ImageBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long) message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, null, false, this, null, ImageBubble.Type.Url, cachedPhoto, message.Id.ToString(CultureInfo.InvariantCulture)); } else { imageBubble = new ImageBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long) message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, participantAddress, true, this, null, ImageBubble.Type.Url, cachedPhoto, message.Id.ToString(CultureInfo.InvariantCulture)); } if (imageBubble.Direction == Bubble.BubbleDirection.Outgoing) { imageBubble.Status = Bubble.BubbleStatus.Sent; } imageBubble.AdditionalData = memoryStream.ToArray(); imageBubble.Width = dimensions.Width; imageBubble.Height = dimensions.Height; var returnList = new List<VisualBubble> { imageBubble }; if (!string.IsNullOrEmpty(messageMediaPhoto.Caption)) { TextBubble captionBubble = null; if (isUser) { captionBubble = new TextBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, null, false, this, messageMediaPhoto.Caption, message.Id.ToString(CultureInfo.InvariantCulture)); } else { captionBubble = new TextBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, participantAddress, true, this, messageMediaPhoto.Caption, message.Id.ToString(CultureInfo.InvariantCulture)); } returnList.Add(captionBubble); } return returnList; } } else if (messageMediaDocument != null) { DebugPrint(">>>> Media document " + ObjectDumper.Dump(messageMediaDocument)); //DebugPrint(">>>>> Media attributes " + (messageMediaDocument.Document as Document).Attributes); var document = messageMediaDocument.Document as Document; if (document != null) { FileInformation fileInfo = new FileInformation { FileType = "document", Document = document }; using (var memoryStream = new MemoryStream()) { Serializer.Serialize<FileInformation>(memoryStream, fileInfo); VisualBubble bubble = null; if (document.MimeType.Contains("audio")) { var audioTime = (int) GetAudioTime(document); if (isUser) { bubble = new AudioBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long) message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, null, false, this, "", AudioBubble.Type.Url, false, audioTime, message.Id.ToString(CultureInfo.InvariantCulture)); } else { bubble = new AudioBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long) message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, participantAddress, true, this, "", AudioBubble.Type.Url, false, audioTime, message.Id.ToString(CultureInfo.InvariantCulture)); } } else { //TODO: localize var filename = document.MimeType.Contains("video") ? "" : GetDocumentFileName(document);GetDocumentFileName(document); if (isUser) { bubble = new FileBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long) message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, null, false, this, "", FileBubble.Type.Url, filename, document.MimeType, message.Id.ToString(CultureInfo.InvariantCulture)); } else { bubble = new FileBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long) message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, participantAddress, true, this, "", FileBubble.Type.Url, filename, document.MimeType, message.Id.ToString(CultureInfo.InvariantCulture)); } } if (bubble.Direction == Bubble.BubbleDirection.Outgoing) { bubble.Status = Bubble.BubbleStatus.Sent; } bubble.AdditionalData = memoryStream.ToArray(); var returnList = new List<VisualBubble> { bubble }; if (!string.IsNullOrEmpty(messageMediaDocument.Caption)) { TextBubble captionBubble = null; if (isUser) { captionBubble = new TextBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, null, false, this, messageMediaDocument.Caption, message.Id.ToString(CultureInfo.InvariantCulture)); } else { captionBubble = new TextBubble(useCurrentTime ? Time.GetNowUnixTimestamp() : (long)message.Date, message.Out != null ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming, addressStr, participantAddress, true, this, messageMediaDocument.Caption, message.Id.ToString(CultureInfo.InvariantCulture)); } returnList.Add(captionBubble); } return returnList; } } } else if (messageMediaGeo != null) { var geoPoint = messageMediaGeo.Geo as GeoPoint; if (geoPoint != null) { var geoBubble = MakeGeoBubble(geoPoint, message, isUser, useCurrentTime, addressStr, participantAddress, null); return new List<VisualBubble> { geoBubble }; } } else if (messageMediaVenue != null) { var geoPoint = messageMediaVenue.Geo as GeoPoint; if (geoPoint != null) { var geoBubble = MakeGeoBubble(geoPoint,message,isUser,useCurrentTime,addressStr,participantAddress,messageMediaVenue.Title); return new List<VisualBubble> { geoBubble }; } } else if (messageMediaContact != null) { var contactCard = new ContactCard { GivenName = messageMediaContact.FirstName, FamilyName = messageMediaContact.LastName }; contactCard.Phones.Add(new ContactCard.ContactCardPhone { Number = messageMediaContact.PhoneNumber }); var vCardData = Platform.GenerateBytesFromContactCard(contactCard); var contactBubble = MakeContactBubble(message, isUser, useCurrentTime, addressStr, participantAddress, vCardData, messageMediaContact.FirstName); return new List<VisualBubble> { contactBubble }; } return new List<VisualBubble>(); }
private void SetRead(Message message) { var direction = message.FromId == _settings.AccountId ? Bubble.BubbleDirection.Outgoing : Bubble.BubbleDirection.Incoming; var peerUser = message.ToId as PeerUser; var peerChat = message.ToId as PeerChat; if (peerUser != null) { var address = direction == Bubble.BubbleDirection.Incoming ? message.FromId : peerUser.UserId; BubbleGroupManager.SetUnread(this, false, address.ToString(CultureInfo.InvariantCulture)); NotificationManager.Remove(this, address.ToString(CultureInfo.InvariantCulture)); } else if (peerChat != null) { BubbleGroupManager.SetUnread(this, false, peerChat.ChatId.ToString(CultureInfo.InvariantCulture)); NotificationManager.Remove(this, peerChat.ChatId.ToString(CultureInfo.InvariantCulture)); } }