aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-02-01 14:24:15 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-02-01 14:24:15 -0500
commit37352785acef4db99301c1e88624cf48133ec979 (patch)
tree15638d697cc56a0a774bf261de9814c9034f8e42 /MediaBrowser.Controller
parentf14e9b8d3af98f6ffbe243b105f96f46e8cf3b06 (diff)
parentf5ebeddbf5104092ce584486689af6640125054f (diff)
Merge branch 'beta'
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs61
-rw-r--r--MediaBrowser.Controller/Entities/User.cs4
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Controller/Power/IPowerManagement.cs13
4 files changed, 75 insertions, 4 deletions
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
index 98d1eb4ce..654c9abd3 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
@@ -1,17 +1,21 @@
-using MediaBrowser.Controller.Providers;
+using System;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Users;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
+using System.Threading;
+using System.Threading.Tasks;
+using MediaBrowser.Controller.Library;
namespace MediaBrowser.Controller.Entities.Audio
{
/// <summary>
/// Class MusicAlbum
/// </summary>
- public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo<AlbumInfo>
+ public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo<AlbumInfo>, IMetadataContainer
{
public MusicAlbum()
{
@@ -139,5 +143,58 @@ namespace MediaBrowser.Controller.Entities.Audio
return id;
}
+
+ public async Task RefreshAllMetadata(MetadataRefreshOptions refreshOptions, IProgress<double> progress, CancellationToken cancellationToken)
+ {
+ var items = GetRecursiveChildren().ToList();
+
+ var songs = items.OfType<Audio>().ToList();
+
+ var others = items.Except(songs).ToList();
+
+ var totalItems = songs.Count + others.Count;
+ var numComplete = 0;
+
+ var childUpdateType = ItemUpdateType.None;
+
+ // Refresh songs
+ foreach (var item in songs)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ var updateType = await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
+ childUpdateType = childUpdateType | updateType;
+
+ numComplete++;
+ double percent = numComplete;
+ percent /= totalItems;
+ progress.Report(percent * 100);
+ }
+
+ var parentRefreshOptions = refreshOptions;
+ if (childUpdateType > ItemUpdateType.None)
+ {
+ parentRefreshOptions = new MetadataRefreshOptions(refreshOptions);
+ parentRefreshOptions.MetadataRefreshMode = MetadataRefreshMode.FullRefresh;
+ }
+
+ // Refresh current item
+ await RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
+
+ // Refresh all non-songs
+ foreach (var item in others)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ var updateType = await item.RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
+
+ numComplete++;
+ double percent = numComplete;
+ percent /= totalItems;
+ progress.Report(percent * 100);
+ }
+
+ progress.Report(100);
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs
index a9e314ede..be8521a5c 100644
--- a/MediaBrowser.Controller/Entities/User.cs
+++ b/MediaBrowser.Controller/Entities/User.cs
@@ -109,7 +109,7 @@ namespace MediaBrowser.Controller.Entities
/// <value>The last activity date.</value>
public DateTime? LastActivityDate { get; set; }
- private UserConfiguration _config;
+ private volatile UserConfiguration _config;
private readonly object _configSyncLock = new object();
[IgnoreDataMember]
public UserConfiguration Configuration
@@ -132,7 +132,7 @@ namespace MediaBrowser.Controller.Entities
set { _config = value; }
}
- private UserPolicy _policy;
+ private volatile UserPolicy _policy;
private readonly object _policySyncLock = new object();
[IgnoreDataMember]
public UserPolicy Policy
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index 2227df3f0..471aa38d4 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -265,6 +265,7 @@
<Compile Include="Playlists\IPlaylistManager.cs" />
<Compile Include="Playlists\Playlist.cs" />
<Compile Include="Plugins\ILocalizablePlugin.cs" />
+ <Compile Include="Power\IPowerManagement.cs" />
<Compile Include="Providers\AlbumInfo.cs" />
<Compile Include="Providers\ArtistInfo.cs" />
<Compile Include="Providers\BookInfo.cs" />
diff --git a/MediaBrowser.Controller/Power/IPowerManagement.cs b/MediaBrowser.Controller/Power/IPowerManagement.cs
new file mode 100644
index 000000000..faa289695
--- /dev/null
+++ b/MediaBrowser.Controller/Power/IPowerManagement.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace MediaBrowser.Controller.Power
+{
+ public interface IPowerManagement
+ {
+ /// <summary>
+ /// Schedules the wake.
+ /// </summary>
+ /// <param name="utcTime">The UTC time.</param>
+ void ScheduleWake(DateTime utcTime);
+ }
+}