/// <summary>
        ///     Compiles and saves a dll from source code.
        /// </summary>
        /// <param name="sourcePath">Path to cs file.</param>
        /// <param name="sourceCode">Source code</param>
        /// <returns></returns>
        private LibRecord ExportIndicatorAsDll(string sourcePath, string sourceCode)
        {
            string name       = Path.GetFileNameWithoutExtension(sourcePath);
            string targedPath = Path.Combine(Data.LibraryDir, name + ".dll");

            compiler.CompileSourceToDll(sourceCode, targedPath);

            var sourceInfo = new FileInfo(sourcePath);
            var record     = new LibRecord
            {
                SourceFileName      = name,
                SourceLastWriteTime = sourceInfo.LastWriteTime,
            };

            return(record);
        }
Esempio n. 2
0
        /// <summary>
        ///     Load Source Files
        /// </summary>
        public static void LoadCustomIndicators()
        {
            var compiledDlls     = new List <string>();
            var indicatorManager = new IndicatorCompilationManager();
            var errorReport      = new StringBuilder();

            errorReport.AppendLine("<h1>" + Language.T("Custom Indicators") + "</h1>");
            bool isError = false;

            string libSettingsPath = Path.Combine(Data.SystemDir, "Libraries.xml");

            Libraries.LoadSettings(libSettingsPath);

            if (Directory.Exists(Data.SourceFolder))
            {
                string[] pathCsFiles = Directory.GetFiles(Data.SourceFolder, "*.cs");
                if (pathCsFiles.Length != 0)
                {
                    foreach (string sourcePath in pathCsFiles)
                    {
                        string errorMessages;
                        if (Libraries.IsSourceCompiled(sourcePath))
                        {
                            continue;
                        }

                        LibRecord record = indicatorManager.LoadCompileSourceFile(sourcePath, out errorMessages);

                        if (record != null)
                        {
                            Libraries.AddRecord(record);
                            compiledDlls.Add(Path.GetFileNameWithoutExtension(sourcePath));
                        }

                        if (string.IsNullOrEmpty(errorMessages))
                        {
                            continue;
                        }
                        isError = true;

                        errorReport.AppendLine("<h2>File name: " + Path.GetFileName(sourcePath) + "</h2>");
                        string error = errorMessages.Replace(Environment.NewLine, "</br>");
                        error = error.Replace("\t", "&nbsp; &nbsp; &nbsp;");
                        errorReport.AppendLine("<p>" + error + "</p>");
                    }
                }
            }
            if (Directory.Exists(Data.LibraryDir))
            {
                string[] pathDllFiles = Directory.GetFiles(Data.LibraryDir, "*.dll");
                if (pathDllFiles.Length != 0)
                {
                    foreach (string dllPath in pathDllFiles)
                    {
                        string fileName = Path.GetFileNameWithoutExtension(dllPath);
                        if (compiledDlls.Contains(fileName))
                        {
                            continue;
                        }

                        string errorMessages;

                        indicatorManager.LoadDllIndicator(dllPath, out errorMessages);

                        if (string.IsNullOrEmpty(errorMessages))
                        {
                            continue;
                        }
                        isError = true;

                        errorReport.AppendLine("<h2>File name: " + Path.GetFileName(dllPath) + "</h2>");
                        string error = errorMessages.Replace(Environment.NewLine, "</br>");
                        error = error.Replace("\t", "&nbsp; &nbsp; &nbsp;");
                        errorReport.AppendLine("<p>" + error + "</p>");
                    }
                }
            }
            Libraries.SaveSettings(libSettingsPath);

            // Adds the custom indicators
            IndicatorManager.ResetCustomIndicators(indicatorManager.CustomIndicatorsList);
            IndicatorManager.CombineAllIndicators();

            if (isError)
            {
                var msgBox = new FancyMessageBox(errorReport.ToString(), Language.T("Custom Indicators"))
                {
                    BoxWidth = 550, BoxHeight = 340, TopMost = true
                };
                msgBox.Show();
            }
        }