Channel.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System;
  2. using System.Globalization;
  3. using System.Linq;
  4. using System.Text.Json.Serialization;
  5. using System.Threading;
  6. using Jellyfin.Data.Entities;
  7. using Jellyfin.Data.Enums;
  8. using MediaBrowser.Common.Progress;
  9. using MediaBrowser.Controller.Entities;
  10. using MediaBrowser.Model.Querying;
  11. namespace MediaBrowser.Controller.Channels
  12. {
  13. public class Channel : Folder
  14. {
  15. public override bool IsVisible(User user)
  16. {
  17. if (user.GetPreference(PreferenceKind.BlockedChannels) != null)
  18. {
  19. if (user.GetPreference(PreferenceKind.BlockedChannels).Contains(Id.ToString("N", CultureInfo.InvariantCulture), StringComparer.OrdinalIgnoreCase))
  20. {
  21. return false;
  22. }
  23. }
  24. else
  25. {
  26. if (!user.HasPermission(PermissionKind.EnableAllChannels)
  27. && !user.GetPreference(PreferenceKind.EnabledChannels)
  28. .Contains(Id.ToString("N", CultureInfo.InvariantCulture), StringComparer.OrdinalIgnoreCase))
  29. {
  30. return false;
  31. }
  32. }
  33. return base.IsVisible(user);
  34. }
  35. [JsonIgnore]
  36. public override bool SupportsInheritedParentImages => false;
  37. [JsonIgnore]
  38. public override SourceType SourceType => SourceType.Channel;
  39. protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
  40. {
  41. try
  42. {
  43. query.Parent = this;
  44. query.ChannelIds = new Guid[] { Id };
  45. // Don't blow up here because it could cause parent screens with other content to fail
  46. return ChannelManager.GetChannelItemsInternal(query, new SimpleProgress<double>(), CancellationToken.None).Result;
  47. }
  48. catch
  49. {
  50. // Already logged at lower levels
  51. return new QueryResult<BaseItem>();
  52. }
  53. }
  54. protected override string GetInternalMetadataPath(string basePath)
  55. {
  56. return GetInternalMetadataPath(basePath, Id);
  57. }
  58. public static string GetInternalMetadataPath(string basePath, Guid id)
  59. {
  60. return System.IO.Path.Combine(basePath, "channels", id.ToString("N", CultureInfo.InvariantCulture), "metadata");
  61. }
  62. public override bool CanDelete()
  63. {
  64. return false;
  65. }
  66. protected override bool IsAllowTagFilterEnforced()
  67. {
  68. return false;
  69. }
  70. internal static bool IsChannelVisible(BaseItem channelItem, User user)
  71. {
  72. var channel = ChannelManager.GetChannel(channelItem.ChannelId.ToString(""));
  73. return channel.IsVisible(user);
  74. }
  75. }
  76. }