101 lines
3.2 KiB
C#
101 lines
3.2 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Xml.Serialization;
|
|
using MusicMetaTagger.Core.Queries;
|
|
using MusicMetaTagger.Core.Utility;
|
|
|
|
namespace MusicMetaTagger.UI
|
|
{
|
|
public class LibraryQuery
|
|
{
|
|
[Category("Name Searches")]
|
|
[Browsable(true)]
|
|
[Description("Search by Artist Name")]
|
|
[XmlAttribute]
|
|
public string ArtistName { get; set; }
|
|
|
|
[Category("Name Searches")]
|
|
[Browsable(true)]
|
|
[Description("Search by Album Title")]
|
|
[XmlAttribute]
|
|
public string AlbumTitle { get; set; }
|
|
|
|
[Category("Name Searches")]
|
|
[Browsable(true)]
|
|
[Description("Search by Track Title")]
|
|
[XmlAttribute]
|
|
public string TrackTitle { get; set; }
|
|
|
|
[Category("Date")]
|
|
[Browsable(true)]
|
|
[Description("Search by the Most Recently Added Entries")]
|
|
[XmlAttribute]
|
|
public DateTime AddedAfter { get; set; }
|
|
|
|
[Category("Blank Fields")]
|
|
[Browsable(true)]
|
|
[Description("Search by those with Blank Rating field")]
|
|
[DefaultValue(false)]
|
|
[XmlAttribute]
|
|
public bool BlankRating { get; set; }
|
|
|
|
[Category("Blank Fields")]
|
|
[Browsable(true)]
|
|
[Description("Search by those with Blank Genre field")]
|
|
[DefaultValue(false)]
|
|
[XmlAttribute]
|
|
public bool BlankGenre { get; set; }
|
|
|
|
[Category("Blank Fields")]
|
|
[Browsable(true)]
|
|
[Description("Search by those with Blank Year field")]
|
|
[DefaultValue(false)]
|
|
[XmlAttribute]
|
|
public bool BlankYear { get; set; }
|
|
|
|
[Category("General")]
|
|
[Browsable(true)]
|
|
[Description("Limit the number of tracks scanned in the library - use this for a trial run")]
|
|
[DefaultValue(0)]
|
|
[XmlAttribute]
|
|
public int ScanLimit { get; set; }
|
|
|
|
/// <summary>
|
|
/// Returns true if the given track query matches this library query
|
|
/// </summary>
|
|
public bool MatchTrackQuery(TrackQuery trackQuery)
|
|
{
|
|
Func<string, string, bool> isMatch =
|
|
(s1, s2) => string.IsNullOrEmpty(s1)
|
|
|| string.IsNullOrEmpty(s2)
|
|
|| StringUtility.Similarity(s1, s2) > .5
|
|
|| StringUtility.ContainsString(s1, s2);
|
|
|
|
return isMatch(trackQuery.ArtistName, ArtistName)
|
|
&& isMatch(trackQuery.AlbumTitle, AlbumTitle)
|
|
&& isMatch(trackQuery.TrackTitle, TrackTitle);
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
var description = "";
|
|
if (!string.IsNullOrEmpty(ArtistName))
|
|
description = StringUtility.ConcatToString(description, "Artist:[" + ArtistName + "]");
|
|
if (!string.IsNullOrEmpty(AlbumTitle))
|
|
description = StringUtility.ConcatToString(description, "Album:[" + AlbumTitle + "]");
|
|
if (!string.IsNullOrEmpty(TrackTitle))
|
|
description = StringUtility.ConcatToString(description, "Track:[" + TrackTitle + "]");
|
|
if (AddedAfter != DateTime.MinValue)
|
|
description = StringUtility.ConcatToString(description, "Added After:" + AddedAfter.ToShortDateString());
|
|
if (BlankRating)
|
|
description = StringUtility.ConcatToString(description, "Blank Rating");
|
|
if (BlankGenre)
|
|
description = StringUtility.ConcatToString(description, "Blank Genre");
|
|
if (BlankYear)
|
|
description = StringUtility.ConcatToString(description, "Blank Year");
|
|
if (ScanLimit > 0)
|
|
description = StringUtility.ConcatToString(description, "Scan Limit:" + ScanLimit);
|
|
return description;
|
|
}
|
|
}
|
|
} |