remember display mirroring

pull/702/head
Luke Pulverenti 10 years ago
parent 73082a0449
commit 6780e146a0

@ -20,7 +20,8 @@ namespace MediaBrowser.Controller.Entities.Audio
IHasMusicGenres,
IHasLookupInfo<SongInfo>,
IHasTags,
IHasMediaSources
IHasMediaSources,
IThemeMedia
{
public string FormatName { get; set; }
public long? Size { get; set; }
@ -28,6 +29,8 @@ namespace MediaBrowser.Controller.Entities.Audio
public int? TotalBitrate { get; set; }
public List<string> Tags { get; set; }
public bool IsThemeMedia { get; set; }
public Audio()
{
Artists = new List<string>();

@ -749,7 +749,18 @@ namespace MediaBrowser.Controller.Entities
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);
@ -768,7 +779,18 @@ namespace MediaBrowser.Controller.Entities
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);

@ -0,0 +1,8 @@

namespace MediaBrowser.Controller.Entities
{
public interface IThemeMedia
{
bool IsThemeMedia { get; }
}
}

@ -24,7 +24,8 @@ namespace MediaBrowser.Controller.Entities
IHasTags,
ISupportsPlaceHolders,
IHasMediaSources,
IHasShortOverview
IHasShortOverview,
IThemeMedia
{
public bool IsMultiPart { get; set; }
public bool HasLocalAlternateVersions { get; set; }
@ -33,6 +34,8 @@ namespace MediaBrowser.Controller.Entities
public List<Guid> AdditionalPartIds { get; set; }
public List<Guid> LocalAlternateVersionIds { get; set; }
public bool IsThemeMedia { get; set; }
public string FormatName { get; set; }
public long? Size { get; set; }
public string Container { get; set; }

@ -151,6 +151,7 @@
<Compile Include="Entities\ISupportsBoxSetGrouping.cs" />
<Compile Include="Entities\ISupportsPlaceHolders.cs" />
<Compile Include="Entities\ItemImageInfo.cs" />
<Compile Include="Entities\IThemeMedia.cs" />
<Compile Include="Entities\LinkedChild.cs" />
<Compile Include="Entities\MusicVideo.cs" />
<Compile Include="Entities\IHasAwards.cs" />

@ -1,6 +1,7 @@
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
namespace MediaBrowser.Controller.Providers
{
@ -23,6 +24,18 @@ namespace MediaBrowser.Controller.Providers
{
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

@ -69,7 +69,7 @@ namespace MediaBrowser.Dlna.Ssdp
}
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;
}

@ -1,8 +1,6 @@
using MediaBrowser.Common.Events;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Dlna.PlayTo;
using MediaBrowser.Model.Events;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
@ -10,7 +8,6 @@ using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading;
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;
e.Headers.TryGetValue("NTS", out nts);
@ -87,10 +84,16 @@ namespace MediaBrowser.Dlna.Ssdp
EventHelper.FireEventIfNotNull(DeviceLeft, this, e, _logger);
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)
{
@ -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)
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
@ -223,7 +196,7 @@ namespace MediaBrowser.Dlna.Ssdp
return socket;
}
private void TryCreateDevice(SsdpMessageEventArgs args)
private void TryCreateDevice(SsdpMessageEventArgs args)
{
string nts;
args.Headers.TryGetValue("NTS", out nts);
@ -262,7 +235,7 @@ namespace MediaBrowser.Dlna.Ssdp
public void Dispose()
{
_ssdpHandler.MessageReceived -= _ssdpHandler_MessageReceived;
if (!_disposed)
{
_disposed = true;

@ -146,21 +146,6 @@ namespace MediaBrowser.Dlna.Ssdp
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)
{
if (_config.GetDlnaConfiguration().EnableDebugLogging)
@ -185,7 +170,7 @@ namespace MediaBrowser.Dlna.Ssdp
values["ST"] = d.Type;
values["USN"] = d.USN;
SendDatagram(header, values, endpoint, null);
SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0));
if (_config.GetDlnaConfiguration().EnableDebugLogging)
{

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Text;
namespace MediaBrowser.Dlna.Ssdp
@ -23,30 +22,5 @@ namespace MediaBrowser.Dlna.Ssdp
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 List<string> ExcludeUserIds { get; set; }
public NotificationRequest()
{
UserIds = new List<string>();
Date = DateTime.UtcNow;
Variables = new Dictionary<string, string>();
ExcludeUserIds = new List<string>();
}
}
}

