Files
textdecalURP/Packages/com.unity.asset-store-tools/Editor/Uploader/Scripts/Data/PackageGroup.cs
Kirill Chikalin 275dc598c7 update libs
2025-02-13 17:48:12 +03:00

64 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
namespace AssetStoreTools.Uploader.Data
{
internal class PackageGroup : IPackageGroup
{
private class FilteredPackage
{
public IPackage Package;
public bool IsInFilter;
}
public string Name { get; private set; }
public List<IPackage> Packages { get; private set; }
private List<FilteredPackage> _filteredPackages;
public event Action<List<IPackage>> OnPackagesSorted;
public event Action<List<IPackage>> OnPackagesFiltered;
public PackageGroup(string name, List<IPackage> packages)
{
Name = name;
Packages = packages;
_filteredPackages = new List<FilteredPackage>();
foreach (var package in Packages)
_filteredPackages.Add(new FilteredPackage() { Package = package, IsInFilter = true });
}
public void Sort(PackageSorting sortingType)
{
switch (sortingType)
{
case PackageSorting.Name:
_filteredPackages = _filteredPackages.OrderBy(x => x.Package.Name).ToList();
break;
case PackageSorting.Date:
_filteredPackages = _filteredPackages.OrderByDescending(x => x.Package.Modified).ToList();
break;
case PackageSorting.Category:
_filteredPackages = _filteredPackages.OrderBy(x => x.Package.Category).ThenBy(x => x.Package.Name).ToList();
break;
default:
throw new NotImplementedException("Undefined sorting type");
}
OnPackagesSorted?.Invoke(_filteredPackages.Where(x => x.IsInFilter).Select(x => x.Package).ToList());
}
public void Filter(string filter)
{
foreach (var package in _filteredPackages)
{
bool inFilter = package.Package.Name.ToLower().Contains(filter.ToLower());
package.IsInFilter = inFilter;
}
OnPackagesFiltered?.Invoke(_filteredPackages.Where(x => x.IsInFilter).Select(x => x.Package).ToList());
}
}
}