Exemplo n.º 1
0
        /// <summary>
        /// Adds server side includes to the .dme being compiled
        /// </summary>
        /// <param name="job">The <see cref="Models.CompileJob"/> for the operation</param>
        /// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation</param>
        /// <returns>A <see cref="Task"/> representing the running operation</returns>
        async Task ModifyDme(Models.CompileJob job, CancellationToken cancellationToken)
        {
            var dirA        = ioManager.ConcatPath(job.DirectoryName.ToString(), ADirectoryName);
            var dmeFileName = String.Join('.', job.DmeName, DmeExtension);
            var dmePath     = ioManager.ConcatPath(dirA, dmeFileName);
            var dmeReadTask = ioManager.ReadAllBytes(dmePath, cancellationToken);

            var dmeModificationsTask = configuration.CopyDMFilesTo(dmeFileName, ioManager.ResolvePath(dirA), cancellationToken);

            var dmeBytes = await dmeReadTask.ConfigureAwait(false);

            var dme = Encoding.UTF8.GetString(dmeBytes);

            var dmeModifications = await dmeModificationsTask.ConfigureAwait(false);

            if (dmeModifications == null || dmeModifications.TotalDmeOverwrite)
            {
                if (dmeModifications != null)
                {
                    logger.LogDebug(".dme replacement configured!");
                }
                else
                {
                    logger.LogTrace("No .dme modifications required.");
                }
                return;
            }

            if (dmeModifications.HeadIncludeLine != null)
            {
                logger.LogDebug("Head .dme include line: {0}", dmeModifications.HeadIncludeLine);
            }
            if (dmeModifications.TailIncludeLine != null)
            {
                logger.LogDebug("Tail .dme include line: {0}", dmeModifications.TailIncludeLine);
            }

            var dmeLines = new List <string>(dme.Split(new[] { Environment.NewLine }, StringSplitOptions.None));

            for (var I = 0; I < dmeLines.Count; ++I)
            {
                var line = dmeLines[I];
                if (line.Contains("BEGIN_INCLUDE", StringComparison.Ordinal) && dmeModifications.HeadIncludeLine != null)
                {
                    dmeLines.Insert(I + 1, dmeModifications.HeadIncludeLine);
                    ++I;
                }
                else if (line.Contains("END_INCLUDE", StringComparison.Ordinal) && dmeModifications.TailIncludeLine != null)
                {
                    dmeLines.Insert(I, dmeModifications.TailIncludeLine);
                    break;
                }
            }

            dmeBytes = Encoding.UTF8.GetBytes(String.Join(Environment.NewLine, dmeLines));
            await ioManager.WriteAllBytes(dmePath, dmeBytes, cancellationToken).ConfigureAwait(false);
        }