Example #1
0
        public void TagCompression()
        {
            var frameHelper = new FrameHelper(new TagModel().Header);

            var originalFrame = (FrameText)FrameFactory.Build("TALB");

            originalFrame.Text        = "Hello World!!!";
            originalFrame.Compression = true;

            var body = frameHelper.Make(originalFrame, out var flags);

            Assert.AreEqual(
                ((FrameText)frameHelper.Build("TALB", flags, body)).Text,
                originalFrame.Text);
        }
Example #2
0
        public void TagCompression()
        {
            TagModel frameModel = new TagModel();

            FrameHelper frameHelper = new FrameHelper(frameModel.Header);

            FrameText originalFrame = (FrameText)FrameFactory.Build("TALB");

            originalFrame.Text        = "Hello World!!!";
            originalFrame.Compression = true;

            ushort flags;

            byte[] body = frameHelper.Make(originalFrame, out flags);

            FrameText resultFrame = (FrameText)frameHelper.Build("TALB", flags, body);

            Assert.AreEqual(resultFrame.Text, originalFrame.Text);
        }
        internal MetadataToTagModelAdapter(MetadataDictionary metadata, SettingsDictionary settings)
        {
            Contract.Requires(metadata != null);
            Contract.Requires(settings != null);

            var trckFrame            = new TrckFrame();
            var tdatFrame            = new TdatFrame();
            var trackSoundCheckFrame = new SoundCheckFrame();
            var albumSoundCheckFrame = new SoundCheckFrame();

            foreach (var item in metadata)
            {
                switch (item.Key)
                {
                case "TrackNumber":
                    trckFrame.TrackNumber = item.Value;
                    break;

                case "TrackCount":
                    trckFrame.TrackCount = item.Value;
                    break;

                case "Day":
                    tdatFrame.Day = item.Value;
                    break;

                case "Month":
                    tdatFrame.Month = item.Value;
                    break;

                // The standard comment field has a blank description:
                case "Comment":
                    var commentFrame = (FrameFullText)FrameFactory.Build("COMM");
                    commentFrame.Text = item.Value;
                    Add(commentFrame);
                    break;

                case "TrackGain":
                    trackSoundCheckFrame.Gain = item.Value;
                    var trackGainFrame = (FrameTextUserDef)FrameFactory.Build("TXXX");
                    trackGainFrame.Description = "REPLAYGAIN_TRACK_GAIN";
                    trackGainFrame.Text        = item.Value;
                    trackGainFrame.FileAlter   = true;
                    Add(trackGainFrame);
                    break;

                case "TrackPeak":
                    trackSoundCheckFrame.Peak = item.Value;
                    var trackPeakFrame = (FrameTextUserDef)FrameFactory.Build("TXXX");
                    trackPeakFrame.Description = "REPLAYGAIN_TRACK_PEAK";
                    trackPeakFrame.Text        = item.Value;
                    trackPeakFrame.FileAlter   = true;
                    Add(trackPeakFrame);
                    break;

                case "AlbumGain":
                    albumSoundCheckFrame.Gain = item.Value;
                    var albumGainFrame = (FrameTextUserDef)FrameFactory.Build("TXXX");
                    albumGainFrame.Description = "REPLAYGAIN_ALBUM_GAIN";
                    albumGainFrame.Text        = item.Value;
                    albumGainFrame.FileAlter   = true;
                    Add(albumGainFrame);
                    break;

                case "AlbumPeak":
                    albumSoundCheckFrame.Peak = item.Value;
                    var albumPeakFrame = (FrameTextUserDef)FrameFactory.Build("TXXX");
                    albumPeakFrame.Description = "REPLAYGAIN_ALBUM_PEAK";
                    albumPeakFrame.Text        = item.Value;
                    albumPeakFrame.FileAlter   = true;
                    Add(albumPeakFrame);
                    break;

                // Every other field should be treated as text:
                default:
                    string mappedKey;
                    if (_map.TryGetValue(item.Key, out mappedKey))
                    {
                        var textFrame = (FrameText)FrameFactory.Build(mappedKey);
                        textFrame.Text = item.Value;
                        Add(textFrame);
                    }
                    break;
                }
            }

            if (!string.IsNullOrEmpty(trckFrame.Text))
            {
                Add(trckFrame);
            }

            if (!string.IsNullOrEmpty(tdatFrame.Text))
            {
                Add(tdatFrame);
            }

            if (!string.IsNullOrEmpty(settings["AddSoundCheck"]) &&
                string.Compare(settings["AddSoundCheck"], bool.FalseString, StringComparison.OrdinalIgnoreCase) != 0)
            {
                if (string.Compare(settings["AddSoundCheck"], "Album", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    if (string.IsNullOrEmpty(albumSoundCheckFrame.Gain))
                    {
                        throw new InvalidSettingException(Resources.MetadataToTagModelAdapterMissingAlbumGain);
                    }
                    if (string.IsNullOrEmpty(albumSoundCheckFrame.Peak))
                    {
                        throw new InvalidSettingException(Resources.MetadataToTagModelAdapterMissingAlbumPeak);
                    }

                    Add(albumSoundCheckFrame);
                }
                else if (string.Compare(settings["AddSoundCheck"], "Track", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    if (string.IsNullOrEmpty(trackSoundCheckFrame.Gain))
                    {
                        throw new InvalidSettingException(Resources.MetadataToTagModelAdapterMissingTrackGain);
                    }
                    if (string.IsNullOrEmpty(trackSoundCheckFrame.Peak))
                    {
                        throw new InvalidSettingException(Resources.MetadataToTagModelAdapterMissingTrackPeak);
                    }

                    Add(trackSoundCheckFrame);
                }
                else
                {
                    throw new InvalidSettingException(string.Format(CultureInfo.CurrentCulture,
                                                                    Resources.MetadataToTagModelAdapterBadAddSoundCheck, settings["AddSoundCheck"]));
                }
            }

            if (metadata.CoverArt != null)
            {
                Add(new CoverArtToFrameAdapter(metadata.CoverArt));
            }
        }