コード例 #1
0
ファイル: AlbumFileParser.cs プロジェクト: sethura/vocadb
        private ImportedAlbumTrack ParseTrack(DataRow dataRow, int nextTrackNum)
        {
            var track = new ImportedAlbumTrack();

            track.Title = dataRow.GetString(AlbumFileField.Title);
            var trackNumMatch = numRegex.Match(dataRow.GetString(AlbumFileField.Track, string.Empty));

            if (trackNumMatch.Success)
            {
                track.TrackNum = int.Parse(trackNumMatch.Groups[1].Value);
            }
            else
            {
                track.TrackNum = nextTrackNum;
            }

            var artists = new List <string>();

            var composer = dataRow.GetString(AlbumFileField.Composer, string.Empty);

            if (composer != string.Empty)
            {
                artists.Add(composer);
            }

            var artist = dataRow.GetString(AlbumFileField.Artist, string.Empty);

            if (artist != string.Empty)
            {
                var featPos = artist.IndexOf("feat.", StringComparison.InvariantCultureIgnoreCase);

                if (featPos != -1)
                {
                    var vocaloidName = artist.Substring(featPos + 5, artist.Length - featPos - 5).Trim();
                    track.VocalistNames = GetArtistNames(vocaloidName);
                    artist = artist.Substring(0, featPos).Trim();
                }
                else
                {
                    track.VocalistNames = new string[] {};
                }

                artists.AddRange(GetArtistNames(artist));
            }

            track.ArtistNames = artists.Distinct().ToArray();
            return(track);
        }
コード例 #2
0
		private ImportedAlbumTrack ParseTrack(DataRow dataRow, int nextTrackNum) {

			var track = new ImportedAlbumTrack();

			track.Title = dataRow.GetString(AlbumFileField.Title);
			var trackNumMatch = numRegex.Match(dataRow.GetString(AlbumFileField.Track, string.Empty));
			if (trackNumMatch.Success)
				track.TrackNum = int.Parse(trackNumMatch.Groups[1].Value);
			else
				track.TrackNum = nextTrackNum;

			var artists = new List<string>();

			var composer = dataRow.GetString(AlbumFileField.Composer, string.Empty);

			if (composer != string.Empty)
				artists.Add(composer);

			var artist = dataRow.GetString(AlbumFileField.Artist, string.Empty);

			if (artist != string.Empty) {

				var featPos = artist.IndexOf("feat.", StringComparison.InvariantCultureIgnoreCase);

				if (featPos != -1) {

					var vocaloidName = artist.Substring(featPos + 5, artist.Length - featPos - 5).Trim();
					track.VocalistNames = GetArtistNames(vocaloidName);
					artist = artist.Substring(0, featPos).Trim();

				} else {

					track.VocalistNames = new string[] {};

				}

				artists.AddRange(GetArtistNames(artist));

			}

			track.ArtistNames = artists.Distinct().ToArray();
			return track;

		}
コード例 #3
0
ファイル: AlbumFileParser.cs プロジェクト: sethura/vocadb
        public MikuDbAlbumContract Parse(Stream input)
        {
            var tracks = new List <ImportedAlbumTrack>();
            var parser = new DataRowParser();
            var data   = new ImportedAlbumDataContract();

            data.Title = "Unknown";

            using (var reader = new StreamReader(input)) {
                string row;
                while ((row = reader.ReadLine()) != null)
                {
                    if (!parser.IsConfigured)
                    {
                        parser.Configure(row);
                    }
                    else
                    {
                        var dataRow = new DataRow(parser, row);

                        var albumName = dataRow.GetString(AlbumFileField.Album, string.Empty);
                        if (albumName != string.Empty)
                        {
                            data.Title = albumName;
                        }

                        var year = dataRow.GetIntOrDefault(AlbumFileField.Year, 0);
                        if (year != 0)
                        {
                            data.ReleaseYear = year;
                        }

                        var track = ParseTrack(dataRow, tracks.Count + 1);
                        tracks.Add(track);
                    }
                }
            }

            data.ArtistNames   = tracks.SelectMany(t => t.ArtistNames).Distinct().ToArray();
            data.VocalistNames = tracks.SelectMany(t => t.VocalistNames).Distinct().ToArray();
            data.Tracks        = tracks.OrderBy(t => t.TrackNum).ToArray();

            return(new MikuDbAlbumContract(data));
        }
コード例 #4
0
        public MikuDbAlbumContract Parse(Stream input)
        {
            var tracks = new List<ImportedAlbumTrack>();
            var parser = new DataRowParser();
            var data = new ImportedAlbumDataContract();
            data.Title = "Unknown";

            using (var reader = new StreamReader(input)) {

                string row;
                while ((row = reader.ReadLine()) != null) {

                    if (!parser.IsConfigured) {
                        parser.Configure(row);
                    } else {

                        var dataRow = new DataRow(parser, row);

                        var albumName = dataRow.GetString(AlbumFileField.Album, string.Empty);
                        if (albumName != string.Empty)
                            data.Title = albumName;

                        var year = dataRow.GetIntOrDefault(AlbumFileField.Year, 0);
                        if (year != 0)
                            data.ReleaseYear = year;

                        var track = ParseTrack(dataRow, tracks.Count + 1);
                        tracks.Add(track);

                    }

                }

            }

            data.ArtistNames = tracks.SelectMany(t => t.ArtistNames).Distinct().ToArray();
            data.VocalistNames = tracks.SelectMany(t => t.VocalistNames).Distinct().ToArray();
            data.Tracks = tracks.OrderBy(t => t.TrackNum).ToArray();

            return new MikuDbAlbumContract(data);
        }