diff --git a/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs b/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs
index de6b821836..47c10ac2c9 100644
--- a/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs
+++ b/MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs
@@ -33,6 +33,11 @@ namespace MediaBrowser.Dlna.Server
_serverAddress = serverAddress;
}
+ private bool AbsoluteUrls
+ {
+ get { return true; }
+ }
+
public string GetXml()
{
var builder = new StringBuilder();
@@ -86,7 +91,10 @@ namespace MediaBrowser.Dlna.Server
builder.Append("" + SecurityElement.Escape(_profile.ModelUrl ?? string.Empty) + "");
builder.Append("" + SecurityElement.Escape(_profile.SerialNumber ?? string.Empty) + "");
- builder.Append("" + SecurityElement.Escape(_serverAddress) + "");
+ if (!AbsoluteUrls)
+ {
+ builder.Append("" + SecurityElement.Escape(_serverAddress) + "");
+ }
if (!string.IsNullOrWhiteSpace(_profile.SonyAggregationFlags))
{
@@ -144,7 +152,11 @@ namespace MediaBrowser.Dlna.Server
url = url.TrimStart('/');
url = "/dlna/" + _serverUdn + "/" + url;
- //url = _serverAddress.TrimEnd('/') + url;
+
+ if (AbsoluteUrls)
+ {
+ url = _serverAddress.TrimEnd('/') + url;
+ }
return SecurityElement.Escape(url);
}
diff --git a/MediaBrowser.Model/ApiClient/ServerInfo.cs b/MediaBrowser.Model/ApiClient/ServerInfo.cs
index 2faa5b4073..dcd5e75b19 100644
--- a/MediaBrowser.Model/ApiClient/ServerInfo.cs
+++ b/MediaBrowser.Model/ApiClient/ServerInfo.cs
@@ -92,7 +92,7 @@ namespace MediaBrowser.Model.ApiClient
var existing = list[index];
// Merge the data
- existing.IsOffline = user.IsOffline;
+ existing.IsSignedInOffline = user.IsSignedInOffline;
}
else
{
diff --git a/MediaBrowser.Model/ApiClient/ServerUserInfo.cs b/MediaBrowser.Model/ApiClient/ServerUserInfo.cs
index 43186c86d6..812da7402c 100644
--- a/MediaBrowser.Model/ApiClient/ServerUserInfo.cs
+++ b/MediaBrowser.Model/ApiClient/ServerUserInfo.cs
@@ -4,6 +4,6 @@ namespace MediaBrowser.Model.ApiClient
public class ServerUserInfo
{
public string Id { get; set; }
- public bool IsOffline { get; set; }
+ public bool IsSignedInOffline { get; set; }
}
}
diff --git a/MediaBrowser.Model/Dto/UserDto.cs b/MediaBrowser.Model/Dto/UserDto.cs
index 22428fadd2..c66b34150d 100644
--- a/MediaBrowser.Model/Dto/UserDto.cs
+++ b/MediaBrowser.Model/Dto/UserDto.cs
@@ -26,7 +26,14 @@ namespace MediaBrowser.Model.Dto
///
/// The server identifier.
public string ServerId { get; set; }
-
+
+ ///
+ /// Gets or sets the name of the server.
+ /// This is not used by the server and is for client-side usage only.
+ ///
+ /// The name of the server.
+ public string ServerName { get; set; }
+
///
/// Gets or sets the name of the connect user.
///
diff --git a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
index 0611e415d8..0e70507413 100644
--- a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
+++ b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
@@ -170,7 +170,7 @@ namespace MediaBrowser.Providers.BoxSets
url += string.Format("&language={0}", language);
}
- var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
+ var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(language);
// Get images in english and with no language
url += "&include_image_language=" + includeImageLanguageParam;
diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
index b4d7b14dcd..ed15a2eeff 100644
--- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
@@ -16,7 +16,6 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
-using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -263,7 +262,7 @@ namespace MediaBrowser.Providers.Movies
return Path.Combine(path, filename);
}
- public static string GetImageLanguagesParam(ILocalizationManager localization, string preferredLanguage)
+ public static string GetImageLanguagesParam(string preferredLanguage)
{
var languages = new List();
@@ -277,18 +276,6 @@ namespace MediaBrowser.Providers.Movies
languages.Add("en");
}
- var firstLetter = string.IsNullOrWhiteSpace(preferredLanguage)
- ? string.Empty
- : preferredLanguage.Substring(0, 1);
-
- var allLanguages = localization.GetCultures()
- .Select(i => i.TwoLetterISOLanguageName)
- .Distinct(StringComparer.OrdinalIgnoreCase)
- .Where(i => !languages.Contains(i, StringComparer.OrdinalIgnoreCase) && i.StartsWith(firstLetter, StringComparison.OrdinalIgnoreCase))
- .ToList();
-
- //languages.AddRange(allLanguages);
-
return string.Join(",", languages.ToArray());
}
@@ -309,7 +296,7 @@ namespace MediaBrowser.Providers.Movies
url += string.Format("&language={0}", language);
}
- var includeImageLanguageParam = GetImageLanguagesParam(_localization, language);
+ var includeImageLanguageParam = GetImageLanguagesParam(language);
// Get images in english and with no language
url += "&include_image_language=" + includeImageLanguageParam;
@@ -336,26 +323,29 @@ namespace MediaBrowser.Providers.Movies
cancellationToken.ThrowIfCancellationRequested();
- if (mainResult != null && string.IsNullOrEmpty(mainResult.overview))
+ // If the language preference isn't english, then have the overview fallback to english if it's blank
+ if (mainResult != null &&
+ string.IsNullOrEmpty(mainResult.overview) &&
+ !string.IsNullOrEmpty(language) &&
+ !string.Equals(language, "en", StringComparison.OrdinalIgnoreCase))
{
- if (!string.IsNullOrEmpty(language) && !string.Equals(language, "en", StringComparison.OrdinalIgnoreCase))
+ _logger.Info("MovieDbProvider couldn't find meta for language " + language + ". Trying English...");
+
+ url = string.Format(GetMovieInfo3, id, ApiKey) + "&include_image_language=" + includeImageLanguageParam + "&language=en";
+
+ using (var json = await GetMovieDbResponse(new HttpRequestOptions
{
- _logger.Info("MovieDbProvider couldn't find meta for language " + language + ". Trying English...");
+ Url = url,
+ CancellationToken = cancellationToken,
+ AcceptHeader = AcceptHeader,
+ CacheMode = cacheMode,
+ CacheLength = cacheLength
- url = string.Format(GetMovieInfo3, id, ApiKey) + "&include_image_language=" + includeImageLanguageParam + "&language=en";
+ }).ConfigureAwait(false))
+ {
+ var englishResult = _jsonSerializer.DeserializeFromStream(json);
- using (var json = await GetMovieDbResponse(new HttpRequestOptions
- {
- Url = url,
- CancellationToken = cancellationToken,
- AcceptHeader = AcceptHeader,
- CacheMode = cacheMode,
- CacheLength = cacheLength
-
- }).ConfigureAwait(false))
- {
- mainResult = _jsonSerializer.DeserializeFromStream(json);
- }
+ mainResult.overview = englishResult.overview;
}
}
diff --git a/MediaBrowser.Providers/TV/MovieDbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/MovieDbEpisodeImageProvider.cs
index 6aa27f4968..ff5e6025df 100644
--- a/MediaBrowser.Providers/TV/MovieDbEpisodeImageProvider.cs
+++ b/MediaBrowser.Providers/TV/MovieDbEpisodeImageProvider.cs
@@ -219,7 +219,7 @@ namespace MediaBrowser.Providers.TV
url += string.Format("&language={0}", language);
}
- var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
+ var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(language);
// Get images in english and with no language
url += "&include_image_language=" + includeImageLanguageParam;
diff --git a/MediaBrowser.Providers/TV/MovieDbSeasonProvider.cs b/MediaBrowser.Providers/TV/MovieDbSeasonProvider.cs
index 80f4c9485e..44c36af8fc 100644
--- a/MediaBrowser.Providers/TV/MovieDbSeasonProvider.cs
+++ b/MediaBrowser.Providers/TV/MovieDbSeasonProvider.cs
@@ -203,7 +203,7 @@ namespace MediaBrowser.Providers.TV
url += string.Format("&language={0}", language);
}
- var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
+ var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(language);
// Get images in english and with no language
url += "&include_image_language=" + includeImageLanguageParam;
diff --git a/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs b/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs
index 0fcbab1691..28fee246b7 100644
--- a/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs
@@ -62,7 +62,7 @@ namespace MediaBrowser.Providers.TV
cancellationToken.ThrowIfCancellationRequested();
await EnsureSeriesInfo(tmdbId, searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false);
-
+
var dataFilePath = GetDataFilePath(tmdbId, searchInfo.MetadataLanguage);
var obj = _jsonSerializer.DeserializeFromFile(dataFilePath);
@@ -84,7 +84,7 @@ namespace MediaBrowser.Providers.TV
{
remoteResult.SetProviderId(MetadataProviders.Tvdb, obj.external_ids.tvdb_id.ToString(_usCulture));
}
-
+
return new[] { remoteResult };
}
@@ -233,7 +233,7 @@ namespace MediaBrowser.Providers.TV
}
series.HomePageUrl = seriesInfo.homepage;
-
+
series.RunTimeTicks = seriesInfo.episode_run_time.Select(i => TimeSpan.FromMinutes(i).Ticks).FirstOrDefault();
if (string.Equals(seriesInfo.status, "Ended", StringComparison.OrdinalIgnoreCase))
@@ -302,12 +302,14 @@ namespace MediaBrowser.Providers.TV
url += string.Format("&language={0}", language);
}
- var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
+ var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(language);
// Get images in english and with no language
url += "&include_image_language=" + includeImageLanguageParam;
cancellationToken.ThrowIfCancellationRequested();
+ RootObject mainResult;
+
using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
@@ -316,8 +318,36 @@ namespace MediaBrowser.Providers.TV
}).ConfigureAwait(false))
{
- return _jsonSerializer.DeserializeFromStream(json);
+ mainResult = _jsonSerializer.DeserializeFromStream(json);
}
+
+ cancellationToken.ThrowIfCancellationRequested();
+
+ // If the language preference isn't english, then have the overview fallback to english if it's blank
+ if (mainResult != null &&
+ string.IsNullOrEmpty(mainResult.overview) &&
+ !string.IsNullOrEmpty(language) &&
+ !string.Equals(language, "en", StringComparison.OrdinalIgnoreCase))
+ {
+ _logger.Info("MovieDbSeriesProvider couldn't find meta for language " + language + ". Trying English...");
+
+ url = string.Format(GetTvInfo3, id, MovieDbProvider.ApiKey) + "&include_image_language=" + includeImageLanguageParam + "&language=en";
+
+ using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ {
+ Url = url,
+ CancellationToken = cancellationToken,
+ AcceptHeader = MovieDbProvider.AcceptHeader
+
+ }).ConfigureAwait(false))
+ {
+ var englishResult = _jsonSerializer.DeserializeFromStream(json);
+
+ mainResult.overview = englishResult.overview;
+ }
+ }
+
+ return mainResult;
}
private readonly Task _cachedTask = Task.FromResult(true);
diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/MediaBrowser.Server.Implementations/Library/UserManager.cs
index 09f060a46a..37f7e31fa6 100644
--- a/MediaBrowser.Server.Implementations/Library/UserManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/UserManager.cs
@@ -412,6 +412,8 @@ namespace MediaBrowser.Server.Implementations.Library
// Hash the pin with the device Id to create a unique result for this device
dto.OfflinePassword = GetSha1String(offlinePasswordHash + deviceId);
+ dto.ServerName = _appHost.FriendlyName;
+
return dto;
}