resolve moviedb issues

pull/702/head
Luke Pulverenti 10 years ago
parent 28d4c54de8
commit 4999f19485

@ -1718,7 +1718,7 @@ namespace MediaBrowser.Api.Playback
string mediaSourceId, string mediaSourceId,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var channelMediaSources = await ChannelManager.GetChannelItemMediaSources(id, cancellationToken) var channelMediaSources = await ChannelManager.GetChannelItemMediaSources(id, true, cancellationToken)
.ConfigureAwait(false); .ConfigureAwait(false);
var list = channelMediaSources.ToList(); var list = channelMediaSources.ToList();

@ -344,7 +344,7 @@ namespace MediaBrowser.Api
// This must be the last filter // This must be the last filter
if (!string.IsNullOrEmpty(request.AdjacentTo)) if (!string.IsNullOrEmpty(request.AdjacentTo))
{ {
seasons = ItemsService.FilterForAdjacency(seasons, request.AdjacentTo) seasons = UserViewBuilder.FilterForAdjacency(seasons, request.AdjacentTo)
.Cast<Season>(); .Cast<Season>();
} }
@ -434,7 +434,7 @@ namespace MediaBrowser.Api
// This must be the last filter // This must be the last filter
if (!string.IsNullOrEmpty(request.AdjacentTo)) if (!string.IsNullOrEmpty(request.AdjacentTo))
{ {
episodes = ItemsService.FilterForAdjacency(episodes, request.AdjacentTo) episodes = UserViewBuilder.FilterForAdjacency(episodes, request.AdjacentTo)
.Cast<Episode>(); .Cast<Episode>();
} }

@ -188,7 +188,7 @@ namespace MediaBrowser.Api.UserLibrary
var imageTypes = request.GetImageTypes().ToList(); var imageTypes = request.GetImageTypes().ToList();
if (imageTypes.Count > 0) if (imageTypes.Count > 0)
{ {
items = items.Where(item => imageTypes.Any(imageType => ItemsService.HasImage(item, imageType))); items = items.Where(item => imageTypes.Any(item.HasImage));
} }
var filters = request.GetFilters().ToList(); var filters = request.GetFilters().ToList();

File diff suppressed because it is too large Load Diff

@ -1,9 +1,11 @@
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Channels; using MediaBrowser.Model.Channels;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading;
namespace MediaBrowser.Controller.Channels namespace MediaBrowser.Controller.Channels
{ {
@ -69,5 +71,22 @@ namespace MediaBrowser.Controller.Channels
{ {
return System.IO.Path.Combine(basePath, "channels", ChannelId, Id.ToString("N")); return System.IO.Path.Combine(basePath, "channels", ChannelId, Id.ToString("N"));
} }
public override IEnumerable<MediaSourceInfo> GetMediaSources(bool enablePathSubstitution)
{
var list = base.GetMediaSources(enablePathSubstitution).ToList();
var sources = ChannelManager.GetChannelItemMediaSources(Id.ToString("N"), false, CancellationToken.None)
.Result.ToList();
if (sources.Count > 0)
{
return sources;
}
list.InsertRange(0, sources);
return list;
}
} }
} }

