public void ShouldSyncLibraryWhenShareImportCompletedIsWithSuccess() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); mediaPortalServices.GetTraktUserHomePath().Returns(DataPath); SetSettings(mediaPortalServices, new TraktPluginSettings { IsAutomaticLibrarySyncEnabled = true, ShowAutomaticSyncNotifications = true }); IAsynchronousMessageQueue messageQueue = GetMockedMsgQueue(mediaPortalServices); IFileOperations fileOperations = Substitute.For <IFileOperations>(); fileOperations.FileExists(Path.Combine(DataPath, FileName.Authorization.Value)).Returns(true); ILibrarySynchronization librarySynchronization = Substitute.For <ILibrarySynchronization>(); librarySynchronization.SyncMovies().Returns(new TraktSyncMoviesResult()); librarySynchronization.SyncSeries().Returns(new TraktSyncEpisodesResult()); TraktSyncHandlerManager traktScrobbleHandler = new TraktSyncHandlerManager(mediaPortalServices, librarySynchronization, fileOperations); // Act // send share import completed message messageQueue.MessageReceivedProxy += Raise.Event <MessageReceivedHandler>(new AsynchronousMessageQueue(new object(), new[] { "ContentDirectory" }), GetSystemMessageForMessageType(ContentDirectoryMessaging.MessageType.ShareImportCompleted)); // Assert mediaPortalServices.GetTraktNotificationModel().Received().ShowNotification(Arg.Any <TraktSyncLibrarySuccessNotification>(), Arg.Any <TimeSpan>()); }
public void EnableTraktScrobbleHandlerWhenUserChanged() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); mediaPortalServices.GetTraktUserHomePath().Returns(DataPath); TraktPluginSettings settings = new TraktPluginSettings { IsScrobbleEnabled = false }; ITraktSettingsChangeWatcher settingsChangeWatcher = Substitute.For <ITraktSettingsChangeWatcher>(); settingsChangeWatcher.TraktSettings.Returns(settings); mediaPortalServices.GetTraktSettingsWatcher().Returns(settingsChangeWatcher); IUserMessageHandler userMessageHandler = Substitute.For <IUserMessageHandler>(); mediaPortalServices.GetUserMessageHandler().Returns(userMessageHandler); ITraktClient traktClient = Substitute.For <ITraktClient>(); IFileOperations fileOperations = Substitute.For <IFileOperations>(); fileOperations.FileExists(Path.Combine(DataPath, FileName.Authorization.Value)).Returns(true); TraktScrobbleHandlerManager traktScrobbleHandler = new TraktScrobbleHandlerManager(mediaPortalServices, traktClient, fileOperations); // Act settings.IsScrobbleEnabled = true; userMessageHandler.UserChangedProxy += Raise.Event(); // Assert Assert.True(traktScrobbleHandler.IsActive); }
public void GetCollectedMovies(List <ITraktCollectionMovie> onlineCollectedMovies, ITraktSyncLastActivities onlineLastSyncActivities, int expectedCollectedMoviesCount) { // Arrange ITraktClient traktClient = Substitute.For <ITraktClient>(); traktClient.GetCollectedMovies().Returns(onlineCollectedMovies); traktClient.GetLastActivities().Returns(onlineLastSyncActivities); IFileOperations fileOperations = Substitute.For <IFileOperations>(); SetFileOperationsForFile(fileOperations, DataPath, FileName.LastActivity.Value); SetFileOperationsForFile(fileOperations, DataPath, FileName.CollectedMovies.Value); SetFileOperationsForFile(fileOperations, DataPath, FileName.WatchedMovies.Value); IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); mediaPortalServices.GetTraktUserHomePath().Returns(DataPath); // Act ITraktCache traktCache = new TraktCache(mediaPortalServices, traktClient, fileOperations); TraktMovies traktMovies = traktCache.RefreshMoviesCache(); // Assert int actualCollectedMoviesCount = traktMovies.Collected.Count(); Assert.Equal(expectedCollectedMoviesCount, actualCollectedMoviesCount); }
public void Should_BackupFourEpisodes_When_SixEpisodesCollectedAndFourWatched() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); IContentDirectory contentDirectory = Substitute.For <IContentDirectory>(); IList <MediaItem> databaseMediaItems = new List <MediaItem> { new MockedDatabaseEpisode("272127", 1, new List <int> { 7, 8 }, 100).Episode, new MockedDatabaseEpisode("275278", 2, new List <int> { 1 }, 100).Episode, new MockedDatabaseEpisode("275278", 4, new List <int> { 10 }, 100).Episode, new MockedDatabaseEpisode("275271", 2, new List <int> { 11, 12 }, 90).Episode }; contentDirectory.Search(Arg.Any <MediaItemQuery>(), true, null, false).Returns(databaseMediaItems); mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(contentDirectory); IFileOperations fileOperations = Substitute.For <IFileOperations>(); IMoverOperations operations = new MoverOperations(mediaPortalServices, fileOperations); // Act BackupResult result = operations.BackupSeries(FakePath); // Assert Assert.Equal(4, result.WatchedCount); Assert.Equal(6, result.CollectedCount); }
public TraktSetupModel(IMediaPortalServices mediaPortalServices, ITraktClient traktClient, ILibrarySynchronization librarySynchronization, IFileOperations fileOperations) { _mediaPortalServices = mediaPortalServices; _traktClient = traktClient; _fileOperations = fileOperations; _librarySynchronization = librarySynchronization; }
public void StartScrobble(TraktPluginSettings settings, MediaItem mediaItem, ITraktClient traktClient, ITraktNotification notification) { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); mediaPortalServices.GetTraktUserHomePath().Returns(DataPath); SetSettings(mediaPortalServices, settings); SetPlayerAndContentDirForMovie(mediaPortalServices, mediaItem); IAsynchronousMessageQueue messageQueue = GetMockedMsgQueue(mediaPortalServices); IFileOperations fileOperations = Substitute.For <IFileOperations>(); fileOperations.FileExists(Path.Combine(DataPath, FileName.Authorization.Value)).Returns(true); TraktScrobbleHandlerManager traktScrobbleHandler = new TraktScrobbleHandlerManager(mediaPortalServices, traktClient, fileOperations); TraktScrobbleStartedNotification expectedNotification = (TraktScrobbleStartedNotification)notification; // Act // start the player messageQueue.MessageReceivedProxy += Raise.Event <MessageReceivedHandler>(new AsynchronousMessageQueue(new object(), new[] { "PlayerManager" }), GetSystemMessageForMessageType(PlayerManagerMessaging.MessageType.PlayerStarted)); // Assert mediaPortalServices.GetTraktNotificationModel().Received() .ShowNotification(Arg.Is <TraktScrobbleStartedNotification>(x => x.IsSuccess == expectedNotification.IsSuccess && x.Message == expectedNotification.Message && x.ActionType == expectedNotification.ActionType && x.Progress == expectedNotification.Progress && x.SuperLayerScreenName == expectedNotification.SuperLayerScreenName), Arg.Any <TimeSpan>()); }
public void ShouldEnableTraktSyncHandlerWhenSettingsChange() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); mediaPortalServices.GetTraktUserHomePath().Returns(DataPath); TraktPluginSettings settings = new TraktPluginSettings { IsAutomaticLibrarySyncEnabled = false }; ITraktSettingsChangeWatcher settingsChangeWatcher = Substitute.For <ITraktSettingsChangeWatcher>(); settingsChangeWatcher.TraktSettings.Returns(settings); mediaPortalServices.GetTraktSettingsWatcher().Returns(settingsChangeWatcher); ISettingsManager settingsManager = Substitute.For <ISettingsManager>(); settingsManager.Load <TraktPluginSettings>().Returns(settings); mediaPortalServices.GetSettingsManager().Returns(settingsManager); ILibrarySynchronization librarySynchronization = Substitute.For <ILibrarySynchronization>(); IFileOperations fileOperations = Substitute.For <IFileOperations>(); fileOperations.FileExists(Path.Combine(DataPath, FileName.Authorization.Value)).Returns(true); TraktSyncHandlerManager traktSyncHandler = new TraktSyncHandlerManager(mediaPortalServices, librarySynchronization, fileOperations); // Act settings.IsAutomaticLibrarySyncEnabled = true; settingsChangeWatcher.TraktSettingsChanged += Raise.Event(); // Assert Assert.True(traktSyncHandler.IsActive); }
private IAsynchronousMessageQueue GetMockedMsgQueue(IMediaPortalServices mediaPortalServices) { IAsynchronousMessageQueue messageQueue = Substitute.For <IAsynchronousMessageQueue>(); messageQueue.When(x => x.StartProxy()).Do(x => { /*nothing*/ }); mediaPortalServices.GetMessageQueue(Arg.Any <object>(), Arg.Any <string[]>()).Returns(messageQueue); return(messageQueue); }
public TraktSyncHandlerManager(IMediaPortalServices mediaPortalServices, ILibrarySynchronization librarySynchronization, IFileOperations fileOperations) { _mediaPortalServices = mediaPortalServices; _fileOperations = fileOperations; _librarySynchronization = librarySynchronization; _mediaPortalServices.GetTraktSettingsWatcher().TraktSettingsChanged += ConfigureHandler; _mediaPortalServices.GetUserMessageHandler().UserChangedProxy += ConfigureHandler; ConfigureHandler(); }
public TraktScrobbleHandlerManager(IMediaPortalServices mediaPortalServices, ITraktClient traktClient, IFileOperations fileOperations) { _mediaPortalServices = mediaPortalServices; _traktClient = traktClient; _fileOperations = fileOperations; _mediaPortalServices.GetTraktSettingsWatcher().TraktSettingsChanged += ConfigureHandler; _mediaPortalServices.GetUserMessageHandler().UserChangedProxy += ConfigureHandler; ConfigureHandler(); }
public TraktSetupModel() { _mediaPortalServices = new MediaPortalServices(); _traktClient = new TraktClientProxy(ApplicationId, SecretId, _mediaPortalServices.GetLogger()); _fileOperations = new FileOperations(); ITraktCache traktCache = new TraktCache(_mediaPortalServices, _traktClient, _fileOperations); _librarySynchronization = new LibrarySynchronization(_mediaPortalServices, _traktClient, traktCache, _fileOperations); }
public void SyncCollectedMoviesToTrakt() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); mediaPortalServices.MarkAsWatched(Arg.Any <MediaItem>()).Returns(true); mediaPortalServices.MarkAsUnWatched(Arg.Any <MediaItem>()).Returns(true); mediaPortalServices.GetTraktUserHomePath() .Returns(HomeUserPath); IList <MediaItem> collectedMovies = new List <MediaItem>(); IList <MediaLibraryMovie> savedMovies = new List <MediaLibraryMovie>(); string collectedMoviesPath = Path.Combine(mediaPortalServices.GetTraktUserHomePath(), FileName.MediaLibraryMovies.Value); if (File.Exists(collectedMoviesPath)) { string collectedMoviesJson = File.ReadAllText(collectedMoviesPath); savedMovies = JsonConvert.DeserializeObject <List <MediaLibraryMovie> >(collectedMoviesJson); } foreach (MediaLibraryMovie movie in savedMovies) { collectedMovies.Add(new MockedDatabaseMovie(new MediaLibraryMovie { Title = movie.Title, Imdb = movie.Imdb, Year = movie.Year, AddedToDb = movie.AddedToDb, LastPlayed = movie.LastPlayed, PlayCount = movie.PlayCount }).Movie); } IContentDirectory contentDirectory = Substitute.For <IContentDirectory>(); contentDirectory.SearchAsync(Arg.Any <MediaItemQuery>(), true, null, false).Returns(collectedMovies); mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(contentDirectory); ILogger logger = Substitute.For <ILogger>(); ITraktClient traktClient = new TraktClientProxy(ApplicationId, SecretId, logger); ValidateAuthorization(traktClient, new FileOperations()); IFileOperations fileOperations = new FileOperations(); ITraktCache traktCache = new TraktCache(mediaPortalServices, traktClient, fileOperations); ILibrarySynchronization librarySynchronization = new LibrarySynchronization(mediaPortalServices, traktClient, traktCache, fileOperations); // Act TraktSyncMoviesResult result = librarySynchronization.SyncMovies(); // Assert Assert.NotNull(result); }
private void SetSettings(IMediaPortalServices mediaPortalServices, TraktPluginSettings settings) { ITraktSettingsChangeWatcher settingsChangeWatcher = Substitute.For <ITraktSettingsChangeWatcher>(); settingsChangeWatcher.TraktSettings.Returns(settings); mediaPortalServices.GetTraktSettingsWatcher().Returns(settingsChangeWatcher); ISettingsManager settingsManager = Substitute.For <ISettingsManager>(); settingsManager.Load <TraktPluginSettings>().Returns(settings); mediaPortalServices.GetSettingsManager().Returns(settingsManager); }
public void Should_ThrowMediaLibraryNotConnectedException_When_ContentDirectoryIsNull() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); IFileOperations fileOperations = Substitute.For <IFileOperations>(); mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(x => null); IMoverOperations operations = new MoverOperations(mediaPortalServices, fileOperations); // Act & Assert Assert.Throws <MediaLibraryNotConnectedException>(() => operations.BackupMovies(FakePath)); }
private IMediaPortalServices GetMockMediaPortalServices(IList <MediaItem> databaseMediaItems) { IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); mediaPortalServices.MarkAsWatched(Arg.Any <MediaItem>()).Returns(true); mediaPortalServices.MarkAsUnWatched(Arg.Any <MediaItem>()).Returns(true); IContentDirectory contentDirectory = Substitute.For <IContentDirectory>(); contentDirectory.SearchAsync(Arg.Any <MediaItemQuery>(), true, null, false).Returns(databaseMediaItems); mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(contentDirectory); return(mediaPortalServices); }
public void Should_ThrowPathNotFoundException_When_WatchedEpisodesFileNotFound() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); string savedEpisodesPath = Path.Combine(FakePath, FileName.WatchedEpisodes.Value); IFileOperations fileOperations = Substitute.For <IFileOperations>(); fileOperations.FileExists(savedEpisodesPath).Returns(false); IMoverOperations operations = new MoverOperations(mediaPortalServices, fileOperations); // Act & Assert Assert.Throws <PathNotFoundException>(() => operations.RestoreWatchedSeries(FakePath)); }
public void Should_MarkFourEpisodesAsWatched_When_FourEpisodesRestored() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); IContentDirectory contentDirectory = Substitute.For <IContentDirectory>(); IList <MediaItem> databaseMediaItems = new List <MediaItem> { new MockedDatabaseEpisode("272127", 1, new List <int> { 7, 8 }, 0).Episode, new MockedDatabaseEpisode("317653", 1, new List <int> { 1 }, 0).Episode, new MockedDatabaseEpisode("317653", 1, new List <int> { 2 }, 0).Episode, new MockedDatabaseEpisode("275271", 2, new List <int> { 11, 12 }, 0).Episode }; contentDirectory.SearchAsync(Arg.Any <MediaItemQuery>(), true, null, false).Returns(databaseMediaItems); mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(contentDirectory); mediaPortalServices.MarkAsWatched(Arg.Any <MediaItem>()).Returns(true); string savedEpisodesPath = Path.Combine(FakePath, FileName.WatchedEpisodes.Value); IFileOperations fileOperations = Substitute.For <IFileOperations>(); fileOperations.FileExists(savedEpisodesPath).Returns(true); string watchedEpisodesJson = "[{\"show_imdb\":\"tt6682754\",\"show_tvdb\":317653,\"show_title\":\"Je-an-Claude Van Johnson\",\"season\":1,\"number\":1}," + "{\"show_imdb\":\"tt3155320\",\"show_tvdb\":272127,\"show_title\":\"Extant\",\"season\":1,\"number\":7}," + "{\"show_imdb\":\"tt3155320\",\"show_tvdb\":272127,\"show_title\":\"Extant\",\"season\":1,\"number\":8}," + "{\"show_imdb\":\"tt6682754\",\"show_tvdb\":317653,\"show_title\":\"Jean-Claude Van Johnson\",\"season\":1,\"number\":2}]"; fileOperations.FileReadAllText(savedEpisodesPath).Returns(watchedEpisodesJson); IMoverOperations operations = new MoverOperations(mediaPortalServices, fileOperations); // Act RestoreResult result = operations.RestoreWatchedSeries(FakePath); // Assert Assert.Equal(4, result.MarkedWatchedCount); Assert.Equal(4, result.SavedWatchedCount); }
private void SetPlayerAndContentDirForMovie(IMediaPortalServices mediaPortalServices, MediaItem mediaItem) { IList <MediaItem> mediaItems = new List <MediaItem>(); mediaItems.Add(mediaItem); IContentDirectory contentDirectory = Substitute.For <IContentDirectory>(); contentDirectory.SearchAsync(Arg.Any <MediaItemQuery>(), false, null, true).Returns(mediaItems); mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(contentDirectory); IPlayerContext playerContext = Substitute.For <IPlayerContext>(); playerContext.CurrentMediaItem.Returns(mediaItem); IPlayer player = Substitute.For <IPlayer, IMediaPlaybackControl>(); ((IMediaPlaybackControl)player).Duration.Returns(TimeSpan.FromMinutes(90)); playerContext.CurrentPlayer.Returns(player); mediaPortalServices.GetPlayerContext(Arg.Any <IPlayerSlotController>()).Returns(playerContext); }
public void Should_MarkOneMovieAsWatched_When_OneMovieRestored() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); IContentDirectory contentDirectory = Substitute.For <IContentDirectory>(); IList <MediaItem> databaseMediaItems = new List <MediaItem> { new MockedDatabaseMovie(new MediaLibraryMovie { Imdb = "tt0268380", Title = "Ice Age", Tmdb = null, Year = 2002 }, 0).Movie, new MockedDatabaseMovie(new MediaLibraryMovie { Imdb = "tt0457939", Title = "Title_2", Tmdb = null, Year = 2016 }, 0).Movie, new MockedDatabaseMovie(new MediaLibraryMovie { Imdb = "tt1355630", Title = "Title_3", Tmdb = null, Year = 2013 }, 0).Movie }; contentDirectory.SearchAsync(Arg.Any <MediaItemQuery>(), true, null, false).Returns(databaseMediaItems); mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(contentDirectory); mediaPortalServices.MarkAsWatched(Arg.Any <MediaItem>()).Returns(true); string savedMoviesPath = Path.Combine(FakePath, FileName.WatchedMovies.Value); IFileOperations fileOperations = Substitute.For <IFileOperations>(); fileOperations.FileExists(savedMoviesPath).Returns(true); string watchedMoviesJson = "[{\"imdb\":\"tt0268380\",\"tmdb\":null,\"title\":\"Ice Age\",\"year\":2002}]"; fileOperations.FileReadAllText(savedMoviesPath).Returns(watchedMoviesJson); IMoverOperations operations = new MoverOperations(mediaPortalServices, fileOperations); // Act RestoreResult result = operations.RestoreWatchedMovies(FakePath); // Assert Assert.Equal(1, result.MarkedWatchedCount); Assert.Equal(1, result.SavedWatchedCount); }
public void ShouldAuthorizeUserForValidData() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); mediaPortalServices.GetTraktUserHomePath().Returns(DataPath); ITraktClient traktClient = Substitute.For <ITraktClient>(); ILibrarySynchronization librarySynchronization = Substitute.For <ILibrarySynchronization>(); IFileOperations fileOperations = Substitute.For <IFileOperations>(); fileOperations.DirectoryExists(DataPath).Returns(true); string expectedStatus = "[Trakt.AuthorizationSucceed]"; TraktSetupModel setupModel = new TraktSetupModel(mediaPortalServices, traktClient, librarySynchronization, fileOperations); // Act setupModel.AuthorizeUser(); string actualStatus = setupModel.TestStatus; // Assert Assert.Equal(expectedStatus, actualStatus); Assert.True(setupModel.IsUserAuthorized); }
public void Should_BackupThreeMovies_When_FiveMoviesCollectedAndThreeWatched() { // Arrange IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>(); IContentDirectory contentDirectory = Substitute.For <IContentDirectory>(); IList <MediaItem> databaseMediaItems = new List <MediaItem> { new MockedDatabaseMovie(new MediaLibraryMovie { Imdb = "tt0268380", Title = "Title_1", Tmdb = 12345, Year = 2017 }, 100).Movie, new MockedDatabaseMovie(new MediaLibraryMovie { Imdb = "tt0034492", Title = "Title_2", Tmdb = 12111, Year = 2016 }, 100).Movie, new MockedDatabaseMovie(new MediaLibraryMovie { Imdb = "tt1355630", Title = "Title_3", Tmdb = 12388, Year = 2013 }, 100).Movie, new MockedDatabaseMovie(new MediaLibraryMovie { Imdb = "tt1599348", Title = "Title_4", Tmdb = 12100, Year = 2011 }, 10).Movie, new MockedDatabaseMovie(new MediaLibraryMovie { Imdb = "tt0457939", Title = "Title_5", Tmdb = 12144, Year = 2010 }, 0).Movie }; contentDirectory.SearchAsync(Arg.Any <MediaItemQuery>(), true, null, false).Returns(databaseMediaItems); mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(contentDirectory); IFileOperations fileOperations = Substitute.For <IFileOperations>(); IMoverOperations operations = new MoverOperations(mediaPortalServices, fileOperations); // Act BackupResult result = operations.BackupMovies(FakePath); // Assert Assert.Equal(3, result.WatchedCount); Assert.Equal(5, result.CollectedCount); }
/// <summary> /// The default constructor. /// Called by MediaPortal 2 /// </summary> protected BaseModel() { _mediaPortalServices = new MediaPortalServices(); _moverOperations = new MoverOperations(_mediaPortalServices, new FileOperations()); _fileOperations = new FileOperations(); }
/// <summary> /// Constructor for unit tests /// </summary> /// <param name="mediaPortalServices">Services provided by Media Portal 2</param> /// <param name="moverOperations">Operations provided by our Flag Mover</param> /// <param name="fileOperations">IO file operations</param> public BackupModel(IMediaPortalServices mediaPortalServices, IMoverOperations moverOperations, IFileOperations fileOperations) : base(mediaPortalServices, moverOperations, fileOperations) { }
/// <summary> /// /// </summary> /// <param name="mediaPortalServices"></param> /// <param name="fileOperations"></param> public MoverOperations(IMediaPortalServices mediaPortalServices, IFileOperations fileOperations) { _mediaPortalServices = mediaPortalServices; _fileOperations = fileOperations; }
public TraktCache(IMediaPortalServices mediaPortalServices, ITraktClient traktClient, IFileOperations fileOperations) { _mediaPortalServices = mediaPortalServices; _traktClient = traktClient; _fileOperations = fileOperations; }
/// <summary> /// Constructor for unit tests /// </summary> /// <param name="mediaPortalServices">Services provided by Media Portal 2</param> /// <param name="moverOperations">Operations provided by our Flag Mover</param> /// <param name="fileOperations">IO file operations</param> protected BaseModel(IMediaPortalServices mediaPortalServices, IMoverOperations moverOperations, IFileOperations fileOperations) { _mediaPortalServices = mediaPortalServices; _moverOperations = moverOperations; _fileOperations = fileOperations; }