Пример #1
0
 public override Achamenes.ID3.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     if(version==ID3v2MajorVersion.Version4)
     {
         return new Writers.TextFrameWriter(this, "TDTG", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding);
     }
     return null;
 }
Пример #2
0
 public override Achamenes.ID3.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     if(version==ID3v2MajorVersion.Version2)
     {
         return new Writers.MusicCDIdentifierFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), "MCI", encoding);
     }
     else if(version==ID3v2MajorVersion.Version3 || version==ID3v2MajorVersion.Version4)
     {
         return new Writers.MusicCDIdentifierFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), "MCDI", encoding);
     }
     return null;
 }
Пример #3
0
 public override Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     switch(version)
     {
         case ID3v2MajorVersion.Version2:
             return new Writers.PrivateFrameWriter(this,Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version),"PRI",encoding);
         case ID3v2MajorVersion.Version3:
         case ID3v2MajorVersion.Version4:
             return new Writers.PrivateFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), "PRIV", encoding);
         default:
             return null;
     }
 }
Пример #4
0
 public override FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     switch(version)
     {
         case ID3v2MajorVersion.Version2:
             return new LastPlayedOnFrameWriter(this,
                 FrameHeaderWriter.CreateFrameHeaderWriter(version), "XLP", encoding);
         case ID3v2MajorVersion.Version3:
         case ID3v2MajorVersion.Version4:
             return new LastPlayedOnFrameWriter(this,
                 FrameHeaderWriter.CreateFrameHeaderWriter(version), "XLPO", encoding);
         default:
             return null;
     }
 }
Пример #5
0
 protected FrameWriter(Frame frameToWriter, FrameHeaderWriter headerWriter, string frameID, EncodingScheme encoding)
 {
     if(frameToWriter==null)
     {
         throw new ArgumentNullException("The Frame object passed can not be null.");
     }
     if(headerWriter==null)
     {
         throw new ArgumentNullException("The FrameHeaderWriter object can not be null.");
     }
     this._frameID=frameID;
     this._frame=frameToWriter;
     this._headerWriter=headerWriter;
     this._encoding=encoding;
 }
Пример #6
0
 public static TextField CreateTextField(string text,EncodingScheme encoding)
 {
     switch(encoding)
     {
         case EncodingScheme.Ascii:
             return new AsciiTextField(text);
         case EncodingScheme.UnicodeWithBOM:
             return new UnicodeTextField(text);
         case EncodingScheme.BigEndianUnicode:
             return new BigEndianUnicodeTextField(text);
         case EncodingScheme.UTF8:
             return new UTF8TextField(text);
         default:
             throw new FeatureNotSupportedException("The provided encoding scheme is not supported in this version.");
     }
 }
Пример #7
0
        private void TestTextFrame(TextFrame frame, EncodingScheme encoding, ID3v2MajorVersion version)
        {
            string frameId;
            FrameParserFactory factory=new FrameParserFactory();
            FrameWriter writer=frame.CreateWriter(version, encoding);
            if(writer==null)
            {
                return;
            }
            MemoryStream stream=new MemoryStream();

            writer.WriteToStream(stream);
            stream.Seek(0, SeekOrigin.Begin);

            Frame writtenFrame=FrameParser.Parse(stream, version, factory, out frameId);

            Assert.IsInstanceOfType(writtenFrame.GetType(), frame);
            TextFrame textFrame=(TextFrame)writtenFrame;

            Assert.AreEqual(textFrame.Text, frame.Text);
        }
Пример #8
0
        private void TestTextFrame(TextFrame frame, EncodingScheme encoding, ID3v2MajorVersion version)
        {
            string             frameId;
            FrameParserFactory factory = new FrameParserFactory();
            FrameWriter        writer  = frame.CreateWriter(version, encoding);

            if (writer == null)
            {
                return;
            }
            MemoryStream stream = new MemoryStream();


            writer.WriteToStream(stream);
            stream.Seek(0, SeekOrigin.Begin);

            Frame writtenFrame = FrameParser.Parse(stream, version, factory, out frameId);

            Assert.IsInstanceOfType(frame, writtenFrame.GetType());
            TextFrame textFrame = (TextFrame)writtenFrame;

            Assert.AreEqual(textFrame.Text, frame.Text);
        }