@ -7,6 +7,7 @@ using MediaBrowser.Model.Entities;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading;
namespace MediaBrowser.Controller.Channels namespace MediaBrowser.Controller.Channels
{ {
@ -90,7 +91,15 @@ namespace MediaBrowser.Controller.Channels
{ {
var list = base.GetMediaSources(enablePathSubstitution).ToList(); var list = base.GetMediaSources(enablePathSubstitution).ToList();
list.InsertRange(0, ChannelManager.GetCachedChannelItemMediaSources(Id.ToString("N"))); var sources = ChannelManager.GetChannelItemMediaSources(Id.ToString("N"), false, CancellationToken.None)
.Result.ToList();
if (sources.Count > 0)
{
return sources;
}
list.InsertRange(0, sources);
return list; return list;
} }

@ -109,20 +109,14 @@ namespace MediaBrowser.Controller.Channels
/// <returns>Task&lt;QueryResult&lt;BaseItem&gt;&gt;.</returns> /// <returns>Task&lt;QueryResult&lt;BaseItem&gt;&gt;.</returns>
Task<QueryResult<BaseItem>> GetChannelItemsInternal(ChannelItemQuery query, IProgress<double> progress, CancellationToken cancellationToken); Task<QueryResult<BaseItem>> GetChannelItemsInternal(ChannelItemQuery query, IProgress<double> progress, CancellationToken cancellationToken);
/// <summary>
/// Gets the cached channel item media sources.
/// </summary>
/// <param name="id">The identifier.</param>
/// <returns>IEnumerable{MediaSourceInfo}.</returns>
IEnumerable<MediaSourceInfo> GetCachedChannelItemMediaSources(string id);
/// <summary> /// <summary>
/// Gets the channel item media sources. /// Gets the channel item media sources.
/// </summary> /// </summary>
/// <param name="id">The identifier.</param> /// <param name="id">The identifier.</param>
/// <param name="includeDynamicSources">if set to <c>true</c> [include dynamic sources].</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{IEnumerable{MediaSourceInfo}}.</returns> /// <returns>Task{IEnumerable{MediaSourceInfo}}.</returns>
Task<IEnumerable<MediaSourceInfo>> GetChannelItemMediaSources(string id, CancellationToken cancellationToken); Task<IEnumerable<MediaSourceInfo>> GetChannelItemMediaSources(string id, bool includeDynamicSources, CancellationToken cancellationToken);
/// <summary> /// <summary>
/// Gets the channel folder. /// Gets the channel folder.

@ -1,6 +1,7 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Collections;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.LiveTv;
@ -251,6 +252,7 @@ namespace MediaBrowser.Controller.Entities
public static IUserDataManager UserDataManager { get; set; } public static IUserDataManager UserDataManager { get; set; }
public static ILiveTvManager LiveTvManager { get; set; } public static ILiveTvManager LiveTvManager { get; set; }
public static IChannelManager ChannelManager { get; set; } public static IChannelManager ChannelManager { get; set; }
public static ICollectionManager CollectionManager { get; set; }
/// <summary> /// <summary>
/// Returns a <see cref="System.String" /> that represents this instance. /// Returns a <see cref="System.String" /> that represents this instance.

@ -785,7 +785,7 @@ namespace MediaBrowser.Controller.Entities
protected QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items, InternalItemsQuery query) protected QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items, InternalItemsQuery query)
{ {
return UserViewBuilder.SortAndFilter(items, null, query, LibraryManager, UserDataManager); return UserViewBuilder.SortAndFilter(items, this, null, query, LibraryManager, UserDataManager);
} }
/// <summary> /// <summary>

@ -29,6 +29,46 @@ namespace MediaBrowser.Controller.Entities
public string[] MediaTypes { get; set; } public string[] MediaTypes { get; set; }
public string[] IncludeItemTypes { get; set; } public string[] IncludeItemTypes { get; set; }
public string[] ExcludeItemTypes { get; set; } public string[] ExcludeItemTypes { get; set; }
public string[] Genres { get; set; }
public string[] AllGenres { get; set; }
public bool? IsMissing { get; set; }
public bool? IsUnaired { get; set; }
public bool? IsVirtualUnaired { get; set; }
public bool? CollapseBoxSetItems { get; set; }
public string NameStartsWithOrGreater { get; set; }
public string NameStartsWith { get; set; }
public string NameLessThan { get; set; }
public string Person { get; set; }
public string AdjacentTo { get; set; }
public string[] PersonTypes { get; set; }
public bool? Is3D { get; set; }
public bool? IsHD { get; set; }
public bool? IsInBoxSet { get; set; }
public bool? IsLocked { get; set; }
public bool? IsUnidentified { get; set; }
public bool? IsPlaceHolder { get; set; }
public bool? IsYearMismatched { get; set; }
public bool? HasImdbId { get; set; }
public bool? HasOverview { get; set; }
public bool? HasTmdbId { get; set; }
public bool? HasOfficialRating { get; set; }
public bool? HasTvdbId { get; set; }
public bool? HasThemeSong { get; set; }
public bool? HasThemeVideo { get; set; }
public bool? HasSubtitles { get; set; }
public bool? HasSpecialFeature { get; set; }
public bool? HasTrailer { get; set; }
public bool? HasParentalRating { get; set; }
public string[] Studios { get; set; }
public ImageType[] ImageTypes { get; set; }
public VideoType[] VideoTypes { get; set; }
public int[] Years { get; set; }
public InternalItemsQuery() public InternalItemsQuery()
{ {
@ -36,6 +76,13 @@ namespace MediaBrowser.Controller.Entities
MediaTypes = new string[] { }; MediaTypes = new string[] { };
IncludeItemTypes = new string[] { }; IncludeItemTypes = new string[] { };
ExcludeItemTypes = new string[] { }; ExcludeItemTypes = new string[] { };
AllGenres = new string[] { };
Genres = new string[] { };
Studios = new string[] { };
ImageTypes = new ImageType[] { };
VideoTypes = new VideoType[] { };
Years = new int[] { };
PersonTypes = new string[] { };
} }
} }
} }

