public static String GetBubbleEventMessageBody(Rainbow.Model.Contact contact, String bubbleEvent) { String result = null; if (contact != null) { String displayName = Rainbow.Util.GetContactDisplayName(contact); switch (bubbleEvent) { case "conferenceEnded": result = SdkWrapper.GetLabel("conferenceRemoveMsgRoom", "userDisplayName", displayName); break; case "conferenceStarted": result = SdkWrapper.GetLabel("conferenceAddMsgRoom", "userDisplayName", displayName); break; case "userJoin": result = SdkWrapper.GetLabel("joinMsgRoom", "userDisplayName", displayName); break; case "userLeave": result = SdkWrapper.GetLabel("leaveMsgRoom", "userDisplayName", displayName); break; default: result = SdkWrapper.GetLabel(bubbleEvent, "userDisplayName", displayName); break; } } return(result); }
private void UpdateDisplay() { // Ensure to be on Main UI Thread if (!MainThread.IsMainThread) { MainThread.BeginInvokeOnMainThread(() => UpdateDisplay()); return; } if (String.IsNullOrEmpty(peerJid)) { return; } Rainbow.Model.Contact contact = Helper.SdkWrapper.GetContactFromContactJid(peerJid); if (contact != null) { if (isCallLogEvent) { Label.Text = Helper.GetCallLogEventMessageBody(callLogAttachment); } else { Label.Text = Helper.GetBubbleEventMessageBody(contact, body); } } }
public static ConversationLight GetConversationFromRBConversation(Rainbow.Model.Conversation rbConversation) { ConversationLight conversation = null; if (rbConversation != null) { InstantMessaging.App XamarinApplication = (InstantMessaging.App)Xamarin.Forms.Application.Current; AvatarPool avatarPool = AvatarPool.Instance; conversation = new ConversationLight(); if (rbConversation.Type == Rainbow.Model.Conversation.ConversationType.Room) { conversation.Name = rbConversation.Name; conversation.Topic = rbConversation.Topic; conversation.Jid = rbConversation.Jid_im; conversation.PresenceSource = ""; } else if (rbConversation.Type == Rainbow.Model.Conversation.ConversationType.User) { // Get Display name of this user Rainbow.Model.Contact contact = XamarinApplication.RbContacts.GetContactFromContactId(rbConversation.PeerId); if (contact != null) { conversation.Name = Util.GetContactDisplayName(contact); conversation.Topic = ""; conversation.Jid = contact.Jid_im; Presence presence = XamarinApplication.RbContacts.GetAggregatedPresenceFromContactId(rbConversation.PeerId); conversation.PresenceSource = InstantMessaging.Helpers.Helper.GetPresenceSourceFromPresence(presence); } else { //log.Debug("[GetConversationFromRBConversation] - unknown contact - contactId:[{0}]", rbConversation.PeerId); XamarinApplication.RbContacts.GetContactFromContactIdFromServer(rbConversation.PeerId, null); } } else { //TODO ( bot case) //log.Debug("[GetConversationFromRBConversation] Conversation from model not created - Id:[{0}]", rbConversation.Id); return(null); } conversation.Id = rbConversation.Id; conversation.PeerId = rbConversation.PeerId; conversation.Type = rbConversation.Type; conversation.NbMsgUnread = rbConversation.UnreadMessageNumber; conversation.NbMsgUnreadIsVisible = (conversation.NbMsgUnread > 0) ? "True" : "False"; conversation.LastMessage = rbConversation.LastMessageText; conversation.LastMessageDateTime = rbConversation.LastMessageDate; // Humanized the DateTime conversation.MessageTimeDisplay = Helpers.Helper.HumanizeDateTime(conversation.LastMessageDateTime); } return(conversation); }
public static ConversationModel GetConversationFromRBConversation(Rainbow.Model.Conversation rbConversation) { ConversationModel conversation = null; if (rbConversation != null) { conversation = new ConversationModel(); conversation.Id = rbConversation.Id; conversation.Peer.Id = rbConversation.PeerId; conversation.Peer.Jid = rbConversation.Jid_im; conversation.Peer.Type = rbConversation.Type; if (rbConversation.Type == Rainbow.Model.Conversation.ConversationType.Room) { conversation.Peer.DisplayName = rbConversation.Name; conversation.Topic = rbConversation.Topic; } else if (rbConversation.Type == Rainbow.Model.Conversation.ConversationType.User) { // Get Display name of this user Rainbow.Model.Contact contact = SdkWrapper.GetContactFromContactId(rbConversation.PeerId); if (contact != null) { conversation.Peer.DisplayName = Rainbow.Util.GetContactDisplayName(contact); conversation.Peer.DisplayPresence = true; conversation.Topic = ""; } else { //log.LogDebug("[GetConversationFromRBConversation] - unknown contact - contactId:[{0}]", rbConversation.PeerId); SdkWrapper.GetContactFromContactIdFromServer(rbConversation.PeerId, null); } } else { //TODO ( bot case) //log.LogDebug("[GetConversationFromRBConversation] Conversation from model not created - Id:[{0}]", rbConversation.Id); return(null); } conversation.NbMsgUnread = rbConversation.UnreadMessageNumber; conversation.LastMessage = rbConversation.LastMessageText; conversation.LastMessageDateTime = rbConversation.LastMessageDate; if (conversation.LastMessageDateTime == DateTime.MinValue) { conversation.LastMessageDateTime = rbConversation.CreationDate; } } return(conversation); }
private Boolean UpdateContactInfo() { if (message?.Reply?.Peer.Jid != null) { Rainbow.Model.Contact contactReply = Helper.SdkWrapper.GetContactFromContactJid(message.Reply.Peer.Jid); if (contactReply != null) { message.Reply.Peer.Id = contactReply.Id; message.Reply.Peer.DisplayName = Rainbow.Util.GetContactDisplayName(contactReply); UpdateDisplay(); return(true); } } return(false); }
public static String GetContactDisplayName(String jid) { if (String.IsNullOrEmpty(jid)) { return(null); } Rainbow.Model.Contact contact = SdkWrapper.GetContactFromContactJid(jid); if (contact == null) { return(null); } return(Rainbow.Util.GetContactDisplayName(contact)); }
private void RbContacts_PeerAdded(object sender, Rainbow.Events.PeerEventArgs e) { if (System.Windows.Application.Current != null) { if (e.Peer.Type == Rainbow.Model.Conversation.ConversationType.User) { System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { Rainbow.Model.Contact contact = RbContacts.GetContactFromContactJid(e.Peer.Jid); if (contact != null) { UpdateConversationNameByPeerId(contact.Id, Util.GetContactDisplayName(contact)); } })); } } }
private void SetEventPartFromCallLog(Model.Message message) { Rainbow.Model.Contact contact = XamarinApplication.RbContacts.GetContactFromContactJid(message.CallOtherJid); if (contact != null) { String displayName = Util.GetContactDisplayName(contact); if (message.CallState == CallLog.LogState.ANSWERED.ToString()) { if (message.CallOriginator == "True") { message.EventMessageBodyPart1 = "You called " + displayName + "."; } else { message.EventMessageBodyPart1 = displayName + " has called you."; } double nbSecs = Math.Round((double)message.CallDuration / 1000); int mns = (int)(nbSecs / 60); int sec = (int)Math.Round(nbSecs - (mns * 60)); message.EventMessageBodyPart2 = "Duration: " + ((mns > 0) ? mns + ((mns > 1) ? "mns " : "mn ") : "") + ((sec > 0) ? sec + "s" : ""); } else { if (message.CallOriginator == "True") { message.EventMessageBodyPart1 = "You called " + displayName + "."; } else { message.EventMessageBodyPart1 = displayName + " has called you."; } message.EventMessageBodyPart2 = (message.CallState == CallLog.LogState.MISSED.ToString()) ? "Missed call" : "Failed call"; message.EventMessageBodyPart2Color = Color.Red; } } else { log.Debug("[SetEventPartFromCallLog] - message.Id:[{0}] - UnknowContactJid:[{1}]", message.Id, message.CallOtherJid); // We ask to have more info about this contact using AvatarPool avatarPool.AddUnknownContactToPoolByJid(message.CallOtherJid); } }
private void SetReplyPartOfMessage(Model.Message message, Rainbow.Model.Message rbRepliedMessage) { // Store Jid of the message sender message.ReplyPeerJid = rbRepliedMessage.FromJid; if (String.IsNullOrEmpty(rbRepliedMessage.Content)) { if (rbRepliedMessage.FileAttachment != null) { message.ReplyBody = rbRepliedMessage.FileAttachment.Name; } else { message.ReplyBody = rbRepliedMessage.Id; // Bad display but should permit to debug this situation } } else { message.ReplyBody = rbRepliedMessage.Content; } log.Debug("[SetReplyPartOfMessage] - message.Id:[{0}] - replyMsgId:[{1}] - replyBody:[{2}] - ContactJid:[{3}]", message.Id, rbRepliedMessage.Id, message.ReplyBody, rbRepliedMessage.FromJid); Rainbow.Model.Contact contactReply = XamarinApplication.RbContacts.GetContactFromContactJid(rbRepliedMessage.FromJid); if (contactReply != null) { // Reply part is visible message.ReplyPartIsVisible = "True"; message.ReplyPeerId = contactReply.Id; message.ReplyPeerDisplayName = Util.GetContactDisplayName(contactReply); } else { log.Debug("[SetReplyPartOfMessage] - message.Id:[{0}] - replyMsgId:[{1}] - UnknownContactJid[{2}]", message.Id, rbRepliedMessage.Id, rbRepliedMessage.FromJid); // We ask to have more info about this contact using AvatarPool avatarPool.AddUnknownContactToPoolByJid(rbRepliedMessage.FromJid); } // We store info about this contact in reply context AddRepliedContactInvolved(rbRepliedMessage.FromJid); }
public static void StoreCurrentContact(Rainbow.Model.Contact currentContact) { if (!CreateDataStorageFolder()) { return; } String jsonString = Rainbow.Util.GetJsonStringFromObject(currentContact); String filepath = Path.Combine(Helper.GetDataStorageFolderPath(), CurrentContactStorageName); try { File.WriteAllText(filepath, jsonString); } catch (Exception e) { log.LogWarning("[StoreCurrentContact] Cannot store current contact - Error[{0}]", Rainbow.Util.SerializeException(e)); } }
public static Rainbow.Model.Contact RetrieveCurrentContact(String fileName = null) { if (!CreateDataStorageFolder()) { return(null); } Rainbow.Model.Contact result = null; String filepath; if (String.IsNullOrEmpty(fileName)) { filepath = Path.Combine(Helper.GetDataStorageFolderPath(), CurrentContactStorageName); } else { filepath = Path.Combine(Helper.GetDataStorageFolderPath(), fileName); } try { if (!File.Exists(filepath)) { return(null); } String jsonString = File.ReadAllText(filepath); result = JsonConvert.DeserializeObject <Rainbow.Model.Contact>(jsonString); } catch (Exception e) { log.LogWarning("[RetrieveBubbles] Error[{0}]", Rainbow.Util.SerializeException(e)); } return(result); }
private InstantMessaging.Model.Message GetMessageFromRBMessage(Rainbow.Model.Message rbMessage, String conversationType) { InstantMessaging.Model.Message message = null; if (rbMessage != null) { InstantMessaging.App XamarinApplication = (InstantMessaging.App)Xamarin.Forms.Application.Current; AvatarPool avatarPool = AvatarPool.Instance; //log.Debug("[GetMessageFromRBMessage] Message.Id:[{0}] - Message.ReplaceId:[{1}] - DateTime:[{2}] - Content:[{3}]", rbMessage.Id, rbMessage.ReplaceId, rbMessage.Date.ToString("o"), rbMessage.Content); message = new InstantMessaging.Model.Message(); message.EventMessageBodyPart2Color = Color.Black; // Set default value Rainbow.Model.Contact contact = XamarinApplication.RbContacts.GetContactFromContactJid(rbMessage.FromJid); if (contact != null) { message.PeerId = contact.Id; message.PeerDisplayName = Util.GetContactDisplayName(contact); message.BackgroundColor = Color.FromHex(Rainbow.Helpers.AvatarPool.GetColorFromDisplayName(message.PeerDisplayName)); } else { message.BackgroundColor = Color.FromHex(Rainbow.Helpers.AvatarPool.GetColorFromDisplayName("")); // We ask to have more info about this contact usin AvatarPool avatarPool.AddUnknownContactToPoolByJid(rbMessage.FromJid); } // We have the display name only in Room / Bubble context message.PeerDisplayNameIsVisible = (conversationType == Rainbow.Model.Conversation.ConversationType.Room) ? "True" : "False"; message.Id = rbMessage.Id; message.PeerJid = rbMessage.FromJid; message.MessageDateTime = rbMessage.Date; message.MessageDateDisplay = Helper.HumanizeDateTime(rbMessage.Date); // Receipt SetReceiptPartOfMessage(message, rbMessage.Receipt); // Is-it an "Event message" ? String content; if (!String.IsNullOrEmpty(rbMessage.BubbleEvent)) { message.IsEventMessage = "True"; message.EventMessageBodyPart1 = Helper.GetBubbleEventMessageBody(contact, rbMessage.BubbleEvent); } // Is-it an "CallLog message" ? else if (rbMessage.CallLogAttachment != null) { SetCallLogPartOfMessage(message, rbMessage.CallLogAttachment); } else { message.IsEventMessage = "False"; message.BodyFontAttributes = FontAttributes.None; message.BodyColor = (message.PeerJid == currentContactJid) ? Color.Black : Color.White; if (!String.IsNullOrEmpty(rbMessage.Content)) { content = rbMessage.Content; } else { if (String.IsNullOrEmpty(rbMessage.ReplaceId)) { content = ""; } else { content = "This message was deleted."; message.BodyFontAttributes = FontAttributes.Italic; message.BodyColor = (message.PeerJid == currentContactJid) ? Color.Gray : Color.FromHex(Rainbow.Helpers.AvatarPool.GetDarkerColorFromDisplayName(message.PeerDisplayName)); } } // Edited text visible ? message.EditedIsVisible = String.IsNullOrEmpty(rbMessage.ReplaceId) ? "False" : "True"; // Reply part // By default is not displayed message.ReplyPartIsVisible = "False"; if (rbMessage.ReplyMessage != null) { // Store Id of this reply message message.ReplyId = rbMessage.ReplyMessage.Id; // Set background color message.ReplyBackgroundColor = Color.FromHex(Rainbow.Helpers.AvatarPool.GetDarkerColorFromDisplayName(message.PeerDisplayName)); // We need to get Name and text of the replied message ... Rainbow.Model.Message rbRepliedMessage = XamarinApplication.RbInstantMessaging.GetOneMessageFromConversationIdFromCache(this.conversationId, rbMessage.ReplyMessage.Id); if (rbRepliedMessage != null) { SetReplyPartOfMessage(message, rbRepliedMessage); } else { AddUnknownRepliedMessageInvolved(rbMessage.ReplyMessage.Id, rbMessage.ReplyMessage.Stamp); } } else { // Set default color to avoir warning message.ReplyBackgroundColor = Color.White; } // FileAttachment if (rbMessage.FileAttachment != null) { // Set Global info message.FileAttachmentIsVisible = "True"; message.FileDefaultInfoIsVisible = "True"; message.FileId = rbMessage.FileAttachment.Id; message.FileName = rbMessage.FileAttachment.Name; message.FileSize = Helper.HumanizeFileSize(rbMessage.FileAttachment.Size); if (filePool.IsThumbnailFileAvailable(conversationId, rbMessage.FileAttachment.Id, rbMessage.FileAttachment.Name)) { SetFileAttachmentSourceOfMessage(message, rbMessage.FileAttachment.Id); } else { // Ask more info about this file filePool.AskFileDescriptorDownload(this.conversationId, rbMessage.FileAttachment.Id); // Set default icon message.FileAttachmentSource = "icon_unknown_blue"; message.FileAttachmentSourceWidth = 50; message.FileAttachmentSourceHeight = 50; } } else { message.FileAttachmentIsVisible = "False"; message.FileDefaultInfoIsVisible = "False"; message.FileAttachmentSourceWidth = 0; message.FileAttachmentSourceHeight = 0; } message.Body = content; message.BodyIsVisible = String.IsNullOrEmpty(message.Body) ? "False" : "True"; } // We store info about this contact in message context AddContactInvolved(message.PeerJid); } return(message); }
public static ConversationLightViewModel GetConversationFromRBConversation(Rainbow.Model.Conversation rbConversation) { ConversationLightViewModel conversation = null; if (rbConversation != null) { InstantMessaging.App CurrentApplication = (InstantMessaging.App)System.Windows.Application.Current; AvatarPool avatarPool = AvatarPool.Instance; conversation = new ConversationLightViewModel(); if (rbConversation.Type == Rainbow.Model.Conversation.ConversationType.Room) { conversation.Name = rbConversation.Name; conversation.Topic = rbConversation.Topic; conversation.Jid = rbConversation.Jid_im; conversation.PresenceSource = ""; } else if (rbConversation.Type == Rainbow.Model.Conversation.ConversationType.User) { // Get Display name of this user Rainbow.Model.Contact contact = CurrentApplication.RbContacts.GetContactFromContactId(rbConversation.PeerId); if (contact != null) { conversation.Name = Util.GetContactDisplayName(contact); conversation.Topic = ""; conversation.Jid = contact.Jid_im; Presence presence = CurrentApplication.RbContacts.GetAggregatedPresenceFromContactId(rbConversation.PeerId); conversation.PresenceSource = InstantMessaging.Helpers.Helper.GetPresenceSourceFromPresence(presence, rbConversation.PeerId == CurrentApplication.CurrentUserId); } else { // We ask to have more info about this contact using AvatarPool log.LogDebug("[GetConversationFromRBConversation] - unknown contact - contactId:[{0}]", rbConversation.PeerId); avatarPool.AddUnknownContactToPoolById(rbConversation.PeerId); // Try to get info from pool AvatarsData.LightContact lightContact = avatarPool.GetLightContact(rbConversation.PeerId, rbConversation.Jid_im); if (lightContact != null) { conversation.Name = lightContact.DisplayName; conversation.Topic = ""; conversation.PeerId = lightContact.Id; conversation.Jid = lightContact.Jid; conversation.PresenceSource = "presence_offline.png"; } } } else { //TODO ( bot case) log.LogDebug("[GetConversationFromRBConversation] Conversation from model not created - Id:[{0}]", rbConversation.Id); return(null); } conversation.Id = rbConversation.Id; conversation.PeerId = rbConversation.PeerId; conversation.Type = rbConversation.Type; conversation.NbMsgUnread = rbConversation.UnreadMessageNumber; conversation.LastMessage = rbConversation.LastMessageText; conversation.LastMessageDateTime = rbConversation.LastMessageDate; } return(conversation); }
public static FavoriteViewModel GetFavoriteFromRbFavorite(Rainbow.Model.Favorite rbFavorite) { FavoriteViewModel result = null; if (rbFavorite != null) { InstantMessaging.App CurrentApplication = (InstantMessaging.App)System.Windows.Application.Current; AvatarPool avatarPool = AvatarPool.Instance; result = new FavoriteViewModel(); Conversation rbConversation = CurrentApplication.RbConversations.GetConversationByPeerIdFromCache(rbFavorite.PeerId); if (rbConversation != null) { result.IsVisible = true; result.Jid = rbConversation.Jid_im; result.NbMsgUnread = rbConversation.UnreadMessageNumber; if (rbConversation.Type == Rainbow.Model.Conversation.ConversationType.Room) { result.Name = rbConversation.Name; result.PresenceSource = ""; } else if (rbConversation.Type == Rainbow.Model.Conversation.ConversationType.User) { // Get Display name of this user Rainbow.Model.Contact contact = CurrentApplication.RbContacts.GetContactFromContactId(rbConversation.PeerId); if (contact != null) { Presence presence = CurrentApplication.RbContacts.GetAggregatedPresenceFromContactId(rbConversation.PeerId); result.Name = Util.GetContactDisplayName(contact); result.PresenceSource = InstantMessaging.Helpers.Helper.GetPresenceSourceFromPresence(presence, rbConversation.PeerId == CurrentApplication.CurrentUserId); } else { // We ask to have more info about this contact using AvatarPool log.LogDebug("[GetFavoriteFromRbFavorite] - unknown contact - contactId:[{0}]", rbConversation.PeerId); avatarPool.AddUnknownContactToPoolById(rbConversation.PeerId); // Try to get info from pool AvatarsData.LightContact lightContact = avatarPool.GetLightContact(rbConversation.PeerId, rbConversation.Jid_im); if (lightContact != null) { result.Name = lightContact.DisplayName; result.PresenceSource = "presence_offline.png"; } } } else { //TODO (bot case) log.LogDebug("[GetFavoriteFromRbFavorite] Conversation from model not created - Id:[{0}]", rbConversation.Id); return(null); } } else { Bubble bubble = CurrentApplication.RbBubbles.GetBubbleByIdFromCache(rbFavorite.PeerId); if (bubble != null) { result.IsVisible = true; result.Name = bubble.Name; result.Jid = bubble.Jid; result.NbMsgUnread = 0; result.PresenceSource = ""; } else { result.IsVisible = false; result.Name = ""; result.Jid = ""; result.NbMsgUnread = 0; result.PresenceSource = ""; log.LogWarning("[GetFavoriteFromRbFavorite] Cannot get Conversation or Bubble object from Favorite - FavoriteId:[{0}] - FavoritePeerId:[{1}]", rbFavorite.Id, rbFavorite.PeerId); } //TODO - need to get conversation ? } result.Id = rbFavorite.Id; result.PeerId = rbFavorite.PeerId; result.Position = rbFavorite.Position; // Name, PresenceSource, NbMsgUnread and IsVisible are set before } return(result); }