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);
        }
예제 #3
0
        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);
        }
예제 #11
0
 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);
        }
예제 #13
0
        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);
        }