Exemple #1
0
        /// <summary>
        /// LoadConversationToStack Loads the users conversation
        /// </summary>
        /// <param name="Stack"> the parent stack</param>
        /// <param name="RecepientID"> the ID of the receiver</param>
        public static async Task LoadConversationToStack(StackLayout Stack, int RecepientID, bool IsLocalLoaded, Grid ChatControlGrid, int LastID = 0)
        {
            int LastMessageID = LastID;

            JObject ConversationDecodedJson  = new JObject();
            String  ConversationResponseJson = "";

            //if false, then local db is empty else info is loaded from local db
            if (!IsLocalLoaded)
            {
                Device.BeginInvokeOnMainThread(delegate { Stack.Children.Clear(); });

                System.Diagnostics.Debug.WriteLine("IN IF, Old Last Server " + LastServerChatId);

                ConversationResponseJson = await ChatModel.Chat(Utilities.PostDataEncoder(new Dictionary <int, string[]>
                {
                    { 0, new String[] { "sender", Utilities.ID.ToString() } },
                    { 1, new String[] { "receiver", RecepientID.ToString() } },
                }), "chat/conversations");

                ConversationDecodedJson = JObject.Parse(ConversationResponseJson);

                LastMessageID = (int)ConversationDecodedJson["conversations"].Last["id"];

                var LastMessageDate = DateTime.Parse(ConversationDecodedJson["conversations"].Last["time"].ToString());

                if ((DateTime.Now.Day - LastMessageDate.Day) >= 7)///one week since last chat disabled messaging
                {
                    Device.BeginInvokeOnMainThread(delegate
                    {
                        ChatControlGrid.IsVisible = false;
                    });
                }

                await Utilities.RunTask(async delegate
                {
                    foreach (var conversation in ConversationDecodedJson["conversations"])
                    {
                        await ChatHandler.InsertMessage(conversation["message"].ToString(), conversation["time"].ToString(), (bool)conversation["sent"], RecepientID, MessageType.Text, true, (int)conversation["id"], Utilities.ID.ToString() + "-" + RecepientID);

                        if (conversation["message"].ToString() == "{Appointment Accepted, Default Message}")
                        {
                            var ChildStack = new Grid {
                                HorizontalOptions = LayoutOptions.FillAndExpand, Padding = new Thickness(10, 2, 10, 2)
                            };

                            ChildStack.Children.Add(new Label
                            {
                                Text                    = conversation["message"].ToString().Replace(", Default Message", "").Replace("{", "").Replace("}", ""),
                                BackgroundColor         = (Color)App.Current.Resources["_MedAppBlack"],
                                TextColor               = Color.White,
                                HorizontalTextAlignment = TextAlignment.Center,
                                VerticalTextAlignment   = TextAlignment.Center,
                                HeightRequest           = 30,
                                HorizontalOptions       = LayoutOptions.FillAndExpand
                            });

                            Device.BeginInvokeOnMainThread(() =>
                            {
                                Stack.Children.Add(ChildStack);
                                ControlTagger <String> .SetTag(Stack, conversation["id"].ToString());
                            });
                        }
                        else
                        {
                            DateTime MessageTime     = DateTime.Parse(conversation["time"].ToString());
                            String MessageTimeString = "";
                            if (MessageTime.Day != DateTime.Now.Day && MessageTime.Month == DateTime.Now.Month)
                            {
                                MessageTimeString = MessageTime.ToString("");
                            }
                            Device.BeginInvokeOnMainThread(() =>
                            {
                                Stack.Children.Add(SingleMessageTemplate.CreateMessage01((Convert.ToBoolean(conversation["sent"]) ? 1 : 0), conversation["message"].ToString(), Utilities.GetValidatedTime(MessageTime, ChatSectionType.Chat)));
                                ControlTagger <String> .SetTag(Stack, conversation["id"].ToString());
                            });
                        }
                    }
                });
            }

            ///Update chat in Background
            while (ListenForNewConversation)
            {
                ConversationResponseJson = await ChatModel.Chat(Utilities.PostDataEncoder(new Dictionary <int, string[]>
                {
                    { 0, new String[] { "sender", Utilities.ID.ToString() } },
                    { 1, new String[] { "receiver", RecepientID.ToString() } },
                }), "chat/conversations");

                ConversationDecodedJson = JObject.Parse(ConversationResponseJson);

                if (LastMessageID < (int)ConversationDecodedJson["conversations"].Last["id"])
                {
                    await Utilities.RunTask(async delegate
                    {
                        foreach (var conversation in ConversationDecodedJson["conversations"])
                        {
                            if ((int)conversation["id"] > LastMessageID)
                            {
                                LastServerChatId = (int)conversation["id"];

                                ///save updates locally
                                await ChatHandler.InsertMessage(conversation["message"].ToString(), conversation["time"].ToString(), (bool)conversation["sent"], RecepientID, MessageType.Text, true, (int)conversation["id"], Utilities.ID + "-" + RecepientID);

                                if (conversation["message"].ToString() == "{Appointment Accepted, Default Message}")
                                {
                                    var ChildStack = new Grid {
                                        HorizontalOptions = LayoutOptions.FillAndExpand, Padding = new Thickness(10, 2, 10, 2)
                                    };

                                    ChildStack.Children.Add(new Label
                                    {
                                        Text                    = conversation["message"].ToString().Replace(", Default Message", "").Replace("{", "").Replace("}", ""),
                                        BackgroundColor         = (Color)App.Current.Resources["_MedAppBlack"],
                                        TextColor               = Color.White,
                                        HorizontalTextAlignment = TextAlignment.Center,
                                        VerticalTextAlignment   = TextAlignment.Center,
                                        HeightRequest           = 30,
                                        HorizontalOptions       = LayoutOptions.FillAndExpand
                                    });

                                    Device.BeginInvokeOnMainThread(() =>
                                    {
                                        Stack.Children.Add(ChildStack);
                                        ControlTagger <int> .SetTag(Stack, (int)conversation["id"]);
                                    });
                                }
                                else
                                {
                                    DateTime MessageTime     = DateTime.Parse(conversation["time"].ToString());
                                    String MessageTimeString = "";
                                    if (MessageTime.Day != DateTime.Now.Day && MessageTime.Month == DateTime.Now.Month)
                                    {
                                        MessageTimeString = MessageTime.ToString("");
                                    }
                                    Device.BeginInvokeOnMainThread(() =>
                                    {
                                        Stack.Children.Add(SingleMessageTemplate.CreateMessage01((Convert.ToBoolean(conversation["sent"]) ? 1 : 0), conversation["message"].ToString(), Utilities.GetValidatedTime(MessageTime, ChatSectionType.Chat)));
                                        ControlTagger <int> .SetTag(Stack, (int)conversation["id"]);
                                    });
                                }
                            }
                        }
                    });

                    LastMessageID = (int)ConversationDecodedJson["conversations"].Last["id"];
                }
            }
        }
