// Retrieve the transaction from local cache storage private void checkTransaction() { string confirmed_text = SpixiLocalization._SL("wallet-sent-confirmed"); Transaction ctransaction = TransactionCache.getTransaction(transaction.id); if (ctransaction == null || ctransaction.applied == 0) { ctransaction = transaction; confirmed_text = SpixiLocalization._SL("wallet-sent-unconfirmed"); } IxiNumber amount = ctransaction.amount; // Convert unix timestamp string time = Utils.UnixTimeStampToString(Convert.ToDouble(ctransaction.timeStamp)); byte[] addr = new Address(ctransaction.pubKey).address; if (addr.SequenceEqual(IxianHandler.getWalletStorage().getPrimaryAddress())) { // this is a sent payment foreach (var entry in ctransaction.toList) { //Utils.sendUiCommand(webView, "addSender", Base58Check.Base58CheckEncoding.EncodePlain(entry.Key) + ": " + entry.Value.ToString(), time); Utils.sendUiCommand(webView, "addSender", Encoding.ASCII.GetString(ctransaction.data) + ": " + entry.Value.ToString(), time); } } Utils.sendUiCommand(webView, "setData", amount.ToString(), ctransaction.fee.ToString(), time, confirmed_text, (ctransaction.fee / ctransaction.amount).ToString() + "%", Transaction.txIdV8ToLegacy(transaction.id)); return; }
// Retrieve the transaction from local cache storage private void checkTransaction() { string confirmed_text = "CONFIRMED"; Transaction ctransaction = TransactionCache.getTransaction(transaction.id); if (ctransaction == null || ctransaction.applied == 0) { requestTransactionData(); ctransaction = transaction; confirmed_text = "UNCONFIRMED"; } IxiNumber amount = ctransaction.amount; string addresses = ""; byte[] addr = new Address(ctransaction.pubKey).address; if (addr.SequenceEqual(Node.walletStorage.getPrimaryAddress())) { // this is a sent payment foreach (var entry in ctransaction.toList) { Friend friend = FriendList.getFriend(entry.Key); if (friend != null) { addresses += friend.nickname + ": " + entry.Value.ToString() + "|"; } else { addresses += Base58Check.Base58CheckEncoding.EncodePlain(entry.Key) + ": " + entry.Value.ToString() + "|"; } } } else { // this is a received payment amount = 0; Utils.sendUiCommand(webView, "setReceivedMode"); foreach (var entry in ctransaction.toList) { if (entry.Key.SequenceEqual(Node.walletStorage.getPrimaryAddress())) { addresses += Base58Check.Base58CheckEncoding.EncodePlain(entry.Key) + ": " + entry.Value.ToString() + "|"; amount += entry.Value; } } } // Convert unix timestamp string time = Utils.UnixTimeStampToString(Convert.ToDouble(ctransaction.timeStamp)); Utils.sendUiCommand(webView, "setData", amount.ToString(), ctransaction.fee.ToString(), addresses, time, confirmed_text, (ctransaction.fee / amount).ToString() + "%"); return; }
// Retrieve the transaction from local cache storage private bool checkTransaction() { Transaction ctransaction = TransactionCache.getTransaction(transaction.id); if (ctransaction == null) { requestTransactionData(); return(true); } string nickname = "Unknown"; Friend friend = null; byte[] addr = ctransaction.toList.Keys.First(); // Check if this is a received payment if (addr.SequenceEqual(Node.walletStorage.getPrimaryAddress())) { // TODO FIXME /* webView.Eval("setReceivedMode()"); * friend = FriendList.getFriend(transaction.from); * addr = ctransaction.from;*/ } else { // This is a sent payment friend = FriendList.getFriend(addr); } if (friend != null) { nickname = friend.nickname; } // Convert unix timestamp string time = Utils.UnixTimeStampToString(Convert.ToDouble(ctransaction.timeStamp)); webView.Eval(string.Format("setConfirmedData('{0}', '{1}', '{2}', '{3}', '{4}')", ctransaction.amount.ToString(), ctransaction.fee.ToString(), Base58Check.Base58CheckEncoding.EncodePlain(addr), nickname, time)); return(false); }
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"); message.read = true; 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()); } updateMessageReadStatus(message); }
// Retrieve the transaction from local cache storage private void checkTransaction() { string confirmed_text = SpixiLocalization._SL("wallet-sent-confirmed"); Transaction ctransaction = TransactionCache.getTransaction(transaction.id); if (ctransaction == null || ctransaction.applied == 0) { ctransaction = transaction; confirmed_text = SpixiLocalization._SL("wallet-sent-unconfirmed"); } IxiNumber amount = ctransaction.amount; // Convert unix timestamp string time = Utils.UnixTimeStampToString(Convert.ToDouble(ctransaction.timeStamp)); byte[] addr = new Address(ctransaction.pubKey).address; if (addr.SequenceEqual(Node.walletStorage.getPrimaryAddress())) { // this is a sent payment foreach (var entry in ctransaction.toList) { Friend friend = FriendList.getFriend(entry.Key); if (friend != null) { Utils.sendUiCommand(webView, "addSender", friend.nickname + ": " + entry.Value.ToString(), time); } else { Utils.sendUiCommand(webView, "addSender", Base58Check.Base58CheckEncoding.EncodePlain(entry.Key) + ": " + entry.Value.ToString(), time); } } } else { // this is a received payment amount = 0; Utils.sendUiCommand(webView, "setReceivedMode"); byte[] sender_address = new Address(ctransaction.pubKey).address; Friend friend = FriendList.getFriend(sender_address); if (friend != null) { Utils.sendUiCommand(webView, "addSender", friend.nickname, time); } else { Utils.sendUiCommand(webView, "addSender", Base58Check.Base58CheckEncoding.EncodePlain(sender_address), time); } foreach (var entry in ctransaction.toList) { if (IxianHandler.getWalletStorage().isMyAddress(entry.Key)) { // TODO show this as well under sent to; also do the reverse for sent payment //addresses += Base58Check.Base58CheckEncoding.EncodePlain(entry.Key) + ": " + entry.Value.ToString() + "|"; amount += entry.Value; } } } Utils.sendUiCommand(webView, "setData", amount.ToString(), ctransaction.fee.ToString(), time, confirmed_text, (ctransaction.fee / ctransaction.amount).ToString() + "%", Transaction.txIdV8ToLegacy(transaction.id)); return; }
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"); message.read = true; return; } } else { // Don't show if the friend is already approved if (message.type == FriendMessageType.requestAdd) { return; } } string prefix = "addMe"; string avatar = "";//Node.localStorage.getOwnAvatarPath(); string address = ""; string nick = ""; if (friend.bot) { if (message.senderAddress != null) { address = Base58Check.Base58CheckEncoding.EncodePlain(message.senderAddress); } nick = message.senderNick; if (nick == "") { nick = address; } } if (!message.localSender) { prefix = "addThem"; avatar = "img/spixiavatar.png"; } if (message.type == FriendMessageType.requestFunds) { string status = "PENDING"; string status_icon = "fa-clock"; string amount = message.message; if (message.message.StartsWith("::")) { status = "DECLINED"; status_icon = "fa-exclamation-circle"; amount = message.message.Substring(2); } else if (message.message.StartsWith(":")) { Transaction transaction = TransactionCache.getTransaction(message.message.Substring(1)); if (transaction == null) { transaction = TransactionCache.getUnconfirmedTransaction(message.message.Substring(1)); } amount = "?"; if (transaction != null) { amount = transaction.amount.ToString(); if (transaction.applied > 0) { status = "CONFIRMED"; status_icon = "fa-check-circle"; } } } if (message.localSender) { Utils.sendUiCommand(webView, "addPaymentRequest", Crypto.hashToString(message.id), address, nick, avatar, "Payment request SENT", amount, status, status_icon, Clock.getRelativeTime(message.timestamp), message.localSender.ToString()); } else { Utils.sendUiCommand(webView, "addPaymentRequest", Crypto.hashToString(message.id), address, nick, avatar, "Payment request RECEIVED", amount, status, status_icon, Clock.getRelativeTime(message.timestamp)); } message.read = true; return; } if (message.type == FriendMessageType.sentFunds) { message.read = true; Transaction transaction = TransactionCache.getTransaction(message.message); if (transaction == null) { transaction = TransactionCache.getUnconfirmedTransaction(message.message); } string status = "PENDING"; string status_icon = "fa-clock"; string amount = "?"; if (transaction != null) { if (transaction.applied > 0) { status = "CONFIRMED"; status_icon = "fa-check-circle"; } amount = transaction.amount.ToString(); } // Call webview methods on the main UI thread only if (message.localSender) { Utils.sendUiCommand(webView, "addPaymentRequest", Crypto.hashToString(message.id), address, nick, avatar, "Payment SENT", amount, status, status_icon, Clock.getRelativeTime(message.timestamp), message.localSender.ToString()); } else { Utils.sendUiCommand(webView, "addPaymentRequest", Crypto.hashToString(message.id), address, nick, avatar, "Payment RECEIVED", amount, status, status_icon, Clock.getRelativeTime(message.timestamp)); } return; } 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]; Utils.sendUiCommand(webView, "addFile", Crypto.hashToString(message.id), address, nick, avatar, uid, name, Clock.getRelativeTime(message.timestamp), message.localSender.ToString(), message.confirmed.ToString(), message.read.ToString()); } } else { // 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, Clock.getRelativeTime(message.timestamp), message.confirmed.ToString(), message.read.ToString()); } if (!message.read && !message.localSender) { message.read = true; Node.localStorage.writeMessagesFile(friend.walletAddress, friend.messages); // Send read confirmation StreamMessage msg_received = new StreamMessage(); msg_received.type = StreamMessageCode.info; msg_received.sender = IxianHandler.getWalletStorage().getPrimaryAddress(); msg_received.recipient = friend.walletAddress; msg_received.data = new SpixiMessage(message.id, SpixiMessageCode.msgRead, null).getBytes(); msg_received.transaction = new byte[1]; msg_received.sigdata = new byte[1]; msg_received.encryptionType = StreamMessageEncryptionCode.none; StreamProcessor.sendMessage(friend, msg_received, true); } }
public void insertMessage(FriendMessage message) { if (friend.approved == false) { if (message.type == FriendMessageType.requestAdd) { // Call webview methods on the main UI thread only Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { webView.Eval(string.Format("showContactRequest(true)")); }); message.read = true; return; } } else { // Don't show if the friend is already approved if (message.type == FriendMessageType.requestAdd) { return; } } if (message.type == FriendMessageType.requestFunds) { // Call webview methods on the main UI thread only Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { webView.Eval(string.Format("addPaymentRequest('{0}')", message.message)); }); message.read = true; return; } if (message.type == FriendMessageType.sentFunds) { message.read = true; Transaction transaction = TransactionCache.getTransaction(message.message); if (transaction == null) { transaction = TransactionCache.getUnconfirmedTransaction(message.message); } if (transaction == null) { return; } // Call webview methods on the main UI thread only Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { webView.Eval(string.Format("addPaymentSent('{0}','{1}')", transaction.amount.ToString(), message.message)); }); return; } string prefix = "addMe"; string avatar = Node.localStorage.getOwnAvatarPath(); if (message.from == true) { prefix = "addThem"; avatar = "avatar.png"; } // Call webview methods on the main UI thread only Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { string escapedString = message.message.Replace("\"", """); webView.Eval(string.Format("{0}(\"{1}\",\"{2}\",\"{3}\")", prefix, avatar, escapedString, message.timestamp)); }); message.read = true; // Write to chat history if (message.from == false) { Node.localStorage.writeMessagesFile(friend.walletAddress, friend.messages); } }