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;
}
}
}