Exemple #2
0
        ///
        /// Local Database Controllers
        ///

        /// <summary>
        ///
        /// </summary>
        /// <param name="Stack"></param>
        /// <param name="RecepientID"></param>
        /// <returns></returns>
        public static async Task <Dictionary <String, String> > LocalConversationToStack(StackLayout Stack, int RecepientID)
        {
            Device.BeginInvokeOnMainThread(delegate { Stack.Children.Clear(); });

            Dictionary <String, String> ReturnedResult = new Dictionary <string, string>();

            int  LastServerChatID = 0;
            bool MadeChanges      = false;

            var Result = await ChatHandler.GetConversation(RecepientID);

            if (Result.Count > 0)
            {
                await Utilities.RunTask(delegate
                {
                    foreach (KeyValuePair <int, List <Object> > Pair in Result)
                    {
                        LastServerChatID = (int)Pair.Value[6];

                        if (Pair.Value[0].ToString() == "{Appointment Accepted, Default Message}")
                        {
                            var ChildStack = new Grid {
                                HorizontalOptions = LayoutOptions.FillAndExpand, Padding = new Thickness(10, 2, 10, 2)
                            };

                            ChildStack.Children.Add(new Label
                            {
                                Text                    = Pair.Value[0].ToString().Replace(", Default Message", "").Replace("{", "").Replace("}", ""),
                                BackgroundColor         = (Color)App.Current.Resources["_MedAppBlack"],
                                TextColor               = Color.White,
                                HorizontalTextAlignment = TextAlignment.Center,
                                VerticalTextAlignment   = TextAlignment.Center,
                                HeightRequest           = 30,
                                HorizontalOptions       = LayoutOptions.FillAndExpand
                            });

                            Device.BeginInvokeOnMainThread(() =>
                            {
                                Stack.Children.Add(ChildStack);
                            });
                        }
                        else
                        {
                            DateTime MessageTime     = DateTime.Parse(Pair.Value[1].ToString());
                            String MessageTimeString = "";
                            if (MessageTime.Day != DateTime.Now.Day && MessageTime.Month == DateTime.Now.Month)
                            {
                                MessageTimeString = MessageTime.ToString("");
                            }
                            Device.BeginInvokeOnMainThread(() =>
                            {
                                Stack.Children.Add(SingleMessageTemplate.CreateMessage01((Convert.ToBoolean(Pair.Value[4]) ? 1 : 0), Pair.Value[0].ToString(), Utilities.GetValidatedTime(MessageTime, ChatSectionType.Chat)));
                                ControlTagger <String> .SetTag(Stack, Pair.Key.ToString());
                            });
                        }
                    }
                    System.Diagnostics.Debug.WriteLine("Done With Local");
                    System.Diagnostics.Debug.WriteLine("Last Local ID " + LastServerChatID);
                });

                MadeChanges = true;
            }

            ReturnedResult.Add("MadeChanges", MadeChanges.ToString());
            ReturnedResult.Add("LastID", LastServerChatID.ToString());

            return(ReturnedResult);
        }