added HasSyncJob

This commit is contained in:
Luke Pulverenti
2015-01-24 14:03:55 -05:00
parent 1af651bc56
commit ee00f8bf72
51 changed files with 420 additions and 166 deletions

View File

@@ -180,7 +180,7 @@ namespace MediaBrowser.Server.Implementations.Channels
var dtoOptions = new DtoOptions();
var returnItems = internalResult.Items.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user))
var returnItems = _dtoService.GetBaseItemDtos(internalResult.Items, dtoOptions, user)
.ToArray();
var result = new QueryResult<BaseItemDto>
@@ -556,7 +556,7 @@ namespace MediaBrowser.Server.Implementations.Channels
var dtoOptions = new DtoOptions();
var returnItems = items.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user))
var returnItems = _dtoService.GetBaseItemDtos(items, dtoOptions, user)
.ToArray();
var result = new QueryResult<BaseItemDto>
@@ -823,7 +823,7 @@ namespace MediaBrowser.Server.Implementations.Channels
var dtoOptions = new DtoOptions();
var returnItems = internalResult.Items.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user))
var returnItems = _dtoService.GetBaseItemDtos(internalResult.Items, dtoOptions, user)
.ToArray();
var result = new QueryResult<BaseItemDto>
@@ -972,7 +972,7 @@ namespace MediaBrowser.Server.Implementations.Channels
var dtoOptions = new DtoOptions();
var returnItems = internalResult.Items.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user))
var returnItems = _dtoService.GetBaseItemDtos(internalResult.Items, dtoOptions, user)
.ToArray();
var result = new QueryResult<BaseItemDto>

View File