Пример #9
0
 public UniqueFileIdentifierFrameWriter(UniqueFileIdentifierFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
Пример #10
0
 public TextFrameWriter(TextFrame frameToWrite, string frameID, FrameHeaderWriter headerWriter, EncodingScheme encoding)
     : base(frameToWrite, headerWriter, frameID, encoding)
 {
 }
 public GeneralEncapsulatedObjectFrameWriter(GeneralEncapsulatedObjectFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
Пример #12
0
 public bool TryDecodeValue(
     Globalization.Charset defaultCharset, bool enableFallback, bool allowControlCharacters, bool enable2047, bool enableJisDetection, bool enableUtf8Detection, bool enableDbcsDetection, out string charsetName, out string cultureName,
     out EncodingScheme encodingScheme, out string value)
 {
     charsetName = null;
     cultureName = null;
     encodingScheme = EncodingScheme.None;
     value = null;
     var stringBuilder = Internal.ScratchPad.GetStringBuilder(System.Math.Min(1024, iterator.TotalLength));
     char[] charBuffer = null;
     byte[] byteBuffer = null;
     var currentPosition1 = iterator.CurrentPosition;
     var whitespaceOnly = false;
     var flag1 = false;
     if (defaultCharset != null && (enableJisDetection || enableUtf8Detection || enableDbcsDetection && Globalization.FeInboundCharsetDetector.IsSupportedFarEastCharset(defaultCharset))) {
         defaultCharset = this.DetectValueCharset(defaultCharset, enableJisDetection, enableUtf8Detection, enableDbcsDetection, out encodingScheme);
         flag1 = true;
     }
     System.Text.Decoder decoder1 = null;
     string lastEncodedWordCharsetName = null;
     if (!enable2047)
         iterator.SkipToEof();
     else {
         string lastEncodedWordLanguage = null;
         Globalization.Charset charset1 = null;
         System.Text.Decoder decoder2 = null;
         var flag2 = true;
         string encodedWordCharsetName;
         while (true) {
             this.ParseRawFragment(ref whitespaceOnly);
             if (!iterator.Eof) {
                 var currentPosition2 = iterator.CurrentPosition;
                 string encodedWordLanguage;
                 byte bOrQ;
                 ValuePosition encodedWordContentStart;
                 ValuePosition encodedWordContentEnd;
                 if (!this.ParseEncodedWord(lastEncodedWordCharsetName, lastEncodedWordLanguage, ref byteBuffer, out encodedWordCharsetName, out encodedWordLanguage, out bOrQ, out encodedWordContentStart, out encodedWordContentEnd))
                     whitespaceOnly = false;
                 else {
                     if (lastEncodedWordCharsetName == null) {
                         encodingScheme = EncodingScheme.Rfc2047;
                         charsetName = encodedWordCharsetName;
                         cultureName = encodedWordLanguage;
                     }
                     lastEncodedWordCharsetName = encodedWordCharsetName;
                     if (currentPosition1 != currentPosition2 && !whitespaceOnly) {
                         if (!flag2) {
                             this.FlushDecoder(decoder2, allowControlCharacters, ref byteBuffer, ref charBuffer, stringBuilder);
                             flag2 = true;
                         }
                         if (decoder1 == null) {
                             if (defaultCharset == null || !defaultCharset.IsAvailable) {
                                 if (!enableFallback)
                                     break;
                             } else {
                                 decoder1 = defaultCharset.GetEncoding()
                                                          .GetDecoder();
                             }
                         }
                         if (decoder1 != null)
                             this.ConvertRawFragment(currentPosition1, currentPosition2, decoder1, allowControlCharacters, ref charBuffer, stringBuilder);
                         else
                             this.ZeroExpandFragment(currentPosition1, currentPosition2, allowControlCharacters, stringBuilder);
                     }
                     Globalization.Charset charset2;
                     if (!Globalization.Charset.TryGetCharset(encodedWordCharsetName, out charset2)) {
                         if (!flag2) {
                             this.FlushDecoder(decoder2, allowControlCharacters, ref byteBuffer, ref charBuffer, stringBuilder);
                             flag2 = true;
                         }
                         if (enableFallback)
                             decoder2 = null;
                         else
                             goto label_25;
                     } else if (charset2 != charset1) {
                         if (!flag2) {
                             this.FlushDecoder(decoder2, allowControlCharacters, ref byteBuffer, ref charBuffer, stringBuilder);
                             flag2 = true;
                         }
                         if (!charset2.IsAvailable) {
                             if (enableFallback)
                                 decoder2 = null;
                             else
                                 goto label_32;
                         } else {
                             decoder2 = charset2.GetEncoding()
                                                .GetDecoder();
                             charset1 = charset2;
                         }
                     }
                     if (decoder2 != null) {
                         this.DecodeEncodedWord(bOrQ, decoder2, encodedWordContentStart, encodedWordContentEnd, allowControlCharacters, ref byteBuffer, ref charBuffer, stringBuilder);
                         flag2 = false;
                     } else
                         this.ZeroExpandFragment(currentPosition2, iterator.CurrentPosition, allowControlCharacters, stringBuilder);
                     currentPosition1 = iterator.CurrentPosition;
                     whitespaceOnly = true;
                 }
             } else
                 goto label_39;
         }
         charsetName = defaultCharset == null ? null : defaultCharset.Name;
         return false;
         label_25:
         charsetName = encodedWordCharsetName;
         return false;
         label_32:
         charsetName = encodedWordCharsetName;
         return false;
         label_39:
         if (!flag2)
             this.FlushDecoder(decoder2, allowControlCharacters, ref byteBuffer, ref charBuffer, stringBuilder);
     }
     if (currentPosition1 != iterator.CurrentPosition) {
         if (lastEncodedWordCharsetName == null) {
             charsetName = !flag1 || encodingScheme != EncodingScheme.None || (defaultCharset == null || defaultCharset.IsSevenBit) || defaultCharset.AsciiSupport != Globalization.CodePageAsciiSupport.Complete
                               ? (defaultCharset == null ? null : defaultCharset.Name)
                               : Globalization.Charset.ASCII.Name;
         }
         if (decoder1 == null) {
             if (defaultCharset == null || !defaultCharset.IsAvailable) {
                 if (!enableFallback) {
                     charsetName = defaultCharset == null ? null : defaultCharset.Name;
                     return false;
                 }
                 decoder1 = null;
             } else {
                 decoder1 = defaultCharset.GetEncoding()
                                          .GetDecoder();
             }
         }
         if (decoder1 != null)
             this.ConvertRawFragment(currentPosition1, iterator.CurrentPosition, decoder1, allowControlCharacters, ref charBuffer, stringBuilder);
         else
             this.ZeroExpandFragment(currentPosition1, iterator.CurrentPosition, allowControlCharacters, stringBuilder);
     }
     Internal.ScratchPad.ReleaseStringBuilder();
     value = stringBuilder.ToString();
     return true;
 }
Пример #13
0
		private void WriteFrames(Stream stream, ID3v2MajorVersion version, EncodingScheme encoding)
		{
			foreach(Frame f in this.Frames)
			{
				try
				{
					WriteFrame(f,stream,version,encoding);					
				}
				catch(NonFatalException exception)
				{
					RaiseWritingWarning(exception, f);
				}
			}
		}
 public MusicCDIdentifierFrameWriter(MusicCDIdentifierFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
Пример #15
0
        public virtual void WriteToFile(string fileName, ID3v2MajorVersion version, EncodingScheme encoding)
        {
            FileStream targetFileStream = null;

            try {
                // First write all frame data to a memory buffer
                // This way we catch all fatal exceptions before
                // touching the file, so there's not a even a slight
                // chance of corrupting the file.

                MemoryStream memoryBuffer = new MemoryStream();
                WriteFrames(memoryBuffer, version, encoding);

                int newSize = (int)memoryBuffer.Length;

                if (newSize == 0)
                {
                    throw new FatalException("No data to write in the tag.");
                }

                targetFileStream = File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
                TagHeader oldHeader = TagHeader.FromStream(targetFileStream);

                bool useIntermediate = false;

                if (oldHeader == null)
                {
                    // There is no attached tag in the file. We need to use an intermediate temporary file.
                    useIntermediate = true;
                    // Rewind the place in stream to the very beginning, so that when
                    // we copy the data from the original file to the intermediate file,
                    // we won't lose any data.
                    targetFileStream.Seek(0, SeekOrigin.Begin);
                }
                else
                {
                    // File already has an ID3 v2 tag attached.
                    if (oldHeader.TagSize < newSize)
                    {
                        useIntermediate = true;
                        // Allow for 4KB of padding.
                        newSize += 4 * 1024;
                        // Move to the correct place in stream so when we copy data to
                        // the intermediate file, we won't lose any data.
                        // The +10 is to go skip the tag header, since it's not included
                        // in TagHeader.TagSize
                        targetFileStream.Seek(oldHeader.TagSize + 10, SeekOrigin.Begin);
                    }
                    else
                    {
                        // We should write exactly the same number of bytes back to the file.
                        // When writing the padding, compare memoryBuffer.Length to newSize to
                        // calculate the number of padding bytes required to write.
                        newSize = oldHeader.TagSize;
                        // Seek the beginning of the file. The tag header and frame information
                        // will be overwritten.
                        targetFileStream.Seek(0, SeekOrigin.Begin);
                    }
                }

                TagHeader newHeader = new TagHeader((byte)version, 0, TagHeaderFlags.None, newSize);

                if (useIntermediate)
                {
                    string     intermediateFileName = GetTempIntermediateFileName(fileName);
                    FileStream intermediateStream   = null;
                    try {
                        intermediateStream = File.Create(intermediateFileName);
                        newHeader.WriteToStream(intermediateStream);

                        // Write the frame data residing in memory buffer.
                        intermediateStream.Write(memoryBuffer.GetBuffer(), 0, (int)memoryBuffer.Length);

                        //Write any required paddings.
                        for (int i = (int)memoryBuffer.Length; i < newSize; i++)
                        {
                            intermediateStream.WriteByte(0);
                        }

                        // Copy the data from the original file to the intermediate file.
                        CopyFromStreamToStream(targetFileStream, intermediateStream);

                        // Close the stream of original and intermediate file streams.
                        targetFileStream.Close();
                        intermediateStream.Close();

                        // If control reaches this point, then everything went file, so
                        // should normally delete the original file and rename the intermediate file.
                        // But as a safety measure, for pre-release, alpha, and beta version,
                        // instead of removing the file, I decided to rename the old file to
                        // fileName+".old."+revisionNumber instead. The user can manually delete
                        // the these files after ensuring the integrity of the new files.
#if ACHAMENES_ID3_BACKUP_FILES_BEFORE_MODIFICATION
                        File.Move(fileName, GetBackupFileName(fileName));
#else
                        File.Delete(fileName);
#endif
                        File.Move(intermediateFileName, fileName);
                    }
                    finally {
                        if (intermediateStream != null)
                        {
                            intermediateStream.Close();
                        }
                    }
                }
                else // If using an intermediate file is not necessary.
                {
                    // Similarly, we would normally just start writing to @stream here,
                    // but instead, we close it, make a backup copy of it, and then
                    // open it again, and write the tag information just to ensure nothing
                    // will be lost.

                    targetFileStream.Close();
#if ACHAMENES_ID3_BACKUP_FILES_BEFORE_MODIFICATION
                    File.Copy(fileName, GetBackupFileName(fileName));
#endif
                    targetFileStream = File.Open(fileName, FileMode.Open, FileAccess.Write, FileShare.Write);

                    // Write the header.
                    newHeader.WriteToStream(targetFileStream);

                    // Write frame data from memory buffer.
                    targetFileStream.Write(memoryBuffer.GetBuffer(), 0, (int)memoryBuffer.Length);

                    // Write any required padding.
                    for (int i = (int)memoryBuffer.Length; i < newSize; i++)
                    {
                        targetFileStream.WriteByte(0);
                    }

                    // And finally close the stream.
                    targetFileStream.Close();
                }
            }
            finally {
                if (targetFileStream != null)
                {
                    targetFileStream.Close();
                }
            }
        }
Пример #16
0
 private void Test(EncodingScheme encoding)
 {
     TestVersion(encoding, ID3v2MajorVersion.Version2);
     TestVersion(encoding, ID3v2MajorVersion.Version3);
     TestVersion(encoding, ID3v2MajorVersion.Version4);
 }
Пример #17
0
 private void TestVersion(EncodingScheme encoding, ID3v2MajorVersion version)
 {
     foreach (string testcase in _asciiTestCases)
     {
         TestTextFrame(new AlbumTextFrame(testcase), encoding, version);
         TestTextFrame(new ArtistTextFrame(testcase), encoding, version);
         TestTextFrame(new ComposerTextFrame(testcase), encoding, version);
         TestTextFrame(new CopyrightTextFrame(testcase), encoding, version);
         TestTextFrame(new CustomUserTextFrame(testcase), encoding, version);
         TestTextFrame(new DateTextFrame(testcase), encoding, version);
         TestTextFrame(new EncodedByTextFrame(testcase), encoding, version);
         TestTextFrame(new EncodingTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new FileTypeTextFrame(testcase), encoding, version);
         TestTextFrame(new GenreTextFrame(testcase), encoding, version);
         TestTextFrame(new GroupingTextFrame(testcase), encoding, version);
         TestTextFrame(new InitialKeyTextFrame(testcase), encoding, version);
         TestTextFrame(new LanguageTextFrame(testcase), encoding, version);
         TestTextFrame(new LengthTextFrame(testcase), encoding, version);
         TestTextFrame(new MediaTypeTextFrame(testcase), encoding, version);
         TestTextFrame(new OrchestraTextFrame(testcase), encoding, version);
         TestTextFrame(new OriginalAlbumTextFrame(testcase), encoding, version);
         TestTextFrame(new OriginalArtistTextFrame(testcase), encoding, version);
         TestTextFrame(new OriginalReleaseTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new OriginalReleaseYearTextFrame(testcase), encoding, version);
         TestTextFrame(new PublisherTextFrame(testcase), encoding, version);
         TestTextFrame(new RecordingTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new ReleaseTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new SoftwareSettingsTextFrame(testcase), encoding, version);
         TestTextFrame(new TaggingTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new TitleTextFrame(testcase), encoding, version);
     }
     if (encoding != EncodingScheme.Ascii)
     {
         foreach (string testcase in _unicodeTestCases)
         {
             TestTextFrame(new AlbumTextFrame(testcase), encoding, version);
             TestTextFrame(new ArtistTextFrame(testcase), encoding, version);
             TestTextFrame(new ComposerTextFrame(testcase), encoding, version);
             TestTextFrame(new CopyrightTextFrame(testcase), encoding, version);
             TestTextFrame(new CustomUserTextFrame(testcase), encoding, version);
             TestTextFrame(new DateTextFrame(testcase), encoding, version);
             TestTextFrame(new EncodedByTextFrame(testcase), encoding, version);
             TestTextFrame(new EncodingTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new FileTypeTextFrame(testcase), encoding, version);
             TestTextFrame(new GenreTextFrame(testcase), encoding, version);
             TestTextFrame(new GroupingTextFrame(testcase), encoding, version);
             TestTextFrame(new InitialKeyTextFrame(testcase), encoding, version);
             TestTextFrame(new LanguageTextFrame(testcase), encoding, version);
             TestTextFrame(new LengthTextFrame(testcase), encoding, version);
             TestTextFrame(new MediaTypeTextFrame(testcase), encoding, version);
             TestTextFrame(new OrchestraTextFrame(testcase), encoding, version);
             TestTextFrame(new OriginalAlbumTextFrame(testcase), encoding, version);
             TestTextFrame(new OriginalArtistTextFrame(testcase), encoding, version);
             TestTextFrame(new OriginalReleaseTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new OriginalReleaseYearTextFrame(testcase), encoding, version);
             TestTextFrame(new PublisherTextFrame(testcase), encoding, version);
             TestTextFrame(new RecordingTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new ReleaseTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new SoftwareSettingsTextFrame(testcase), encoding, version);
             TestTextFrame(new TaggingTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new TitleTextFrame(testcase), encoding, version);
         }
     }
     TestTextFrame(new PartOfSetTextFrame(4), encoding, version);
     TestTextFrame(new PartOfSetTextFrame(45, 123), encoding, version);
     TestTextFrame(new TrackTextFrame(415), encoding, version);
     TestTextFrame(new TrackTextFrame(15, 1234), encoding, version);
     TestTextFrame(new YearTextFrame(""), encoding, version);
     TestTextFrame(new YearTextFrame("14"), encoding, version);
     TestTextFrame(new YearTextFrame("144"), encoding, version);
     TestTextFrame(new YearTextFrame("1234"), encoding, version);
     TestTextFrame(new TimeTextFrame("134"), encoding, version);
     TestTextFrame(new BeatsPerMinuteTextFrame(134), encoding, version);
 }
Пример #18
0
 public PictureFrameWriterM2(PictureFrame frameToWrite, string frameID, Writers.FrameHeaderWriter headerWriter, EncodingScheme encoding)
     : base(frameToWrite, headerWriter, frameID, encoding)
 {
 }
Пример #19
0
 protected FrameWriter(Frame frameToWriter, FrameHeaderWriter headerWriter, string frameID, EncodingScheme encoding)
 {
     if (frameToWriter == null)
     {
         throw new ArgumentNullException("The Frame object passed can not be null.");
     }
     if (headerWriter == null)
     {
         throw new ArgumentNullException("The FrameHeaderWriter object can not be null.");
     }
     this._frameID      = frameID;
     this._frame        = frameToWriter;
     this._headerWriter = headerWriter;
     this._encoding     = encoding;
 }
Пример #20
0
 public PrivateFrameWriter(PrivateFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
Пример #21
0
 public override ID3Utils.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     if (version == ID3v2MajorVersion.Version2)
     {
         return(new Writers.MusicCDIdentifierFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), "MCI", encoding));
     }
     else if (version == ID3v2MajorVersion.Version3 || version == ID3v2MajorVersion.Version4)
     {
         return(new Writers.MusicCDIdentifierFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), "MCDI", encoding));
     }
     return(null);
 }
