aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-15 19:33:06 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-15 19:33:06 -0500
commit8051ea9b1bebcccfa1471c1a3db0e03fd7a70bcd (patch)
tree2d3762a3bc0b2f581043aed093d06077d75c5926
parent18ff8aba74593f4ad47aba5f001c812b2c9393fe (diff)
update javascript connection manager to latest feature set
-rw-r--r--MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs4
-rw-r--r--MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs4
-rw-r--r--MediaBrowser.Dlna/Didl/DidlBuilder.cs10
-rw-r--r--MediaBrowser.Dlna/PlayTo/PlayToController.cs26
-rw-r--r--MediaBrowser.Dlna/PlayTo/PlayToManager.cs2
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj3
-rw-r--r--MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj3
-rw-r--r--MediaBrowser.Model/ApiClient/NetworkStatus.cs30
-rw-r--r--MediaBrowser.Model/Dlna/StreamInfo.cs99
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj1
-rw-r--r--MediaBrowser.Model/Querying/EpisodeQuery.cs51
-rw-r--r--MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs17
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs2
-rw-r--r--MediaBrowser.WebDashboard/Api/PackageCreator.cs3
-rw-r--r--MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj12
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Model.Signed.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
19 files changed, 221 insertions, 58 deletions
diff --git a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs
index d4be1b2f4..75f1579ac 100644
--- a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs
+++ b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs
@@ -67,7 +67,8 @@ namespace MediaBrowser.Dlna.ContentDirectory
_dlna.GetDefaultProfile();
var serverAddress = request.RequestedUrl.Substring(0, request.RequestedUrl.IndexOf("/dlna", StringComparison.OrdinalIgnoreCase));
-
+ string accessToken = null;
+
var user = GetUser(profile);
return new ControlHandler(
@@ -75,6 +76,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
_libraryManager,
profile,
serverAddress,
+ accessToken,
_imageProcessor,
_userDataManager,
user,
diff --git a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
index e480326e9..5d6ee5c73 100644
--- a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
+++ b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
@@ -45,7 +45,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
private readonly DeviceProfile _profile;
- public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization, IChannelManager channelManager)
+ public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, string accessToken, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization, IChannelManager channelManager)
: base(config, logger)
{
_libraryManager = libraryManager;
@@ -55,7 +55,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
_channelManager = channelManager;
_profile = profile;
- _didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress, userDataManager, localization);
+ _didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress, accessToken, userDataManager, localization);
}
protected override IEnumerable<KeyValuePair<string, string>> GetResult(string methodName, Headers methodParams)
diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
index 59dcbdecb..af7c8dbed 100644
--- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs
+++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
@@ -33,17 +33,19 @@ namespace MediaBrowser.Dlna.Didl
private readonly DeviceProfile _profile;
private readonly IImageProcessor _imageProcessor;
private readonly string _serverAddress;
+ private readonly string _accessToken;
private readonly User _user;
private readonly IUserDataManager _userDataManager;
private readonly ILocalizationManager _localization;
- public DidlBuilder(DeviceProfile profile, User user, IImageProcessor imageProcessor, string serverAddress, IUserDataManager userDataManager, ILocalizationManager localization)
+ public DidlBuilder(DeviceProfile profile, User user, IImageProcessor imageProcessor, string serverAddress, string accessToken, IUserDataManager userDataManager, ILocalizationManager localization)
{
_profile = profile;
_imageProcessor = imageProcessor;
_serverAddress = serverAddress;
_userDataManager = userDataManager;
_localization = localization;
+ _accessToken = accessToken;
_user = user;
}
@@ -161,7 +163,7 @@ namespace MediaBrowser.Dlna.Didl
AddVideoResource(container, video, deviceId, filter, contentFeature, streamInfo);
}
- foreach (var subtitle in streamInfo.GetExternalSubtitles(_serverAddress, false))
+ foreach (var subtitle in streamInfo.GetExternalSubtitles(_serverAddress, _accessToken, false))
{
AddSubtitleElement(container, subtitle);
}
@@ -206,7 +208,7 @@ namespace MediaBrowser.Dlna.Didl
{
var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL);
- var url = streamInfo.ToDlnaUrl(_serverAddress);
+ var url = streamInfo.ToDlnaUrl(_serverAddress, _accessToken);
res.InnerText = url;
@@ -351,7 +353,7 @@ namespace MediaBrowser.Dlna.Didl
});
}
- var url = streamInfo.ToDlnaUrl(_serverAddress);
+ var url = streamInfo.ToDlnaUrl(_serverAddress, _accessToken);
res.InnerText = url;
diff --git a/MediaBrowser.Dlna/PlayTo/PlayToController.cs b/MediaBrowser.Dlna/PlayTo/PlayToController.cs
index bd2b169ad..574623161 100644
--- a/MediaBrowser.Dlna/PlayTo/PlayToController.cs
+++ b/MediaBrowser.Dlna/PlayTo/PlayToController.cs
@@ -38,6 +38,7 @@ namespace MediaBrowser.Dlna.PlayTo
private readonly DeviceDiscovery _deviceDiscovery;
private readonly string _serverAddress;
+ private readonly string _accessToken;
public bool IsSessionActive
{
@@ -54,7 +55,7 @@ namespace MediaBrowser.Dlna.PlayTo
private Timer _updateTimer;
- public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, DeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization)
+ public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, string accessToken, DeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization)
{
_session = session;
_itemRepository = itemRepository;
@@ -67,6 +68,7 @@ namespace MediaBrowser.Dlna.PlayTo
_deviceDiscovery = deviceDiscovery;
_userDataManager = userDataManager;
_localization = localization;
+ _accessToken = accessToken;
_logger = logger;
}
@@ -306,18 +308,16 @@ namespace MediaBrowser.Dlna.PlayTo
var playlist = new List<PlaylistItem>();
var isFirst = true;
- var serverAddress = GetServerAddress();
-
foreach (var item in items)
{
if (isFirst && command.StartPositionTicks.HasValue)
{
- playlist.Add(CreatePlaylistItem(item, user, command.StartPositionTicks.Value, serverAddress));
+ playlist.Add(CreatePlaylistItem(item, user, command.StartPositionTicks.Value));
isFirst = false;
}
else
{
- playlist.Add(CreatePlaylistItem(item, user, 0, serverAddress));
+ playlist.Add(CreatePlaylistItem(item, user, 0));
}
}
@@ -381,7 +381,7 @@ namespace MediaBrowser.Dlna.PlayTo
if (info.Item != null && !info.IsDirectStream)
{
var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null;
- var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, info.AudioStreamIndex, info.SubtitleStreamIndex);
+ var newItem = CreatePlaylistItem(info.Item, user, newPosition, info.MediaSourceId, info.AudioStreamIndex, info.SubtitleStreamIndex);
await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false);
@@ -458,12 +458,12 @@ namespace MediaBrowser.Dlna.PlayTo
}
}
- private PlaylistItem CreatePlaylistItem(BaseItem item, User user, long startPostionTicks, string serverAddress)
+ private PlaylistItem CreatePlaylistItem(BaseItem item, User user, long startPostionTicks)
{
- return CreatePlaylistItem(item, user, startPostionTicks, serverAddress, null, null, null);
+ return CreatePlaylistItem(item, user, startPostionTicks, null, null, null);
}
- private PlaylistItem CreatePlaylistItem(BaseItem item, User user, long startPostionTicks, string serverAddress, string mediaSourceId, int? audioStreamIndex, int? subtitleStreamIndex)
+ private PlaylistItem CreatePlaylistItem(BaseItem item, User user, long startPostionTicks, string mediaSourceId, int? audioStreamIndex, int? subtitleStreamIndex)
{
var deviceInfo = _device.Properties;
@@ -478,9 +478,9 @@ namespace MediaBrowser.Dlna.PlayTo
var playlistItem = GetPlaylistItem(item, mediaSources, profile, _session.DeviceId, mediaSourceId, audioStreamIndex, subtitleStreamIndex);
playlistItem.StreamInfo.StartPositionTicks = startPostionTicks;
- playlistItem.StreamUrl = playlistItem.StreamInfo.ToUrl(serverAddress);
+ playlistItem.StreamUrl = playlistItem.StreamInfo.ToUrl(_serverAddress, _accessToken);
- var itemXml = new DidlBuilder(profile, user, _imageProcessor, serverAddress, _userDataManager, _localization)
+ var itemXml = new DidlBuilder(profile, user, _imageProcessor, _serverAddress, _accessToken, _userDataManager, _localization)
.GetItemDidl(item, null, _session.DeviceId, new Filter(), playlistItem.StreamInfo);
playlistItem.Didl = itemXml;
@@ -745,7 +745,7 @@ namespace MediaBrowser.Dlna.PlayTo
var newPosition = progress.PositionTicks ?? 0;
var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null;
- var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, newIndex, info.SubtitleStreamIndex);
+ var newItem = CreatePlaylistItem(info.Item, user, newPosition, info.MediaSourceId, newIndex, info.SubtitleStreamIndex);
await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false);
@@ -771,7 +771,7 @@ namespace MediaBrowser.Dlna.PlayTo
var newPosition = progress.PositionTicks ?? 0;
var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null;
- var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, info.AudioStreamIndex, newIndex);
+ var newItem = CreatePlaylistItem(info.Item, user, newPosition, info.MediaSourceId, info.AudioStreamIndex, newIndex);
await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false);
diff --git a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
index 7c73406b9..9a9a976d3 100644
--- a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
+++ b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
@@ -98,6 +98,7 @@ namespace MediaBrowser.Dlna.PlayTo
if (controller == null)
{
var serverAddress = GetServerAddress(localIp);
+ string accessToken = null;
sessionInfo.SessionController = controller = new PlayToController(sessionInfo,
_sessionManager,
@@ -108,6 +109,7 @@ namespace MediaBrowser.Dlna.PlayTo
_userManager,
_imageProcessor,
serverAddress,
+ accessToken,
_deviceDiscovery,
_userDataManager,
_localization);
diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
index ba3065bc9..37057f2d7 100644
--- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
+++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
@@ -110,6 +110,9 @@
<Compile Include="..\MediaBrowser.Model\ApiClient\IServerEvents.cs">
<Link>ApiClient\IServerEvents.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\ApiClient\NetworkStatus.cs">
+ <Link>ApiClient\NetworkStatus.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\ApiClient\RemoteLogoutReason.cs">
<Link>ApiClient\RemoteLogoutReason.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
index 8d22f25a9..f38a8f597 100644
--- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
+++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
@@ -75,6 +75,9 @@
<Compile Include="..\MediaBrowser.Model\ApiClient\IServerEvents.cs">
<Link>ApiClient\IServerEvents.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\ApiClient\NetworkStatus.cs">
+ <Link>ApiClient\NetworkStatus.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\ApiClient\RemoteLogoutReason.cs">
<Link>ApiClient\RemoteLogoutReason.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model/ApiClient/NetworkStatus.cs b/MediaBrowser.Model/ApiClient/NetworkStatus.cs
new file mode 100644
index 000000000..715087607
--- /dev/null
+++ b/MediaBrowser.Model/ApiClient/NetworkStatus.cs
@@ -0,0 +1,30 @@
+
+namespace MediaBrowser.Model.ApiClient
+{
+ public class NetworkStatus
+ {
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is network available.
+ /// </summary>
+ /// <value><c>true</c> if this instance is network available; otherwise, <c>false</c>.</value>
+ public bool IsNetworkAvailable { get; set; }
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is local network available.
+ /// </summary>
+ /// <value><c>null</c> if [is local network available] contains no value, <c>true</c> if [is local network available]; otherwise, <c>false</c>.</value>
+ public bool? IsLocalNetworkAvailable { get; set; }
+ /// <summary>
+ /// Gets the is any local network available.
+ /// </summary>
+ /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
+ public bool GetIsAnyLocalNetworkAvailable()
+ {
+ if (!IsLocalNetworkAvailable.HasValue)
+ {
+ return IsNetworkAvailable;
+ }
+
+ return IsLocalNetworkAvailable.Value;
+ }
+ }
+}
diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs
index 3c2f39b74..57a3899d4 100644
--- a/MediaBrowser.Model/Dlna/StreamInfo.cs
+++ b/MediaBrowser.Model/Dlna/StreamInfo.cs
@@ -85,12 +85,12 @@ namespace MediaBrowser.Model.Dlna
}
}
- public string ToUrl(string baseUrl)
+ public string ToUrl(string baseUrl, string accessToken)
{
- return ToDlnaUrl(baseUrl);
+ return ToDlnaUrl(baseUrl, accessToken);
}
- public string ToDlnaUrl(string baseUrl)
+ public string ToDlnaUrl(string baseUrl, string accessToken)
{
if (PlayMethod == PlayMethod.DirectPlay)
{
@@ -152,7 +152,47 @@ namespace MediaBrowser.Model.Dlna
return string.Format("Params={0}", string.Join(";", list.ToArray()));
}
- public List<SubtitleStreamInfo> GetExternalSubtitles(string baseUrl, bool includeSelectedTrackOnly)
+ public List<SubtitleStreamInfo> GetExternalSubtitles(bool includeSelectedTrackOnly)
+ {
+ List<SubtitleStreamInfo> list = new List<SubtitleStreamInfo>();
+
+ // First add the selected track
+ if (SubtitleStreamIndex.HasValue)
+ {
+ foreach (MediaStream stream in MediaSource.MediaStreams)
+ {
+ if (stream.Type == MediaStreamType.Subtitle && stream.Index == SubtitleStreamIndex.Value)
+ {
+ SubtitleStreamInfo info = GetSubtitleStreamInfo(stream);
+
+ if (info != null)
+ {
+ list.Add(info);
+ }
+ }
+ }
+ }
+
+ if (!includeSelectedTrackOnly)
+ {
+ foreach (MediaStream stream in MediaSource.MediaStreams)
+ {
+ if (stream.Type == MediaStreamType.Subtitle && (!SubtitleStreamIndex.HasValue || stream.Index != SubtitleStreamIndex.Value))
+ {
+ SubtitleStreamInfo info = GetSubtitleStreamInfo(stream);
+
+ if (info != null)
+ {
+ list.Add(info);
+ }
+ }
+ }
+ }
+
+ return list;
+ }
+
+ public List<SubtitleStreamInfo> GetExternalSubtitles(string baseUrl, string accessToken, bool includeSelectedTrackOnly)
{
if (string.IsNullOrEmpty(baseUrl))
{
@@ -173,7 +213,12 @@ namespace MediaBrowser.Model.Dlna
{
if (stream.Type == MediaStreamType.Subtitle && stream.Index == SubtitleStreamIndex.Value)
{
- AddSubtitle(list, stream, baseUrl, startPositionTicks);
+ SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks);
+
+ if (info != null)
+ {
+ list.Add(info);
+ }
}
}
}
@@ -184,7 +229,12 @@ namespace MediaBrowser.Model.Dlna
{
if (stream.Type == MediaStreamType.Subtitle && (!SubtitleStreamIndex.HasValue || stream.Index != SubtitleStreamIndex.Value))
{
- AddSubtitle(list, stream, baseUrl, startPositionTicks);
+ SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks);
+
+ if (info != null)
+ {
+ list.Add(info);
+ }
}
}
}
@@ -192,32 +242,41 @@ namespace MediaBrowser.Model.Dlna
return list;
}
- private void AddSubtitle(List<SubtitleStreamInfo> list, MediaStream stream, string baseUrl, long startPositionTicks)
+ private SubtitleStreamInfo GetSubtitleStreamInfo(MediaStream stream, string baseUrl, string accessToken, long startPositionTicks)
{
- var subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, DeviceProfile);
+ SubtitleStreamInfo info = GetSubtitleStreamInfo(stream);
- if (subtitleProfile.Method != SubtitleDeliveryMethod.External)
+ if (info != null)
{
- return;
+ info.Url = string.Format("{0}/Videos/{1}/{2}/Subtitles/{3}/{4}/Stream.{5}",
+ baseUrl,
+ ItemId,
+ MediaSourceId,
+ StringHelper.ToStringCultureInvariant(stream.Index),
+ StringHelper.ToStringCultureInvariant(startPositionTicks),
+ SubtitleFormat);
}
- string url = string.Format("{0}/Videos/{1}/{2}/Subtitles/{3}/{4}/Stream.{5}",
- baseUrl,
- ItemId,
- MediaSourceId,
- StringHelper.ToStringCultureInvariant(stream.Index),
- StringHelper.ToStringCultureInvariant(startPositionTicks),
- SubtitleFormat);
+ return info;
+ }
+
+ private SubtitleStreamInfo GetSubtitleStreamInfo(MediaStream stream)
+ {
+ SubtitleProfile subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, DeviceProfile);
+
+ if (subtitleProfile.Method != SubtitleDeliveryMethod.External)
+ {
+ return null;
+ }
- list.Add(new SubtitleStreamInfo
+ return new SubtitleStreamInfo
{
- Url = url,
IsForced = stream.IsForced,
Language = stream.Language,
Name = stream.Language ?? "Unknown",
Format = SubtitleFormat,
Index = stream.Index
- });
+ };
}
/// <summary>
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index c8e09dd82..9fd632cbd 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -72,6 +72,7 @@
<Compile Include="ApiClient\IDevice.cs" />
<Compile Include="ApiClient\IServerEvents.cs" />
<Compile Include="ApiClient\GeneralCommandEventArgs.cs" />
+ <Compile Include="ApiClient\NetworkStatus.cs" />
<Compile Include="ApiClient\RemoteLogoutReason.cs" />
<Compile Include="ApiClient\ServerCredentials.cs" />
<Compile Include="ApiClient\ServerDiscoveryInfo.cs" />
diff --git a/MediaBrowser.Model/Querying/EpisodeQuery.cs b/MediaBrowser.Model/Querying/EpisodeQuery.cs
index e2fc3220a..78fe943e3 100644
--- a/MediaBrowser.Model/Querying/EpisodeQuery.cs
+++ b/MediaBrowser.Model/Querying/EpisodeQuery.cs
@@ -3,20 +3,57 @@ namespace MediaBrowser.Model.Querying
{
public class EpisodeQuery
{
+ /// <summary>
+ /// Gets or sets the user identifier.
+ /// </summary>
+ /// <value>The user identifier.</value>
public string UserId { get; set; }
-
+ /// <summary>
+ /// Gets or sets the season identifier.
+ /// </summary>
+ /// <value>The season identifier.</value>
public string SeasonId { get; set; }
-
+ /// <summary>
+ /// Gets or sets the series identifier.
+ /// </summary>
+ /// <value>The series identifier.</value>
public string SeriesId { get; set; }
-
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is missing.
+ /// </summary>
+ /// <value><c>null</c> if [is missing] contains no value, <c>true</c> if [is missing]; otherwise, <c>false</c>.</value>
public bool? IsMissing { get; set; }
-
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is virtual unaired.
+ /// </summary>
+ /// <value><c>null</c> if [is virtual unaired] contains no value, <c>true</c> if [is virtual unaired]; otherwise, <c>false</c>.</value>
public bool? IsVirtualUnaired { get; set; }
-
+ /// <summary>
+ /// Gets or sets the season number.
+ /// </summary>
+ /// <value>The season number.</value>
public int? SeasonNumber { get; set; }
-
+ /// <summary>
+ /// Gets or sets the fields.
+ /// </summary>
+ /// <value>The fields.</value>
public ItemFields[] Fields { get; set; }
-
+ /// <summary>
+ /// Gets or sets the start index.
+ /// </summary>
+ /// <value>The start index.</value>
+ public int? StartIndex { get; set; }
+ /// <summary>
+ /// Gets or sets the limit.
+ /// </summary>
+ /// <value>The limit.</value>
+ public int? Limit { get; set; }
+ /// <summary>
+ /// Gets or sets the start item identifier.
+ /// </summary>
+ /// <value>The start item identifier.</value>
+ public string StartItemId { get; set; }
+
public EpisodeQuery()
{
Fields = new ItemFields[] { };
diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
index 10e50e497..7415fe092 100644
--- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
+++ b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
@@ -210,7 +210,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
try
{
- _fileSystem.DeleteFile(path);
+ DeleteLibraryFile(path);
}
catch (IOException ex)
{
@@ -224,6 +224,15 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
}
}
+ private void DeleteLibraryFile(string path)
+ {
+ var filename = Path.GetFileNameWithoutExtension(path);
+
+ _fileSystem.DeleteFile(path);
+
+ // Now find other files
+ }
+
private List<string> GetOtherDuplicatePaths(string targetPath, Series series, int seasonNumber, int episodeNumber, int? endingEpisodeNumber)
{
var episodePaths = series.GetRecursiveChildren()
@@ -281,11 +290,11 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
Directory.CreateDirectory(Path.GetDirectoryName(result.TargetPath));
- var copy = File.Exists(result.TargetPath);
+ var targetAlreadyExists = File.Exists(result.TargetPath);
try
{
- if (copy || options.CopyOriginalFile)
+ if (targetAlreadyExists || options.CopyOriginalFile)
{
File.Copy(result.OriginalPath, result.TargetPath, true);
}
@@ -312,7 +321,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
_libraryMonitor.ReportFileSystemChangeComplete(result.TargetPath, true);
}
- if (copy && !options.CopyOriginalFile)
+ if (targetAlreadyExists && !options.CopyOriginalFile)
{
try
{
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
index a254d862c..139d752fa 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
@@ -483,7 +483,7 @@ namespace MediaBrowser.Server.Implementations.Sync
// No sense creating external subs if we're already burning one into the video
var externalSubs = streamInfo.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode ?
new List<SubtitleStreamInfo>() :
- streamInfo.GetExternalSubtitles("dummy", false);
+ streamInfo.GetExternalSubtitles(false);
// Mark as requiring conversion if transcoding the video, or if any subtitles need to be extracted
var requiresVideoTranscoding = streamInfo.PlayMethod == PlayMethod.Transcode && job.Quality != SyncQuality.Original;
diff --git a/MediaBrowser.WebDashboard/Api/PackageCreator.cs b/MediaBrowser.WebDashboard/Api/PackageCreator.cs
index 8bf005021..92258bd07 100644
--- a/MediaBrowser.WebDashboard/Api/PackageCreator.cs
+++ b/MediaBrowser.WebDashboard/Api/PackageCreator.cs
@@ -285,6 +285,9 @@ namespace MediaBrowser.WebDashboard.Api
"thirdparty/apiclient/network.js",
"thirdparty/apiclient/device.js",
"thirdparty/apiclient/credentials.js",
+ "thirdparty/apiclient/ajax.js",
+ "thirdparty/apiclient/events.js",
+ "thirdparty/apiclient/deferred.js",
"thirdparty/apiclient/mediabrowser.apiclient.js",
"thirdparty/apiclient/connectservice.js",
"thirdparty/apiclient/connectionmanager.js"
diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
index b3ee9b881..1b0eb7120 100644
--- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
+++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
@@ -156,12 +156,24 @@
<Content Include="dashboard-ui\syncsettings.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\thirdparty\apiclient\ajax.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\thirdparty\apiclient\connectservice.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\thirdparty\apiclient\deferred.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="dashboard-ui\thirdparty\apiclient\deferredAlt.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\thirdparty\apiclient\device.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\thirdparty\apiclient\events.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\thirdparty\apiclient\logger.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index ac6db07dc..8d1ffe32f 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.568</version>
+ <version>3.0.571</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.568" />
+ <dependency id="MediaBrowser.Common" version="3.0.571" />
<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 bf09caecc..4fc02c000 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.568</version>
+ <version>3.0.571</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 eafd3c6aa..b2bbdb8d2 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.568</version>
+ <version>3.0.571</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 57ce825a0..1c58f100a 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.568</version>
+ <version>3.0.571</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.568" />
+ <dependency id="MediaBrowser.Common" version="3.0.571" />
</dependencies>
</metadata>
<files>