@ -17,7 +17,7 @@ namespace MediaBrowser.Controller.Entities
public override Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) public override Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
{ {
return new UserViewBuilder(UserViewManager, LiveTvManager, ChannelManager, LibraryManager, Logger, UserDataManager, TVSeriesManager) return new UserViewBuilder(UserViewManager, LiveTvManager, ChannelManager, LibraryManager, Logger, UserDataManager, TVSeriesManager, CollectionManager)
.GetUserItems(this, ViewType, query); .GetUserItems(this, ViewType, query);
} }

File diff suppressed because it is too large Load Diff

@ -91,6 +91,13 @@ namespace MediaBrowser.Model.Dlna
throw new ArgumentNullException(baseUrl); throw new ArgumentNullException(baseUrl);
} }
if (IsDirectStream && MediaSource != null && MediaSource.Protocol == MediaProtocol.Http)
{
if (MediaSource.RequiredHttpHeaders.Count == 0)
{
}
}
string dlnaCommand = BuildDlnaParam(this); string dlnaCommand = BuildDlnaParam(this);
string extension = string.IsNullOrEmpty(Container) ? string.Empty : "." + Container; string extension = string.IsNullOrEmpty(Container) ? string.Empty : "." + Container;

@ -273,13 +273,17 @@ namespace MediaBrowser.Providers.Movies
languages.Add("en"); languages.Add("en");
} }
var firstLetter = string.IsNullOrWhiteSpace(preferredLanguage)
? string.Empty
: preferredLanguage.Substring(0, 1);
var allLanguages = localization.GetCultures() var allLanguages = localization.GetCultures()
.Select(i => i.TwoLetterISOLanguageName) .Select(i => i.TwoLetterISOLanguageName)
.Distinct(StringComparer.OrdinalIgnoreCase) .Distinct(StringComparer.OrdinalIgnoreCase)
.Where(i => !languages.Contains(i, StringComparer.OrdinalIgnoreCase)) .Where(i => !languages.Contains(i, StringComparer.OrdinalIgnoreCase) && i.StartsWith(firstLetter, StringComparison.OrdinalIgnoreCase))
.ToList(); .ToList();
languages.AddRange(allLanguages); //languages.AddRange(allLanguages);
return string.Join(",", languages.ToArray()); return string.Join(",", languages.ToArray());
} }

@ -212,12 +212,10 @@ namespace MediaBrowser.Server.Implementations.Channels
} }
var itemId = item.Id.ToString("N"); var itemId = item.Id.ToString("N");
var sources = await _manager.GetChannelItemMediaSources(itemId, cancellationToken) var sources = await _manager.GetChannelItemMediaSources(itemId, false, cancellationToken)
.ConfigureAwait(false); .ConfigureAwait(false);
var list = sources.ToList(); var cachedVersions = sources.Where(i => i.Protocol == MediaProtocol.File).ToList();
var cachedVersions = list.Where(i => i.Protocol == MediaProtocol.File).ToList();
if (cachedVersions.Count > 0) if (cachedVersions.Count > 0)
{ {
@ -225,13 +223,6 @@ namespace MediaBrowser.Server.Implementations.Channels
return; return;
} }
var source = list.FirstOrDefault(i => i.Protocol == MediaProtocol.Http);
if (source == null)
{
return;
}
var channelItem = (IChannelMediaItem)item; var channelItem = (IChannelMediaItem)item;
var destination = Path.Combine(path, channelItem.ChannelId, itemId); var destination = Path.Combine(path, channelItem.ChannelId, itemId);