@@ -6,7 +6,6 @@ using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using MoreLinq;
using System;
using System.Collections.Generic;
using System.IO;
@@ -41,6 +40,14 @@ namespace MediaBrowser.Server.Implementations.Collections
.FirstOrDefault();
}
public IEnumerable<BoxSet> GetCollections(User user)
{
var folder = GetCollectionsFolder(user.Id.ToString("N"));
return folder == null ?
new List<BoxSet>() :
folder.GetChildren(user, true).OfType<BoxSet>();
}
public async Task<BoxSet> CreateCollection(CollectionCreationOptions options)
{
var name = options.Name;
@@ -269,7 +276,8 @@ namespace MediaBrowser.Server.Implementations.Collections
public IEnumerable<BaseItem> CollapseItemsWithinBoxSets(IEnumerable<BaseItem> items, User user)
{
var results = new Dictionary<Guid, BaseItem>();
var allBoxsets = new List<BoxSet>();
var allBoxsets = GetCollections(user).ToList();
foreach (var item in items)
{

View File

@@ -153,7 +153,7 @@ namespace MediaBrowser.Server.Implementations.Connect
try
{
var localAddress = _appHost.GetSystemInfo().LocalAddress;
var localAddress = _appHost.LocalApiUrl;
var hasExistingRecord = !string.IsNullOrWhiteSpace(ConnectServerId) &&
!string.IsNullOrWhiteSpace(ConnectAccessKey);
@@ -195,7 +195,7 @@ namespace MediaBrowser.Server.Implementations.Connect
private string _lastReportedIdentifier;
private string GetConnectReportingIdentifier()
{
return GetConnectReportingIdentifier(_appHost.GetSystemInfo().LocalAddress, WanApiAddress);
return GetConnectReportingIdentifier(_appHost.LocalApiUrl, WanApiAddress);
}
private string GetConnectReportingIdentifier(string localAddress, string remoteAddress)
{

View File

@@ -2,6 +2,7 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
@@ -19,6 +20,7 @@ using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Sync;
using MoreLinq;
using System;
using System.Collections.Generic;
@@ -42,8 +44,9 @@ namespace MediaBrowser.Server.Implementations.Dto
private readonly Func<IChannelManager> _channelManagerFactory;
private readonly ISyncManager _syncManager;
private readonly IApplicationHost _appHost;
private readonly Func<IDeviceManager> _deviceManager;
public DtoService(ILogger logger, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IImageProcessor imageProcessor, IServerConfigurationManager config, IFileSystem fileSystem, IProviderManager providerManager, Func<IChannelManager> channelManagerFactory, ISyncManager syncManager, IApplicationHost appHost)
public DtoService(ILogger logger, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IImageProcessor imageProcessor, IServerConfigurationManager config, IFileSystem fileSystem, IProviderManager providerManager, Func<IChannelManager> channelManagerFactory, ISyncManager syncManager, IApplicationHost appHost, Func<IDeviceManager> deviceManager)
{
_logger = logger;
_libraryManager = libraryManager;
@@ -56,6 +59,7 @@ namespace MediaBrowser.Server.Implementations.Dto
_channelManagerFactory = channelManagerFactory;
_syncManager = syncManager;
_appHost = appHost;
_deviceManager = deviceManager;
}
/// <summary>
@@ -73,10 +77,39 @@ namespace MediaBrowser.Server.Implementations.Dto
{
Fields = fields
};
return GetBaseItemDto(item, options, user, owner);
}
public IEnumerable<BaseItemDto> GetBaseItemDtos(IEnumerable<BaseItem> items, DtoOptions options, User user = null, BaseItem owner = null)
{
var itemIdsWithSyncJobs = GetItemIdsWithSyncJobs(options).ToList();
var list = new List<BaseItemDto>();
foreach (var item in items)
{
var dto = GetBaseItemDtoInternal(item, options, user, owner);
var byName = item as IItemByName;
if (byName != null && !(item is LiveTvChannel))
{
var libraryItems = user != null ?
user.RootFolder.GetRecursiveChildren(user) :
_libraryManager.RootFolder.RecursiveChildren;
SetItemByNameInfo(item, dto, byName.GetTaggedItems(libraryItems).ToList(), user);
}
FillSyncInfo(dto, item, itemIdsWithSyncJobs, options);
list.Add(dto);
}
return list;
}
public BaseItemDto GetBaseItemDto(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null)
{
var dto = GetBaseItemDtoInternal(item, options, user, owner);
@@ -94,9 +127,64 @@ namespace MediaBrowser.Server.Implementations.Dto
return dto;
}
FillSyncInfo(dto, item, options);
return dto;
}
private IEnumerable<string> GetItemIdsWithSyncJobs(DtoOptions options)
{
if (!options.Fields.Contains(ItemFields.SyncInfo))
{
return new List<string>();
}
var deviceId = options.DeviceId;
if (string.IsNullOrWhiteSpace(deviceId))
{
return new List<string>();
}
var caps = _deviceManager().GetCapabilities(deviceId);
if (caps == null || !caps.SupportsSync)
{
return new List<string>();
}
var result = _syncManager.GetLibraryItemIds(new SyncJobItemQuery
{
TargetId = deviceId
});
return result.Items;
}
private void FillSyncInfo(BaseItemDto dto, BaseItem item, DtoOptions options)
{
if (options.Fields.Contains(ItemFields.SyncInfo))
{
dto.SupportsSync = _syncManager.SupportsSync(item);
}
if (dto.SupportsSync ?? false)
{
dto.HasSyncJob = GetItemIdsWithSyncJobs(options).Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
}
}
private void FillSyncInfo(BaseItemDto dto, BaseItem item, IEnumerable<string> itemIdsWithSyncJobs, DtoOptions options)
{
if (options.Fields.Contains(ItemFields.SyncInfo))
{
dto.SupportsSync = _syncManager.SupportsSync(item);
}
if (dto.SupportsSync ?? false)
{
dto.HasSyncJob = itemIdsWithSyncJobs.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
}
}
private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null)
{
var fields = options.Fields;
@@ -167,11 +255,6 @@ namespace MediaBrowser.Server.Implementations.Dto
AttachBasicFields(dto, item, owner, options);
if (fields.Contains(ItemFields.SyncInfo))
{
dto.SupportsSync = _syncManager.SupportsSync(item);
}
if (fields.Contains(ItemFields.SoundtrackIds))
{
var hasSoundtracks = item as IHasSoundtracks;
@@ -1029,7 +1112,7 @@ namespace MediaBrowser.Server.Implementations.Dto
//if (fields.Contains(ItemFields.MediaSourceCount))
//{
// Songs always have one
// Songs always have one
//}
}

View File

@@ -1575,7 +1575,7 @@ namespace MediaBrowser.Server.Implementations.Library
CancellationToken cancellationToken)
{
var path = Path.Combine(ConfigurationManager.ApplicationPaths.ItemsByNamePath,
"views");
"views");
path = Path.Combine(path, _fileSystem.GetValidFilename(type));

View File

@@ -696,8 +696,7 @@ namespace MediaBrowser.Server.Implementations.Library
var text = new StringBuilder();
var info = _appHost.GetSystemInfo();
var localAddress = info.LocalAddress ?? string.Empty;
var localAddress = _appHost.LocalApiUrl ?? string.Empty;
text.AppendLine("Use your web browser to visit:");
text.AppendLine(string.Empty);

View File

@@ -1,6 +1,6 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Collections;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library;
@@ -23,24 +23,24 @@ namespace MediaBrowser.Server.Implementations.Library
{
private readonly ILibraryManager _libraryManager;
private readonly ILocalizationManager _localizationManager;
private readonly IFileSystem _fileSystem;
private readonly IUserManager _userManager;
private readonly IChannelManager _channelManager;
private readonly ILiveTvManager _liveTvManager;
private readonly IServerApplicationPaths _appPaths;
private readonly IPlaylistManager _playlists;
private readonly ICollectionManager _collectionManager;
private readonly IServerConfigurationManager _config;
public UserViewManager(ILibraryManager libraryManager, ILocalizationManager localizationManager, IFileSystem fileSystem, IUserManager userManager, IChannelManager channelManager, ILiveTvManager liveTvManager, IServerApplicationPaths appPaths, IPlaylistManager playlists)
public UserViewManager(ILibraryManager libraryManager, ILocalizationManager localizationManager, IUserManager userManager, IChannelManager channelManager, ILiveTvManager liveTvManager, IPlaylistManager playlists, ICollectionManager collectionManager, IServerConfigurationManager config)
{
_libraryManager = libraryManager;
_localizationManager = localizationManager;
_fileSystem = fileSystem;
_userManager = userManager;
_channelManager = channelManager;
_liveTvManager = liveTvManager;
_appPaths = appPaths;
_playlists = playlists;
_collectionManager = collectionManager;
_config = config;
}
public async Task<IEnumerable<Folder>> GetUserViews(UserViewQuery query, CancellationToken cancellationToken)
@@ -88,12 +88,24 @@ namespace MediaBrowser.Server.Implementations.Library
list.Add(await GetUserView(CollectionType.Games, string.Empty, cancellationToken).ConfigureAwait(false));
}
if (user.Configuration.DisplayCollectionsView &&
folders
.Except(standaloneFolders)
.SelectMany(i => i.GetRecursiveChildren(user, false)).OfType<BoxSet>().Any())
if (user.Configuration.DisplayCollectionsView)
{
list.Add(await GetUserView(CollectionType.BoxSets, string.Empty, cancellationToken).ConfigureAwait(false));
bool showCollectionView;
if (_config.Configuration.EnableLegacyCollections)
{
showCollectionView = folders
.Except(standaloneFolders)
.SelectMany(i => i.GetRecursiveChildren(user, false)).OfType<BoxSet>().Any();
}
else
{
showCollectionView = _collectionManager.GetCollections(user).Any();
}
if (showCollectionView)
{
list.Add(await GetUserView(CollectionType.BoxSets, string.Empty, cancellationToken).ConfigureAwait(false));
}
}
if (foldersWithViewTypes.Any(i => string.Equals(i.CollectionType, CollectionType.Playlists, StringComparison.OrdinalIgnoreCase)))

View File

@@ -56,7 +56,7 @@
"HeaderVideo": "Video",
"HeaderPaths": "Paths",
"LabelSyncTempPath": "Temporary file path:",
"LabelSyncTempPathHelp": "",
"LabelSyncTempPathHelp": "Specify a custom sync working folder. Converted media created during the sync process will be stored here.",
"LabelCustomCertificatePath": "Custom certificate path:",
"LabelCustomCertificatePathHelp": "Supply your own ssl certificate. If omitted, the server will create a self-signed certificate.",
"TitleNotifications": "Notifications",
@@ -891,7 +891,7 @@
"OptionCommunityMostWatchedSort": "Most Watched",
"TabNextUp": "Next Up",
"HeaderBecomeMediaBrowserSupporter": "Become a Media Browser Supporter",
"TextAccessPremiumFeatures": "Enjoy Premium Features",
"TextAccessPremiumFeatures": "Enjoy Premium Features",
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the + button to start creating Collections.",
"MessageNoPlaylistsAvailable": "Playlists allow you to create lists of content to play consecutively at a time. To add items to playlists, right click or tap and hold, then select Add to Playlist.",

View File

@@ -720,5 +720,10 @@ namespace MediaBrowser.Server.Implementations.Sync
await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false);
}
public QueryResult<string> GetLibraryItemIds(SyncJobItemQuery query)
{
return _repo.GetLibraryItemIds(query);
}
}
}

