diff options
35 files changed, 139 insertions, 95 deletions
diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs index f0f295c83..0bce849ce 100644 --- a/MediaBrowser.Dlna/DlnaManager.cs +++ b/MediaBrowser.Dlna/DlnaManager.cs @@ -515,7 +515,7 @@ namespace MediaBrowser.Dlna public void Run() { - //DumpProfiles(); + DumpProfiles(); } private void DumpProfiles() diff --git a/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs b/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs index c792eb078..7aa924be0 100644 --- a/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs +++ b/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs @@ -29,6 +29,7 @@ namespace MediaBrowser.Dlna.Profiles TimelineOffsetSeconds = 40; RequiresPlainFolders = true; RequiresPlainVideoItems = true; + EnableMSMediaReceiverRegistrar = true; Identification = new DeviceIdentification { diff --git a/MediaBrowser.Dlna/Profiles/Xml/Default.xml b/MediaBrowser.Dlna/Profiles/Xml/Default.xml index fd4246dec..b70cc10c2 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Default.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Default.xml @@ -28,6 +28,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3,wma" type="Audio" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml b/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml index b62580f69..6250e0f0e 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml @@ -33,6 +33,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3,flac,m4a,wma" type="Audio" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml b/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml index 603ec554e..0079b5f8d 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml @@ -34,6 +34,7 @@ <RequiresPlainFolders>true</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mpeg" audioCodec="mp2" videoCodec="mpeg2video" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml b/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml index c8eff5b1d..d338b2b6d 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml @@ -35,6 +35,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp4,mkv,mpeg,ts" audioCodec="mp3,ac3,aac,he-aac,pcm" videoCodec="h264,mpeg2video" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml b/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml index e625555bd..ba72f6306 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml @@ -34,6 +34,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="ts" audioCodec="aac,ac3,mp3" videoCodec="h264" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml b/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml index 09165349e..829ce7068 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml @@ -32,6 +32,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3,flac,m4a,wma" type="Audio" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml b/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml index c57a368b3..78ba4aba3 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml @@ -34,6 +34,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3" audioCodec="mp2,mp3" type="Audio" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml b/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml index 515492c7f..88160b0ce 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml @@ -35,6 +35,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes> <XmlAttribute name="xmlns:pv" value="http://www.pv.com/pvns/" /> </XmlRootAttributes> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml b/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml index 4fa4db30b..d6acd65ca 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml @@ -28,6 +28,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp4,mov" audioCodec="aac" videoCodec="h264,mpeg4" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml b/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml index d2b814de3..bd113b9c7 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml @@ -34,6 +34,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes> <XmlAttribute name="xmlns:sec" value="http://www.sec.co.kr/" /> </XmlRootAttributes> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml index 1d0ea66bb..3104f5c68 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml @@ -34,6 +34,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml index 2a883ac67..57a32607e 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml @@ -36,6 +36,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml index d9727ecd0..b7325c53c 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml @@ -36,6 +36,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml index 1e3b48452..59157badd 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml @@ -36,6 +36,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml index 509f533b9..d2d9c181f 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml @@ -36,6 +36,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml index 35e645422..7b3d95b9d 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml @@ -36,6 +36,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes> <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" /> </XmlRootAttributes> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml index 939f953b9..454dabe5d 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml @@ -36,6 +36,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="avi" audioCodec="mp2,mp3" videoCodec="mpeg4" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml b/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml index 015dbbc1f..2829bfb47 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml @@ -35,6 +35,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="avi" audioCodec="ac3,dca,mp2,mp3,pcm" videoCodec="mpeg1video,mpeg2video,mpeg4,h264,vc1" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml b/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml index 7a183396d..76e4a6c31 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml @@ -35,6 +35,7 @@ <RequiresPlainFolders>true</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>true</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="avi" audioCodec="ac3,mp3" videoCodec="mpeg4" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml b/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml index f666dfd27..c8c0a5202 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml @@ -35,6 +35,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="ts" audioCodec="ac3" videoCodec="h264" type="Video" /> diff --git a/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml b/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml index 2afdcc6f8..7a8f3a09d 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml @@ -34,6 +34,7 @@ <RequiresPlainFolders>false</RequiresPlainFolders> <SupportsDirectRemoteContent>false</SupportsDirectRemoteContent> <SupportsCustomHttpHeaders>false</SupportsCustomHttpHeaders> + <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar> <XmlRootAttributes /> <DirectPlayProfiles> <DirectPlayProfile container="mp3" audioCodec="mp2,mp3" type="Audio" /> diff --git a/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs b/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs index f586e4fa1..e302fe902 100644 --- a/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs +++ b/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs @@ -261,14 +261,17 @@ namespace MediaBrowser.Dlna.Server EventSubUrl = "connectionmanager/events" }); - list.Add(new DeviceService + if (_profile.EnableMSMediaReceiverRegistrar) { - ServiceType = "urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1", - ServiceId = "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar", - ScpdUrl = "mediareceiverregistrar/mediareceiverregistrar.xml", - ControlUrl = "mediareceiverregistrar/control", - EventSubUrl = "mediareceiverregistrar/events" - }); + list.Add(new DeviceService + { + ServiceType = "urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1", + ServiceId = "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar", + ScpdUrl = "mediareceiverregistrar/mediareceiverregistrar.xml", + ControlUrl = "mediareceiverregistrar/control", + EventSubUrl = "mediareceiverregistrar/events" + }); + } return list; } diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 1fb553010..3bbef28c5 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -78,6 +78,7 @@ namespace MediaBrowser.Model.Dlna public bool SupportsDirectRemoteContent { get; set; } public bool SupportsCustomHttpHeaders { get; set; } + public bool EnableMSMediaReceiverRegistrar { get; set; } public XmlAttribute[] XmlRootAttributes { get; set; } diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 117d738f3..84c083997 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -524,11 +524,6 @@ namespace MediaBrowser.Model.Dlna { if (subtitleStream != null) { - if (!subtitleStream.IsTextSubtitleStream) - { - return false; - } - SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options); if (subtitleProfile.Method != SubtitleDeliveryMethod.External && subtitleProfile.Method != SubtitleDeliveryMethod.Embed) @@ -568,19 +563,6 @@ namespace MediaBrowser.Model.Dlna }; } - private SubtitleProfile GetSubtitleProfile(SubtitleProfile[] profiles, SubtitleDeliveryMethod method, string[] formats) - { - foreach (SubtitleProfile profile in profiles) - { - if (method == profile.Method && ListHelper.ContainsIgnoreCase(formats, profile.Format)) - { - return profile; - } - } - - return null; - } - private SubtitleProfile GetSubtitleProfile(SubtitleProfile[] profiles, SubtitleDeliveryMethod method) { foreach (SubtitleProfile profile in profiles) diff --git a/MediaBrowser.Model/Sync/SyncJobQuery.cs b/MediaBrowser.Model/Sync/SyncJobQuery.cs index 35f0e076d..233dc7878 100644 --- a/MediaBrowser.Model/Sync/SyncJobQuery.cs +++ b/MediaBrowser.Model/Sync/SyncJobQuery.cs @@ -1,4 +1,5 @@ - +using System.Collections.Generic; + namespace MediaBrowser.Model.Sync { public class SyncJobQuery @@ -14,11 +15,6 @@ namespace MediaBrowser.Model.Sync /// <value>The limit.</value> public int? Limit { get; set; } /// <summary> - /// Gets or sets a value indicating whether this instance is completed. - /// </summary> - /// <value><c>null</c> if [is completed] contains no value, <c>true</c> if [is completed]; otherwise, <c>false</c>.</value> - public bool? IsCompleted { get; set; } - /// <summary> /// Gets or sets the target identifier. /// </summary> /// <value>The target identifier.</value> @@ -28,5 +24,20 @@ namespace MediaBrowser.Model.Sync /// </summary> /// <value>The user identifier.</value> public string UserId { get; set; } + /// <summary> + /// Gets or sets the status. + /// </summary> + /// <value>The status.</value> + public List<SyncJobStatus> Statuses { get; set; } + /// <summary> + /// Gets or sets a value indicating whether [synchronize new content]. + /// </summary> + /// <value><c>null</c> if [synchronize new content] contains no value, <c>true</c> if [synchronize new content]; otherwise, <c>false</c>.</value> + public bool? SyncNewContent { get; set; } + + public SyncJobQuery() + { + Statuses = new List<SyncJobStatus>(); + } } } diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index 4b9795b82..b494adfd8 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -89,8 +89,8 @@ "LabelFree": "Free", "HeaderSelectAudio": "Select Audio", "HeaderSelectSubtitles": "Select Subtitles", - "ButtonMarkForRemoval": "Mark for removal from device", - "ButtonUnmarkForRemoval": "Unmark for removal from device", + "ButtonMarkForRemoval": "Remove from device", + "ButtonUnmarkForRemoval": "Cancel removal from device", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default/Forced)", diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 3628bda2a..328b8441a 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -308,11 +308,11 @@ namespace MediaBrowser.Server.Implementations.Sync return new[] { item }; } - public async Task EnsureSyncJobs(CancellationToken cancellationToken) + public async Task EnsureSyncJobItems(CancellationToken cancellationToken) { var jobResult = _syncRepo.GetJobs(new SyncJobQuery { - IsCompleted = false + SyncNewContent = true }); foreach (var job in jobResult.Items) @@ -328,7 +328,7 @@ namespace MediaBrowser.Server.Implementations.Sync public async Task Sync(IProgress<double> progress, CancellationToken cancellationToken) { - await EnsureSyncJobs(cancellationToken).ConfigureAwait(false); + await EnsureSyncJobItems(cancellationToken).ConfigureAwait(false); // If it already has a converting status then is must have been aborted during conversion var result = _syncRepo.GetJobItems(new SyncJobItemQuery diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index 85317cb23..5a07a41e9 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs @@ -30,7 +30,8 @@ namespace MediaBrowser.Server.Implementations.Sync private IDbCommand _deleteJobCommand; private IDbCommand _deleteJobItemsCommand; - private IDbCommand _saveJobItemCommand; + private IDbCommand _insertJobItemCommand; + private IDbCommand _updateJobItemCommand; private readonly IJsonSerializer _json; @@ -120,25 +121,45 @@ namespace MediaBrowser.Server.Implementations.Sync _updateJobCommand.Parameters.Add(_updateJobCommand, "@DateLastModified"); _updateJobCommand.Parameters.Add(_updateJobCommand, "@ItemCount"); - // _saveJobItemCommand - _saveJobItemCommand = _connection.CreateCommand(); - _saveJobItemCommand.CommandText = "replace into SyncJobItems (Id, ItemId, ItemName, MediaSourceId, JobId, TemporaryPath, OutputPath, Status, TargetId, DateCreated, Progress, AdditionalFiles, MediaSource, IsMarkedForRemoval, JobItemIndex) values (@Id, @ItemId, @ItemName, @MediaSourceId, @JobId, @TemporaryPath, @OutputPath, @Status, @TargetId, @DateCreated, @Progress, @AdditionalFiles, @MediaSource, @IsMarkedForRemoval, @JobItemIndex)"; - - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@Id"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@ItemId"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@ItemName"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@MediaSourceId"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@JobId"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@TemporaryPath"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@OutputPath"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@Status"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@TargetId"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@DateCreated"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@Progress"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@AdditionalFiles"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@MediaSource"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@IsMarkedForRemoval"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@JobItemIndex"); + // _insertJobItemCommand + _insertJobItemCommand = _connection.CreateCommand(); + _insertJobItemCommand.CommandText = "insert into SyncJobItems (Id, ItemId, ItemName, MediaSourceId, JobId, TemporaryPath, OutputPath, Status, TargetId, DateCreated, Progress, AdditionalFiles, MediaSource, IsMarkedForRemoval, JobItemIndex) values (@Id, @ItemId, @ItemName, @MediaSourceId, @JobId, @TemporaryPath, @OutputPath, @Status, @TargetId, @DateCreated, @Progress, @AdditionalFiles, @MediaSource, @IsMarkedForRemoval, @JobItemIndex)"; + + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@Id"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@ItemId"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@ItemName"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@MediaSourceId"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@JobId"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@TemporaryPath"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@OutputPath"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@Status"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@TargetId"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@DateCreated"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@Progress"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@AdditionalFiles"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@MediaSource"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@IsMarkedForRemoval"); + _insertJobItemCommand.Parameters.Add(_insertJobItemCommand, "@JobItemIndex"); + + // _updateJobItemCommand + _updateJobItemCommand = _connection.CreateCommand(); + _updateJobItemCommand.CommandText = "update SyncJobItems set ItemId=@ItemId,ItemName=@ItemName,MediaSourceId=@MediaSourceId,JobId=@JobId,TemporaryPath=@TemporaryPath,OutputPath=@OutputPath,Status=@Status,TargetId=@TargetId,DateCreated=@DateCreated,Progress=@Progress,AdditionalFiles=@AdditionalFiles,MediaSource=@MediaSource,IsMarkedForRemoval=@IsMarkedForRemoval,JobItemIndex=@JobItemIndex where Id=@Id"; + + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@Id"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@ItemId"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@ItemName"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@MediaSourceId"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@JobId"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@TemporaryPath"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@OutputPath"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@Status"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@TargetId"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@DateCreated"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@Progress"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@AdditionalFiles"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@MediaSource"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@IsMarkedForRemoval"); + _updateJobItemCommand.Parameters.Add(_updateJobItemCommand, "@JobItemIndex"); } private const string BaseJobSelectText = "select Id, TargetId, Name, Quality, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount from SyncJobs"; @@ -392,17 +413,11 @@ namespace MediaBrowser.Server.Implementations.Sync var whereClauses = new List<string>(); - if (query.IsCompleted.HasValue) + if (query.Statuses.Count > 0) { - if (query.IsCompleted.Value) - { - whereClauses.Add("Status=@Status"); - } - else - { - whereClauses.Add("Status<>@Status"); - } - cmd.Parameters.Add(cmd, "@Status", DbType.String).Value = SyncJobStatus.Completed.ToString(); + var statuses = string.Join(",", query.Statuses.Select(i => "'" + i.ToString() + "'").ToArray()); + + whereClauses.Add(string.Format("Status in ({0})", statuses)); } if (!string.IsNullOrWhiteSpace(query.TargetId)) { @@ -413,6 +428,11 @@ namespace MediaBrowser.Server.Implementations.Sync whereClauses.Add("UserId=@UserId"); cmd.Parameters.Add(cmd, "@UserId", DbType.String).Value = query.UserId; } + if (query.SyncNewContent.HasValue) + { + whereClauses.Add("SyncNewContent=@SyncNewContent"); + cmd.Parameters.Add(cmd, "@SyncNewContent", DbType.Boolean).Value = query.SyncNewContent.Value; + } var whereTextWithoutPaging = whereClauses.Count == 0 ? string.Empty : @@ -583,10 +603,15 @@ namespace MediaBrowser.Server.Implementations.Sync public Task Create(SyncJobItem jobItem) { - return Update(jobItem); + return InsertOrUpdate(jobItem, _insertJobItemCommand); + } + + public Task Update(SyncJobItem jobItem) + { + return InsertOrUpdate(jobItem, _updateJobItemCommand); } - public async Task Update(SyncJobItem jobItem) + private async Task InsertOrUpdate(SyncJobItem jobItem, IDbCommand cmd) { if (jobItem == null) { @@ -603,25 +628,25 @@ namespace MediaBrowser.Server.Implementations.Sync var index = 0; - _saveJobItemCommand.GetParameter(index++).Value = new Guid(jobItem.Id); - _saveJobItemCommand.GetParameter(index++).Value = jobItem.ItemId; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.ItemName; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.MediaSourceId; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.JobId; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.TemporaryPath; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.OutputPath; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.Status.ToString(); - _saveJobItemCommand.GetParameter(index++).Value = jobItem.TargetId; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.DateCreated; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.Progress; - _saveJobItemCommand.GetParameter(index++).Value = _json.SerializeToString(jobItem.AdditionalFiles); - _saveJobItemCommand.GetParameter(index++).Value = jobItem.MediaSource == null ? null : _json.SerializeToString(jobItem.MediaSource); - _saveJobItemCommand.GetParameter(index++).Value = jobItem.IsMarkedForRemoval; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.JobItemIndex; - - _saveJobItemCommand.Transaction = transaction; - - _saveJobItemCommand.ExecuteNonQuery(); + cmd.GetParameter(index++).Value = new Guid(jobItem.Id); + cmd.GetParameter(index++).Value = jobItem.ItemId; + cmd.GetParameter(index++).Value = jobItem.ItemName; + cmd.GetParameter(index++).Value = jobItem.MediaSourceId; + cmd.GetParameter(index++).Value = jobItem.JobId; + cmd.GetParameter(index++).Value = jobItem.TemporaryPath; + cmd.GetParameter(index++).Value = jobItem.OutputPath; + cmd.GetParameter(index++).Value = jobItem.Status.ToString(); + cmd.GetParameter(index++).Value = jobItem.TargetId; + cmd.GetParameter(index++).Value = jobItem.DateCreated; + cmd.GetParameter(index++).Value = jobItem.Progress; + cmd.GetParameter(index++).Value = _json.SerializeToString(jobItem.AdditionalFiles); + cmd.GetParameter(index++).Value = jobItem.MediaSource == null ? null : _json.SerializeToString(jobItem.MediaSource); + cmd.GetParameter(index++).Value = jobItem.IsMarkedForRemoval; + cmd.GetParameter(index++).Value = jobItem.JobItemIndex; + + cmd.Transaction = transaction; + + cmd.ExecuteNonQuery(); transaction.Commit(); } diff --git a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs b/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs index 6700e9054..308784299 100644 --- a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs +++ b/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs @@ -129,7 +129,7 @@ namespace MediaBrowser.Server.Implementations.TV // Get them in display order, then reverse var allEpisodes = series.GetSeasons(user, true, true) .Where(i => !i.IndexNumber.HasValue || i.IndexNumber.Value != 0) - .SelectMany(i => i.GetEpisodes(user, true, true)) + .SelectMany(i => i.GetEpisodes(user)) .Reverse() .ToList(); diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index dabe7485e..a9194c05c 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/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.553</version> + <version>3.0.554</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.553" /> + <dependency id="MediaBrowser.Common" version="3.0.554" /> <dependency id="NLog" version="3.1.0.0" /> <dependency id="SimpleInjector" version="2.6.1" /> </dependencies> diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 16559a41b..5bbb13e19 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common</id> - <version>3.0.553</version> + <version>3.0.554</version> <title>MediaBrowser.Common</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 12c2a6551..124006492 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/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.553</version> + <version>3.0.554</version> <title>MediaBrowser.Model - Signed Edition</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 00f931034..da3283c32 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/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.553</version> + <version>3.0.554</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.553" /> + <dependency id="MediaBrowser.Common" version="3.0.554" /> </dependencies> </metadata> <files> |
