Example #1
0
            override async protected void ProceedToStatement(IScrapedAccount Acct)
            {
                DisplayMessage("Waiting for " + Acct.Nickname + "...");

                string id = (Acct as ScrapedAccount).referenceId;

                //Wait for the account block to click on
                await PollForJavaScript("var f = function(){var e = document.getElementById('account-" + id + "');" +
                                        "if(e != null)e.click();" +
                                        "return e != null;}; f()");

                //Wait for transactions
                string s = await PollForJavaScript("window._FF_trans");

                ScrapedXacts Statement = JSON.Parse <ScrapedXacts>(Unwrap(s));

                Xact[] Pending = Statement.pending == null ? new Xact[0] : Statement.pending.Select(ToXact).ToArray(),
                Posted = Statement.posted == null ? new Xact[0] : Statement.posted.Select(ToXact).ToArray();
                if (Posted.Length > 0 && Pending.Length > 0)
                {
                    Account.RunBalanceForward(Posted[0].Balance, Pending);
                }

                m_Account.OnDownloadedTransactions(Pending.ArrayConcat(Posted));
                Task _t = Navigation.PopModalAsync();
            }
Example #2
0
        protected void ListAccounts(IScrapedAccount [] ScrapedAccounts)
        {
            if (ScrapedAccounts == null || ScrapedAccounts.Length == 0)
            {
                DisplayMessage("No accounts found, sorry. Probably app/website miscommunication, please contact support.");
                return;
            }

            if (m_Account == null) //The scraper is trying to connect to an account
            {
                MessageOff();
                if (ScrapedAccounts.Length == 1) //Exactly one
                {
                    OnAccountSelection(ToAccountReference(ScrapedAccounts[0]));
                }
                else
                {
                    Task t = Navigation.PushModalAsync(new AccountSelectionPage(ScrapedAccounts.Select(ToAccountReference), OnAccountSelection));
                }
            }
            else //Getting a statement for an existing account
            {
                IScrapedAccount TheAcct = ScrapedAccounts.FirstOrDefault(sa => sa.AccountNumber == m_Account.Ref.AccountNumber);
                if (TheAcct == null)
                {
                    m_ScraperPage.DisplayMessage("The selected account was not found on the page. This could be a bank/scraper miscommunication, please contact support.");
                }
                else
                {
                    ProceedToStatement(TheAcct);
                }
            }
        }
Example #3
0
 protected AccountReference ToAccountReference(IScrapedAccount ScrapedAcct)
 {
     return(new AccountReference()
     {
         Bank = m_Bank,
         AccountNumber = ScrapedAcct.AccountNumber,
         Nickname = ScrapedAcct.Nickname,
         ExtraData = ScrapedAcct
     });
 }
Example #4
0
 protected void OnAccountSelection(AccountReference Ref)
 {
     if (Ref == null) //Cancel
     {
         Navigation.PopModalAsync();
     }
     else
     {
         IScrapedAccount TheAcct = Ref.ExtraData as IScrapedAccount;
         m_Account = App.The.RegisterAccount(Ref);
         ProceedToStatement(TheAcct);
     }
 }
Example #5
0
            protected override async void ProceedToStatement(IScrapedAccount Acct)
            {
                ScrapedAccount sa = Acct as ScrapedAccount;

                m_ScraperPage.BrowseTo(sa.url + "&" + sa.additionalParam);
                //Wait for the transaction list to become available
                await PollForJavaScript("document.getElementsByClassName('transaction-records').length > 0");

                string s = await RunJS("[].slice.call(document.getElementsByClassName('transaction-records').item(0).rows)" +
                                       ".filter(function(r){return r.id;})" +
                                       ".map(function(r){return {" +
                                       "When: r.cells[0].innerText.substr(0, 10) == 'Processing' ? '' : r.cells[0].getElementsByTagName('span').item(1).innerText," +
                                       "Desc: r.cells[1].getElementsByClassName('transTitleForEditDesc').length > 0 ? r.cells[1].getElementsByClassName('transTitleForEditDesc').item(0).innerText : r.cells[1].innerText," +
                                       "Amount: r.cells[4].innerText," +
                                       "Balance: r.cells[5].innerText" +
                                       "};})");

                ScrapedXact[] Statement = JSON.Parse <List <ScrapedXact> >(s).ToArray();
                m_Account.OnDownloadedTransactions(Statement.Select(ToXact).ToArray());
                Task t = Navigation.PopModalAsync();
            }
Example #6
0
 abstract protected void ProceedToStatement(IScrapedAccount Acct);