mirror of https://github.com/jellyfin/jellyfin.git
remember display mirroring
This commit is contained in:
parent
73082a0449
commit
6780e146a0
|
@ -20,7 +20,8 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
IHasMusicGenres,
|
IHasMusicGenres,
|
||||||
IHasLookupInfo<SongInfo>,
|
IHasLookupInfo<SongInfo>,
|
||||||
IHasTags,
|
IHasTags,
|
||||||
IHasMediaSources
|
IHasMediaSources,
|
||||||
|
IThemeMedia
|
||||||
{
|
{
|
||||||
public string FormatName { get; set; }
|
public string FormatName { get; set; }
|
||||||
public long? Size { get; set; }
|
public long? Size { get; set; }
|
||||||
|
@ -28,6 +29,8 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
public int? TotalBitrate { get; set; }
|
public int? TotalBitrate { get; set; }
|
||||||
public List<string> Tags { get; set; }
|
public List<string> Tags { get; set; }
|
||||||
|
|
||||||
|
public bool IsThemeMedia { get; set; }
|
||||||
|
|
||||||
public Audio()
|
public Audio()
|
||||||
{
|
{
|
||||||
Artists = new List<string>();
|
Artists = new List<string>();
|
||||||
|
|
|
@ -749,7 +749,18 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
var themeVideosChanged = !item.ThemeVideoIds.SequenceEqual(newThemeVideoIds);
|
var themeVideosChanged = !item.ThemeVideoIds.SequenceEqual(newThemeVideoIds);
|
||||||
|
|
||||||
var tasks = newThemeVideos.Select(i => i.RefreshMetadata(options, cancellationToken));
|
var tasks = newThemeVideos.Select(i =>
|
||||||
|
{
|
||||||
|
var subOptions = new MetadataRefreshOptions(options);
|
||||||
|
|
||||||
|
if (!i.IsThemeMedia)
|
||||||
|
{
|
||||||
|
i.IsThemeMedia = true;
|
||||||
|
subOptions.ForceSave = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i.RefreshMetadata(subOptions, cancellationToken);
|
||||||
|
});
|
||||||
|
|
||||||
await Task.WhenAll(tasks).ConfigureAwait(false);
|
await Task.WhenAll(tasks).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -768,7 +779,18 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
var themeSongsChanged = !item.ThemeSongIds.SequenceEqual(newThemeSongIds);
|
var themeSongsChanged = !item.ThemeSongIds.SequenceEqual(newThemeSongIds);
|
||||||
|
|
||||||
var tasks = newThemeSongs.Select(i => i.RefreshMetadata(options, cancellationToken));
|
var tasks = newThemeSongs.Select(i =>
|
||||||
|
{
|
||||||
|
var subOptions = new MetadataRefreshOptions(options);
|
||||||
|
|
||||||
|
if (!i.IsThemeMedia)
|
||||||
|
{
|
||||||
|
i.IsThemeMedia = true;
|
||||||
|
subOptions.ForceSave = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i.RefreshMetadata(subOptions, cancellationToken);
|
||||||
|
});
|
||||||
|
|
||||||
await Task.WhenAll(tasks).ConfigureAwait(false);
|
await Task.WhenAll(tasks).ConfigureAwait(false);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
namespace MediaBrowser.Controller.Entities
|
||||||
|
{
|
||||||
|
public interface IThemeMedia
|
||||||
|
{
|
||||||
|
bool IsThemeMedia { get; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,7 +24,8 @@ namespace MediaBrowser.Controller.Entities
|
||||||
IHasTags,
|
IHasTags,
|
||||||
ISupportsPlaceHolders,
|
ISupportsPlaceHolders,
|
||||||
IHasMediaSources,
|
IHasMediaSources,
|
||||||
IHasShortOverview
|
IHasShortOverview,
|
||||||
|
IThemeMedia
|
||||||
{
|
{
|
||||||
public bool IsMultiPart { get; set; }
|
public bool IsMultiPart { get; set; }
|
||||||
public bool HasLocalAlternateVersions { get; set; }
|
public bool HasLocalAlternateVersions { get; set; }
|
||||||
|
@ -33,6 +34,8 @@ namespace MediaBrowser.Controller.Entities
|
||||||
public List<Guid> AdditionalPartIds { get; set; }
|
public List<Guid> AdditionalPartIds { get; set; }
|
||||||
public List<Guid> LocalAlternateVersionIds { get; set; }
|
public List<Guid> LocalAlternateVersionIds { get; set; }
|
||||||
|
|
||||||
|
public bool IsThemeMedia { get; set; }
|
||||||
|
|
||||||
public string FormatName { get; set; }
|
public string FormatName { get; set; }
|
||||||
public long? Size { get; set; }
|
public long? Size { get; set; }
|
||||||
public string Container { get; set; }
|
public string Container { get; set; }
|
||||||
|
|
|
@ -151,6 +151,7 @@
|
||||||
<Compile Include="Entities\ISupportsBoxSetGrouping.cs" />
|
<Compile Include="Entities\ISupportsBoxSetGrouping.cs" />
|
||||||
<Compile Include="Entities\ISupportsPlaceHolders.cs" />
|
<Compile Include="Entities\ISupportsPlaceHolders.cs" />
|
||||||
<Compile Include="Entities\ItemImageInfo.cs" />
|
<Compile Include="Entities\ItemImageInfo.cs" />
|
||||||
|
<Compile Include="Entities\IThemeMedia.cs" />
|
||||||
<Compile Include="Entities\LinkedChild.cs" />
|
<Compile Include="Entities\LinkedChild.cs" />
|
||||||
<Compile Include="Entities\MusicVideo.cs" />
|
<Compile Include="Entities\MusicVideo.cs" />
|
||||||
<Compile Include="Entities\IHasAwards.cs" />
|
<Compile Include="Entities\IHasAwards.cs" />
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers
|
namespace MediaBrowser.Controller.Providers
|
||||||
{
|
{
|
||||||
|
@ -23,6 +24,18 @@ namespace MediaBrowser.Controller.Providers
|
||||||
{
|
{
|
||||||
MetadataRefreshMode = MetadataRefreshMode.Default;
|
MetadataRefreshMode = MetadataRefreshMode.Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MetadataRefreshOptions(MetadataRefreshOptions copy)
|
||||||
|
{
|
||||||
|
MetadataRefreshMode = copy.MetadataRefreshMode;
|
||||||
|
ForceSave = copy.ForceSave;
|
||||||
|
ReplaceAllMetadata = copy.ReplaceAllMetadata;
|
||||||
|
|
||||||
|
ImageRefreshMode = copy.ImageRefreshMode;
|
||||||
|
DirectoryService = copy.DirectoryService;
|
||||||
|
ReplaceAllImages = copy.ReplaceAllImages;
|
||||||
|
ReplaceImages = copy.ReplaceImages.ToList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ImageRefreshOptions
|
public class ImageRefreshOptions
|
||||||
|
|
|
@ -69,7 +69,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.ErrorException("Error sending Datagram: " + Message, ex);
|
_logger.ErrorException("Error sending Datagram to {0} from {1}: " + Message, ex, ToEndPoint, FromEndPoint == null ? "" : FromEndPoint.ToString());
|
||||||
}
|
}
|
||||||
++SendCount;
|
++SendCount;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
using MediaBrowser.Common.Events;
|
using MediaBrowser.Common.Events;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Dlna.PlayTo;
|
|
||||||
using MediaBrowser.Model.Events;
|
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -10,7 +8,6 @@ using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.NetworkInformation;
|
using System.Net.NetworkInformation;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -75,7 +72,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _ssdpHandler_MessageReceived(object sender, SsdpMessageEventArgs e)
|
void _ssdpHandler_MessageReceived(object sender, SsdpMessageEventArgs e)
|
||||||
{
|
{
|
||||||
string nts;
|
string nts;
|
||||||
e.Headers.TryGetValue("NTS", out nts);
|
e.Headers.TryGetValue("NTS", out nts);
|
||||||
|
@ -87,10 +84,16 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
EventHelper.FireEventIfNotNull(DeviceLeft, this, e, _logger);
|
EventHelper.FireEventIfNotNull(DeviceLeft, this, e, _logger);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//TryCreateDevice(e, IPAddress.Parse(_networkManager.GetLocalIpAddresses().First()));
|
//var ip = _networkManager.GetLocalIpAddresses().FirstOrDefault();
|
||||||
|
|
||||||
|
//if (ip != null)
|
||||||
|
//{
|
||||||
|
// e.LocalIp = IPAddress.Parse(ip);
|
||||||
|
// TryCreateDevice(e);
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
|
@ -184,36 +187,6 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateNotifier(Socket socket)
|
|
||||||
{
|
|
||||||
Task.Factory.StartNew(async (o) =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var msg = new SsdpMessageBuilder().BuildRendererDiscoveryMessage();
|
|
||||||
var request = Encoding.UTF8.GetBytes(msg);
|
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
socket.SendTo(request, new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900));
|
|
||||||
|
|
||||||
var delay = _config.GetDlnaConfiguration().ClientDiscoveryIntervalSeconds * 1000;
|
|
||||||
|
|
||||||
await Task.Delay(delay).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (OperationCanceledException)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error in notifier", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
}, _tokenSource.Token, TaskCreationOptions.LongRunning);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private Socket GetMulticastSocket(int networkInterfaceIndex)
|
private Socket GetMulticastSocket(int networkInterfaceIndex)
|
||||||
{
|
{
|
||||||
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||||||
|
@ -223,7 +196,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
return socket;
|
return socket;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TryCreateDevice(SsdpMessageEventArgs args)
|
private void TryCreateDevice(SsdpMessageEventArgs args)
|
||||||
{
|
{
|
||||||
string nts;
|
string nts;
|
||||||
args.Headers.TryGetValue("NTS", out nts);
|
args.Headers.TryGetValue("NTS", out nts);
|
||||||
|
@ -262,7 +235,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
_ssdpHandler.MessageReceived -= _ssdpHandler_MessageReceived;
|
_ssdpHandler.MessageReceived -= _ssdpHandler_MessageReceived;
|
||||||
|
|
||||||
if (!_disposed)
|
if (!_disposed)
|
||||||
{
|
{
|
||||||
_disposed = true;
|
_disposed = true;
|
||||||
|
|
|
@ -146,21 +146,6 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
StartQueueTimer();
|
StartQueueTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendDatagramFromDevices(string header,
|
|
||||||
Dictionary<string, string> values,
|
|
||||||
IPEndPoint endpoint,
|
|
||||||
string deviceType)
|
|
||||||
{
|
|
||||||
foreach (var d in RegisteredDevices)
|
|
||||||
{
|
|
||||||
if (string.Equals(deviceType, "ssdp:all", StringComparison.OrdinalIgnoreCase) ||
|
|
||||||
string.Equals(deviceType, d.Type, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RespondToSearch(IPEndPoint endpoint, string deviceType)
|
private void RespondToSearch(IPEndPoint endpoint, string deviceType)
|
||||||
{
|
{
|
||||||
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
||||||
|
@ -185,7 +170,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
values["ST"] = d.Type;
|
values["ST"] = d.Type;
|
||||||
values["USN"] = d.USN;
|
values["USN"] = d.USN;
|
||||||
|
|
||||||
SendDatagram(header, values, endpoint, null);
|
SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0));
|
||||||
|
|
||||||
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Ssdp
|
namespace MediaBrowser.Dlna.Ssdp
|
||||||
|
@ -23,30 +22,5 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
|
|
||||||
return builder.ToString();
|
return builder.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string BuildDiscoveryMessage(string deviceSearchType, string mx)
|
|
||||||
{
|
|
||||||
const string header = "M-SEARCH * HTTP/1.1";
|
|
||||||
|
|
||||||
var values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
|
||||||
|
|
||||||
values["HOST"] = "239.255.255.250:1900";
|
|
||||||
values["USER-AGENT"] = "UPnP/1.0 DLNADOC/1.50 Platinum/1.0.4.2";
|
|
||||||
values["ST"] = "ssdp:all";
|
|
||||||
values["MAN"] = "ssdp:discover";
|
|
||||||
values["MX"] = "10";
|
|
||||||
|
|
||||||
return BuildMessage(header, values);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string BuildRendererDiscoveryMessage()
|
|
||||||
{
|
|
||||||
return BuildDiscoveryMessage("urn:schemas-upnp-org:device:MediaRenderer:1", "3");
|
|
||||||
}
|
|
||||||
|
|
||||||
public string BuildMediaServerDiscoveryMessage()
|
|
||||||
{
|
|
||||||
return BuildDiscoveryMessage("urn:schemas-upnp-org:device:MediaRenderer:1", "3");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,16 +26,12 @@ namespace MediaBrowser.Model.Notifications
|
||||||
|
|
||||||
public SendToUserType? SendToUserMode { get; set; }
|
public SendToUserType? SendToUserMode { get; set; }
|
||||||
|
|
||||||
public List<string> ExcludeUserIds { get; set; }
|
|
||||||
|
|
||||||
public NotificationRequest()
|
public NotificationRequest()
|
||||||
{
|
{
|
||||||
UserIds = new List<string>();
|
UserIds = new List<string>();
|
||||||
Date = DateTime.UtcNow;
|
Date = DateTime.UtcNow;
|
||||||
|
|
||||||
Variables = new Dictionary<string, string>();
|
Variables = new Dictionary<string, string>();
|
||||||
|
|
||||||
ExcludeUserIds = new List<string>();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -117,6 +117,13 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var themeMedia = item as IThemeMedia;
|
||||||
|
if (themeMedia != null && themeMedia.IsThemeMedia)
|
||||||
|
{
|
||||||
|
// Don't report theme song or local trailer playback
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (e.Users.Count == 0)
|
if (e.Users.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -142,6 +149,13 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var themeMedia = item as IThemeMedia;
|
||||||
|
if (themeMedia != null && themeMedia.IsThemeMedia)
|
||||||
|
{
|
||||||
|
// Don't report theme song or local trailer playback
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (e.Users.Count == 0)
|
if (e.Users.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -195,19 +195,17 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
|
||||||
var user = e.Users.FirstOrDefault();
|
var user = e.Users.FirstOrDefault();
|
||||||
|
|
||||||
var item = e.MediaInfo;
|
var item = e.MediaInfo;
|
||||||
|
var themeMedia = item as IThemeMedia;
|
||||||
|
|
||||||
if (e.Item != null && e.Item.Parent == null)
|
if (themeMedia != null && themeMedia.IsThemeMedia)
|
||||||
{
|
{
|
||||||
// Don't report theme song or local trailer playback
|
// Don't report theme song or local trailer playback
|
||||||
// TODO: This will also cause movie specials to not be reported
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var notification = new NotificationRequest
|
var notification = new NotificationRequest
|
||||||
{
|
{
|
||||||
NotificationType = type,
|
NotificationType = type
|
||||||
|
|
||||||
ExcludeUserIds = e.Users.Select(i => i.Id.ToString("N")).ToList()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
notification.Variables["ItemName"] = item.Name;
|
notification.Variables["ItemName"] = item.Name;
|
||||||
|
|
|
@ -475,13 +475,27 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
}
|
}
|
||||||
|
|
||||||
item.ChannelType = channelInfo.ChannelType;
|
item.ChannelType = channelInfo.ChannelType;
|
||||||
item.ProviderImageUrl = channelInfo.ImageUrl;
|
|
||||||
item.HasProviderImage = channelInfo.HasImage;
|
|
||||||
item.ProviderImagePath = channelInfo.ImagePath;
|
|
||||||
item.ExternalId = channelInfo.Id;
|
item.ExternalId = channelInfo.Id;
|
||||||
item.ServiceName = serviceName;
|
item.ServiceName = serviceName;
|
||||||
item.Number = channelInfo.Number;
|
item.Number = channelInfo.Number;
|
||||||
|
|
||||||
|
var replaceImages = new List<ImageType>();
|
||||||
|
|
||||||
|
if (!string.Equals(item.ProviderImageUrl, channelInfo.ImageUrl, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
isNew = true;
|
||||||
|
replaceImages.Add(ImageType.Primary);
|
||||||
|
}
|
||||||
|
if (!string.Equals(item.ProviderImagePath, channelInfo.ImagePath, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
isNew = true;
|
||||||
|
replaceImages.Add(ImageType.Primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
item.ProviderImageUrl = channelInfo.ImageUrl;
|
||||||
|
item.HasProviderImage = channelInfo.HasImage;
|
||||||
|
item.ProviderImagePath = channelInfo.ImagePath;
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(item.Name))
|
if (string.IsNullOrEmpty(item.Name))
|
||||||
{
|
{
|
||||||
item.Name = channelInfo.Name;
|
item.Name = channelInfo.Name;
|
||||||
|
@ -489,7 +503,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
|
|
||||||
await item.RefreshMetadata(new MetadataRefreshOptions
|
await item.RefreshMetadata(new MetadataRefreshOptions
|
||||||
{
|
{
|
||||||
ForceSave = isNew
|
ForceSave = isNew,
|
||||||
|
ReplaceImages = replaceImages.Distinct().ToList()
|
||||||
|
|
||||||
}, cancellationToken);
|
}, cancellationToken);
|
||||||
|
|
||||||
|
|
|
@ -602,7 +602,6 @@
|
||||||
"LabelNotificationEnabled": "Enable this notification",
|
"LabelNotificationEnabled": "Enable this notification",
|
||||||
"LabelMonitorUsers": "Monitor activity from:",
|
"LabelMonitorUsers": "Monitor activity from:",
|
||||||
"LabelSendNotificationToUsers": "Send the notification to:",
|
"LabelSendNotificationToUsers": "Send the notification to:",
|
||||||
"UsersNotNotifiedAboutSelfActivity": "Users will not be notified about their own activities.",
|
|
||||||
"LabelUseNotificationServices": "Use the following services:",
|
"LabelUseNotificationServices": "Use the following services:",
|
||||||
"CategoryUser": "User",
|
"CategoryUser": "User",
|
||||||
"CategorySystem": "System",
|
"CategorySystem": "System",
|
||||||
|
@ -769,15 +768,15 @@
|
||||||
"LabelDisplayPluginsFor": "Display plugins for:",
|
"LabelDisplayPluginsFor": "Display plugins for:",
|
||||||
"PluginTabMediaBrowserClassic": "MB Classic",
|
"PluginTabMediaBrowserClassic": "MB Classic",
|
||||||
"PluginTabMediaBrowserTheater": "MB Theater",
|
"PluginTabMediaBrowserTheater": "MB Theater",
|
||||||
"LabelEpisodeName": "Episode name",
|
"LabelEpisodeNamePlain": "Episode name",
|
||||||
"LabelSeriesName": "Series name",
|
"LabelSeriesNamePlain": "Series name",
|
||||||
"ValueSeriesNamePeriod": "Series.name",
|
"ValueSeriesNamePeriod": "Series.name",
|
||||||
"ValueSeriesNameUnderscore": "Series_name",
|
"ValueSeriesNameUnderscore": "Series_name",
|
||||||
"ValueEpisodeNamePeriod": "Episode.name",
|
"ValueEpisodeNamePeriod": "Episode.name",
|
||||||
"ValueEpisodeNameUnderscore": "Episode_name",
|
"ValueEpisodeNameUnderscore": "Episode_name",
|
||||||
"LabelSeasonNumber": "Season number",
|
"LabelSeasonNumberPlain": "Season number",
|
||||||
"LabelEpisodeNumber": "Episode number",
|
"LabelEpisodeNumberPlain": "Episode number",
|
||||||
"LabelEndingEpisodeNumber": "Ending episode number",
|
"LabelEndingEpisodeNumberPlain": "Ending episode number",
|
||||||
"HeaderTypeText": "Enter Text",
|
"HeaderTypeText": "Enter Text",
|
||||||
"LabelTypeText": "Text",
|
"LabelTypeText": "Text",
|
||||||
"HeaderSearchForSubtitles": "Search for Subtitles",
|
"HeaderSearchForSubtitles": "Search for Subtitles",
|
||||||
|
@ -1100,5 +1099,11 @@
|
||||||
"OptionNoTrailer": "No Trailer",
|
"OptionNoTrailer": "No Trailer",
|
||||||
"OptionNoThemeSong": "No Theme Song",
|
"OptionNoThemeSong": "No Theme Song",
|
||||||
"OptionNoThemeVideo": "No Theme Video",
|
"OptionNoThemeVideo": "No Theme Video",
|
||||||
"LabelOneTimeDonationAmount": "Donation amount:"
|
"LabelOneTimeDonationAmount": "Donation amount:",
|
||||||
|
"OptionActor": "Actor",
|
||||||
|
"OptionComposer": "Composer",
|
||||||
|
"OptionDirector": "Director",
|
||||||
|
"OptionGuestStar": "Guest star",
|
||||||
|
"OptionProducer": "Producer",
|
||||||
|
"OptionWriter": "Writer"
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,6 @@ namespace MediaBrowser.Server.Implementations.Notifications
|
||||||
GetConfiguration().GetOptions(notificationType);
|
GetConfiguration().GetOptions(notificationType);
|
||||||
|
|
||||||
var users = GetUserIds(request, options)
|
var users = GetUserIds(request, options)
|
||||||
.Except(request.ExcludeUserIds)
|
|
||||||
.Select(i => _userManager.GetUserById(new Guid(i)));
|
.Select(i => _userManager.GetUserById(new Guid(i)));
|
||||||
|
|
||||||
var title = GetTitle(request, options);
|
var title = GetTitle(request, options);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common.Internal</id>
|
<id>MediaBrowser.Common.Internal</id>
|
||||||
<version>3.0.426</version>
|
<version>3.0.427</version>
|
||||||
<title>MediaBrowser.Common.Internal</title>
|
<title>MediaBrowser.Common.Internal</title>
|
||||||
<authors>Luke</authors>
|
<authors>Luke</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
|
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.426" />
|
<dependency id="MediaBrowser.Common" version="3.0.427" />
|
||||||
<dependency id="NLog" version="3.1.0.0" />
|
<dependency id="NLog" version="3.1.0.0" />
|
||||||
<dependency id="SimpleInjector" version="2.5.2" />
|
<dependency id="SimpleInjector" version="2.5.2" />
|
||||||
<dependency id="sharpcompress" version="0.10.2" />
|
<dependency id="sharpcompress" version="0.10.2" />
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common</id>
|
<id>MediaBrowser.Common</id>
|
||||||
<version>3.0.426</version>
|
<version>3.0.427</version>
|
||||||
<title>MediaBrowser.Common</title>
|
<title>MediaBrowser.Common</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Model.Signed</id>
|
<id>MediaBrowser.Model.Signed</id>
|
||||||
<version>3.0.426</version>
|
<version>3.0.427</version>
|
||||||
<title>MediaBrowser.Model - Signed Edition</title>
|
<title>MediaBrowser.Model - Signed Edition</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Server.Core</id>
|
<id>MediaBrowser.Server.Core</id>
|
||||||
<version>3.0.426</version>
|
<version>3.0.427</version>
|
||||||
<title>Media Browser.Server.Core</title>
|
<title>Media Browser.Server.Core</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.426" />
|
<dependency id="MediaBrowser.Common" version="3.0.427" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|
Loading…
Reference in New Issue