aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-06-02 13:46:44 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-06-02 13:46:44 -0400
commitcf0fd249406f0a1434a47140bb929cfd346578ef (patch)
tree77c4d8c9bbf58fd693fe8c2fc016b6288ec2848f
parent56b82414dedbb30722a7c44ebf677b6408038fbb (diff)
update voice script
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Controller/Sync/ISyncManager.cs2
-rw-r--r--MediaBrowser.Controller/Sync/ISyncRepository.cs2
-rw-r--r--MediaBrowser.Controller/Sync/SyncedItemProgress.cs10
-rw-r--r--MediaBrowser.Model/Dto/BaseItemDto.cs5
-rw-r--r--MediaBrowser.Server.Implementations/Dto/DtoService.cs103
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncRepository.cs17
-rw-r--r--MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj4
9 files changed, 98 insertions, 50 deletions
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index 216f1cf81..bf86c049f 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -411,6 +411,7 @@
<Compile Include="Sync\ISyncProvider.cs" />
<Compile Include="Sync\ISyncRepository.cs" />
<Compile Include="Sync\SyncedFileInfo.cs" />
+ <Compile Include="Sync\SyncedItemProgress.cs" />
<Compile Include="Themes\IAppThemeManager.cs" />
<Compile Include="Themes\InternalThemeImage.cs" />
<Compile Include="TV\ITVSeriesManager.cs" />
diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs
index 97591551c..fd373050f 100644
--- a/MediaBrowser.Controller/Sync/ISyncManager.cs
+++ b/MediaBrowser.Controller/Sync/ISyncManager.cs
@@ -152,7 +152,7 @@ namespace MediaBrowser.Controller.Sync
/// </summary>
/// <param name="query">The query.</param>
/// <returns>QueryResult&lt;System.String&gt;.</returns>
- QueryResult<string> GetLibraryItemIds(SyncJobItemQuery query);
+ QueryResult<SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query);
/// <summary>
/// Reports the synchronize job item transfer beginning.
diff --git a/MediaBrowser.Controller/Sync/ISyncRepository.cs b/MediaBrowser.Controller/Sync/ISyncRepository.cs
index 315f5f541..2af09dbaa 100644
--- a/MediaBrowser.Controller/Sync/ISyncRepository.cs
+++ b/MediaBrowser.Controller/Sync/ISyncRepository.cs
@@ -74,6 +74,6 @@ namespace MediaBrowser.Controller.Sync
/// </summary>
/// <param name="query">The query.</param>
/// <returns>QueryResult&lt;System.String&gt;.</returns>
- QueryResult<string> GetLibraryItemIds(SyncJobItemQuery query);
+ QueryResult<SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query);
}
}
diff --git a/MediaBrowser.Controller/Sync/SyncedItemProgress.cs b/MediaBrowser.Controller/Sync/SyncedItemProgress.cs
new file mode 100644
index 000000000..edb42eb0f
--- /dev/null
+++ b/MediaBrowser.Controller/Sync/SyncedItemProgress.cs
@@ -0,0 +1,10 @@
+using MediaBrowser.Model.Sync;
+
+namespace MediaBrowser.Controller.Sync
+{
+ public class SyncedItemProgress
+ {
+ public string ItemId { get; set; }
+ public SyncJobItemStatus Status { get; set; }
+ }
+}
diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs
index fb157e9ae..7c5d9e9a1 100644
--- a/MediaBrowser.Model/Dto/BaseItemDto.cs
+++ b/MediaBrowser.Model/Dto/BaseItemDto.cs
@@ -100,6 +100,11 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The synchronize status.</value>
public SyncJobItemStatus? SyncStatus { get; set; }
+ /// <summary>
+ /// Gets or sets the synchronize percent.
+ /// </summary>
+ /// <value>The synchronize percent.</value>
+ public double? SyncPercent { get; set; }
/// <summary>
/// Gets or sets the DVD season number.
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index 5853b5b75..f9dfb1350 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -87,13 +87,14 @@ namespace MediaBrowser.Server.Implementations.Dto
public IEnumerable<BaseItemDto> GetBaseItemDtos(IEnumerable<BaseItem> items, DtoOptions options, User user = null, BaseItem owner = null)
{
- var tuple = GetItemIdsWithSyncJobs(options);
+ var syncJobItems = GetSyncedItemProgress(options);
+ var syncDictionary = syncJobItems.ToDictionary(i => i.ItemId);
var list = new List<BaseItemDto>();
foreach (var item in items)
{
- var dto = GetBaseItemDtoInternal(item, options, user, owner);
+ var dto = GetBaseItemDtoInternal(item, options, syncDictionary, user, owner);
var byName = item as IItemByName;
@@ -111,7 +112,7 @@ namespace MediaBrowser.Server.Implementations.Dto
}
}
- FillSyncInfo(dto, item, tuple.Item1, tuple.Item2, options, user);
+ FillSyncInfo(dto, item, syncJobItems, options, user);
list.Add(dto);
}
@@ -121,7 +122,9 @@ namespace MediaBrowser.Server.Implementations.Dto
public BaseItemDto GetBaseItemDto(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null)
{
- var dto = GetBaseItemDtoInternal(item, options, user, owner);
+ var syncProgress = GetSyncedItemProgress(options);
+
+ var dto = GetBaseItemDtoInternal(item, options, syncProgress.ToDictionary(i => i.ItemId), user, owner);
var byName = item as IItemByName;
@@ -138,35 +141,35 @@ namespace MediaBrowser.Server.Implementations.Dto
SetItemByNameInfo(item, dto, libraryItems.ToList(), user);
}
- FillSyncInfo(dto, item, options, user);
+ FillSyncInfo(dto, item, options, user, syncProgress);
return dto;
}
- FillSyncInfo(dto, item, options, user);
+ FillSyncInfo(dto, item, options, user, syncProgress);
return dto;
}
- private Tuple<IEnumerable<string>, IEnumerable<string>> GetItemIdsWithSyncJobs(DtoOptions options)
+ private SyncedItemProgress[] GetSyncedItemProgress(DtoOptions options)
{
if (!options.Fields.Contains(ItemFields.SyncInfo))
{
- return new Tuple<IEnumerable<string>, IEnumerable<string>>(new List<string>(), new List<string>());
+ return new SyncedItemProgress[]{};
}
var deviceId = options.DeviceId;
if (string.IsNullOrWhiteSpace(deviceId))
{
- return new Tuple<IEnumerable<string>, IEnumerable<string>>(new List<string>(), new List<string>());
+ return new SyncedItemProgress[] { };
}
var caps = _deviceManager().GetCapabilities(deviceId);
if (caps == null || !caps.SupportsSync)
{
- return new Tuple<IEnumerable<string>, IEnumerable<string>>(new List<string>(), new List<string>());
+ return new SyncedItemProgress[] { };
}
- var result1 = _syncManager.GetLibraryItemIds(new SyncJobItemQuery
+ return _syncManager.GetSyncedItemProgresses(new SyncJobItemQuery
{
TargetId = deviceId,
Statuses = new[]
@@ -174,38 +177,28 @@ namespace MediaBrowser.Server.Implementations.Dto
SyncJobItemStatus.Converting,
SyncJobItemStatus.Queued,
SyncJobItemStatus.Transferring,
- SyncJobItemStatus.ReadyToTransfer
- }
- });
-
- var result2 = _syncManager.GetLibraryItemIds(new SyncJobItemQuery
- {
- TargetId = deviceId,
- Statuses = new[]
- {
+ SyncJobItemStatus.ReadyToTransfer,
SyncJobItemStatus.Synced
}
- });
-
- return new Tuple<IEnumerable<string>, IEnumerable<string>>(result1.Items, result2.Items);
+ }).Items;
}
public void FillSyncInfo(IEnumerable<IHasSyncInfo> dtos, DtoOptions options, User user)
{
if (options.Fields.Contains(ItemFields.SyncInfo))
{
- var tuple = GetItemIdsWithSyncJobs(options);
+ var syncProgress = GetSyncedItemProgress(options);
foreach (var dto in dtos)
{
var item = _libraryManager.GetItemById(dto.Id);
- FillSyncInfo(dto, item, tuple.Item1, tuple.Item2, options, user);
+ FillSyncInfo(dto, item, syncProgress, options, user);
}
}
}
- private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, DtoOptions options, User user)
+ private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, DtoOptions options, User user, SyncedItemProgress[] syncProgress)
{
if (options.Fields.Contains(ItemFields.SyncInfo))
{
@@ -215,10 +208,8 @@ namespace MediaBrowser.Server.Implementations.Dto
if (dto.SupportsSync ?? false)
{
- var tuple = GetItemIdsWithSyncJobs(options);
-
- dto.HasSyncJob = tuple.Item1.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
- dto.IsSynced = tuple.Item2.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
+ dto.HasSyncJob = syncProgress.Any(i => i.Status != SyncJobItemStatus.Synced && string.Equals(i.ItemId, dto.Id, StringComparison.OrdinalIgnoreCase));
+ dto.IsSynced = syncProgress.Any(i => i.Status == SyncJobItemStatus.Synced && string.Equals(i.ItemId, dto.Id, StringComparison.OrdinalIgnoreCase));
if (dto.IsSynced.Value)
{
@@ -232,7 +223,7 @@ namespace MediaBrowser.Server.Implementations.Dto
}
}
- private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, IEnumerable<string> itemIdsWithPendingSyncJobs, IEnumerable<string> syncedItemIds, DtoOptions options, User user)
+ private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, SyncedItemProgress[] syncProgress, DtoOptions options, User user)
{
if (options.Fields.Contains(ItemFields.SyncInfo))
{
@@ -242,8 +233,8 @@ namespace MediaBrowser.Server.Implementations.Dto
if (dto.SupportsSync ?? false)
{
- dto.HasSyncJob = itemIdsWithPendingSyncJobs.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
- dto.IsSynced = syncedItemIds.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
+ dto.HasSyncJob = syncProgress.Any(i => i.Status != SyncJobItemStatus.Synced && string.Equals(i.ItemId, dto.Id, StringComparison.OrdinalIgnoreCase));
+ dto.IsSynced = syncProgress.Any(i => i.Status == SyncJobItemStatus.Synced && string.Equals(i.ItemId, dto.Id, StringComparison.OrdinalIgnoreCase));
if (dto.IsSynced.Value)
{
@@ -257,7 +248,7 @@ namespace MediaBrowser.Server.Implementations.Dto
}
}
- private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null)
+ private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, Dictionary<string,SyncedItemProgress> syncProgress, User user = null, BaseItem owner = null)
{
var fields = options.Fields;
@@ -301,7 +292,7 @@ namespace MediaBrowser.Server.Implementations.Dto
if (user != null)
{
- AttachUserSpecificInfo(dto, item, user, fields);
+ AttachUserSpecificInfo(dto, item, user, fields, syncProgress);
}
var hasMediaSources = item as IHasMediaSources;
@@ -368,14 +359,16 @@ namespace MediaBrowser.Server.Implementations.Dto
public BaseItemDto GetItemByNameDto<T>(T item, DtoOptions options, List<BaseItem> taggedItems, User user = null)
where T : BaseItem, IItemByName
{
- var dto = GetBaseItemDtoInternal(item, options, user);
+ var syncProgress = GetSyncedItemProgress(options);
+
+ var dto = GetBaseItemDtoInternal(item, options, syncProgress.ToDictionary(i => i.ItemId), user);
if (options.Fields.Contains(ItemFields.ItemCounts))
{
SetItemByNameInfo(item, dto, taggedItems, user);
}
- FillSyncInfo(dto, item, options, user);
+ FillSyncInfo(dto, item, options, user, syncProgress);
return dto;
}
@@ -415,7 +408,8 @@ namespace MediaBrowser.Server.Implementations.Dto
/// <param name="item">The item.</param>
/// <param name="user">The user.</param>
/// <param name="fields">The fields.</param>
- private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields)
+ /// <param name="syncProgress">The synchronize progress.</param>
+ private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields, Dictionary<string, SyncedItemProgress> syncProgress)
{
if (item.IsFolder)
{
@@ -433,7 +427,7 @@ namespace MediaBrowser.Server.Implementations.Dto
// TODO: Disable for CollectionFolder
if (!(folder is UserRootFolder) && !(folder is UserView))
{
- SetSpecialCounts(folder, user, dto, fields);
+ SetSpecialCounts(folder, user, dto, fields, syncProgress);
}
dto.UserData.Played = dto.UserData.PlayedPercentage.HasValue && dto.UserData.PlayedPercentage.Value >= 100;
@@ -1599,8 +1593,9 @@ namespace MediaBrowser.Server.Implementations.Dto
/// <param name="user">The user.</param>
/// <param name="dto">The dto.</param>
/// <param name="fields">The fields.</param>
+ /// <param name="syncProgress">The synchronize progress.</param>
/// <returns>Task.</returns>
- private void SetSpecialCounts(Folder folder, User user, BaseItemDto dto, List<ItemFields> fields)
+ private void SetSpecialCounts(Folder folder, User user, BaseItemDto dto, List<ItemFields> fields, Dictionary<string,SyncedItemProgress> syncProgress)
{
var recursiveItemCount = 0;
var unplayed = 0;
@@ -1608,6 +1603,8 @@ namespace MediaBrowser.Server.Implementations.Dto
DateTime? dateLastMediaAdded = null;
double totalPercentPlayed = 0;
+ double totalSyncPercent = 0;
+ var addSyncInfo = fields.Contains(ItemFields.SyncInfo);
IEnumerable<BaseItem> children;
@@ -1666,6 +1663,27 @@ namespace MediaBrowser.Server.Implementations.Dto
}
runtime += child.RunTimeTicks ?? 0;
+
+ if (addSyncInfo)
+ {
+ double percent = 0;
+ SyncedItemProgress syncItemProgress;
+ if (syncProgress.TryGetValue(dto.Id, out syncItemProgress))
+ {
+ switch (syncItemProgress.Status)
+ {
+ case SyncJobItemStatus.Synced:
+ percent = 100;
+ break;
+ case SyncJobItemStatus.Converting:
+ case SyncJobItemStatus.ReadyToTransfer:
+ case SyncJobItemStatus.Transferring:
+ percent = 50;
+ break;
+ }
+ }
+ totalSyncPercent += percent;
+ }
}
dto.RecursiveItemCount = recursiveItemCount;
@@ -1674,6 +1692,11 @@ namespace MediaBrowser.Server.Implementations.Dto
if (recursiveItemCount > 0)
{
dto.UserData.PlayedPercentage = totalPercentPlayed / recursiveItemCount;
+
+ if (addSyncInfo)
+ {
+ dto.SyncPercent = totalSyncPercent / recursiveItemCount;
+ }
}
if (runtime > 0 && fields.Contains(ItemFields.CumulativeRunTimeTicks))
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index d47135c65..8461176b4 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -1131,9 +1131,9 @@ namespace MediaBrowser.Server.Implementations.Sync
await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false);
}
- public QueryResult<string> GetLibraryItemIds(SyncJobItemQuery query)
+ public QueryResult<SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query)
{
- return _repo.GetLibraryItemIds(query);
+ return _repo.GetSyncedItemProgresses(query);
}
public SyncJobOptions GetAudioOptions(SyncJobItem jobItem, SyncJob job)
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
index 5ad351af5..75c929016 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
@@ -627,9 +627,9 @@ namespace MediaBrowser.Server.Implementations.Sync
}
}
- public QueryResult<string> GetLibraryItemIds(SyncJobItemQuery query)
+ public QueryResult<SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query)
{
- return GetJobItemReader(query, "select ItemId from SyncJobItems", GetItemId);
+ return GetJobItemReader(query, "select ItemId,Status from SyncJobItems", GetSyncedItemProgress);
}
public QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query)
@@ -788,9 +788,18 @@ namespace MediaBrowser.Server.Implementations.Sync
return info;
}
- private string GetItemId(IDataReader reader)
+ private SyncedItemProgress GetSyncedItemProgress(IDataReader reader)
{
- return reader.GetString(0);
+ var item = new SyncedItemProgress();
+
+ item.ItemId = reader.GetString(0);
+
+ if (!reader.IsDBNull(1))
+ {
+ item.Status = (SyncJobItemStatus)Enum.Parse(typeof(SyncJobItemStatus), reader.GetString(1), true);
+ }
+
+ return item;
}
/// <summary>
diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
index 84b0d2d85..a4a5b672e 100644
--- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
+++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
@@ -117,7 +117,7 @@
<Content Include="dashboard-ui\css\materialize.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
- <Content Include="dashboard-ui\css\voice.css">
+ <Content Include="dashboard-ui\voice\voice.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="dashboard-ui\dashboardhosting.html">
@@ -201,7 +201,7 @@
<Content Include="dashboard-ui\scripts\userpassword.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
- <Content Include="dashboard-ui\scripts\voice.js">
+ <Content Include="dashboard-ui\voice\voice.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="dashboard-ui\scripts\wizardagreement.js">