private string DownloadRawHtml(DownloadContext downloadContext, BoerseUser boerseUser) { var adapter = _webBrowserAdapterFactory.Create(downloadContext); var result = adapter.DownloadThreadHtml(downloadContext, boerseUser); return(result); }
internal string DownloadThreadHtml(DownloadContext downloadContext, BoerseUser boerseUser) { _htmlprocessed = false; _downloadContext = downloadContext; NavigateToThread(); AssureUserIsLoggedIn(boerseUser); return(_html); }
private bool TryLoadingBoerseUser(out BoerseUser boerseUser) { if (!_boerseUserConfigurationLogic.UserIsConfigured) { boerseUser = null; return(false); } boerseUser = _boerseUserConfigurationLogic.Load(); return(true); }
private bool CheckIfLoginNeededAndProcessWorkflow(BoerseUser boerseUser) { var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(_html); var accountUserNameControl = htmlDocument.DocumentNode.Descendants().FirstOrDefault(f => f.GetElementClassName() == "accountUsername"); if (accountUserNameControl == null) { _webBrowserControl.WebBrowser.LogInBoerseForum(boerseUser); return(true); } return(false); }
private void AssureUserIsLoggedIn(BoerseUser boerseUser) { if (!_loginAlreadyPerformed) { var currentCnter = 0; var loginWasNeeded = CheckIfLoginNeededAndProcessWorkflow(boerseUser); while (loginWasNeeded && (currentCnter < MAX_WAIT_COUNTER)) { currentCnter++; Thread.Sleep(1000); loginWasNeeded = CheckIfLoginNeededAndProcessWorkflow(boerseUser); } _loginAlreadyPerformed = true; } }
private bool TryDownloadingDataAuthorNode(DownloadContext downloadContext, BoerseUser boerseUser, out HtmlNode dataAuthorNode) { const string ATTR_DATA_AUTHOR = "data-author"; var rawHtml = DownloadRawHtml(downloadContext, boerseUser); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(rawHtml); dataAuthorNode = htmlDoc.DocumentNode.Descendants().Where(f => f.Name == "li").FirstOrDefault(f => f.Attributes[ATTR_DATA_AUTHOR]?.Value == downloadContext.BoerseLinkProvider.GetNativeName()); if (dataAuthorNode == null) { return(false); } return(true); }
private HtmlNode DownloadAndProcessHtml(DownloadContext downloadContext, BoerseUser boerseUser) { const int MAX_WAIT_COUNTER = 10; HtmlNode dataAuthorNode; var currentCnter = 0; var downloadSucceeded = TryDownloadingDataAuthorNode(downloadContext, boerseUser, out dataAuthorNode); while (!downloadSucceeded && currentCnter++ < MAX_WAIT_COUNTER) { Thread.Sleep(2000); downloadSucceeded = TryDownloadingDataAuthorNode(downloadContext, boerseUser, out dataAuthorNode); } if (!downloadSucceeded) { throw new Exception($"Could not download Thread for {downloadContext.Name}."); } return(dataAuthorNode); }
internal static void LogInBoerseForum(this WebBrowser webBrowser, BoerseUser boerseUser) { Thread.Sleep(1000); IHTMLDocument2 doc = null; Helpers.ThreadingHelper.ExecuteInUiThread(() => { doc = (IHTMLDocument2)webBrowser.Document; }); OpenLoginForm(doc); var allElements = doc.all.Cast <IHTMLElement>().ToList(); if (!TryFillingLoginValues(allElements, boerseUser)) { // Let's assume we're already logged in return; } FindAndUseLoginButton(allElements); }
private void LoadUser() { _boerseUser = _boerseUserConfigurationLogic.Load(); LoginName = _boerseUser.LoginName; Password = _boerseUser.Password; }
private static bool TryFillingLoginValues(IEnumerable <IHTMLElement> htmlElements, BoerseUser boerseUser) { var loginCtrl = (IHTMLInputElement)htmlElements.FirstOrDefault(f => f.id == Constants.BoerseUserControls.TEXTBOX_LOGIN); if (loginCtrl == null) { return(false); } var passwordControl = (IHTMLInputElement)htmlElements.First(f => f.id == Constants.BoerseUserControls.TEXTBOX_PASSWORD); var keepBeingLoggedInCtrl = (IHTMLInputElement)htmlElements.First(f => f.id == Constants.BoerseUserControls.CHECKBOX_REMEMBER_LOGIN); keepBeingLoggedInCtrl.@checked = true; loginCtrl.value = boerseUser.LoginName; passwordControl.value = boerseUser.Password; return(true); }
public void Save(BoerseUser boerseUser) { _repository.Save(boerseUser); }
public IReadOnlyCollection <DownloadEntry> Download(DownloadContext downloadContext, BoerseUser boerseUser) { var threadHandler = _boerseLinkThreadHandlerFactory.Create(downloadContext.BoerseLinkProvider); var result = threadHandler.GetAllEntries(downloadContext, boerseUser); return(result); }
private IEnumerable <DownloadEntry> DownloadEntries(DownloadContext downloadContext, BoerseUser boerseUser) { IEnumerable <DownloadEntry> result; try { var integration = _integrationFactory.Create(); result = integration.Download(downloadContext, boerseUser); } catch (Exception ex) { result = new List <DownloadEntry> { new DownloadEntry(downloadContext.Name, ex) }; } return(result); }
internal IReadOnlyCollection <DownloadEntry> GetAllEntries(DownloadContext downloadContext, BoerseUser boerseUser) { var threadNode = DownloadAndProcessHtml(downloadContext, boerseUser); var entries = ReadAllDownloadEntriesFromThread(threadNode, downloadContext); return(entries); }