/// <summary> /// Отправка сообщения /// </summary> async void OnSendTapped(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(EditorMsg.Text)) { return; } string SendText = EditorMsg.Text; EditorMsg.Text = null; // Временное сообщение MessageThread msg = new MessageThread() { post_time = DateTime.Now, message_html = "Отправляем...", from = new From() { fname = "Bot Messenger", sname = "", login = "", profile_id = PlatformInvoke.profile_id } }; // Показываемм сообщение MessageDB.Add(msg); navigationDrawerList.ScrollTo(MessageDB[MessageDB.Count - 1], ScrollToPosition.MakeVisible, false); // Находим индекс сообщения int indexMSG = MessageDB.IndexOf(msg); // Запрос в API var sdk = new SDK.Threads(); var msgResponse = await sdk.Send(ThreadID, SendText); // Обновляем сообщение if (msgResponse != null) { MessageDB[indexMSG] = msgResponse; } else { MessageDB[indexMSG] = new MessageThread() { post_time = DateTime.Now, message_html = "Не удалось отправить сообщение :(<br />" + SendText, from = new From() { fname = "Bot Messenger => Ошибка запроса", sname = "", login = "******", profile_id = PlatformInvoke.profile_id } }; } }
async void GetNewMessage(FilterMSG filter) { var sdk = new SDK.Threads(); Refresh : try { // Обновляем список ListView if (filter == FilterMSG.Refrash) { IsLoadAllMessage = false; MessageMainDB.Clear(); } // Если уже все выведено if (IsLoadAllMessage == true) { return; } // Получаем новые диалоги var Messages = await sdk.Show(page, Math.Max(PlatformInvoke.Settings.CountMsgToPage, (short)25)); if (Messages.Count == 0) { IsLoadAllMessage = true; return; } // Выводим диалоги foreach (var item in Messages) { item.BackgroundColor = ((MessageMainDB.Count % 2) == 0) ? Color.FromHex("#f7f8f9") : Color.FromHex("#ecedf1"); MessageMainDB.Add(item); } page++; } catch (Exception ex) { var res = await DisplayAlert("Ошибка запроса", ex.Message, "Обновить", "Отмена"); if (res) { goto Refresh; } } LoadIndicator.IsRunning = false; LoadIndicator.IsVisible = false; }
/// <summary> /// Загрузка сообщений /// </summary> /// <param name="comand">FirstLoad/Refrash/GetAllMessage</param> async void LoadNewMessage(MessageComand comand) { try { #region Обновление базы "MessageHideDB" if (comand == MessageComand.Refrash) { // Чистим текущие сообщения MessageDB.Clear(); LoadIndicator.IsRunning = true; LoadIndicator.IsVisible = true; Resources["HeightButtonToMoreMSG"] = Device.OS == TargetPlatform.Android ? 42 : 35; Resources["IsViewButtonToMoreMSG"] = true; Resources["TextButtonToMoreMSG"] = $"Показать еще"; // Получаем все сообщения c API var sdk = new SDK.Threads(); MessageHideDB = await sdk.Show(ThreadID); } #endregion // Пользовательское количиство сообщений int CountMsgToDialog = PlatformInvoke.Settings.CountMsgToDialog <= 10 ? 40 : PlatformInvoke.Settings.CountMsgToDialog; // Высчитываем количиство смс для подзагрузки int position = (MessageHideDB.Count - MessageDB.Count) - 1; int MaxLoadMSG = Math.Min(CountMsgToDialog - 1, position); if (MaxLoadMSG >= 0) { // Выводим сообщения for (int i = position; i >= position - MaxLoadMSG; i--) { MessageDB.Insert(0, MessageHideDB[i]); } // Скролим к сообщению if (comand == MessageComand.Refrash) { navigationDrawerList.ScrollTo(MessageDB[MessageDB.Count - 1], ScrollToPosition.MakeVisible, false); } else { navigationDrawerList.ScrollTo(MessageDB[Math.Min(MaxLoadMSG + 1, MessageDB.Count)], ScrollToPosition.End, false); } // Обновляем данные position = MessageHideDB.Count - MessageDB.Count; MaxLoadMSG = Math.Min(CountMsgToDialog, position); // Меняем текст кнопки "MoreMSG" Resources["TextButtonToMoreMSG"] = $"Показать еще {MaxLoadMSG} из {position}"; } // Прячем кнопку загрузить еще if (MessageHideDB.Count == MessageDB.Count) { Resources["IsViewButtonToMoreMSG"] = false; Resources["HeightButtonToMoreMSG"] = 0; } // Прячем текст загрузки LoadIndicator.IsRunning = false; LoadIndicator.IsVisible = false; } catch (Exception ex) { LoadIndicator.IsRunning = false; LoadIndicator.IsVisible = false; MessageDB.Add(new MessageThread() { from = new From() { fname = "Bot Messenger => Ошибка запроса", sname = "", login = "******", profile_id = PlatformInvoke.profile_id }, post_time = DateTime.Now, message_html = ex.Message }); } }