View File

@@ -459,7 +459,7 @@ namespace MediaBrowser.Server.Implementations.Sync
return null;
}
public QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query)
private QueryResult<T> GetJobItemReader<T>(SyncJobItemQuery query, string baseSelectText, Func<IDataReader, T> itemFactory)
{
if (query == null)
{
@@ -468,7 +468,7 @@ namespace MediaBrowser.Server.Implementations.Sync
using (var cmd = _connection.CreateCommand())
{
cmd.CommandText = BaseJobItemSelectText;
cmd.CommandText = baseSelectText;
var whereClauses = new List<string>();
@@ -515,14 +515,14 @@ namespace MediaBrowser.Server.Implementations.Sync
cmd.CommandText += "; select count (Id) from SyncJobItems" + whereTextWithoutPaging;
var list = new List<SyncJobItem>();
var list = new List<T>();
var count = 0;
using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
while (reader.Read())
{
list.Add(GetJobItem(reader));
list.Add(itemFactory(reader));
}
if (reader.NextResult() && reader.Read())
@@ -531,7 +531,7 @@ namespace MediaBrowser.Server.Implementations.Sync
}
}
return new QueryResult<SyncJobItem>()
return new QueryResult<T>()
{
Items = list.ToArray(),
TotalRecordCount = count
@@ -539,6 +539,16 @@ namespace MediaBrowser.Server.Implementations.Sync
}
}
public QueryResult<string> GetLibraryItemIds(SyncJobItemQuery query)
{
return GetJobItemReader(query, "select ItemId from SyncJobItems", GetItemId);
}
public QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query)
{
return GetJobItemReader(query, BaseJobItemSelectText, GetJobItem);
}
public Task Create(SyncJobItem jobItem)
{
return Update(jobItem);
@@ -679,10 +689,15 @@ namespace MediaBrowser.Server.Implementations.Sync
info.IsMarkedForRemoval = reader.GetBoolean(13);
info.JobItemIndex = reader.GetInt32(14);
return info;
}
private string GetItemId(IDataReader reader)
{
return reader.GetString(0);
}
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>

View File

@@ -83,9 +83,7 @@ namespace MediaBrowser.Server.Implementations.Udp
private async void RespondToV1Message(string endpoint)
{
var info = _appHost.GetSystemInfo();
var localAddress = info.LocalAddress;
var localAddress = _appHost.LocalApiUrl;
if (!string.IsNullOrEmpty(localAddress))
{
@@ -110,15 +108,15 @@ namespace MediaBrowser.Server.Implementations.Udp
private async void RespondToV2Message(string endpoint)
{
var info = _appHost.GetSystemInfo();
var localUrl = _appHost.LocalApiUrl;
if (!string.IsNullOrEmpty(info.LocalAddress))
if (!string.IsNullOrEmpty(localUrl))
{
var response = new ServerDiscoveryInfo
{
Address = info.LocalAddress,
Id = info.Id,
Name = info.ServerName
Address = localUrl,
Id = _appHost.SystemId,
Name = _appHost.FriendlyName
};
await SendAsync(Encoding.UTF8.GetBytes(_json.SerializeToString(response)), endpoint);