mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
add notification services tab
This commit is contained in:
parent
30104bd8de
commit
3cc0ad2a35
@ -1,4 +1,5 @@
|
|||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Model.Channels;
|
using MediaBrowser.Model.Channels;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
@ -100,5 +101,10 @@ namespace MediaBrowser.Controller.Channels
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool IsVisibleStandalone(User user)
|
||||||
|
{
|
||||||
|
return base.IsVisibleStandalone(user) && ChannelVideoItem.IsChannelVisible(this, user);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,5 +80,10 @@ namespace MediaBrowser.Controller.Channels
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool IsVisibleStandalone(User user)
|
||||||
|
{
|
||||||
|
return base.IsVisibleStandalone(user) && ChannelVideoItem.IsChannelVisible(this, user);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,5 +130,17 @@ namespace MediaBrowser.Controller.Channels
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool IsVisibleStandalone(User user)
|
||||||
|
{
|
||||||
|
return base.IsVisibleStandalone(user) && IsChannelVisible(this, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static bool IsChannelVisible(IChannelItem item, User user)
|
||||||
|
{
|
||||||
|
var channel = ChannelManager.GetChannel(item.ChannelId);
|
||||||
|
|
||||||
|
return channel.IsVisible(user);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1154,9 +1154,19 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Need some work here, e.g. is in user library, for channels, can user access channel, etc.
|
var topParent = Parents.LastOrDefault() ?? this;
|
||||||
|
|
||||||
return true;
|
if (string.IsNullOrWhiteSpace(topParent.Path))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var locations = user.RootFolder
|
||||||
|
.GetChildren(user, true)
|
||||||
|
.OfType<CollectionFolder>()
|
||||||
|
.SelectMany(i => i.PhysicalLocations);
|
||||||
|
|
||||||
|
return locations.Any(l => FileSystem.ContainsSubPath(l, topParent.Path));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -106,7 +106,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Probing\whitelist.txt" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
@ -209,9 +209,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Include="MediaInfo\whitelist.txt" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
@ -330,7 +330,7 @@ namespace MediaBrowser.Server.Implementations.Channels
|
|||||||
{
|
{
|
||||||
files = files.Where(i => _libraryManager.IsAudioFile(i.FullName));
|
files = files.Where(i => _libraryManager.IsAudioFile(i.FullName));
|
||||||
}
|
}
|
||||||
|
|
||||||
var file = files
|
var file = files
|
||||||
.FirstOrDefault(i => i.Name.StartsWith(filenamePrefix, StringComparison.OrdinalIgnoreCase));
|
.FirstOrDefault(i => i.Name.StartsWith(filenamePrefix, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
@ -1454,7 +1454,14 @@ namespace MediaBrowser.Server.Implementations.Channels
|
|||||||
var host = new Uri(source.Path).Host.ToLower();
|
var host = new Uri(source.Path).Host.ToLower();
|
||||||
var channel = GetChannel(item.ChannelId);
|
var channel = GetChannel(item.ChannelId);
|
||||||
var channelProvider = GetChannelProvider(channel);
|
var channelProvider = GetChannelProvider(channel);
|
||||||
var limit = channelProvider.GetChannelFeatures().DailyDownloadLimit;
|
var features = channelProvider.GetChannelFeatures();
|
||||||
|
|
||||||
|
if (!features.SupportsContentDownloading)
|
||||||
|
{
|
||||||
|
throw new ArgumentException("The channel does not support downloading.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var limit = features.DailyDownloadLimit;
|
||||||
|
|
||||||
if (!ValidateDownloadLimit(host, limit))
|
if (!ValidateDownloadLimit(host, limit))
|
||||||
{
|
{
|
||||||
|
@ -245,23 +245,17 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
|||||||
|
|
||||||
var collections = user.RootFolder.GetChildren(user, true).ToList();
|
var collections = user.RootFolder.GetChildren(user, true).ToList();
|
||||||
|
|
||||||
var allRecursiveChildren = user.RootFolder
|
|
||||||
.GetRecursiveChildren(user)
|
|
||||||
.Select(i => i.Id)
|
|
||||||
.Distinct()
|
|
||||||
.ToDictionary(i => i);
|
|
||||||
|
|
||||||
return new LibraryUpdateInfo
|
return new LibraryUpdateInfo
|
||||||
{
|
{
|
||||||
ItemsAdded = itemsAdded.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections, allRecursiveChildren)).Select(i => i.Id.ToString("N")).Distinct().ToList(),
|
ItemsAdded = itemsAdded.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections)).Select(i => i.Id.ToString("N")).Distinct().ToList(),
|
||||||
|
|
||||||
ItemsUpdated = itemsUpdated.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections, allRecursiveChildren)).Select(i => i.Id.ToString("N")).Distinct().ToList(),
|
ItemsUpdated = itemsUpdated.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections)).Select(i => i.Id.ToString("N")).Distinct().ToList(),
|
||||||
|
|
||||||
ItemsRemoved = itemsRemoved.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections, allRecursiveChildren, true)).Select(i => i.Id.ToString("N")).Distinct().ToList(),
|
ItemsRemoved = itemsRemoved.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections, true)).Select(i => i.Id.ToString("N")).Distinct().ToList(),
|
||||||
|
|
||||||
FoldersAddedTo = foldersAddedTo.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections, allRecursiveChildren)).Select(i => i.Id.ToString("N")).Distinct().ToList(),
|
FoldersAddedTo = foldersAddedTo.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections)).Select(i => i.Id.ToString("N")).Distinct().ToList(),
|
||||||
|
|
||||||
FoldersRemovedFrom = foldersRemovedFrom.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections, allRecursiveChildren)).Select(i => i.Id.ToString("N")).Distinct().ToList()
|
FoldersRemovedFrom = foldersRemovedFrom.SelectMany(i => TranslatePhysicalItemToUserLibrary(i, user, collections)).Select(i => i.Id.ToString("N")).Distinct().ToList()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,10 +266,9 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
|||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
/// <param name="user">The user.</param>
|
/// <param name="user">The user.</param>
|
||||||
/// <param name="collections">The collections.</param>
|
/// <param name="collections">The collections.</param>
|
||||||
/// <param name="allRecursiveChildren">All recursive children.</param>
|
|
||||||
/// <param name="includeIfNotFound">if set to <c>true</c> [include if not found].</param>
|
/// <param name="includeIfNotFound">if set to <c>true</c> [include if not found].</param>
|
||||||
/// <returns>IEnumerable{``0}.</returns>
|
/// <returns>IEnumerable{``0}.</returns>
|
||||||
private IEnumerable<T> TranslatePhysicalItemToUserLibrary<T>(T item, User user, IEnumerable<BaseItem> collections, Dictionary<Guid, Guid> allRecursiveChildren, bool includeIfNotFound = false)
|
private IEnumerable<T> TranslatePhysicalItemToUserLibrary<T>(T item, User user, IEnumerable<BaseItem> collections, bool includeIfNotFound = false)
|
||||||
where T : BaseItem
|
where T : BaseItem
|
||||||
{
|
{
|
||||||
// If the physical root changed, return the user root
|
// If the physical root changed, return the user root
|
||||||
@ -294,7 +287,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return it only if it's in the user's library
|
// Return it only if it's in the user's library
|
||||||
if (includeIfNotFound || allRecursiveChildren.ContainsKey(item.Id) || (item.Parents.Any(i => i is BasePluginFolder) && item.IsVisibleStandalone(user)))
|
if (includeIfNotFound || item.IsVisibleStandalone(user))
|
||||||
{
|
{
|
||||||
return new[] { item };
|
return new[] { item };
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
"TitleLiveTV": "Live TV",
|
"TitleLiveTV": "Live TV",
|
||||||
"TitleSync": "Sync",
|
"TitleSync": "Sync",
|
||||||
"ButtonDonate": "Donate",
|
"ButtonDonate": "Donate",
|
||||||
|
"TitleNotifications": "Notifications",
|
||||||
"ErrorLaunchingChromecast": "There was an error launching chromecast. Please ensure your device is connected to your wireless network.",
|
"ErrorLaunchingChromecast": "There was an error launching chromecast. Please ensure your device is connected to your wireless network.",
|
||||||
"MessageErrorLoadingSupporterInfo": "There was an error loading supporter information. Please try again later.",
|
"MessageErrorLoadingSupporterInfo": "There was an error loading supporter information. Please try again later.",
|
||||||
"MessageLinkYourSupporterKey": "Link your supporter key with up to {0} Emby Connect members to enjoy free access to the following apps:",
|
"MessageLinkYourSupporterKey": "Link your supporter key with up to {0} Emby Connect members to enjoy free access to the following apps:",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user