private void Message_ConversationsListComplete(object s, MessageGetConversationListCompletedEventArgs e) { LOLMessageClient client = (LOLMessageClient)s; client.MessageGetConversationListCompleted -= Message_ConversationsListComplete; if (e.Error == null) { if (MessageConversations.conversationsList.Count > 0) MessageConversations.conversationsList.Clear(); MessageConversations.conversationsList = e.Result; AndroidData.LastConvChecked = DateTime.Now; if (MessageConversations.initialMessages == null) MessageConversations.initialMessages = new List<MessageDB>(); else MessageConversations.initialMessages.Clear(); List<Guid> messagesToGet = new List<Guid>(); for (int i = 0; i < MessageConversations.conversationsList.Count; ++i) { MessageDB message = new MessageDB(); message = dbm.GetMessage(MessageConversations.conversationsList [i].MessageIDs [0].ToString()); if (message == null) { messagesToGet.Add(MessageConversations.conversationsList [i].MessageIDs [0]); #if DEBUG System.Diagnostics.Debug.WriteLine("MessageID (being sucked) = {0}", MessageConversations.conversationsList [i].MessageIDs [0]); #endif } else { MessageConversations.initialMessages.Add(message); #if DEBUG System.Diagnostics.Debug.WriteLine("MessageID (already stored) = {0}", message.MessageGuid); #endif } } if (messagesToGet.Count != 0) { client.MessageGetByListCompleted += Message_GetByListCompleted; client.MessageGetByListAsync(AndroidData.CurrentUser.AccountID, messagesToGet, AndroidData.CurrentUser.AccountID, new Guid(AndroidData.ServiceAuthToken)); } else { List<Guid> users = new List<Guid>(); for (int i = 0; i < MessageConversations.initialMessages.Count; ++i) { foreach (MessageRecipientDB guid in MessageConversations.initialMessages[i].MessageRecipientDBList) { UserDB user = new UserDB(); user = dbm.GetUserWithAccountID(guid.AccountGuid); if (user == null && (guid.AccountGuid != AndroidData.CurrentUser.AccountID.ToString())) users.Add(new Guid(guid.AccountGuid)); } } if (users.Count == 0) { RunOnUiThread(delegate { if (progress != null) progress.Dismiss(); CreateUI(); }); } else { createIt = true; Contacts.AddUnknownUser auu = new Contacts.AddUnknownUser(users, context); } } } else { int threadCount = waitThreadCount; for (int i = 0; i < threadCount; i++) { signal.Set(); }//end for isRefreshing = false; RunOnUiThread(() => GeneralUtils.Alert(context, Application.Context.GetString(Resource.String.errorConversationGrabTitle), Application.Context.GetString(Resource.String.errorConversationGrabMessage))); } }
private void Service_MessageGetConversationsCompleted(object sender, MessageGetConversationListCompletedEventArgs e) { LOLMessageClient service = (LOLMessageClient)sender; service.MessageGetConversationListCompleted -= Service_MessageGetConversationsCompleted; if (null == e.Error) { LOLMessageDelivery.LOLMessageConversation[] result = e.Result.ToArray(); List<MessageDB> msgList = new List<MessageDB>(); UserDB contactUser = null; foreach (LOLMessageDelivery.LOLMessageConversation eachMessage in result) { if (eachMessage.Errors.Count > 0) { #if DEBUG System.Diagnostics.Debug.WriteLine("Error retrieving message: {0}", StringUtils.CreateErrorMessageFromMessageGeneralErrors(eachMessage.Errors)); #endif } else { contactUser = null; for (int i = 0; i < eachMessage.MessageIDs.Count; ++i) { MessageDB msgDB = MessageDB.ConvertFromMessage(dbm.GetMessage(eachMessage.MessageIDs [i].ToString())); msgList.Add(msgDB); #if DEBUG System.Diagnostics.Debug.WriteLine("Message in conversation received! {0}", msgDB); #endif contactUser = msgDB.FromAccountID == AndroidData.CurrentUser.AccountID ? UserDB.ConvertFromUser(AndroidData.CurrentUser) : dbm.GetUserWithAccountID(msgDB.FromAccountGuid); this.MessageItems [eachMessage.MessageIDs [i]] = new MessageInfo(msgDB, contactUser); } }//end if else }//end foreach if (msgList.Count > 0) dbm.InsertOrUpdateMessages(msgList); // Get message users Pair<Queue<Guid>, Queue<Guid>> stateObj = new Pair<Queue<Guid>, Queue<Guid>>(new Queue<Guid>(), new Queue<Guid>()); foreach (MessageInfo eachMessageInfo in this.MessageItems.Values.Where(s => s.Message.FromAccountID != AndroidData.CurrentUser.AccountID)) { if (!dbm.CheckUserExists(eachMessageInfo.Message.FromAccountGuid)) { stateObj.ItemA.Enqueue(eachMessageInfo.Message.MessageID); stateObj.ItemB.Enqueue(eachMessageInfo.Message.FromAccountID); }//end if }//end foreach if (stateObj.ItemA.Count > 0) { LOLConnectClient userService = new LOLConnectClient(LOLConstants.DefaultHttpBinding, LOLConstants.LOLConnectEndpoint); userService.UserGetSpecificCompleted += Service_UserGetSpecificCompletedForSenders; userService.UserGetSpecificAsync(AndroidData.CurrentUser.AccountID, stateObj.ItemB.Peek(), new Guid(AndroidData.ServiceAuthToken), stateObj); } else { //fromLocalOnly = true; RunOnUiThread(delegate { if (progress != null) progress.Dismiss(); //GetRowsForMessages (); CreateMessagesUI(); }); }//end if else } else { #if(DEBUG) System.Diagnostics.Debug.WriteLine("Exception in MessageGetConversationsCompleted! {0}--{1}", e.Error.Message, e.Error.StackTrace); #endif }//end if else }