1
0
Fork 0
mirror of https://github.com/fiso64/slsk-batchdl.git synced 2024-12-22 14:32:40 +00:00

ministuff

This commit is contained in:
fiso64 2023-12-21 17:35:04 +01:00
parent f574b6e098
commit b224659f53
2 changed files with 45 additions and 16 deletions

View file

@ -27,7 +27,7 @@ slsk-batchdl "title=MC MENTAL @ HIS BEST,length=242" --pref-format "flac,wav"
#### Find an artist's songs which aren't in your library: #### Find an artist's songs which aren't in your library:
``` ```
slsk-batchdl "artist=MC MENTAL" --aggregate --print tracks --skip-existing --music-dir "path\to\music" slsk-batchdl "artist=MC MENTAL" --aggregate --print tracks-full --skip-existing --music-dir "path\to\music"
``` ```
### Options: ### Options:

View file

@ -1257,9 +1257,9 @@ static class Program
}, },
fileFilter: (file) => { fileFilter: (file) => {
return IsMusicFile(file.Filename) && necessaryCond.FileSatisfies(file, track, null) return IsMusicFile(file.Filename) && necessaryCond.FileSatisfies(file, track, null)
&& (relax || FileConditions.StrictString(file.Filename, track.ArtistName, ignoreCase: true) && FileConditions.StrictString(file.Filename, track.ArtistName, ignoreCase: true)
&& FileConditions.StrictString(file.Filename, track.TrackTitle, ignoreCase: true) && FileConditions.StrictString(file.Filename, track.TrackTitle, ignoreCase: true)
&& FileConditions.StrictString(file.Filename, track.Album, ignoreCase: true)); && FileConditions.StrictString(file.Filename, track.Album, ignoreCase: true);
}); });
Action<SearchResponse> handler = (r) => { Action<SearchResponse> handler = (r) => {
if (r.Files.Count() > 0) if (r.Files.Count() > 0)
@ -1288,7 +1288,17 @@ static class Program
var fileResponses = results.Select(x => x.Value); var fileResponses = results.Select(x => x.Value);
var equivalentFiles = EquivalentFiles(track, fileResponses); var equivalentFiles = EquivalentFiles(track, fileResponses).ToList();
if (!relax)
{
equivalentFiles = equivalentFiles
.Where(x => FileConditions.StrictString(x.Item1.TrackTitle, track.TrackTitle, ignoreCase: true)
&& (FileConditions.StrictString(x.Item1.ArtistName, track.ArtistName, ignoreCase: true)
|| FileConditions.StrictString(x.Item1.TrackTitle, track.ArtistName, ignoreCase: true)
&& x.Item1.TrackTitle.ContainsInBrackets(track.ArtistName, ignoreCase: true)))
.ToList();
}
var tracks = equivalentFiles var tracks = equivalentFiles
.Select(kvp => { .Select(kvp => {
@ -1449,19 +1459,23 @@ static class Program
Track t = new Track(defaultTrack); Track t = new Track(defaultTrack);
filename = GetFileNameWithoutExtSlsk(filename).Replace(" — ", " - ").Replace("_", " ").RemoveConsecutiveWs().Trim(); filename = GetFileNameWithoutExtSlsk(filename).Replace(" — ", " - ").Replace("_", " ").RemoveConsecutiveWs().Trim();
var trackNumStart = @"^(?:(?:[0-9][-\.])?\d{2,3}[. -]|\b\d\.\s|\b\d\s-\s)(?=.+\S)"; var trackNumStart = new Regex(@"^(?:(?:[0-9][-\.])?\d{2,3}[. -]|\b\d\.\s|\b\d\s-\s)(?=.+\S)");
var trackNumMiddle = @"(-\s*(\d-)?\d{2,3}|\d{2,3}\.?)\s+"; var trackNumMiddle = new Regex(@"(?<=- )((\d-)?\d{2,3}|\d{2,3}\.?)\s+");
filename = Regex.Replace(filename, trackNumStart, "").Trim(); if (trackNumStart.IsMatch(filename))
filename = Regex.Replace(filename, trackNumMiddle, "").Trim(); filename = trackNumStart.Replace(filename, "", 1).Trim();
if (filename.StartsWith("- ")) filename = filename.Substring(2).Trim(); else
filename = trackNumMiddle.Replace(filename, "", 1).Trim();
if (filename.StartsWith("- "))
filename = filename.Substring(2).Trim();
string aname = t.ArtistName.Trim(); string aname = t.ArtistName.Trim();
string tname = t.TrackTitle.Trim(); string tname = t.TrackTitle.Trim();
string alname = t.Album.Trim(); string alname = t.Album.Trim();
string fname = filename; string fname = filename;
fname = fname.Replace("—", "-").Replace("_", " ").Replace('[', '(').Replace(']', ')').ReplaceInvalidChars("", true).RemoveFt().RemoveConsecutiveWs().Trim(); fname = fname.Replace("—", "-").Replace("_", " ").Replace('[', '(').Replace(']', ')').ReplaceInvalidChars("", true).RemoveConsecutiveWs().Trim();
tname = tname.Replace("—", "-").Replace("_", " ").Replace('[', '(').Replace(']', ')').ReplaceInvalidChars("", true).RemoveFt().RemoveConsecutiveWs().Trim(); tname = tname.Replace("—", "-").Replace("_", " ").Replace('[', '(').Replace(']', ')').ReplaceInvalidChars("", true).RemoveFt().RemoveConsecutiveWs().Trim();
aname = aname.Replace("—", "-").Replace("_", " ").Replace('[', '(').Replace(']', ')').ReplaceInvalidChars("", true).RemoveFt().RemoveConsecutiveWs().Trim(); aname = aname.Replace("—", "-").Replace("_", " ").Replace('[', '(').Replace(']', ')').ReplaceInvalidChars("", true).RemoveFt().RemoveConsecutiveWs().Trim();
alname = alname.Replace("—", "-").Replace("_", " ").Replace('[', '(').Replace(']', ')').ReplaceInvalidChars("", true).RemoveFt().RemoveConsecutiveWs().Trim(); alname = alname.Replace("—", "-").Replace("_", " ").Replace('[', '(').Replace(']', ')').ReplaceInvalidChars("", true).RemoveFt().RemoveConsecutiveWs().Trim();
@ -1487,11 +1501,11 @@ static class Program
if (!parts[0].ContainsIgnoreCase(aname) || !parts[1].ContainsIgnoreCase(tname)) if (!parts[0].ContainsIgnoreCase(aname) || !parts[1].ContainsIgnoreCase(tname))
{ {
t.ArtistMaybeWrong = true; t.ArtistMaybeWrong = true;
if (!maybeRemix && parts[0].ContainsIgnoreCase(tname) && parts[1].ContainsIgnoreCase(aname)) //if (!maybeRemix && parts[0].ContainsIgnoreCase(tname) && parts[1].ContainsIgnoreCase(aname))
{ //{
t.ArtistName = realParts[1]; // t.ArtistName = realParts[1];
t.TrackTitle = realParts[0]; // t.TrackTitle = realParts[0];
} //}
} }
} }
@ -2960,6 +2974,21 @@ public static class Utils
return Regex.IsMatch(str, pattern, options); return Regex.IsMatch(str, pattern, options);
} }
public static bool ContainsInBrackets(this string str, string searchTerm, bool ignoreCase=false)
{
var regex = new Regex(@"\[(.*?)\]|\((.*?)\)");
var matches = regex.Matches(str);
var comp = ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal;
foreach (Match match in matches)
{
if (match.Value.Contains(searchTerm, comp))
return true;
}
return false;
}
public static bool RemoveRegexIfExist(this string s, string reg, out string res) public static bool RemoveRegexIfExist(this string s, string reg, out string res)
{ {
res = Regex.Replace(s, reg, string.Empty); res = Regex.Replace(s, reg, string.Empty);