/// <summary> /// Get JSON with last conversation(s) /// </summary> /// <param name="fanpage">Fanpage object</param> /// <param name="limitation">Is set limit = 1, to returned JSON</param> /// <returns>JSON as string</returns> private async Task <string> GetLastConversationJsonAsync(Fanpage fanpage, bool limitation = true) { string limit = limitation ? "&limit=1" : ""; var response = await client.GetAsync($"{BASE_URL}{fanpage.Id}{CONVERSATIONS_PATH}?access_token={fanpage.Token}{limit}"); return(await response.Content.ReadAsStringAsync()); }
public MainWindow() { fanpage = new Fanpage(config["fanpageid"], config["token"]); conversations = new Conversations(); InitializeComponent(); LastRefreshTSLabel.Content = "None"; FanpageIDLabel.Content = config["fanpageid"]; }
/// <summary> /// Run method periodily /// </summary> /// <param name="fanpage"></param> /// <param name="firstWaiting"></param> /// <param name="period"></param> /// <param name="token"></param> /// <returns></returns> private async Task RunCheckingTaskAsync(Fanpage fanpage, TimeSpan firstWaiting, TimeSpan period, CancellationToken token) { if (firstWaiting > TimeSpan.Zero) { await Task.Delay(firstWaiting, token); } while (!token.IsCancellationRequested) { await CheckNewMessageComes(fanpage); if (period > TimeSpan.Zero) { await Task.Delay(period, token); } } }
/// <summary> /// Check is newer message. If is, return true and save new DateTime into "lastConversationDateTime" /// </summary> /// <param name="fanpage">Fanpage object</param> /// <returns>boolean</returns> public async Task <bool> IsNewMessage(Fanpage fanpage) { string json = await GetLastConversationJsonAsync(fanpage); JObject jObject = JObject.Parse(json); { var jObjectError = jObject["error"]; if (jObjectError != null) { string errorType = jObjectError["type"]?.ToString(); string errorMessage = jObjectError["message"]?.ToString(); MessageBox.Show(errorMessage); Errors error = new Errors(errorType, errorMessage, errorList.Count); errorList.Add(error); await Errors.WriteErrorAsync(error); return(false); } } string lastConversationTimeStampString = jObject["data"][0]["updated_time"]?.ToString(); DateTime?dateTime = await StringToDatetime(lastConversationTimeStampString); if (dateTime == null) { return(false); } if (lastConversationDateTime >= dateTime) { return(false); } lastConversationDateTime = (DateTime)dateTime; return(true); }
/// <summary> /// /// </summary> /// <param name="fanpage"></param> /// <returns></returns> private async Task CheckNewMessageComes(Fanpage fanpage) { if (wasNewMessageConfirmed) { bool isNewMessage = await conversations.IsNewMessage(fanpage); if (isNewMessage) { wasNewMessageConfirmed = false; } await ConversationsInfo(isNewMessage); TSLabel.Content = conversations.lastConversationDateTime.ToString(); LastRefreshTSLabel.Content = DateTime.Now.ToString(); } else { InfosErrorsLabel.Content = "Last message wasn't confirmed. REFRESH ISN'T POSSIBLE!"; await Task.Delay(3000); } InfosErrorsLabel.Content = "No infos"; }