Achamenes.ID3.Frames.Parsers.FrameParserFactory.CreateFrameParser C# (CSharp) Метод

CreateFrameParser() публичный Метод

public CreateFrameParser ( ID3v2MajorVersion version, string frameID ) : FrameParser
version ID3v2MajorVersion
frameID string
Результат FrameParser
        public virtual FrameParser CreateFrameParser(ID3v2MajorVersion version, string frameID)
        {
            List<CreateParserDelegate> parsers=new List<CreateParserDelegate>();

            parsers.Add(new CreateParserDelegate(Frames.AlbumTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.ArtistTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.BeatsPerMinuteTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.ComposerTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.CopyrightTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.CustomUserTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.DateTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.EncodedByTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.EncodingTimeTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.FileTypeTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.GenreTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.GroupingTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.InitialKeyTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.LanguageTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.LengthTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.MediaTypeTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.OrchestraTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.OriginalAlbumTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.OriginalArtistTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.OriginalReleaseTimeTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.OriginalReleaseYearTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.PartOfSetTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.PublisherTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.RecordingTimeTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.ReleaseTimeTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.SoftwareSettingsTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.TaggingTimeTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.TimeTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.TitleTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.TrackTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.YearTextFrame.CreateParser));

            parsers.Add(new CreateParserDelegate(Frames.CommentExtendedTextFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.LyricsExtendedTextFrame.CreateParser));

            parsers.Add(new CreateParserDelegate(Frames.CommercialUrlFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.CustomUserUrlFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.OfficialArtistUrlFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.OfficialAudioFileUrlFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.OfficialAudioSourceUrlFrame.CreateParser));

            parsers.Add(new CreateParserDelegate(Frames.GeneralEncapsulatedObjectFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.MusicCDIdentifierFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.PictureFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.PlayCounterFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.PrivateFrame.CreateParser));
            parsers.Add(new CreateParserDelegate(Frames.UniqueFileIdentifierFrame.CreateParser));

            foreach(CreateParserDelegate p in parsers)
            {
                FrameParser parser=p(version, frameID);
                if(parser!=null)
                    return parser;
            }
            return null;
        }

Usage Example

Пример #1
0
        /// <summary>
        /// This function parses the next frame from the stream and returns it.
        /// </summary>
        /// <param name="stream">The stream to parse the Frame from.</param>
        /// <param name="version">The ID3 v2 Major version of the ID3 tag that the stream is reading.</param>
        /// <param name="parserFactory">A FrameParserFactory to use to create FrameParsers based on Frame IDs.</param>
        /// <param name="frameID">Output: outputs the frameID of the frame just parsed.</param>
        /// <returns>The parsed Frame object.</returns>
        /// <exception cref="Achamenes.ID3.NoFrameParserProvidedException">
        /// Thrown if the FrameParserFactory object passed did not recognize the Frame ID for the given version.
        /// </exception>
        public static Frame Parse(System.IO.Stream stream, ID3v2MajorVersion version, FrameParserFactory parserFactory, out string frameID)
        {
            FrameHeaderParser headerParser = FrameHeaderParser.CreateFrameHeaderParser(version);
            FrameHeader       header       = headerParser.Parse(stream);

            frameID = "";
            if (header == null)          // have reached the padding, no more frames.
            {
                return(null);
            }
            frameID = header.FrameID;

            if (header.Length > 128 * 128 * 128 * 128)
            {
                throw new FatalException("Invalid frame length for frame with frame ID '" + frameID + "'.");
            }

            byte[] frameData = new byte[header.Length];
            stream.Read(frameData, 0, frameData.Length);
            FrameParser parser = parserFactory.CreateFrameParser(version, header.FrameID);

            if (parser == null)
            {
                throw new NoFrameParserProvidedException(frameID, version, "No frame parser object is provided to parse this type of frame in this implementation.");
            }
            return(parser.ParseFrame(frameData));
        }
All Usage Examples Of Achamenes.ID3.Frames.Parsers.FrameParserFactory::CreateFrameParser
FrameParserFactory