Пример #22
0
 public LastPlayedOnFrameWriter(
     LastPlayedOnFrame	frameToWrite,
     FrameHeaderWriter	frameHeaderWriter,
     string				frameID,
     EncodingScheme		encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
 public MusicCDIdentifierFrameWriter(MusicCDIdentifierFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
Пример #24
0
 public override Achamenes.ID3.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     if (version == ID3v2MajorVersion.Version2)
     {
         return(new Writers.UniqueFileIdentifierFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), "UFI", encoding));
     }
     else if (version == ID3v2MajorVersion.Version3 || version == ID3v2MajorVersion.Version4)
     {
         return(new Writers.UniqueFileIdentifierFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), "UFID", encoding));
     }
     return(null);
 }
Пример #25
0
 public PictureFrameWriterM3And4(PictureFrame frameToWrite, string frameID, Writers.FrameHeaderWriter headerWriter, EncodingScheme encoding)
     : base(frameToWrite, headerWriter, frameID, encoding)
 {
 }
 public override Achamenes.ID3.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     switch(version)
     {
         case ID3v2MajorVersion.Version2:
             return new Writers.GeneralEncapsulatedObjectFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version),
                 "GEO", encoding);
         case ID3v2MajorVersion.Version3:
         case ID3v2MajorVersion.Version4:
             return new Writers.GeneralEncapsulatedObjectFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version),
                 "GEOB", encoding);
         default:
             return null;
     }
 }
