Exemplo n.º 1
0
        internal override bool Process(TrackInfo info, ref int startIndex, ref int endIndex, ref string piece, StringComparison comparisonType)
        {
            if (endIndex - check.Length >= 0 && string.Equals(piece.Substring(endIndex - check.Length, check.Length), check, comparisonType))
            {
                var remixersText = piece.Substring(startIndex + 1, endIndex - startIndex - check.Length - 1)
                                   .Trim();
                info.Remixers.AddRange(ArtistUtils.SplitArtists(remixersText));
                piece = piece.Remove(startIndex, endIndex - startIndex + 1)
                        .Trim();
                return(true);
            }

            return(false);
        }
Exemplo n.º 2
0
        //TODO make this less bad
        public static TrackInfo GetTrackInfo(string artists, string title, string albumArtists, string album, DateTime date)
        {
            var key = (artists + title + albumArtists + album).GetHashCode();

            if (cache.TryGetValue(key, out var cached))
            {
                return(cached);
            }

            var info = new TrackInfo
            {
                Artists  = ArtistUtils.SplitArtists(artists),
                Features = new List <string>(),
                Remixers = new List <string>(),

                OriginalTitle = title,

                Album        = album,
                AlbumArtists = ArtistUtils.SplitArtists(albumArtists),

                ScrobbledDate = date
            };

            var track = spotifyBad.Replace(title, "$1 ($3 Remix)"); //todo: slow, make this work like it does with brackets
            const StringComparison COMPARISON_TYPE = StringComparison.OrdinalIgnoreCase;

            try
            {
                var startIndex = 0;

                while (startIndex < track.Length /*&& startIndex >= 0 */ && (startIndex = track.IndexOf("(", startIndex, COMPARISON_TYPE)) >= 0)
                {
                    var endIndex = track.IndexOf(")", startIndex, COMPARISON_TYPE);

                    if (endIndex < startIndex)
                    {
                        Console.WriteLine($"error parsing '{info.OriginalTitle}': malformed brackets");
                        startIndex += 1;
                    }

                    var noMatch = true;

                    foreach (var part in parts)
                    {
                        var found = part.Process(info, ref startIndex, ref endIndex, ref track, COMPARISON_TYPE);

                        if (found)
                        {
                            noMatch = false;
                            break;
                        }
                    }

                    if (noMatch)
                    {
                        Console.WriteLine($"info parsing '{info.OriginalTitle}': unknown pattern");
                        startIndex = endIndex;
                    }
                }

                startIndex = 0;

                while (startIndex < track.Length && (startIndex = track.IndexOf("[", startIndex, COMPARISON_TYPE)) >= 0)
                {
                    var endIndex = track.IndexOf("]", startIndex, COMPARISON_TYPE);

                    if (endIndex < startIndex)
                    {
                        Console.WriteLine($"error parsing '{info.OriginalTitle}': malformed brackets");
                        startIndex += 1;
                    }

                    var noMatch = true;

                    foreach (var part in parts)
                    {
                        var found = part.Process(info, ref startIndex, ref endIndex, ref track, COMPARISON_TYPE);

                        if (found)
                        {
                            noMatch = false;
                            break;
                        }
                    }

                    if (noMatch)
                    {
                        Console.WriteLine($"info parsing '{info.OriginalTitle}': unknown pattern");
                        startIndex = endIndex;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"error parsing '{info.OriginalTitle}': {e}");
            }

            info.ProcessedTitle = track.Trim();

            cache.Add(key, info);

            return(info);
        }
 protected override void Merge(Artist source, Artist target)
 {
     ArtistUtils.Merge(source, target);
 }
 protected override QueryFilters <ArtistProperty> GetChanges(Artist original, Artist changed)
 {
     return(ArtistUtils.GetChanges(original, changed));
 }