@ -244,7 +244,7 @@ namespace MediaBrowser.Server.Implementations.Channels
return item; return item;
} }
public async Task<IEnumerable<MediaSourceInfo>> GetChannelItemMediaSources(string id, CancellationToken cancellationToken) public async Task<IEnumerable<MediaSourceInfo>> GetChannelItemMediaSources(string id, bool includeDynamicSources, CancellationToken cancellationToken)
{ {
var item = (IChannelMediaItem)_libraryManager.GetItemById(id); var item = (IChannelMediaItem)_libraryManager.GetItemById(id);
@ -255,7 +255,7 @@ namespace MediaBrowser.Server.Implementations.Channels
IEnumerable<ChannelMediaInfo> results; IEnumerable<ChannelMediaInfo> results;
if (requiresCallback != null) if (requiresCallback != null && includeDynamicSources)
{ {
results = await GetChannelItemMediaSourcesInternal(requiresCallback, item.ExternalId, cancellationToken) results = await GetChannelItemMediaSourcesInternal(requiresCallback, item.ExternalId, cancellationToken)
.ConfigureAwait(false); .ConfigureAwait(false);
@ -374,6 +374,18 @@ namespace MediaBrowser.Server.Implementations.Channels
Id = id Id = id
}; };
var bitrate = (info.AudioBitrate ?? 0) + (info.VideoBitrate ?? 0);
if (bitrate > 0)
{
source.Bitrate = bitrate;
}
if (item is ChannelVideoItem && info.Protocol != MediaProtocol.Rtmp)
{
}
return source; return source;
} }
@ -1447,7 +1459,7 @@ namespace MediaBrowser.Server.Implementations.Channels
IProgress<double> progress, CancellationToken cancellationToken) IProgress<double> progress, CancellationToken cancellationToken)
{ {
var itemId = item.Id.ToString("N"); var itemId = item.Id.ToString("N");
var sources = await GetChannelItemMediaSources(itemId, cancellationToken) var sources = await GetChannelItemMediaSources(itemId, true, cancellationToken)
.ConfigureAwait(false); .ConfigureAwait(false);
var list = sources.Where(i => i.Protocol == MediaProtocol.Http).ToList(); var list = sources.Where(i => i.Protocol == MediaProtocol.Http).ToList();

@ -519,7 +519,7 @@
"MediaInfoLongitude": "L\u00e4nge", "MediaInfoLongitude": "L\u00e4nge",
"MediaInfoShutterSpeed": "Verschlusszeit", "MediaInfoShutterSpeed": "Verschlusszeit",
"MediaInfoSoftware": "Software", "MediaInfoSoftware": "Software",
"HeaderIfYouLikeCheckTheseOut": "Wenn du {0} magst, schau dir einmal diese an...", "HeaderIfYouLikeCheckTheseOut": "Wenn du {0} magst, schau dir einmal das an...",
"HeaderPlotKeywords": "Handlungsstichworte", "HeaderPlotKeywords": "Handlungsstichworte",
"HeaderMovies": "Filme", "HeaderMovies": "Filme",
"HeaderAlbums": "Alben", "HeaderAlbums": "Alben",

@ -469,7 +469,7 @@
"LabelResumePoint": "Point de reprise", "LabelResumePoint": "Point de reprise",
"ValueOneMovie": "1 Film", "ValueOneMovie": "1 Film",
"ValueMovieCount": "{0} films", "ValueMovieCount": "{0} films",
"ValueOneTrailer": "1 Bande Annonce", "ValueOneTrailer": "1 bande-annonce",
"ValueTrailerCount": "{0} bandes-annonces", "ValueTrailerCount": "{0} bandes-annonces",
"ValueOneSeries": "1 S\u00e9rie", "ValueOneSeries": "1 S\u00e9rie",
"ValueSeriesCount": "{0} series", "ValueSeriesCount": "{0} series",

@ -1020,7 +1020,7 @@
"LabelChannelDownloadPathHelp": "Sp\u00e9cifiez un chemin de t\u00e9l\u00e9chargements personnalis\u00e9 si besoin. Laissez vide pour t\u00e9l\u00e9charger dans un r\u00e9pertoire interne du programme.", "LabelChannelDownloadPathHelp": "Sp\u00e9cifiez un chemin de t\u00e9l\u00e9chargements personnalis\u00e9 si besoin. Laissez vide pour t\u00e9l\u00e9charger dans un r\u00e9pertoire interne du programme.",
"LabelChannelDownloadAge": "Supprimer le contenu apr\u00e8s : (jours)", "LabelChannelDownloadAge": "Supprimer le contenu apr\u00e8s : (jours)",
"LabelChannelDownloadAgeHelp": "Le contenu t\u00e9l\u00e9charg\u00e9 plus vieux sera supprim\u00e9. Par contre, il sera toujours disponible par flux Internet (en ligne).", "LabelChannelDownloadAgeHelp": "Le contenu t\u00e9l\u00e9charg\u00e9 plus vieux sera supprim\u00e9. Par contre, il sera toujours disponible par flux Internet (en ligne).",
"ChannelSettingsFormHelp": "Installer des cha\u00eenes comme \"Trailers\" and \"Vimeo\" par le catalogue de Plugins.", "ChannelSettingsFormHelp": "Installer des cha\u00eenes comme \"Trailers\" et \"Vimeo\" dans le catalogue des plugins.",
"LabelSelectCollection": "S\u00e9lectionner la collection :", "LabelSelectCollection": "S\u00e9lectionner la collection :",
"ButtonOptions": "Options", "ButtonOptions": "Options",
"ViewTypeMovies": "Films", "ViewTypeMovies": "Films",

@ -845,43 +845,43 @@
"OptionSpecialFeatures": "Specijalne opcije", "OptionSpecialFeatures": "Specijalne opcije",
"HeaderCollections": "Kolekcije", "HeaderCollections": "Kolekcije",
"LabelProfileCodecsHelp": "Odvojeno sa to\u010dka-zrezom. Ovo mo\u017ee ostaviti prazno kao bi bilo postavljeno za sve codecs.", "LabelProfileCodecsHelp": "Odvojeno sa to\u010dka-zrezom. Ovo mo\u017ee ostaviti prazno kao bi bilo postavljeno za sve codecs.",
"LabelProfileContainersHelp": "Separated by comma. This can be left empty to apply to all containers.", "LabelProfileContainersHelp": "Odvojeno sa to\u010dka-zrezom. Ovo mo\u017ee ostaviti prazno kao bi bilo postavljeno za sve spremnike.",
"HeaderResponseProfile": "Response Profile", "HeaderResponseProfile": "Profil odziva",
"LabelType": "Type:", "LabelType": "Tip:",
"LabelPersonRole": "Role:", "LabelPersonRole": "Role:",
"LabelPersonRoleHelp": "Role is generally only applicable to actors.", "LabelPersonRoleHelp": "Role is generally only applicable to actors.",
"LabelProfileContainer": "Container:", "LabelProfileContainer": "Spremnik:",
"LabelProfileVideoCodecs": "Video codecs:", "LabelProfileVideoCodecs": "Video kodek:",
"LabelProfileAudioCodecs": "Audio codecs:", "LabelProfileAudioCodecs": "Audio kodek:",
"LabelProfileCodecs": "Codecs:", "LabelProfileCodecs": "Kodeki:",
"HeaderDirectPlayProfile": "Direct Play Profile", "HeaderDirectPlayProfile": "Profil za direktnu reprodukciju",
"HeaderTranscodingProfile": "Transcoding Profile", "HeaderTranscodingProfile": "Profil transkodiranja",
"HeaderCodecProfile": "Codec Profile", "HeaderCodecProfile": "Profil kodeka",
"HeaderCodecProfileHelp": "Codec profiles indicate the limitations of a device when playing specific codecs. If a limitation applies then the media will be transcoded, even if the codec is configured for direct play.", "HeaderCodecProfileHelp": "Profili kodeka definiraju ograni\u010denja kada ure\u0111aji izvode sadr\u017eaj u specifi\u010dnom kodeku. Ako se ograni\u010denja podudaraju tada \u0107e sadr\u017eaj biti transkodiran, iako je kodek konfiguriran za direktno izvo\u0111enje.",
"HeaderContainerProfile": "Container Profile", "HeaderContainerProfile": "Profil spremnika",
"HeaderContainerProfileHelp": "Container profiles indicate the limitations of a device when playing specific formats. If a limitation applies then the media will be transcoded, even if the format is configured for direct play.", "HeaderContainerProfileHelp": "Profil spremnika definira ograni\u010denja za ure\u0111aje kada izvode specifi\u010dne formate. Ako se ograni\u010denja podudaraju tada \u0107e sadr\u017eaj biti transkodiran, iako je format konfiguriran za direktno izvo\u0111enje.",
"OptionProfileVideo": "Video", "OptionProfileVideo": "Video",
"OptionProfileAudio": "Audio", "OptionProfileAudio": "Audio",
"OptionProfileVideoAudio": "Video Audio", "OptionProfileVideoAudio": "Video Audio",
"OptionProfilePhoto": "Photo", "OptionProfilePhoto": "Slika",
"LabelUserLibrary": "User library:", "LabelUserLibrary": "Korisni\u010dka biblioteka:",
"LabelUserLibraryHelp": "Select which user library to display to the device. Leave empty to inherit the default setting.", "LabelUserLibraryHelp": "Odaberite koju korisni\u010dku biblioteku \u0107e te prikazati ure\u0111aju. Ostavite prazno ako \u017eelite preuzeti definirane postavke.",
"OptionPlainStorageFolders": "Display all folders as plain storage folders", "OptionPlainStorageFolders": "Prika\u017ei sve mape kako jednostavne mape za skladi\u0161tenje",
"OptionPlainStorageFoldersHelp": "If enabled, all folders are represented in DIDL as \"object.container.storageFolder\" instead of a more specific type, such as \"object.container.person.musicArtist\".", "OptionPlainStorageFoldersHelp": "Ako je omogu\u0107eno, sve mape se prezentiraju u DIDL-u kao \"objekt.spremnik.skladi\u0161naMapa\" umjesto vi\u0161e specijaliziranog tipa kao \"objekt.spremnik.osoba.glazbaIzvo\u0111a\u010d\".",
"OptionPlainVideoItems": "Display all videos as plain video items", "OptionPlainVideoItems": "Prika\u017ei sav video kao jednostavne video stavke.",
"OptionPlainVideoItemsHelp": "If enabled, all videos are represented in DIDL as \"object.item.videoItem\" instead of a more specific type, such as \"object.item.videoItem.movie\".", "OptionPlainVideoItemsHelp": "Ako je omogu\u0107eno, sav video se prezentira u DIDL-u kao \"objekt.stavka.videoStavka\" umjesto vi\u0161e specijaliziranog tipa kao \"objekt.stavka.videoStavka.film\".",
"LabelSupportedMediaTypes": "Supported Media Types:", "LabelSupportedMediaTypes": "Podr\u017eani tipovi medija:",
"TabIdentification": "Identification", "TabIdentification": "Identifikacija",
"HeaderIdentification": "Identification", "HeaderIdentification": "Identification",
"TabDirectPlay": "Direct Play", "TabDirectPlay": "Direktna reprodukcija",
"TabContainers": "Containers", "TabContainers": "Spremnik",
"TabCodecs": "Codecs", "TabCodecs": "Kodek",
"TabResponses": "Responses", "TabResponses": "Odazivi",
"HeaderProfileInformation": "Profile Information", "HeaderProfileInformation": "Informacija profila",
"LabelEmbedAlbumArtDidl": "Embed album art in Didl", "LabelEmbedAlbumArtDidl": "Ugradi grafike albuma u Didl",
"LabelEmbedAlbumArtDidlHelp": "Some devices prefer this method for obtaining album art. Others may fail to play with this option enabled.", "LabelEmbedAlbumArtDidlHelp": "Neki ure\u0111aji podr\u017eavaju ovu metodu za prikaz grafike albuma. Drugi bi mogli imati problema sa ovom opcijom uklju\u010denom.",
"LabelAlbumArtPN": "Album art PN:", "LabelAlbumArtPN": "Grafika albuma PN:",
"LabelAlbumArtHelp": "PN used for album art, within the dlna:profileID attribute on upnp:albumArtURI. Some clients require a specific value, regardless of the size of the image.", "LabelAlbumArtHelp": "PN se koristi za grafiku albuma sa dlna:profilID atributom na upnp:albumGrafikaURI. Neki klijenti zahtijevaju specifi\u010dnu vrijednost bez obzira na veli\u010dinu slike.",
"LabelAlbumArtMaxWidth": "Album art max width:", "LabelAlbumArtMaxWidth": "Album art max width:",
"LabelAlbumArtMaxWidthHelp": "Max resolution of album art exposed via upnp:albumArtURI.", "LabelAlbumArtMaxWidthHelp": "Max resolution of album art exposed via upnp:albumArtURI.",
"LabelAlbumArtMaxHeight": "Album art max height:", "LabelAlbumArtMaxHeight": "Album art max height:",

@ -218,6 +218,7 @@ namespace MediaBrowser.ServerApplication
private IAuthenticationRepository AuthenticationRepository { get; set; } private IAuthenticationRepository AuthenticationRepository { get; set; }
private ISyncRepository SyncRepository { get; set; } private ISyncRepository SyncRepository { get; set; }
private ITVSeriesManager TVSeriesManager { get; set; } private ITVSeriesManager TVSeriesManager { get; set; }
private ICollectionManager CollectionManager { get; set; }
private readonly StartupOptions _startupOptions; private readonly StartupOptions _startupOptions;
private readonly string _remotePackageName; private readonly string _remotePackageName;
@ -494,8 +495,8 @@ namespace MediaBrowser.ServerApplication
var connectionManager = new ConnectionManager(dlnaManager, ServerConfigurationManager, LogManager.GetLogger("UpnpConnectionManager"), HttpClient); var connectionManager = new ConnectionManager(dlnaManager, ServerConfigurationManager, LogManager.GetLogger("UpnpConnectionManager"), HttpClient);
RegisterSingleInstance<IConnectionManager>(connectionManager); RegisterSingleInstance<IConnectionManager>(connectionManager);
var collectionManager = new CollectionManager(LibraryManager, FileSystemManager, LibraryMonitor, LogManager.GetLogger("CollectionManager")); CollectionManager = new CollectionManager(LibraryManager, FileSystemManager, LibraryMonitor, LogManager.GetLogger("CollectionManager"));
RegisterSingleInstance<ICollectionManager>(collectionManager); RegisterSingleInstance(CollectionManager);
var playlistManager = new PlaylistManager(LibraryManager, FileSystemManager, LibraryMonitor, LogManager.GetLogger("PlaylistManager"), UserManager); var playlistManager = new PlaylistManager(LibraryManager, FileSystemManager, LibraryMonitor, LogManager.GetLogger("PlaylistManager"), UserManager);
RegisterSingleInstance<IPlaylistManager>(playlistManager); RegisterSingleInstance<IPlaylistManager>(playlistManager);
@ -700,6 +701,7 @@ namespace MediaBrowser.ServerApplication
BaseItem.LiveTvManager = LiveTvManager; BaseItem.LiveTvManager = LiveTvManager;
Folder.UserViewManager = UserViewManager; Folder.UserViewManager = UserViewManager;
UserView.TVSeriesManager = TVSeriesManager; UserView.TVSeriesManager = TVSeriesManager;
BaseItem.CollectionManager = CollectionManager;
} }
/// <summary> /// <summary>

Loading…
Cancel
Save