Пример #27
0
 public override Achamenes.ID3.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     if (version == ID3v2MajorVersion.Version2)
     {
         return(new Writers.PictureFrameWriterM2(this, "PIC", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding));
     }
     else if (version == ID3v2MajorVersion.Version3 || version == ID3v2MajorVersion.Version4)
     {
         return(new Writers.PictureFrameWriterM3And4(this, "APIC", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding));
     }
     else
     {
         return(null);
     }
 }
        public override Achamenes.ID3.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
        {
            switch (version)
            {
            case ID3v2MajorVersion.Version2:
                return(new Writers.GeneralEncapsulatedObjectFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version),
                                                                        "GEO", encoding));

            case ID3v2MajorVersion.Version3:
            case ID3v2MajorVersion.Version4:
                return(new Writers.GeneralEncapsulatedObjectFrameWriter(this, Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version),
                                                                        "GEOB", encoding));

            default:
                return(null);
            }
        }
Пример #29
0
        private void WriteFrame(Frame frame, Stream stream, ID3v2MajorVersion version, EncodingScheme encoding)
        {
            FrameWriter writer = frame.CreateWriter(version, encoding);

            if (writer == null)
            {
                throw new NoFrameWriterProvidedException(frame, version);
            }
            writer.WriteToStream(stream);
        }