@ -117,6 +117,13 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
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)
{
return;
@ -142,6 +149,13 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
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)
{
return;

@ -195,19 +195,17 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
var user = e.Users.FirstOrDefault();
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
// TODO: This will also cause movie specials to not be reported
return;
}
var notification = new NotificationRequest
{
NotificationType = type,
ExcludeUserIds = e.Users.Select(i => i.Id.ToString("N")).ToList()
NotificationType = type
};
notification.Variables["ItemName"] = item.Name;

@ -475,13 +475,27 @@ namespace MediaBrowser.Server.Implementations.LiveTv
}
item.ChannelType = channelInfo.ChannelType;
item.ProviderImageUrl = channelInfo.ImageUrl;
item.HasProviderImage = channelInfo.HasImage;
item.ProviderImagePath = channelInfo.ImagePath;
item.ExternalId = channelInfo.Id;
item.ServiceName = serviceName;
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))
{
item.Name = channelInfo.Name;
@ -489,7 +503,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
await item.RefreshMetadata(new MetadataRefreshOptions
{
ForceSave = isNew
ForceSave = isNew,
ReplaceImages = replaceImages.Distinct().ToList()
}, cancellationToken);

@ -602,7 +602,6 @@
"LabelNotificationEnabled": "Enable this notification",
"LabelMonitorUsers": "Monitor activity from:",
"LabelSendNotificationToUsers": "Send the notification to:",
"UsersNotNotifiedAboutSelfActivity": "Users will not be notified about their own activities.",
"LabelUseNotificationServices": "Use the following services:",
"CategoryUser": "User",
"CategorySystem": "System",
@ -769,15 +768,15 @@
"LabelDisplayPluginsFor": "Display plugins for:",
"PluginTabMediaBrowserClassic": "MB Classic",
"PluginTabMediaBrowserTheater": "MB Theater",
"LabelEpisodeName": "Episode name",
"LabelSeriesName": "Series name",
"LabelEpisodeNamePlain": "Episode name",
"LabelSeriesNamePlain": "Series name",
"ValueSeriesNamePeriod": "Series.name",
"ValueSeriesNameUnderscore": "Series_name",
"ValueEpisodeNamePeriod": "Episode.name",
"ValueEpisodeNameUnderscore": "Episode_name",
"LabelSeasonNumber": "Season number",
"LabelEpisodeNumber": "Episode number",
"LabelEndingEpisodeNumber": "Ending episode number",
"LabelSeasonNumberPlain": "Season number",
"LabelEpisodeNumberPlain": "Episode number",
"LabelEndingEpisodeNumberPlain": "Ending episode number",
"HeaderTypeText": "Enter Text",
"LabelTypeText": "Text",
"HeaderSearchForSubtitles": "Search for Subtitles",
@ -1100,5 +1099,11 @@
"OptionNoTrailer": "No Trailer",
"OptionNoThemeSong": "No Theme Song",
"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);
var users = GetUserIds(request, options)
.Except(request.ExcludeUserIds)
.Select(i => _userManager.GetUserById(new Guid(i)));
var title = GetTitle(request, options);

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common.Internal</id>
<version>3.0.426</version>
<version>3.0.427</version>
<title>MediaBrowser.Common.Internal</title>
<authors>Luke</authors>
<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>
<copyright>Copyright © Media Browser 2013</copyright>
<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="SimpleInjector" version="2.5.2" />
<dependency id="sharpcompress" version="0.10.2" />

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common</id>
<version>3.0.426</version>
<version>3.0.427</version>
<title>MediaBrowser.Common</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Model.Signed</id>
<version>3.0.426</version>
<version>3.0.427</version>
<title>MediaBrowser.Model - Signed Edition</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MediaBrowser.Server.Core</id>
<version>3.0.426</version>
<version>3.0.427</version>
<title>Media Browser.Server.Core</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
@ -12,7 +12,7 @@
<description>Contains core components required to build plugins for Media Browser Server.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
<dependency id="MediaBrowser.Common" version="3.0.426" />
<dependency id="MediaBrowser.Common" version="3.0.427" />
</dependencies>
</metadata>
<files>

Loading…
Cancel
Save