public static async Task <List <KworkRecord> > Parse(ChromiumWebBrowser wv) { var res = new List <KworkRecord>(); var strList = (await GetFromPage(wv)).Split(new string[] { "^^^" }, StringSplitOptions.None); for (int i = 0; i < strList.Length - 1; i++) { try { var recordArr = strList[i].Split(new string[] { "###" }, StringSplitOptions.None); var newRecord = new KworkRecord() { Title = recordArr[0], Text = recordArr[1], Info = recordArr[2], ParseDate = DateTime.Now }; if (newRecord.Text.EndsWith("Скрыть")) { newRecord.Text = newRecord.Text.Remove(newRecord.Text.Length - 6); } newRecord.Text = newRecord.Text.Trim(); res.Add(newRecord); WindowLogger.Log($"Parsed record *{newRecord.Title}*."); } catch (Exception ex) { WindowLogger.Log("Error while parsing record."); WindowLogger.Log(ex.ToString()); } } return(res); }
public MainWindow() { InitializeComponent(); Inst = this; try { Uri iconUri = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, "icon.jpg"), UriKind.Absolute); Icon = BitmapFrame.Create(iconUri); } catch { } WebViewWindow.Inst.Visibility = Visibility.Visible; WebViewWindow.Inst.Visibility = Visibility.Hidden; LoadSettings(); TelegramBotHandler.Restart(); KworkEventsFacade.OnNewRecords += (records) => { WindowLogger.Log("Send to telegram"); TelegramBotHandler.Send(records); }; //#if RELEASE KworkEventsFacade.RestartChecking(); //#endif TrayIconHelper.InitTrayIcon(TrayIconHelper.MenuFromDict(new Dictionary <string, Action>() { { "Show", () => { Dispatcher.Invoke(() => { MainWindow.Inst.Visibility = Visibility.Visible; }); } }, { "Exit", () => { Application.Current.Shutdown(); } } })); TrayIconHelper.ShowNotification("", "Kwork telegram bot launched successfully."); if (App.IsLaunchedWithSystem) { Task.Run(async() => { await Task.Delay(500); Dispatcher.Invoke(() => { this.Visibility = Visibility.Hidden; WebViewWindow.Inst.Visibility = Visibility.Hidden; }); }); } }
public static async Task Send(string text) { try { await _client.SendTextMessageAsync(chatId : _chatUsername, text : text); WindowLogger.Log("Sended to telegram successfully."); } catch (Exception ex) { WindowLogger.Log("Error while sending to telegram."); WindowLogger.Log(ex.ToString()); } }
static void Check() { var task = Task.Run(async() => { var newRecords = await GetNew(WebViewWindow.Inst.WV); OnNewRecords?.Invoke(newRecords); }); task.ContinueWith((t) => { if (task.Exception != null) { WindowLogger.Log(task.Exception.ToString()); } }); }
static async Task <List <KworkRecord> > GetNew(ChromiumWebBrowser wv) { var savedList = await StorageHardDrive.Get <List <KworkRecord> >(SavedMessagesKey) ?? new List <KworkRecord>(); foreach (var item in savedList.ToArray()) { if (DateTime.Now - item.ParseDate > TimeSpan.FromDays(5)) { savedList.Remove(item); } } var parsedList = await KworkParser.Parse(wv); //magic here var savedListClone = savedList.ToArray(); foreach (var itemP in parsedList.ToArray()) { bool breaked = false; foreach (var itemS in savedListClone) { if (itemS.Title == itemP.Title) { parsedList.Remove(itemP); breaked = true; break; } } if (!breaked) { WindowLogger.Log("NEW record!!!"); WindowLogger.Log(itemP.ToJsonStr()); savedList.Add(itemP); } } await StorageHardDrive.Set(SavedMessagesKey, savedList); return(parsedList); }
/// <summary> /// Возвращает строку со значениями. /// </summary> /// <param name="wv"></param> /// <returns></returns> static Task <string> GetFromPage(ChromiumWebBrowser wv) { Application.Current.Dispatcher.Invoke(() => { wv.Address = "https://google.com"; }); var promise = new TaskCompletionSource <string>(); WindowLogger.Log("Start page inspection."); AttachOneRiseEventHandler( wv, () => { var script = File.ReadAllText("kwork_parse.js"); Application.Current.Dispatcher.Invoke(() => { Task <JavascriptResponse> jsResTask = wv.EvaluateScriptAsync(script); jsResTask.ContinueWith((jsRes) => { var res = jsRes.Result.Result.ToString(); WindowLogger.Log("Get page data as string."); promise.SetResult(res); Application.Current.Dispatcher.Invoke(() => { wv.Address = "https://google.com"; }); }); }); } ); Application.Current.Dispatcher.Invoke(() => { wv.Address = "https://kwork.ru/projects"; }); return(promise.Task); }
private void Button_ClearSaved(object sender, RoutedEventArgs e) { KworkEventsFacade.ClearSaved(); WindowLogger.Log("Cleanr."); }