Пример #30
0
        public bool TryDecodeValue(Charset defaultCharset, bool enableFallback, bool allowControlCharacters, bool enable2047, bool enableJisDetection, bool enableUtf8Detection, bool enableDbcsDetection, out string charsetName, out string cultureName, out EncodingScheme encodingScheme, out string value)
        {
            charsetName    = null;
            cultureName    = null;
            encodingScheme = EncodingScheme.None;
            value          = null;
            StringBuilder stringBuilder = ScratchPad.GetStringBuilder(Math.Min(1024, this.iterator.TotalLength));

            char[]        array           = null;
            byte[]        array2          = null;
            ValuePosition currentPosition = this.iterator.CurrentPosition;
            bool          flag            = false;
            bool          flag2           = false;

            if (defaultCharset != null && (enableJisDetection || enableUtf8Detection || (enableDbcsDetection && FeInboundCharsetDetector.IsSupportedFarEastCharset(defaultCharset))))
            {
                defaultCharset = this.DetectValueCharset(defaultCharset, enableJisDetection, enableUtf8Detection, enableDbcsDetection, out encodingScheme);
                flag2          = true;
            }
            Decoder decoder = null;
            string  text    = null;

            if (!enable2047)
            {
                this.iterator.SkipToEof();
            }
            else
            {
                string  lastEncodedWordLanguage = null;
                Charset charset  = null;
                Decoder decoder2 = null;
                bool    flag3    = true;
                string  text2;
                for (;;)
                {
                    this.ParseRawFragment(ref flag);
                    if (this.iterator.Eof)
                    {
                        goto IL_217;
                    }
                    ValuePosition currentPosition2 = this.iterator.CurrentPosition;
                    string        text3;
                    byte          bOrQ;
                    ValuePosition encodedWordContentStart;
                    ValuePosition encodedWordContentEnd;
                    if (!this.ParseEncodedWord(text, lastEncodedWordLanguage, ref array2, out text2, out text3, out bOrQ, out encodedWordContentStart, out encodedWordContentEnd))
                    {
                        flag = false;
                    }
                    else
                    {
                        if (text == null)
                        {
                            encodingScheme = EncodingScheme.Rfc2047;
                            charsetName    = text2;
                            cultureName    = text3;
                        }
                        text = text2;
                        if (currentPosition != currentPosition2 && !flag)
                        {
                            if (!flag3)
                            {
                                this.FlushDecoder(decoder2, allowControlCharacters, ref array2, ref array, stringBuilder);
                                flag3 = true;
                            }
                            if (decoder == null)
                            {
                                if (defaultCharset == null || !defaultCharset.IsAvailable)
                                {
                                    if (!enableFallback)
                                    {
                                        break;
                                    }
                                }
                                else
                                {
                                    decoder = defaultCharset.GetEncoding().GetDecoder();
                                }
                            }
                            if (decoder != null)
                            {
                                this.ConvertRawFragment(currentPosition, currentPosition2, decoder, allowControlCharacters, ref array, stringBuilder);
                            }
                            else
                            {
                                this.ZeroExpandFragment(currentPosition, currentPosition2, allowControlCharacters, stringBuilder);
                            }
                        }
                        Charset charset2;
                        if (!Charset.TryGetCharset(text2, out charset2))
                        {
                            if (!flag3)
                            {
                                this.FlushDecoder(decoder2, allowControlCharacters, ref array2, ref array, stringBuilder);
                                flag3 = true;
                            }
                            if (!enableFallback)
                            {
                                goto Block_19;
                            }
                            decoder2 = null;
                        }
                        else if (charset2 != charset)
                        {
                            if (!flag3)
                            {
                                this.FlushDecoder(decoder2, allowControlCharacters, ref array2, ref array, stringBuilder);
                                flag3 = true;
                            }
                            if (!charset2.IsAvailable)
                            {
                                if (!enableFallback)
                                {
                                    goto Block_23;
                                }
                                decoder2 = null;
                            }
                            else
                            {
                                decoder2 = charset2.GetEncoding().GetDecoder();
                                charset  = charset2;
                            }
                        }
                        if (decoder2 != null)
                        {
                            this.DecodeEncodedWord(bOrQ, decoder2, encodedWordContentStart, encodedWordContentEnd, allowControlCharacters, ref array2, ref array, stringBuilder);
                            flag3 = false;
                        }
                        else
                        {
                            this.ZeroExpandFragment(currentPosition2, this.iterator.CurrentPosition, allowControlCharacters, stringBuilder);
                        }
                        currentPosition = this.iterator.CurrentPosition;
                        flag            = true;
                    }
                }
                charsetName = ((defaultCharset == null) ? null : defaultCharset.Name);
                return(false);

Block_19:
                charsetName = text2;
                return(false);

Block_23:
                charsetName = text2;
                return(false);

IL_217:
                if (!flag3)
                {
                    this.FlushDecoder(decoder2, allowControlCharacters, ref array2, ref array, stringBuilder);
                }
            }
            if (currentPosition != this.iterator.CurrentPosition)
            {
                if (text == null)
                {
                    if (flag2 && encodingScheme == EncodingScheme.None && defaultCharset != null && !defaultCharset.IsSevenBit && defaultCharset.AsciiSupport == CodePageAsciiSupport.Complete)
                    {
                        charsetName = Charset.ASCII.Name;
                    }
                    else
                    {
                        charsetName = ((defaultCharset == null) ? null : defaultCharset.Name);
                    }
                }
                if (decoder == null)
                {
                    if (defaultCharset == null || !defaultCharset.IsAvailable)
                    {
                        if (!enableFallback)
                        {
                            charsetName = ((defaultCharset == null) ? null : defaultCharset.Name);
                            return(false);
                        }
                        decoder = null;
                    }
                    else
                    {
                        decoder = defaultCharset.GetEncoding().GetDecoder();
                    }
                }
                if (decoder != null)
                {
                    this.ConvertRawFragment(currentPosition, this.iterator.CurrentPosition, decoder, allowControlCharacters, ref array, stringBuilder);
                }
                else
                {
                    this.ZeroExpandFragment(currentPosition, this.iterator.CurrentPosition, allowControlCharacters, stringBuilder);
                }
            }
            ScratchPad.ReleaseStringBuilder();
            value = stringBuilder.ToString();
            return(true);
        }
