DatePlayedComparer.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #nullable disable
  2. using System;
  3. using Jellyfin.Data.Enums;
  4. using Jellyfin.Database.Implementations.Entities;
  5. using MediaBrowser.Controller.Entities;
  6. using MediaBrowser.Controller.Library;
  7. using MediaBrowser.Controller.Sorting;
  8. using MediaBrowser.Model.Querying;
  9. namespace Emby.Server.Implementations.Sorting
  10. {
  11. /// <summary>
  12. /// Class DatePlayedComparer.
  13. /// </summary>
  14. public class DatePlayedComparer : IUserBaseItemComparer
  15. {
  16. /// <summary>
  17. /// Gets or sets the user.
  18. /// </summary>
  19. /// <value>The user.</value>
  20. public User User { get; set; }
  21. /// <summary>
  22. /// Gets or sets the user manager.
  23. /// </summary>
  24. /// <value>The user manager.</value>
  25. public IUserManager UserManager { get; set; }
  26. /// <summary>
  27. /// Gets or sets the user data manager.
  28. /// </summary>
  29. /// <value>The user data manager.</value>
  30. public IUserDataManager UserDataManager { get; set; }
  31. /// <summary>
  32. /// Gets the name.
  33. /// </summary>
  34. /// <value>The name.</value>
  35. public ItemSortBy Type => ItemSortBy.DatePlayed;
  36. /// <summary>
  37. /// Compares the specified x.
  38. /// </summary>
  39. /// <param name="x">The x.</param>
  40. /// <param name="y">The y.</param>
  41. /// <returns>System.Int32.</returns>
  42. public int Compare(BaseItem x, BaseItem y)
  43. {
  44. return GetDate(x).CompareTo(GetDate(y));
  45. }
  46. /// <summary>
  47. /// Gets the date.
  48. /// </summary>
  49. /// <param name="x">The x.</param>
  50. /// <returns>DateTime.</returns>
  51. private DateTime GetDate(BaseItem x)
  52. {
  53. var userdata = UserDataManager.GetUserData(User, x);
  54. if (userdata is not null && userdata.LastPlayedDate.HasValue)
  55. {
  56. return userdata.LastPlayedDate.Value;
  57. }
  58. return DateTime.MinValue;
  59. }
  60. }
  61. }