public void onAppAccept(string session_id) { byte[] b_session_id = Crypto.stringToHash(session_id); if (VoIPManager.hasSession(b_session_id)) { VoIPManager.acceptCall(b_session_id); return; } CustomAppPage app_page = Node.customAppManager.acceptAppRequest(b_session_id); if (app_page != null) { Navigation.PushAsync(app_page, Config.defaultXamarinAnimations); }// TODO else error? }
public void insertMessage(FriendMessage message) { if (friend.approved == false) { if (message.type == FriendMessageType.requestAdd) { // Call webview methods on the main UI thread only Utils.sendUiCommand(webView, "showContactRequest", "1"); if (!message.read) { message.read = true; Node.localStorage.writeMessages(friend.walletAddress, friend.messages); } return; } } else { // Don't show if the friend is already approved if (message.type == FriendMessageType.requestAdd) { return; } } string prefix = "addMe"; string avatar = ""; string address = ""; string nick = ""; if (!message.localSender) { if (friend.bot) { if (message.senderAddress != null) { address = Base58Check.Base58CheckEncoding.EncodePlain(message.senderAddress); } nick = message.senderNick; if (nick == "") { if (message.senderAddress != null && friend.contacts.ContainsKey(message.senderAddress)) { nick = friend.contacts[message.senderAddress].nick; } } if (nick == "") { nick = address; } } prefix = "addThem"; if (message.senderAddress != null) { avatar = Node.localStorage.getAvatarPath(Base58Check.Base58CheckEncoding.EncodePlain(message.senderAddress)); } else { avatar = Node.localStorage.getAvatarPath(Base58Check.Base58CheckEncoding.EncodePlain(friend.walletAddress)); } if (avatar == null) { avatar = "img/spixiavatar.png"; } } if (message.type == FriendMessageType.requestFunds) { string status = "WAITING CONFIRMATION"; string status_icon = "fa-clock"; string amount = message.message; string txid = ""; bool enableView = false; if (!message.localSender) { enableView = true; } if (message.message.StartsWith("::")) { status = "DECLINED"; status_icon = "fa-exclamation-circle"; amount = message.message.Substring(2); txid = Crypto.hashToString(message.id); enableView = false; } else if (message.message.StartsWith(":")) { status = "PENDING"; txid = message.message.Substring(1); bool confirmed = true; Transaction transaction = TransactionCache.getTransaction(txid); if (transaction == null) { transaction = TransactionCache.getUnconfirmedTransaction(txid); confirmed = false; } amount = "?"; if (transaction != null) { amount = transaction.amount.ToString(); if (confirmed) { status = "CONFIRMED"; status_icon = "fa-check-circle"; } } else { // TODO think about how to make this more private CoreProtocolMessage.broadcastGetTransaction(txid, 0, null); } enableView = true; } if (message.localSender) { Utils.sendUiCommand(webView, "addPaymentRequest", Crypto.hashToString(message.id), txid, address, nick, avatar, "Payment request SENT", amount, status, status_icon, message.timestamp.ToString(), message.localSender.ToString(), message.confirmed.ToString(), message.read.ToString(), enableView.ToString()); } else { Utils.sendUiCommand(webView, "addPaymentRequest", Crypto.hashToString(message.id), txid, address, nick, avatar, "Payment request RECEIVED", amount, status, status_icon, message.timestamp.ToString(), "", message.confirmed.ToString(), message.read.ToString(), enableView.ToString()); } } if (message.type == FriendMessageType.sentFunds) { bool confirmed = true; Transaction transaction = TransactionCache.getTransaction(message.message); if (transaction == null) { transaction = TransactionCache.getUnconfirmedTransaction(message.message); confirmed = false; } string status = "PENDING"; string status_icon = "fa-clock"; string amount = "?"; if (transaction != null) { if (confirmed) { status = "CONFIRMED"; status_icon = "fa-check-circle"; } if (message.localSender) { amount = transaction.amount.ToString(); } else { amount = HomePage.calculateReceivedAmount(transaction).ToString(); } } else { // TODO think about how to make this more private CoreProtocolMessage.broadcastGetTransaction(message.message, 0, null); } // Call webview methods on the main UI thread only if (message.localSender) { Utils.sendUiCommand(webView, "addPaymentRequest", Crypto.hashToString(message.id), message.message, address, nick, avatar, "Payment SENT", amount, status, status_icon, message.timestamp.ToString(), message.localSender.ToString(), message.confirmed.ToString(), message.read.ToString(), "True"); } else { Utils.sendUiCommand(webView, "addPaymentRequest", Crypto.hashToString(message.id), message.message, address, nick, avatar, "Payment RECEIVED", amount, status, status_icon, message.timestamp.ToString(), "", message.confirmed.ToString(), message.read.ToString(), "True"); } } if (message.type == FriendMessageType.fileHeader) { string[] split = message.message.Split(new string[] { ":" }, StringSplitOptions.None); if (split != null && split.Length > 1) { string uid = split[0]; string name = split[1]; string progress = "0"; if (message.completed) { progress = "100"; } Utils.sendUiCommand(webView, "addFile", Crypto.hashToString(message.id), address, nick, avatar, uid, name, message.timestamp.ToString(), message.localSender.ToString(), message.confirmed.ToString(), message.read.ToString(), progress, message.completed.ToString()); } } if (message.type == FriendMessageType.standard) { // Normal chat message // Call webview methods on the main UI thread only Utils.sendUiCommand(webView, prefix, Crypto.hashToString(message.id), address, nick, avatar, message.message, message.timestamp.ToString(), message.confirmed.ToString(), message.read.ToString()); } if (message.type == FriendMessageType.voiceCall || message.type == FriendMessageType.voiceCallEnd) { string text; if (message.localSender) { text = "Outgoing call"; } else { text = "Incoming call"; } bool declined = false; if (message.message == "") { if (message.type == FriendMessageType.voiceCallEnd || !VoIPManager.hasSession(message.id)) { declined = true; if (message.localSender) { text = "No answer"; } else { text = "Missed call"; } } } else if (message.type == FriendMessageType.voiceCallEnd) { long seconds = Int32.Parse(message.message); long minutes = seconds / 60; seconds = seconds % 60; text = text + string.Format(" ended ({0}:{1})", minutes, seconds < 10 ? "0" + seconds : seconds.ToString()); } Utils.sendUiCommand(webView, "addCall", Crypto.hashToString(message.id), text, declined.ToString(), message.timestamp.ToString()); } updateMessageReadStatus(message); }