Пример #31
0
 public PrivateFrameWriter(PrivateFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
Пример #32
0
 private Globalization.Charset DetectValueCharset(Globalization.Charset defaultCharset, bool enableJisDetection, bool enableUtf8Detection, bool enableDbcsDetection, out EncodingScheme encodingScheme)
 {
     var valueIterator = new ValueIterator(iterator.Lines, iterator.LinesMask);
     var inboundCharsetDetector = new Globalization.FeInboundCharsetDetector(defaultCharset.CodePage, false, enableJisDetection, enableUtf8Detection, enableDbcsDetection);
     while (!valueIterator.Eof) {
         inboundCharsetDetector.AddBytes(valueIterator.Bytes, valueIterator.Offset, valueIterator.Length, false);
         valueIterator.Get(valueIterator.Length);
     }
     inboundCharsetDetector.AddBytes(null, 0, 0, true);
     var codePageChoice = inboundCharsetDetector.GetCodePageChoice();
     if (codePageChoice != defaultCharset.CodePage)
         defaultCharset = Globalization.Charset.GetCharset(codePageChoice);
     encodingScheme = inboundCharsetDetector.PureAscii
                          ? (!(defaultCharset.Name == "iso-2022-jp") || inboundCharsetDetector.Iso2022KrLikely ? EncodingScheme.None : EncodingScheme.Jis)
                          : (inboundCharsetDetector.Iso2022JpLikely || inboundCharsetDetector.Iso2022KrLikely ? EncodingScheme.Jis : EncodingScheme.EightBit);
     return defaultCharset;
 }
 public GeneralEncapsulatedObjectFrameWriter(GeneralEncapsulatedObjectFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
Пример #34
0
 private void TestVersion(EncodingScheme encoding, ID3v2MajorVersion version)
 {
     foreach(string testcase in _asciiTestCases)
     {
         TestTextFrame(new AlbumTextFrame(testcase), encoding, version);
         TestTextFrame(new ArtistTextFrame(testcase), encoding, version);
         TestTextFrame(new ComposerTextFrame(testcase), encoding, version);
         TestTextFrame(new CopyrightTextFrame(testcase), encoding, version);
         TestTextFrame(new CustomUserTextFrame(testcase), encoding, version);
         TestTextFrame(new DateTextFrame(testcase), encoding, version);
         TestTextFrame(new EncodedByTextFrame(testcase), encoding, version);
         TestTextFrame(new EncodingTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new FileTypeTextFrame(testcase), encoding, version);
         TestTextFrame(new GenreTextFrame(testcase), encoding, version);
         TestTextFrame(new GroupingTextFrame(testcase), encoding, version);
         TestTextFrame(new InitialKeyTextFrame(testcase), encoding, version);
         TestTextFrame(new LanguageTextFrame(testcase), encoding, version);
         TestTextFrame(new LengthTextFrame(testcase), encoding, version);
         TestTextFrame(new MediaTypeTextFrame(testcase), encoding, version);
         TestTextFrame(new OrchestraTextFrame(testcase), encoding, version);
         TestTextFrame(new OriginalAlbumTextFrame(testcase), encoding, version);
         TestTextFrame(new OriginalArtistTextFrame(testcase), encoding, version);
         TestTextFrame(new OriginalReleaseTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new OriginalReleaseYearTextFrame(testcase), encoding, version);
         TestTextFrame(new PublisherTextFrame(testcase), encoding, version);
         TestTextFrame(new RecordingTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new ReleaseTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new SoftwareSettingsTextFrame(testcase), encoding, version);
         TestTextFrame(new TaggingTimeTextFrame(testcase), encoding, version);
         TestTextFrame(new TitleTextFrame(testcase), encoding, version);
     }
     if(encoding!=EncodingScheme.Ascii)
     {
         foreach(string testcase in _unicodeTestCases)
         {
             TestTextFrame(new AlbumTextFrame(testcase), encoding, version);
             TestTextFrame(new ArtistTextFrame(testcase), encoding, version);
             TestTextFrame(new ComposerTextFrame(testcase), encoding, version);
             TestTextFrame(new CopyrightTextFrame(testcase), encoding, version);
             TestTextFrame(new CustomUserTextFrame(testcase), encoding, version);
             TestTextFrame(new DateTextFrame(testcase), encoding, version);
             TestTextFrame(new EncodedByTextFrame(testcase), encoding, version);
             TestTextFrame(new EncodingTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new FileTypeTextFrame(testcase), encoding, version);
             TestTextFrame(new GenreTextFrame(testcase), encoding, version);
             TestTextFrame(new GroupingTextFrame(testcase), encoding, version);
             TestTextFrame(new InitialKeyTextFrame(testcase), encoding, version);
             TestTextFrame(new LanguageTextFrame(testcase), encoding, version);
             TestTextFrame(new LengthTextFrame(testcase), encoding, version);
             TestTextFrame(new MediaTypeTextFrame(testcase), encoding, version);
             TestTextFrame(new OrchestraTextFrame(testcase), encoding, version);
             TestTextFrame(new OriginalAlbumTextFrame(testcase), encoding, version);
             TestTextFrame(new OriginalArtistTextFrame(testcase), encoding, version);
             TestTextFrame(new OriginalReleaseTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new OriginalReleaseYearTextFrame(testcase), encoding, version);
             TestTextFrame(new PublisherTextFrame(testcase), encoding, version);
             TestTextFrame(new RecordingTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new ReleaseTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new SoftwareSettingsTextFrame(testcase), encoding, version);
             TestTextFrame(new TaggingTimeTextFrame(testcase), encoding, version);
             TestTextFrame(new TitleTextFrame(testcase), encoding, version);
         }
     }
     TestTextFrame(new PartOfSetTextFrame(4), encoding, version);
     TestTextFrame(new PartOfSetTextFrame(45,123), encoding, version);
     TestTextFrame(new TrackTextFrame(415), encoding, version);
     TestTextFrame(new TrackTextFrame(15,1234), encoding, version);
     TestTextFrame(new YearTextFrame(""), encoding, version);
     TestTextFrame(new YearTextFrame("14"), encoding, version);
     TestTextFrame(new YearTextFrame("144"), encoding, version);
     TestTextFrame(new YearTextFrame("1234"), encoding, version);
     TestTextFrame(new TimeTextFrame("134"), encoding, version);
     TestTextFrame(new BeatsPerMinuteTextFrame(134), encoding, version);
 }
Пример #35
0
 public UrlFrameWriter(UrlFrame frameToWrite, string frameID, FrameHeaderWriter headerWriter, EncodingScheme encoding)
     : base(frameToWrite, headerWriter, frameID, encoding)
 {
 }
Пример #36
0
 public ExtendedTextFrameWriter(ExtendedTextFrame frameToWrite, string frameID, FrameHeaderWriter headerWriter, EncodingScheme encoding)
     : base(frameToWrite, headerWriter, frameID, encoding)
 {
     this._frameID = frameID;
 }
Пример #37
0
        private Charset DetectValueCharset(Charset defaultCharset, bool enableJisDetection, bool enableUtf8Detection, bool enableDbcsDetection, out EncodingScheme encodingScheme)
        {
            ValueIterator            valueIterator            = new ValueIterator(this.iterator.Lines, this.iterator.LinesMask);
            FeInboundCharsetDetector feInboundCharsetDetector = new FeInboundCharsetDetector(defaultCharset.CodePage, false, enableJisDetection, enableUtf8Detection, enableDbcsDetection);

            while (!valueIterator.Eof)
            {
                feInboundCharsetDetector.AddBytes(valueIterator.Bytes, valueIterator.Offset, valueIterator.Length, false);
                valueIterator.Get(valueIterator.Length);
            }
            feInboundCharsetDetector.AddBytes(null, 0, 0, true);
            int codePageChoice = feInboundCharsetDetector.GetCodePageChoice();

            if (codePageChoice != defaultCharset.CodePage)
            {
                defaultCharset = Charset.GetCharset(codePageChoice);
            }
            if (!feInboundCharsetDetector.PureAscii)
            {
                if (feInboundCharsetDetector.Iso2022JpLikely || feInboundCharsetDetector.Iso2022KrLikely)
                {
                    encodingScheme = EncodingScheme.Jis;
                }
                else
                {
                    encodingScheme = EncodingScheme.EightBit;
                }
            }
            else if (defaultCharset.Name == "iso-2022-jp" && !feInboundCharsetDetector.Iso2022KrLikely)
            {
                encodingScheme = EncodingScheme.Jis;
            }
            else
            {
                encodingScheme = EncodingScheme.None;
            }
            return(defaultCharset);
        }
Пример #38
0
 public ExtendedTextFrameWriter(ExtendedTextFrame frameToWrite, string frameID, FrameHeaderWriter headerWriter, EncodingScheme encoding)
     : base(frameToWrite, headerWriter,frameID,encoding)
 {
     this._frameID=frameID;
 }
Пример #39
0
		private void WriteFrame(Frame frame, Stream stream, ID3v2MajorVersion version, EncodingScheme encoding)
		{
			FrameWriter writer=frame.CreateWriter(version, encoding);
			if(writer==null)
			{
				throw new NoFrameWriterProvidedException(frame, version);
			}
			writer.WriteToStream(stream);
		}
Пример #40
0
 //public abstract Parsers.FrameParser CreateParser(ID3v2MajorVersion version, string frameID);
 public abstract Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding);
Пример #41
0
		public virtual void WriteToFile(string fileName, ID3v2MajorVersion version, EncodingScheme encoding)
		{
			FileStream targetFileStream=null;
			try
			{
				// First write all frame data to a memory buffer
				// This way we catch all fatal exceptions before 
				// touching the file, so there's not a even a slight 
				// chance of corrupting the file.

				MemoryStream memoryBuffer=new MemoryStream();
				WriteFrames(memoryBuffer, version, encoding);

				int newSize=(int)memoryBuffer.Length;

				if(newSize==0)
				{
					throw new FatalException("No data to write in the tag.");
				}

				targetFileStream=File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
				TagHeader oldHeader=TagHeader.FromStream(targetFileStream);

				bool useIntermediate=false;

				if(oldHeader==null)
				{
					// There is no attached tag in the file. We need to use an intermediate temporary file.					
					useIntermediate=true;
					// Rewind the place in stream to the very beginning, so that when
					// we copy the data from the original file to the intermediate file,
					// we won't lose any data.
					targetFileStream.Seek(0, SeekOrigin.Begin);
				}
				else
				{
					// File already has an ID3 v2 tag attached.
					if(oldHeader.TagSize<newSize)
					{
						useIntermediate=true;
						// Allow for 4KB of padding.
						newSize+=4*1024;
						// Move to the correct place in stream so when we copy data to 
						// the intermediate file, we won't lose any data.
						// The +10 is to go skip the tag header, since it's not included
						// in TagHeader.TagSize 
						targetFileStream.Seek(oldHeader.TagSize+10, SeekOrigin.Begin);
					}
					else
					{
						// We should write exactly the same number of bytes back to the file.
						// When writing the padding, compare memoryBuffer.Length to newSize to
						// calculate the number of padding bytes required to write.
						newSize=oldHeader.TagSize;
						// Seek the beginning of the file. The tag header and frame information
						// will be overwritten.
						targetFileStream.Seek(0, SeekOrigin.Begin);
					}
				}

				TagHeader newHeader=new TagHeader((byte)version, 0, TagHeaderFlags.None, newSize);

				if(useIntermediate)
				{
					string intermediateFileName=GetTempIntermediateFileName(fileName);
					FileStream intermediateStream=null;
					try
					{
						intermediateStream=File.Create(intermediateFileName);
						newHeader.WriteToStream(intermediateStream);

						// Write the frame data residing in memory buffer.
						intermediateStream.Write(memoryBuffer.GetBuffer(), 0, (int)memoryBuffer.Length);

						//Write any required paddings.
						for(int i=(int)memoryBuffer.Length;i<newSize;i++)
						{
							intermediateStream.WriteByte(0);
						}

						// Copy the data from the original file to the intermediate file.
						CopyFromStreamToStream(targetFileStream, intermediateStream);

						// Close the stream of original and intermediate file streams.
						targetFileStream.Close();
						intermediateStream.Close();

						// If control reaches this point, then everything went file, so
						// should normally delete the original file and rename the intermediate file.
						// But as a safety measure, for pre-release, alpha, and beta version, 
						// instead of removing the file, I decided to rename the old file to
						// fileName+".old."+revisionNumber instead. The user can manually delete
						// the these files after ensuring the integrity of the new files.
#if ACHAMENES_ID3_BACKUP_FILES_BEFORE_MODIFICATION
						File.Move(fileName, GetBackupFileName(fileName));
#else
						File.Delete(fileName);
#endif
						File.Move(intermediateFileName, fileName);
					}
					finally
					{
						if(intermediateStream!=null)
						{
							intermediateStream.Close();
						}
					}
				}
				else // If using an intermediate file is not necessary.
				{
					// Similarly, we would normally just start writing to @stream here,
					// but instead, we close it, make a backup copy of it, and then 
					// open it again, and write the tag information just to ensure nothing
					// will be lost.

					targetFileStream.Close();
#if ACHAMENES_ID3_BACKUP_FILES_BEFORE_MODIFICATION
					File.Copy(fileName, GetBackupFileName(fileName));
#endif
					targetFileStream=File.Open(fileName, FileMode.Open, FileAccess.Write, FileShare.Write);
					
					// Write the header.
					newHeader.WriteToStream(targetFileStream);
					
					// Write frame data from memory buffer.
					targetFileStream.Write(memoryBuffer.GetBuffer(), 0, (int)memoryBuffer.Length);
					
					// Write any required padding.
					for(int i=(int)memoryBuffer.Length;i<newSize;i++)
					{
						targetFileStream.WriteByte(0);
					}

					// And finally close the stream.
					targetFileStream.Close();
				}
			}
			finally
			{
				if(targetFileStream!=null)
				{
					targetFileStream.Close();
				}
			}
		}
Пример #42
0
 //public abstract Parsers.FrameParser CreateParser(ID3v2MajorVersion version, string frameID);
 public abstract Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding);
