mirror of https://github.com/jellyfin/jellyfin.git
review
This commit is contained in:
parent
3b5214e595
commit
0835b26889
|
@ -2270,7 +2270,7 @@ namespace Emby.Server.Implementations.Data
|
||||||
return query.IncludeItemTypes.Any(x => _seriesTypes.Contains(x));
|
return query.IncludeItemTypes.Any(x => _seriesTypes.Contains(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<string> GetFinalColumnsToSelect(InternalItemsQuery query, List<string> columns)
|
private void SetFinalColumnsToSelect(InternalItemsQuery query, List<string> columns)
|
||||||
{
|
{
|
||||||
foreach (var field in _allFields)
|
foreach (var field in _allFields)
|
||||||
{
|
{
|
||||||
|
@ -2438,8 +2438,6 @@ namespace Emby.Server.Implementations.Data
|
||||||
|
|
||||||
columns.Add(builder.ToString());
|
columns.Add(builder.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return columns;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BindSearchParams(InternalItemsQuery query, IStatement statement)
|
private void BindSearchParams(InternalItemsQuery query, IStatement statement)
|
||||||
|
@ -2541,8 +2539,10 @@ namespace Emby.Server.Implementations.Data
|
||||||
query.Limit = query.Limit.Value + 4;
|
query.Limit = query.Limit.Value + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
var commandTextBuilder = new StringBuilder("select ")
|
var columns = new List<string> { "count(distinct PresentationUniqueKey)" };
|
||||||
.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count(distinct PresentationUniqueKey)" }))
|
SetFinalColumnsToSelect(query, columns);
|
||||||
|
var commandTextBuilder = new StringBuilder("select ", 256)
|
||||||
|
.AppendJoin(',', columns)
|
||||||
.Append(FromText)
|
.Append(FromText)
|
||||||
.Append(GetJoinUserDataText(query));
|
.Append(GetJoinUserDataText(query));
|
||||||
|
|
||||||
|
@ -2595,8 +2595,10 @@ namespace Emby.Server.Implementations.Data
|
||||||
query.Limit = query.Limit.Value + 4;
|
query.Limit = query.Limit.Value + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
var commandTextBuilder = new StringBuilder("select ")
|
var columns = _retriveItemColumns.ToList();
|
||||||
.AppendJoin(',', GetFinalColumnsToSelect(query, _retriveItemColumns.ToList()))
|
SetFinalColumnsToSelect(query, columns);
|
||||||
|
var commandTextBuilder = new StringBuilder("select ", 1024)
|
||||||
|
.AppendJoin(',', columns)
|
||||||
.Append(FromText)
|
.Append(FromText)
|
||||||
.Append(GetJoinUserDataText(query));
|
.Append(GetJoinUserDataText(query));
|
||||||
|
|
||||||
|
@ -2618,13 +2620,13 @@ namespace Emby.Server.Implementations.Data
|
||||||
if (query.Limit.HasValue || offset > 0)
|
if (query.Limit.HasValue || offset > 0)
|
||||||
{
|
{
|
||||||
commandTextBuilder.Append(" LIMIT ")
|
commandTextBuilder.Append(" LIMIT ")
|
||||||
.Append((query.Limit ?? int.MaxValue).ToString(CultureInfo.InvariantCulture));
|
.Append(query.Limit ?? int.MaxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset > 0)
|
if (offset > 0)
|
||||||
{
|
{
|
||||||
commandTextBuilder.Append(" OFFSET ")
|
commandTextBuilder.Append(" OFFSET ")
|
||||||
.Append(offset.ToString(CultureInfo.InvariantCulture));
|
.Append(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2784,8 +2786,10 @@ namespace Emby.Server.Implementations.Data
|
||||||
query.Limit = query.Limit.Value + 4;
|
query.Limit = query.Limit.Value + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
var commandTextBuilder = new StringBuilder("select ")
|
var columns = _retriveItemColumns.ToList();
|
||||||
.AppendJoin(',', GetFinalColumnsToSelect(query, _retriveItemColumns.ToList()))
|
SetFinalColumnsToSelect(query, columns);
|
||||||
|
var commandTextBuilder = new StringBuilder("select ", 512)
|
||||||
|
.AppendJoin(',', columns)
|
||||||
.Append(FromText)
|
.Append(FromText)
|
||||||
.Append(GetJoinUserDataText(query));
|
.Append(GetJoinUserDataText(query));
|
||||||
|
|
||||||
|
@ -2811,13 +2815,13 @@ namespace Emby.Server.Implementations.Data
|
||||||
if (query.Limit.HasValue || offset > 0)
|
if (query.Limit.HasValue || offset > 0)
|
||||||
{
|
{
|
||||||
commandTextBuilder.Append(" LIMIT ")
|
commandTextBuilder.Append(" LIMIT ")
|
||||||
.Append((query.Limit ?? int.MaxValue).ToString(CultureInfo.InvariantCulture));
|
.Append(query.Limit ?? int.MaxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset > 0)
|
if (offset > 0)
|
||||||
{
|
{
|
||||||
commandTextBuilder.Append(" OFFSET ")
|
commandTextBuilder.Append(" OFFSET ")
|
||||||
.Append(offset.ToString(CultureInfo.InvariantCulture));
|
.Append(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2836,20 +2840,24 @@ namespace Emby.Server.Implementations.Data
|
||||||
|
|
||||||
commandTextBuilder.Append(" select ");
|
commandTextBuilder.Append(" select ");
|
||||||
|
|
||||||
|
List<string> columnsToSelect;
|
||||||
if (EnableGroupByPresentationUniqueKey(query))
|
if (EnableGroupByPresentationUniqueKey(query))
|
||||||
{
|
{
|
||||||
commandTextBuilder.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct PresentationUniqueKey)" }));
|
columnsToSelect = new List<string> { "count (distinct PresentationUniqueKey)" };
|
||||||
}
|
}
|
||||||
else if (query.GroupBySeriesPresentationUniqueKey)
|
else if (query.GroupBySeriesPresentationUniqueKey)
|
||||||
{
|
{
|
||||||
commandTextBuilder.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct SeriesPresentationUniqueKey)" }));
|
columnsToSelect = new List<string> { "count (distinct SeriesPresentationUniqueKey)" };
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
commandTextBuilder.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count (guid)" }));
|
columnsToSelect = new List<string> { "count (guid)" };
|
||||||
}
|
}
|
||||||
|
|
||||||
commandTextBuilder.Append(FromText)
|
SetFinalColumnsToSelect(query, columnsToSelect);
|
||||||
|
|
||||||
|
commandTextBuilder.AppendJoin(',', columnsToSelect)
|
||||||
|
.Append(FromText)
|
||||||
.Append(GetJoinUserDataText(query));
|
.Append(GetJoinUserDataText(query));
|
||||||
if (!string.IsNullOrEmpty(whereText))
|
if (!string.IsNullOrEmpty(whereText))
|
||||||
{
|
{
|
||||||
|
@ -3062,8 +3070,10 @@ namespace Emby.Server.Implementations.Data
|
||||||
|
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
|
|
||||||
var commandTextBuilder = new StringBuilder("select ")
|
var columns = new List<string> { "guid" };
|
||||||
.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "guid" }))
|
SetFinalColumnsToSelect(query, columns);
|
||||||
|
var commandTextBuilder = new StringBuilder("select ", 256)
|
||||||
|
.AppendJoin(',', columns)
|
||||||
.Append(FromText)
|
.Append(FromText)
|
||||||
.Append(GetJoinUserDataText(query));
|
.Append(GetJoinUserDataText(query));
|
||||||
|
|
||||||
|
@ -3084,13 +3094,13 @@ namespace Emby.Server.Implementations.Data
|
||||||
if (query.Limit.HasValue || offset > 0)
|
if (query.Limit.HasValue || offset > 0)
|
||||||
{
|
{
|
||||||
commandTextBuilder.Append(" LIMIT ")
|
commandTextBuilder.Append(" LIMIT ")
|
||||||
.Append((query.Limit ?? int.MaxValue).ToString(CultureInfo.InvariantCulture));
|
.Append(query.Limit ?? int.MaxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset > 0)
|
if (offset > 0)
|
||||||
{
|
{
|
||||||
commandTextBuilder.Append(" OFFSET ")
|
commandTextBuilder.Append(" OFFSET ")
|
||||||
.Append(offset.ToString(CultureInfo.InvariantCulture));
|
.Append(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3133,7 +3143,9 @@ namespace Emby.Server.Implementations.Data
|
||||||
|
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
|
|
||||||
var commandText = "select " + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "guid", "path" })) + FromText;
|
var columns = new List<string> { "guid", "path" };
|
||||||
|
SetFinalColumnsToSelect(query, columns);
|
||||||
|
var commandText = "select " + string.Join(',', columns) + FromText;
|
||||||
|
|
||||||
var whereClauses = GetWhereClauses(query, null);
|
var whereClauses = GetWhereClauses(query, null);
|
||||||
if (whereClauses.Count != 0)
|
if (whereClauses.Count != 0)
|
||||||
|
@ -3209,8 +3221,10 @@ namespace Emby.Server.Implementations.Data
|
||||||
|
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
|
|
||||||
|
var columns = new List<string> { "guid" };
|
||||||
|
SetFinalColumnsToSelect(query, columns);
|
||||||
var commandText = "select "
|
var commandText = "select "
|
||||||
+ string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "guid" }))
|
+ string.Join(',', columns)
|
||||||
+ FromText
|
+ FromText
|
||||||
+ GetJoinUserDataText(query);
|
+ GetJoinUserDataText(query);
|
||||||
|
|
||||||
|
@ -3251,19 +3265,23 @@ namespace Emby.Server.Implementations.Data
|
||||||
{
|
{
|
||||||
commandText = string.Empty;
|
commandText = string.Empty;
|
||||||
|
|
||||||
|
List<string> columnsToSelect;
|
||||||
if (EnableGroupByPresentationUniqueKey(query))
|
if (EnableGroupByPresentationUniqueKey(query))
|
||||||
{
|
{
|
||||||
commandText += " select " + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct PresentationUniqueKey)" })) + FromText;
|
columnsToSelect = new List<string> { "count (distinct PresentationUniqueKey)" };
|
||||||
}
|
}
|
||||||
else if (query.GroupBySeriesPresentationUniqueKey)
|
else if (query.GroupBySeriesPresentationUniqueKey)
|
||||||
{
|
{
|
||||||
commandText += " select " + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct SeriesPresentationUniqueKey)" })) + FromText;
|
columnsToSelect = new List<string> { "count (distinct SeriesPresentationUniqueKey)" };
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
commandText += " select " + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "count (guid)" })) + FromText;
|
columnsToSelect = new List<string> { "count (guid)" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetFinalColumnsToSelect(query, columnsToSelect);
|
||||||
|
commandText += " select " + string.Join(',', columnsToSelect) + FromText;
|
||||||
|
|
||||||
commandText += GetJoinUserDataText(query)
|
commandText += GetJoinUserDataText(query)
|
||||||
+ whereText;
|
+ whereText;
|
||||||
statementTexts.Add(commandText);
|
statementTexts.Add(commandText);
|
||||||
|
@ -5232,30 +5250,30 @@ AND Type = @InternalPersonType)");
|
||||||
|
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
|
|
||||||
var stringBuilder = new StringBuilder("Select Value From ItemValues where Type");
|
var stringBuilder = new StringBuilder("Select Value From ItemValues where Type", 128);
|
||||||
if (itemValueTypes.Length == 1)
|
if (itemValueTypes.Length == 1)
|
||||||
{
|
{
|
||||||
stringBuilder.Append('=')
|
stringBuilder.Append('=')
|
||||||
.Append(itemValueTypes[0].ToString(CultureInfo.InvariantCulture));
|
.Append(itemValueTypes[0]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stringBuilder.Append(" in (")
|
stringBuilder.Append(" in (")
|
||||||
.AppendJoin(',', itemValueTypes.Select(i => i.ToString(CultureInfo.InvariantCulture)))
|
.AppendJoin(',', itemValueTypes)
|
||||||
.Append(')');
|
.Append(')');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (withItemTypes.Count > 0)
|
if (withItemTypes.Count > 0)
|
||||||
{
|
{
|
||||||
stringBuilder.Append(" AND ItemId In (select guid from typedbaseitems where type in (")
|
stringBuilder.Append(" AND ItemId In (select guid from typedbaseitems where type in (")
|
||||||
.AppendJoin(',', withItemTypes.Select(i => "'" + i + "'"))
|
.AppendJoinInSingleQuotes(',', withItemTypes)
|
||||||
.Append("))");
|
.Append("))");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (excludeItemTypes.Count > 0)
|
if (excludeItemTypes.Count > 0)
|
||||||
{
|
{
|
||||||
stringBuilder.Append(" AND ItemId not In (select guid from typedbaseitems where type in (")
|
stringBuilder.Append(" AND ItemId not In (select guid from typedbaseitems where type in (")
|
||||||
.AppendJoin(',', excludeItemTypes.Select(i => "'" + i + "'"))
|
.AppendJoinInSingleQuotes(',', excludeItemTypes)
|
||||||
.Append("))");
|
.Append("))");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5296,14 +5314,14 @@ AND Type = @InternalPersonType)");
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
|
|
||||||
var typeClause = itemValueTypes.Length == 1 ?
|
var typeClause = itemValueTypes.Length == 1 ?
|
||||||
("Type=" + itemValueTypes[0].ToString(CultureInfo.InvariantCulture)) :
|
("Type=" + itemValueTypes[0]) :
|
||||||
("Type in (" + string.Join(',', itemValueTypes.Select(i => i.ToString(CultureInfo.InvariantCulture))) + ")");
|
("Type in (" + string.Join(',', itemValueTypes) + ")");
|
||||||
|
|
||||||
InternalItemsQuery typeSubQuery = null;
|
InternalItemsQuery typeSubQuery = null;
|
||||||
|
|
||||||
string itemCountColumns = null;
|
string itemCountColumns = null;
|
||||||
|
|
||||||
var stringBuilder = new StringBuilder();
|
var stringBuilder = new StringBuilder(1024);
|
||||||
var typesToCount = query.IncludeItemTypes;
|
var typesToCount = query.IncludeItemTypes;
|
||||||
|
|
||||||
if (typesToCount.Length > 0)
|
if (typesToCount.Length > 0)
|
||||||
|
@ -5326,6 +5344,7 @@ AND Type = @InternalPersonType)");
|
||||||
|
|
||||||
stringBuilder.Append(" where ")
|
stringBuilder.Append(" where ")
|
||||||
.AppendJoin(" AND ", whereClauses)
|
.AppendJoin(" AND ", whereClauses)
|
||||||
|
.Append(" AND ")
|
||||||
.Append("guid in (select ItemId from ItemValues where ItemValues.CleanValue=A.CleanName AND ")
|
.Append("guid in (select ItemId from ItemValues where ItemValues.CleanValue=A.CleanName AND ")
|
||||||
.Append(typeClause)
|
.Append(typeClause)
|
||||||
.Append(")) as itemTypes");
|
.Append(")) as itemTypes");
|
||||||
|
@ -5359,7 +5378,7 @@ AND Type = @InternalPersonType)");
|
||||||
IsSeries = query.IsSeries
|
IsSeries = query.IsSeries
|
||||||
};
|
};
|
||||||
|
|
||||||
columns = GetFinalColumnsToSelect(query, columns);
|
SetFinalColumnsToSelect(query, columns);
|
||||||
|
|
||||||
var innerWhereClauses = GetWhereClauses(innerQuery, null);
|
var innerWhereClauses = GetWhereClauses(innerQuery, null);
|
||||||
|
|
||||||
|
@ -5431,13 +5450,13 @@ AND Type = @InternalPersonType)");
|
||||||
if (query.Limit.HasValue || offset > 0)
|
if (query.Limit.HasValue || offset > 0)
|
||||||
{
|
{
|
||||||
stringBuilder.Append(" LIMIT ")
|
stringBuilder.Append(" LIMIT ")
|
||||||
.Append((query.Limit ?? int.MaxValue).ToString(CultureInfo.InvariantCulture));
|
.Append(query.Limit ?? int.MaxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset > 0)
|
if (offset > 0)
|
||||||
{
|
{
|
||||||
stringBuilder.Append(" OFFSET ")
|
stringBuilder.Append(" OFFSET ")
|
||||||
.Append(offset.ToString(CultureInfo.InvariantCulture));
|
.Append(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5454,8 +5473,10 @@ AND Type = @InternalPersonType)");
|
||||||
if (query.EnableTotalRecordCount)
|
if (query.EnableTotalRecordCount)
|
||||||
{
|
{
|
||||||
stringBuilder.Clear();
|
stringBuilder.Clear();
|
||||||
|
var columnsToSelect = new List<string> { "count (distinct PresentationUniqueKey)" };
|
||||||
|
SetFinalColumnsToSelect(query, columnsToSelect);
|
||||||
stringBuilder.Append("select ")
|
stringBuilder.Append("select ")
|
||||||
.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct PresentationUniqueKey)" }))
|
.AppendJoin(',', columnsToSelect)
|
||||||
.Append(FromText)
|
.Append(FromText)
|
||||||
.Append(GetJoinUserDataText(query))
|
.Append(GetJoinUserDataText(query))
|
||||||
.Append(whereText);
|
.Append(whereText);
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Common.Extensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Extension methods for the <see cref="StringBuilder"/> class.
|
||||||
|
/// </summary>
|
||||||
|
public static class StringBuilderExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Concatenates and appends the members of a collection in single quotes using the specified delimiter.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The string builder.</param>
|
||||||
|
/// <param name="delimiter">The character delimiter.</param>
|
||||||
|
/// <param name="values">The collection of strings to concatenate.</param>
|
||||||
|
/// <returns>The updated string builder.</returns>
|
||||||
|
public static StringBuilder AppendJoinInSingleQuotes(this StringBuilder builder, char delimiter, IReadOnlyList<string> values)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < values.Count; i++)
|
||||||
|
{
|
||||||
|
builder.Append('\'')
|
||||||
|
.Append(values[i])
|
||||||
|
.Append('\'')
|
||||||
|
.Append(delimiter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove last ,
|
||||||
|
builder.Length--;
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -60,10 +60,7 @@ namespace MediaBrowser.Controller.Providers
|
||||||
}
|
}
|
||||||
|
|
||||||
public IReadOnlyList<string> GetFilePaths(string path)
|
public IReadOnlyList<string> GetFilePaths(string path)
|
||||||
=> GetFilePaths(path, false, false);
|
=> GetFilePaths(path, false);
|
||||||
|
|
||||||
public IReadOnlyList<string> GetSortedFilePaths(string path, bool clearCache)
|
|
||||||
=> GetFilePaths(path, clearCache, true);
|
|
||||||
|
|
||||||
public IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false)
|
public IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false)
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,8 +15,6 @@ namespace MediaBrowser.Controller.Providers
|
||||||
|
|
||||||
IReadOnlyList<string> GetFilePaths(string path);
|
IReadOnlyList<string> GetFilePaths(string path);
|
||||||
|
|
||||||
IReadOnlyList<string> GetSortedFilePaths(string path, bool clearCache);
|
|
||||||
|
|
||||||
IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false);
|
IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,7 +187,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
IDirectoryService directoryService,
|
IDirectoryService directoryService,
|
||||||
bool clearCache)
|
bool clearCache)
|
||||||
{
|
{
|
||||||
var files = directoryService.GetSortedFilePaths(folder, clearCache);
|
var files = directoryService.GetFilePaths(folder, clearCache, true);
|
||||||
|
|
||||||
AddExternalSubtitleStreams(streams, videoPath, startIndex, files);
|
AddExternalSubtitleStreams(streams, videoPath, startIndex, files);
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,10 +164,7 @@ namespace Jellyfin.Server.Implementations.Tests.Data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
public static IEnumerable<object[]> DeserializeImages_ValidAndInvalid_TestData()
|
|
||||||
{
|
|
||||||
yield return new object[]
|
yield return new object[]
|
||||||
{
|
{
|
||||||
string.Empty,
|
string.Empty,
|
||||||
|
@ -215,23 +212,6 @@ namespace Jellyfin.Server.Implementations.Tests.Data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Theory]
|
|
||||||
[MemberData(nameof(DeserializeImages_ValidAndInvalid_TestData))]
|
|
||||||
public void DeserializeImages_ValidAndInvalid_Success(string value, ItemImageInfo[] expected)
|
|
||||||
{
|
|
||||||
var result = _sqliteItemRepository.DeserializeImages(value);
|
|
||||||
Assert.Equal(expected.Length, result.Length);
|
|
||||||
for (int i = 0; i < expected.Length; i++)
|
|
||||||
{
|
|
||||||
Assert.Equal(expected[i].Path, result[i].Path);
|
|
||||||
Assert.Equal(expected[i].Type, result[i].Type);
|
|
||||||
Assert.Equal(expected[i].DateModified, result[i].DateModified);
|
|
||||||
Assert.Equal(expected[i].Width, result[i].Width);
|
|
||||||
Assert.Equal(expected[i].Height, result[i].Height);
|
|
||||||
Assert.Equal(expected[i].BlurHash, result[i].BlurHash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[MemberData(nameof(DeserializeImages_Valid_TestData))]
|
[MemberData(nameof(DeserializeImages_Valid_TestData))]
|
||||||
public void SerializeImages_Valid_Success(string expected, ItemImageInfo[] value)
|
public void SerializeImages_Valid_Success(string expected, ItemImageInfo[] value)
|
||||||
|
|
Loading…
Reference in New Issue