private DbSetSettings GetSettings(bool cached) { if (cached) { if (_settingsCached == null) { _settingsCached = GetSettings(false); } return(_settingsCached); } var fileName = _fileManager.CombineDirectories(_inDir, FileEngineDefaults.SetSettingsName); if (!_fileManager.FileExists(fileName)) { ChangeSettings(new DbSetSettings(), false); } try { var serializer = new XmlSerializer(typeof(DbSetSettings)); var settings = new XmlReaderSettings(); using (var textReader = new StreamReader(_fileManager.FileReadStream(fileName))) { var xmlReader = XmlReader.Create(textReader, settings); return((serializer.Deserialize(xmlReader) as DbSetSettings) ?? new DbSetSettings()); } } catch (InvalidOperationException) // XML niet in juiste format { //ChangeSettings(nieuw, false); return(new DbSetSettings()); } }
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 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>()); }
private void SetFileOperationsForFile(IFileOperations fileOperations, string path, string fileName) { fileOperations.FileExists(Arg.Is <string>(x => x.Equals(Path.Combine(path, fileName)))) .Returns(true); fileOperations.FileReadAllText(Arg.Is <string>(x => x.Equals(Path.Combine(path, fileName)))) .Returns(File.ReadAllText(TestUtility.GetTestDataPath(Path.Combine(@"Cache\", fileName)), Encoding.UTF8)); }
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 EnterModelContext(NavigationContext oldContext, NavigationContext newContext) { // clear the PIN code text box, necessary when entering the plugin PinCode = string.Empty; string authFilePath = Path.Combine(_mediaPortalServices.GetTraktUserHomePath(), FileName.Authorization.Value); bool savedAuthFileExists = _fileOperations.FileExists(authFilePath); if (!savedAuthFileExists) { TestStatus = "[Trakt.NotAuthorized]"; IsUserAuthorized = false; } else { string savedAuthorization = _fileOperations.FileReadAllText(authFilePath); ITraktAuthorization savedAuthFile = TraktSerializationService.DeserializeAsync <ITraktAuthorization>(savedAuthorization).Result; if (savedAuthFile.IsRefreshPossible) { TestStatus = "[Trakt.AlreadyAuthorized]"; IsUserAuthorized = true; } else { TestStatus = "[Trakt.SavedAuthIsNotValid]"; IsUserAuthorized = false; } } }
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 IList <MediaLibraryEpisode> ReadSavedWatchedEpisodes(string path) { IList <MediaLibraryEpisode> watchedEpisodes; string watchedEpisodesPath = Path.Combine(path, FileName.WatchedEpisodes.Value); if (_fileOperations.FileExists(watchedEpisodesPath)) { string watchedEpisodesJson = _fileOperations.FileReadAllText(watchedEpisodesPath); watchedEpisodes = JsonConvert.DeserializeObject <List <MediaLibraryEpisode> >(watchedEpisodesJson); } else { throw new PathNotFoundException("Watched series path not found."); } return(watchedEpisodes); }
private static Instellingen LoadFromXmlFile(IFileOperations fileManager, string instellingenFile, string maskFile) { Instellingen instellingen; if (!fileManager.FileExists(instellingenFile)) return null; var serializer = new XmlSerializer(typeof(Instellingen)); var settings = new XmlReaderSettings(); using (var textReader = new StreamReader(fileManager.FileReadStream(instellingenFile))) { using (var xmlReader = XmlReader.Create(textReader, settings)) { instellingen = serializer.Deserialize(xmlReader) as Instellingen; } } if (instellingen == null) return null; if (!fileManager.FileExists(maskFile)) return instellingen; using (var maskStream = fileManager.FileReadStream(maskFile)) { var xdoc = new XmlDocument(); xdoc.Load(maskStream); var root = xdoc.DocumentElement; if (root == null) return instellingen; var masklist = root.GetElementsByTagName("Mask"); foreach (XmlNode mask in masklist) { var nameNode = mask.SelectSingleNode("Name"); var realnameNode = mask.SelectSingleNode("RealName"); if (nameNode != null && realnameNode != null) instellingen.AddMask(new Mapmask(nameNode.InnerText, realnameNode.InnerText)); } } return instellingen; }
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 ConfigureHandler() { string authorizationFilePath = Path.Combine(_mediaPortalServices.GetTraktUserHomePath(), FileName.Authorization.Value); bool isUserAuthorized = _fileOperations.FileExists(authorizationFilePath); bool isScrobbleEnabled = _mediaPortalServices.GetTraktSettingsWatcher().TraktSettings.IsScrobbleEnabled; if (isUserAuthorized && isScrobbleEnabled) { SubscribeToMessages(); IsActive = true; _mediaPortalServices.GetLogger().Info("Trakt: enabled trakt scrobble handler."); } else { UnsubscribeFromMessages(); IsActive = false; _mediaPortalServices.GetLogger().Info("Trakt: disabled trakt scrobble handler."); } }
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); }
private static Instellingen LoadFromJsonFile(IFileOperations fileManager, string instellingenFile, string maskFile) { try { SaveInstellingen saveInstellingen; if (!fileManager.FileExists(instellingenFile)) { return(null); } using (var file = new StreamReader(fileManager.FileReadStream(instellingenFile))) { var serializer = new JsonSerializer(); saveInstellingen = (SaveInstellingen)serializer.Deserialize(file, typeof(SaveInstellingen)); } if (saveInstellingen == null) { return(null); } var instellingen = new Instellingen() { DatabasePad = saveInstellingen.DatabasePad ?? Instellingen.Default.DatabasePad, BijbelPad = saveInstellingen.BijbelPad ?? Instellingen.Default.BijbelPad, TemplateTheme = saveInstellingen.TemplateTheme ?? Instellingen.Default.TemplateTheme, TemplateLied = saveInstellingen.TemplateLied ?? Instellingen.Default.TemplateLied, TemplateBijbeltekst = saveInstellingen.TemplateBijbeltekst ?? Instellingen.Default.TemplateBijbeltekst, TekstChar_a_OnARow = saveInstellingen.TekstChar_a_OnARow ?? Instellingen.Default.TekstChar_a_OnARow, TekstFontName = saveInstellingen.TekstFontName ?? Instellingen.Default.TekstFontName, TekstFontPointSize = saveInstellingen.TekstFontPointSize ?? Instellingen.Default.TekstFontPointSize, RegelsPerLiedSlide = saveInstellingen.RegelsPerLiedSlide ?? Instellingen.Default.RegelsPerLiedSlide, RegelsPerBijbeltekstSlide = saveInstellingen.RegelsPerBijbeltekstSlide ?? Instellingen.Default.RegelsPerBijbeltekstSlide, Een2eCollecte = saveInstellingen.Een2eCollecte ?? Instellingen.Default.Een2eCollecte, DeTekstVraag = saveInstellingen.DeTekstVraag ?? Instellingen.Default.DeTekstVraag, DeLezenVraag = saveInstellingen.DeLezenVraag ?? Instellingen.Default.DeLezenVraag, GebruikDisplayNameVoorZoeken = saveInstellingen.GebruikDisplayNameVoorZoeken ?? Instellingen.Default.GebruikDisplayNameVoorZoeken, ToonBijbeltekstenInLiturgie = saveInstellingen.ToonBijbeltekstenInLiturgie ?? Instellingen.Default.ToonBijbeltekstenInLiturgie, ToonGeenVersenBijVolledigeContent = saveInstellingen.ToonGeenVersenBijVolledigeContent ?? Instellingen.Default.ToonGeenVersenBijVolledigeContent, StandaardTeksten = saveInstellingen.StandaardTeksten ?? Instellingen.Default.StandaardTeksten, VersOnderbrekingOverSlidesHeen = saveInstellingen.VersOnderbrekingOverSlidesHeen ?? Instellingen.Default.VersOnderbrekingOverSlidesHeen, ToonAlsLiedOnderbrokenWordt = saveInstellingen.ToonAlsLiedOnderbrokenWordt ?? Instellingen.Default.ToonAlsLiedOnderbrokenWordt, }; if (!fileManager.FileExists(maskFile)) { return(instellingen); } using (var file = new StreamReader(fileManager.FileReadStream(maskFile))) { var serializer = new JsonSerializer(); foreach (var mask in (SaveMask[])serializer.Deserialize(file, typeof(SaveMask[]))) { instellingen.AddMask(new Mapmask(mask.Name, mask.RealName)); } } return(instellingen); } catch (Exception exc) { FoutmeldingSchrijver.Log(exc); } return(null); }
private bool IsCacheInitialized(string file) { string filePath = Path.Combine(_mediaPortalServices.GetTraktUserHomePath(), file); return(_fileOperations.FileExists(filePath)); }
private static bool WriteToJsonFile(IFileOperations fileManager, string instellingenFile, string maskFile, Instellingen instellingen) { try { // verwijder oude bestand (zelfde effect als overschreven worden) if (fileManager.FileExists(instellingenFile)) { fileManager.Delete(instellingenFile); } var saveInstellingen = new SaveInstellingen() { DatabasePad = instellingen.DatabasePad, BijbelPad = instellingen.BijbelPad, TemplateTheme = instellingen.TemplateTheme, TemplateLied = instellingen.TemplateLied, TemplateBijbeltekst = instellingen.TemplateBijbeltekst, TekstChar_a_OnARow = instellingen.TekstChar_a_OnARow, TekstFontName = instellingen.TekstFontName, TekstFontPointSize = instellingen.TekstFontPointSize, RegelsPerLiedSlide = instellingen.RegelsPerLiedSlide, RegelsPerBijbeltekstSlide = instellingen.RegelsPerBijbeltekstSlide, Een2eCollecte = instellingen.Een2eCollecte, DeTekstVraag = instellingen.DeTekstVraag, DeLezenVraag = instellingen.DeLezenVraag, GebruikDisplayNameVoorZoeken = instellingen.GebruikDisplayNameVoorZoeken, ToonBijbeltekstenInLiturgie = instellingen.ToonBijbeltekstenInLiturgie, StandaardTeksten = instellingen.StandaardTeksten, ToonGeenVersenBijVolledigeContent = instellingen.ToonGeenVersenBijVolledigeContent, VersOnderbrekingOverSlidesHeen = instellingen.VersOnderbrekingOverSlidesHeen, ToonAlsLiedOnderbrokenWordt = instellingen.ToonAlsLiedOnderbrokenWordt }; //schrijf instellingen weg using (var sw = new StreamWriter(fileManager.FileWriteStream(instellingenFile))) { var serializer = new JsonSerializer(); serializer.Serialize(sw, saveInstellingen); sw.Flush(); } var saveMasks = instellingen.Masks.Select(m => new SaveMask() { Name = m.Name, RealName = m.RealName }).ToArray(); //schrijf Masks weg using (var sw = new StreamWriter(fileManager.FileWriteStream(maskFile))) { var serializer = new JsonSerializer(); serializer.Serialize(sw, saveMasks); sw.Flush(); } return(true); } catch (PathTooLongException) { return(false); } }
private static bool WriteToXmlFile(IFileOperations fileManager, string instellingenFile, string maskFile, Instellingen instellingen) { try { // verwijder oude bestand (zelfde effect als overschreven worden) if (fileManager.FileExists(instellingenFile)) fileManager.Delete(instellingenFile); //schrijf instellingen weg var serializer = new XmlSerializer(typeof(Instellingen)); using (var sw = new StreamWriter(fileManager.FileWriteStream(instellingenFile))) { serializer.Serialize(sw, instellingen); sw.Flush(); } //schrijf Masks weg using (var xw = XmlWriter.Create(maskFile, new XmlWriterSettings() { Indent = true })) { xw.WriteStartDocument(); xw.WriteStartElement("Masks"); foreach (var mask in instellingen.Masks) { xw.WriteStartElement("Mask"); xw.WriteStartElement("Name"); xw.WriteString(mask.Name); xw.WriteEndElement(); xw.WriteStartElement("RealName"); xw.WriteString(mask.RealName); xw.WriteEndElement(); xw.WriteEndElement(); } xw.WriteEndElement(); xw.WriteEndDocument(); xw.Flush(); } return true; } catch (PathTooLongException) { return false; } }