Exemplo n.º 1
0
        public void AudioFileExport()
        {
            var index        = Convert.ToInt32(TestContext.DataRow["Index"]);
            var fileName     = Path.Combine(TestContext.DeploymentDirectory, "TestFiles", Convert.ToString(TestContext.DataRow["FileName"]));
            var encoder      = Convert.ToString(TestContext.DataRow["Encoder"]);
            var settings     = ConvertToDictionary(Convert.ToString(TestContext.DataRow["Settings"]));
            var metadata     = ConvertToDictionary(Convert.ToString(TestContext.DataRow["Metadata"]));
            var coverArt     = Convert.ToString(TestContext.DataRow["CoverArt"]);
            var expectedHash = Convert.ToString(TestContext.DataRow[Environment.Is64BitProcess ? "ExpectedHashX64" : "ExpectedHashX86"]);

            if (!string.IsNullOrEmpty(expectedHash))
            {
                var input = new ExportableAudioFile(new FileInfo(fileName));
                metadata.CopyTo(input.Metadata);
                if (!string.IsNullOrEmpty(coverArt))
                {
                    input.Metadata.CoverArt = new CoverArt(new FileInfo(Path.Combine(TestContext.DeploymentDirectory, "TestFiles", coverArt)));
                }
                var result = input.Export(encoder, settings, new DirectoryInfo(TestContext.DeploymentDirectory), "Export Row " + index);

                Assert.AreEqual <string>(expectedHash, CalculateHash(result));
            }
        }
Exemplo n.º 2
0
        protected override void EndProcessing()
        {
            if (_audioFiles.Count > 0)
            {
                var completed = 0;

                using (var outputQueue = new BlockingCollection <object>())
                {
                    outputQueue.Add(new ProgressRecord(0,
                                                       string.Format(CultureInfo.CurrentCulture, Resources.ExportAudioFileCommandActivityMessage,
                                                                     Encoder),
                                                       string.Format(CultureInfo.CurrentCulture, Resources.ExportAudioFileCommandStatusMessage,
                                                                     0, _audioFiles.Count))
                    {
                        PercentComplete = 0
                    });

                    Task.Run(() => Parallel.ForEach(_audioFiles, new ParallelOptions {
                        CancellationToken = _cancelSource.Token
                    }, audioFile =>
                    {
                        try
                        {
                            var substituter = new MetadataSubstituter(audioFile.Metadata);

                            DirectoryInfo outputDirectory;
                            try
                            {
                                outputDirectory = new DirectoryInfo(this.GetFileSystemPaths(substituter.Substitute(Path), substituter.Substitute(LiteralPath)).First());
                            }
                            catch (ItemNotFoundException e)
                            {
                                outputDirectory = new DirectoryInfo(e.ItemName);
                            }

                            ExportableAudioFile result = audioFile.Export(Encoder, _cancelSource.Token,
                                                                          new HashTableToSettingsDictionaryAdapter(Setting), outputDirectory,
                                                                          string.IsNullOrEmpty(Name) ? null : substituter.Substitute(Name), Replace);

                            Interlocked.Increment(ref completed);

                            outputQueue.Add(result);

                            outputQueue.Add(new ProgressRecord(0,
                                                               string.Format(CultureInfo.CurrentCulture, Resources.ExportAudioFileCommandActivityMessage,
                                                                             Encoder),
                                                               string.Format(CultureInfo.CurrentCulture, Resources.ExportAudioFileCommandStatusMessage,
                                                                             completed, _audioFiles.Count))
                            {
                                PercentComplete = completed.GetPercent(_audioFiles.Count)
                            });
                        }
                        catch (Exception e)
                        {
                            Interlocked.Increment(ref completed);
                            outputQueue.Add(new ErrorRecord(e, e.HResult.ToString(CultureInfo.CurrentCulture), ErrorCategory.WriteError, audioFile));
                        }
                    })).ContinueWith(task => outputQueue.CompleteAdding());

                    // Process output on the main thread:
                    this.ProcessOutput(outputQueue, _cancelSource.Token);
                }
            }
        }