using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TradeIdeas.TIProData.Configuration; namespace TradeIdeas.TIProGUI { public interface IHandlesStrategies { /// /// Determines if the strategy to share contains a private list of symbols. /// /// True if strategy contains a private list of symbols, false otherwise bool StrategyContainsPrivateList(); } public class HandlesStrategyUtils { /// /// Checks if a connection string, with encoding like the Toplist windows, /// contains references to a personal list of symbols /// /// /// private static bool StrategyConfigContainsNewPrefix(string config) { var result = false; if (config != null) { var configLines = config.Split('&'); result = configLines.Any(line => line.Contains("SL_0") && !line.Contains("WN=")); } return result; } /// /// Checks if the configuration string references any personal list of symbols. /// /// /// /// public static bool StrategyConfigContainsPrivateList(string config, List symbolLists) { if (symbolLists != null && config != null) { if (StrategyConfigContainsNewPrefix(config)) return true; var personalSymbolList = symbolLists.Where(list => list.Id > 0).ToList(); var configlines = config.Split('&'); if (configlines.ToList().Any(line => line.Contains("SL=X"))) { var excludedConfig = configlines .ToList() .Where(line => line.Contains("SL=X")) .FirstOrDefault(); var excludedlistIds = excludedConfig .Remove(0, 4) .Split('a'); var personalListsExcluded = symbolLists .Where(list => excludedlistIds .Any(listId => list.Id.ToString() == listId)) .ToList(); if (personalListsExcluded.Count > 0) { return true; } } else { var includedlistConfig = configlines .ToList() .Where(line => line.Contains("SL=")) .FirstOrDefault(); if (includedlistConfig != null) { var includedlistIds = includedlistConfig .Remove(0, 3) .Split('a'); var personalListIncluded = symbolLists .Where(list => includedlistIds.Any(listId => list.Id.ToString() == listId)) .ToList(); return personalListIncluded.Count > 0; } } } return false; } } }