using Newtonsoft.Json; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using StockDal.Interface; using DataDomain; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; using System.Diagnostics; using StockDAL.Interface; using BrowserHelper.Driver; using BrowserHelper.Settings; using Helpers; namespace StockDal { public class StockMarketRepository : IStockMarketRepository { public Dictionary StockMarketList { get; set; } public List DumpObjects { get; set; } = new List(); public DiTraderStockRow SaveRow { get; set; } public StringBuilder TextResults { get; set; } //public bool ViewBrowser { get; set; } // public IWebDriver driver; private readonly IStockPersonConnect _stockPersonConnect; private readonly IStockRepository _stockRepository; private readonly TestSettings _testSettings; private readonly IStockScrapePage _scrapePage; public StockMarketRepository( IStockPersonConnect stockPersonConnect, IStockRepository stockRepository, TestSettings testSettings, IStockScrapePage scrapePage) { // ViewBrowser = false; _stockPersonConnect = stockPersonConnect; _stockRepository = stockRepository; _testSettings = testSettings; _scrapePage = scrapePage; } private void SaveLogging() { var output = JsonConvert.SerializeObject(DumpObjects, Formatting.Indented); Assembly assem = typeof(StockMarketRepository).Assembly; var programPath = assem.Location.Substring(0, assem.Location.LastIndexOf("\\")); var logPath = new DirectoryInfo(programPath + "\\Loggings"); if (!logPath.Exists) { logPath.Create(); } File.WriteAllText($"{programPath}\\Loggings\\Log{DateTime.Now.ToShortDateString()}.txt", output); } private void saveStockData(List saveRow) { foreach (var row in saveRow) { try { StockMarketList.Add(row.StockName, row); } catch (ArgumentException) { try { StockMarketList.Add(row.StockName + "-2", row); } catch (Exception) { DumpObjects.Add(row); } } //break; } } public void LoadStockMarketList(int persId) { StockMarketList = new Dictionary(); DumpObjects = new List(); var groupedStocks = persId == 0 ? _stockRepository.GetStocksGroupedAllPersons() : _stockRepository.GetStocksGroupedPerPerson(persId); var lastGroup = string.Empty; var stockList = new List(); foreach (var groupedStock in groupedStocks) { if (groupedStock.StockGroup != lastGroup) { if (lastGroup != string.Empty) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { saveStockData(new List(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))); } else saveStockData(_scrapePage.GetMyStockStatus(lastGroup)); stockList.Clear(); lastGroup = groupedStock.StockGroup; } else { lastGroup = groupedStock.StockGroup; } stockList.Add(groupedStock.StockId); } else { stockList.Add(groupedStock.StockId); } } if (stockList.Count > 0) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { saveStockData(new List(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))); } else saveStockData(_scrapePage.GetMyStockStatus(lastGroup)); stockList.Clear(); } if (DumpObjects.Any()) { SaveLogging(); } } public DiTraderStockRow LoadStockMarketStockData(string searchedStock) { var groupedStocks = _stockRepository.GetGroupedStock(searchedStock); var lastGroup = string.Empty; var stockList = new List(); var output = new List(); foreach (var groupedStock in groupedStocks) { if (groupedStock.StockGroup != lastGroup) { if (lastGroup != string.Empty) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { output = _scrapePage.SearchStockAndCollect(stk.Substring(0, 4)); } else output = _scrapePage.GetMyStockStatus(lastGroup); stockList.Clear(); lastGroup = groupedStock.StockGroup; } else { lastGroup = groupedStock.StockGroup; } stockList.Add(groupedStock.StockId); } else { stockList.Add(groupedStock.StockId); } } if (stockList.Count > 0) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { output = _scrapePage.SearchStockAndCollect(stk.Substring(0, 4)); } else output = _scrapePage.GetMyStockStatus(lastGroup); stockList.Clear(); } return output[0]; } } }