Пример #43
0
 public override Achamenes.ID3.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     if (version == ID3v2MajorVersion.Version2)
     {
         return(new Writers.UrlFrameWriter(this, "WXX", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding));
     }
     if (version == ID3v2MajorVersion.Version3 || version == ID3v2MajorVersion.Version4)
     {
         return(new Writers.UrlFrameWriter(this, "WXXX", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding));
     }
     return(null);
 }
Пример #44
0
        private void RunTest(TagBase tag, ID3v2MajorVersion version, EncodingScheme encoding)
        {
            File.Delete(_taggedFile1);
            File.Delete(_taggedFile2);
            File.Copy(_originalFile, _taggedFile1);
            File.Copy(_originalFile, _taggedFile2);

            tag.WriteToFile(_taggedFile1, version, encoding);

            TagBase tag2=new TagBase();
            tag2.ReadFromFile(_taggedFile1);

            tag2.WriteToFile(_taggedFile2, version, encoding);
            Assert.IsTrue(CompareFiles(_taggedFile1, _taggedFile2));

            TagBase.RemoveTag(_taggedFile1);
            Assert.IsTrue(CompareFiles(_taggedFile1, _originalFile));

            TagBase.RemoveTag(_taggedFile2);
            Assert.IsTrue(CompareFiles(_taggedFile2, _originalFile));
        }
 public UniqueFileIdentifierFrameWriter(UniqueFileIdentifierFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
Пример #46
0
 public override Achamenes.ID3.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     if(version==ID3v2MajorVersion.Version2)
     {
         return new Writers.PictureFrameWriterM2(this, "PIC", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding);
     }
     else if(version==ID3v2MajorVersion.Version3 || version==ID3v2MajorVersion.Version4)
     {
         return new Writers.PictureFrameWriterM3And4(this, "APIC", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding);
     }
     else
     {
         return null;
     }
 }
 public override ID3Utils.Frames.Writers.FrameWriter CreateWriter(ID3v2MajorVersion version, EncodingScheme encoding)
 {
     if (version == ID3v2MajorVersion.Version2)
     {
         return(new Writers.TextFrameWriter(this, "TOR", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding));
     }
     if (version == ID3v2MajorVersion.Version3)
     {
         return(new Writers.TextFrameWriter(this, "TORY", Writers.FrameHeaderWriter.CreateFrameHeaderWriter(version), encoding));
     }
     return(null);
 }
Пример #48
0
 private void Test(EncodingScheme encoding)
 {
     TestVersion(encoding, ID3v2MajorVersion.Version2);
     TestVersion(encoding, ID3v2MajorVersion.Version3);
     TestVersion(encoding, ID3v2MajorVersion.Version4);
 }