aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Hobbs <jesus.tesh@gmail.com>2014-04-07 09:27:24 -0700
committerTim Hobbs <jesus.tesh@gmail.com>2014-04-07 09:27:24 -0700
commitc8cdc6099aebc2470f0a373da68578a3e8b8c6b6 (patch)
treedd9c4769219c689af50e01409afb84cb177be79f
parent416a494b7866ca048b75728a54e8867ac61ab4cb (diff)
parent17a2beb7a2c548e85c5aef16178bc257314d54e6 (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs10
-rw-r--r--MediaBrowser.Api/UserLibrary/ArtistsService.cs9
-rw-r--r--MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs17
-rw-r--r--MediaBrowser.Controller/Entities/MusicVideo.cs19
-rw-r--r--MediaBrowser.Dlna/PlayTo/DlnaController.cs37
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs21
7 files changed, 74 insertions, 44 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index f57927f87..612f73191 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -1368,7 +1368,7 @@ namespace MediaBrowser.Api.Playback
mediaUrl = streamInfo.Url;
}
- if (!string.IsNullOrEmpty(path) && File.Exists(path))
+ if (!string.IsNullOrEmpty(path))
{
state.MediaPath = path;
state.IsRemote = false;
@@ -1381,7 +1381,7 @@ namespace MediaBrowser.Api.Playback
state.RunTimeTicks = recording.RunTimeTicks;
- if (recording.RecordingInfo.Status == RecordingStatus.InProgress && !state.IsRemote)
+ if (recording.RecordingInfo.Status == RecordingStatus.InProgress)
{
await Task.Delay(1000, cancellationToken).ConfigureAwait(false);
}
@@ -1404,7 +1404,7 @@ namespace MediaBrowser.Api.Playback
state.LiveTvStreamId = streamInfo.Id;
- if (!string.IsNullOrEmpty(streamInfo.Path) && File.Exists(streamInfo.Path))
+ if (!string.IsNullOrEmpty(streamInfo.Path))
{
state.MediaPath = streamInfo.Path;
state.IsRemote = false;
@@ -1749,11 +1749,11 @@ namespace MediaBrowser.Api.Playback
if (isStaticallyStreamed)
{
- flagValue = flagValue | DlnaFlags.DLNA_ORG_FLAG_BYTE_BASED_SEEK;
+ //flagValue = flagValue | DlnaFlags.DLNA_ORG_FLAG_BYTE_BASED_SEEK;
}
else if (state.RunTimeTicks.HasValue)
{
- flagValue = flagValue | DlnaFlags.DLNA_ORG_FLAG_TIME_BASED_SEEK;
+ //flagValue = flagValue | DlnaFlags.DLNA_ORG_FLAG_TIME_BASED_SEEK;
}
var dlnaflags = string.Format(";DLNA.ORG_FLAGS={0}000000000000000000000000",
diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs
index 9972ac3ef..8b1c5ba88 100644
--- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs
@@ -15,14 +15,12 @@ namespace MediaBrowser.Api.UserLibrary
/// <summary>
/// Class GetArtists
/// </summary>
- [Route("/Artists", "GET")]
- [Api(Description = "Gets all artists from a given item, folder, or the entire library")]
+ [Route("/Artists", "GET", Summary = "Gets all artists from a given item, folder, or the entire library")]
public class GetArtists : GetItemsByName
{
}
- [Route("/Artists/{Name}", "GET")]
- [Api(Description = "Gets an artist, by name")]
+ [Route("/Artists/{Name}", "GET", Summary = "Gets an artist, by name")]
public class GetArtist : IReturn<BaseItemDto>
{
/// <summary>
@@ -112,7 +110,8 @@ namespace MediaBrowser.Api.UserLibrary
protected override IEnumerable<MusicArtist> GetAllItems(GetItemsByName request, IEnumerable<BaseItem> items)
{
return items
- .OfType<Audio>()
+ .OfType<IHasArtist>()
+ .Where(i => !(i is MusicAlbum))
.SelectMany(i => i.AllArtists)
.Distinct(StringComparer.OrdinalIgnoreCase)
.Select(name =>
diff --git a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
index 7448e44f0..08eaf903e 100644
--- a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
+++ b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
@@ -1,4 +1,5 @@
-
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities.Audio
{
public interface IHasAlbumArtist
@@ -9,5 +10,7 @@ namespace MediaBrowser.Controller.Entities.Audio
public interface IHasArtist
{
bool HasArtist(string name);
+
+ List<string> AllArtists { get; }
}
}
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
index bc260c696..cce241542 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
@@ -31,6 +31,23 @@ namespace MediaBrowser.Controller.Entities.Audio
}
}
+ [IgnoreDataMember]
+ public List<string> AllArtists
+ {
+ get
+ {
+ var list = new List<string>();
+
+ if (!string.IsNullOrEmpty(AlbumArtist))
+ {
+ list.Add(AlbumArtist);
+ }
+ list.AddRange(Artists);
+
+ return list;
+ }
+ }
+
/// <summary>
/// Gets or sets the tags.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/MusicVideo.cs b/MediaBrowser.Controller/Entities/MusicVideo.cs
index c3c4b89ba..554914ec6 100644
--- a/MediaBrowser.Controller/Entities/MusicVideo.cs
+++ b/MediaBrowser.Controller/Entities/MusicVideo.cs
@@ -3,7 +3,9 @@ using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
using System;
+using System.Collections.Generic;
using System.Linq;
+using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Entities
{
@@ -33,6 +35,23 @@ namespace MediaBrowser.Controller.Entities
/// <value>The revenue.</value>
public double? Revenue { get; set; }
+ [IgnoreDataMember]
+ public List<string> AllArtists
+ {
+ get
+ {
+ var list = new List<string>();
+
+ if (!string.IsNullOrEmpty(Artist))
+ {
+ list.Add(Artist);
+ }
+
+ return list;
+
+ }
+ }
+
/// <summary>
/// Determines whether the specified name has artist.
/// </summary>
diff --git a/MediaBrowser.Dlna/PlayTo/DlnaController.cs b/MediaBrowser.Dlna/PlayTo/DlnaController.cs
index b1c85889d..6edb9d6f6 100644
--- a/MediaBrowser.Dlna/PlayTo/DlnaController.cs
+++ b/MediaBrowser.Dlna/PlayTo/DlnaController.cs
@@ -167,25 +167,28 @@ namespace MediaBrowser.Dlna.PlayTo
if (_currentItem == null || _device.IsStopped)
return;
- if (!_playbackStarted)
+ var playlistItem = Playlist.FirstOrDefault(p => p.PlayState == 1);
+
+ if (playlistItem != null)
{
- await _sessionManager.OnPlaybackStart(new PlaybackInfo
+ if (!_playbackStarted)
{
- Item = _currentItem,
- SessionId = _session.Id,
- CanSeek = true,
- QueueableMediaTypes = new List<string> { _currentItem.MediaType }
-
- }).ConfigureAwait(false);
+ await _sessionManager.OnPlaybackStart(new PlaybackInfo
+ {
+ Item = _currentItem,
+ SessionId = _session.Id,
+ CanSeek = true,
+ QueueableMediaTypes = new List<string> { _currentItem.MediaType },
+ MediaSourceId = playlistItem.MediaSourceId,
+ AudioStreamIndex = playlistItem.AudioStreamIndex,
+ SubtitleStreamIndex = playlistItem.SubtitleStreamIndex
- _playbackStarted = true;
- }
+ }).ConfigureAwait(false);
- if ((_device.IsPlaying || _device.IsPaused))
- {
- var playlistItem = Playlist.FirstOrDefault(p => p.PlayState == 1);
+ _playbackStarted = true;
+ }
- if (playlistItem != null)
+ if ((_device.IsPlaying || _device.IsPaused))
{
var ticks = _device.Position.Ticks;
@@ -487,7 +490,7 @@ namespace MediaBrowser.Dlna.PlayTo
return (contentFeatures + orgOp + orgCi + dlnaflags).Trim(';');
}
-
+
private PlaylistItem GetPlaylistItem(BaseItem item, List<MediaStream> mediaStreams, DeviceProfile profile)
{
var video = item as Video;
@@ -563,10 +566,10 @@ namespace MediaBrowser.Dlna.PlayTo
_logger.Debug("{0} - SetAvTransport Uri: {1} DlnaHeaders: {2}", _device.Properties.Name, nextTrack.StreamUrl, dlnaheaders);
await _device.SetAvTransport(nextTrack.StreamUrl, dlnaheaders, nextTrack.Didl);
-
+
if (nextTrack.StartPositionTicks > 0 && !nextTrack.Transcode)
await _device.Seek(TimeSpan.FromTicks(nextTrack.StartPositionTicks));
-
+
return true;
}
diff --git a/MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs b/MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs
index 312e718e1..08e9403aa 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs
@@ -64,7 +64,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
{
throw new ArgumentNullException("contentType");
}
-
+
RangeHeader = rangeHeader;
SourceStream = source;
IsHeadRequest = isHeadRequest;
@@ -98,11 +98,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer
RangeStart = requestedRange.Key;
RangeLength = 1 + RangeEnd - RangeStart;
-
+
// Content-Length is the length of what we're serving, not the original content
Options["Content-Length"] = RangeLength.ToString(UsCulture);
Options["Content-Range"] = string.Format("bytes {0}-{1}/{2}", RangeStart, RangeEnd, TotalContentLength);
-
+
if (RangeStart > 0)
{
SourceStream.Position = RangeStart;
@@ -178,19 +178,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
using (var source = SourceStream)
{
- // If the requested range is "0-", we can optimize by just doing a stream copy
- if (RangeEnd == TotalContentLength - 1)
- {
- await source.CopyToAsync(responseStream).ConfigureAwait(false);
- }
- else
- {
- // Read the bytes we need
- var buffer = new byte[Convert.ToInt32(RangeLength)];
- await source.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
-
- await responseStream.WriteAsync(buffer, 0, Convert.ToInt32(RangeLength)).ConfigureAwait(false);
- }
+ //Since we've already set the postion of the sourcestream, just copy the remains to the output
+ await source.CopyToAsync(responseStream).ConfigureAwait(false);
}
}