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
        }