Преглед на файлове

remember display mirroring

Luke Pulverenti преди 10 години
родител
ревизия
6780e146a0

+ 4 - 1
MediaBrowser.Controller/Entities/Audio/Audio.cs

@@ -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>();

+ 24 - 2
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -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);
 

+ 8 - 0
MediaBrowser.Controller/Entities/IThemeMedia.cs

@@ -0,0 +1,8 @@
+
+namespace MediaBrowser.Controller.Entities
+{
+    public interface IThemeMedia
+    {
+        bool IsThemeMedia { get; }
+    }
+}

+ 4 - 1
MediaBrowser.Controller/Entities/Video.cs

@@ -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; }

+ 1 - 0
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -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" />

+ 13 - 0
MediaBrowser.Controller/Providers/MetadataRefreshOptions.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

+ 1 - 1
MediaBrowser.Dlna/Ssdp/Datagram.cs

@@ -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;
         }

+ 12 - 39
MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs

@@ -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;

+ 1 - 16
MediaBrowser.Dlna/Ssdp/SsdpHandler.cs

@@ -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 - 27
MediaBrowser.Dlna/Ssdp/SsdpMessageBuilder.cs

@@ -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");
-        }
     }
 }

+ 0 - 4
MediaBrowser.Model/Notifications/NotificationRequest.cs

@@ -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>();
         }
     }
 }

+ 14 - 0
MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs

@@ -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;

+ 3 - 5
MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs

@@ -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;

+ 19 - 4
MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -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);
 

+ 12 - 7
MediaBrowser.Server.Implementations/Localization/Server/server.json

@@ -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"
 }

+ 0 - 1
MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs

@@ -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 - 2
Nuget/MediaBrowser.Common.Internal.nuspec

@@ -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" />

+ 1 - 1
Nuget/MediaBrowser.Common.nuspec

@@ -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>

+ 1 - 1
Nuget/MediaBrowser.Model.Signed.nuspec

@@ -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 - 2
Nuget/MediaBrowser.Server.Core.nuspec

@@ -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>