/// <summary> /// Reloads the given song /// </summary> /// <param name="si">Path to the song file</param> public void ReloadSongItem(SongItem si) { if (si != null) { try { var song = si.Plugin.Load(si.Filename); si.Song = song; si.SearchText = SongSearchUtil.GetSearchableSongText(song); } catch (Exception e) { log.Error(@"Unable to load song file " + si.Filename + @" (" + e.Message + @")"); } } }
/// <summary> /// Reloads all songs from the song direcory /// specified in the application settings /// </summary> public void Reload() { // Find song files var songPaths = new List <string>(); foreach (var ext in SongFilePluginFactory.SupportedExtensions) { var songFilePaths = Directory.GetFiles(SongDirPath, "*" + ext, SearchOption.AllDirectories); songPaths.AddRange(songFilePaths); } var cnt = songPaths.Count; // Load songs into list var i = 0; SongList = new Dictionary <string, SongItem>(); foreach (var path in songPaths) { try { var plugin = SongFilePluginFactory.Create(path); var song = plugin.Load(path); var si = new SongItem { Plugin = plugin, Filename = path, Song = song, SearchText = SongSearchUtil.GetSearchableSongText(song) }; SongList.Add(path, si); if (i % 25 == 0) { var e = new SongLoadEventArgs(i, cnt); if (SongLoaded != null) { SongLoaded(e); } } i++; } catch (Exception e) { log.Error(@"Unable to load song file " + path + @" (" + e.Message + @")"); log.Error(e.StackTrace); } } }
public void LoadTest() { ISongFilePlugin target = new ExtendedPowerPraiseSongFilePlugin(); const string filename = "Resources/powerpraise/Näher, mein Gott zu Dir.ppl"; Song expected = PowerPraiseTestUtil.GetExpectedSong(); Song actual = target.Load(filename); Assert.AreEqual(expected.Guid, actual.Guid, "Wrong GUID"); Assert.AreEqual(expected.ModifiedTimestamp, actual.ModifiedTimestamp, "Wrong modified timestamp"); Assert.AreEqual(expected.CreatedIn, actual.CreatedIn, "Wrong created in"); Assert.AreEqual(expected.ModifiedIn, actual.ModifiedIn, "Wrong modified in"); Assert.AreEqual(expected.Title, actual.Title, "Wrong song title"); Assert.AreEqual(expected.Language, actual.Language, "Wrong language"); Assert.AreEqual(expected.CcliIdentifier, actual.CcliIdentifier, "Wrong CcliID"); Assert.AreEqual(expected.Copyright, actual.Copyright, "Wrong copyright"); Assert.AreEqual(expected.Formatting.CopyrightPosition, actual.Formatting.CopyrightPosition, "Wrong copyright position"); Assert.AreEqual(expected.Formatting.SourcePosition, actual.Formatting.SourcePosition, "Wrong source position"); Assert.AreEqual(expected.ReleaseYear, actual.ReleaseYear, "Wrong release year"); CollectionAssert.AreEqual(expected.Authors, actual.Authors, "Wrong author"); Assert.AreEqual(expected.RightsManagement, actual.RightsManagement, "Wrong rights Management"); Assert.AreEqual(expected.Publisher, actual.Publisher, "Wrong publisher"); Assert.AreEqual(expected.Version, actual.Version, "Wrong version"); Assert.AreEqual(expected.Key, actual.Key, "Wrong key"); Assert.AreEqual(expected.Transposition, actual.Transposition, "Wrong transposition"); Assert.AreEqual(expected.Tempo, actual.Tempo, "Wrong tempo"); Assert.AreEqual(expected.Variant, actual.Variant, "Wrong variant"); Assert.AreEqual(expected.Themes[0], actual.Themes[0], "Wrong theme"); Assert.AreEqual(expected.Comment, actual.Comment, "Wrong comment"); Assert.AreEqual(expected.SongBooks[0].Name, actual.SongBooks[0].Name, "Wrong songbook"); Assert.AreEqual(expected.Parts.Count, actual.Parts.Count, "Parts incomplete"); for (int i = 0; i < expected.Parts.Count; i++) { Assert.AreEqual(expected.Parts[i].Caption, actual.Parts[i].Caption, "Wrong verse name in verse " + i); Assert.AreEqual(expected.Parts[i].Slides.Count, actual.Parts[i].Slides.Count, "Slides incomplete in verse " + i); for (int j = 0; j < expected.Parts[i].Slides.Count; j++) { Assert.AreEqual(expected.Parts[i].Slides[j].Background, actual.Parts[i].Slides[j].Background, "Wrong image paths"); CollectionAssert.AreEqual(expected.Parts[i].Slides[j].Lines, actual.Parts[i].Slides[j].Lines, "Slide lines incomplete in verse " + i + " slide " + j); CollectionAssert.AreEqual(expected.Parts[i].Slides[j].Translation, actual.Parts[i].Slides[j].Translation, "Slide translation lines incomplete in verse " + i + " slide " + j); } } CollectionAssert.AreEqual(expected.PartSequence, actual.PartSequence, "Wrong part sequence"); Assert.AreEqual(expected.QualityIssues, actual.QualityIssues, "Wrong QA issues"); Assert.AreEqual(expected.Formatting.MainText.Font, actual.Formatting.MainText.Font); Assert.AreEqual(expected.Formatting.MainText.Color.ToArgb(), actual.Formatting.MainText.Color.ToArgb()); Assert.AreEqual(expected.Formatting.MainText.Outline.Color.ToArgb(), actual.Formatting.MainText.Outline.Color.ToArgb()); Assert.AreEqual(expected.Formatting.MainText.Outline.Width, actual.Formatting.MainText.Outline.Width); Assert.AreEqual(expected.Formatting.MainText.Shadow.Color.ToArgb(), actual.Formatting.MainText.Shadow.Color.ToArgb()); Assert.AreEqual(expected.Formatting.MainText.Shadow.Direction, actual.Formatting.MainText.Shadow.Direction); Assert.AreEqual(expected.Formatting.MainText.Shadow.Distance, actual.Formatting.MainText.Shadow.Distance); Assert.AreEqual(expected.Formatting.MainLineSpacing, actual.Formatting.MainLineSpacing); Assert.AreEqual(expected.Formatting.TranslationText.Font, actual.Formatting.TranslationText.Font); Assert.AreEqual(expected.Formatting.TranslationText.Color.ToArgb(), actual.Formatting.TranslationText.Color.ToArgb()); Assert.AreEqual(expected.Formatting.TranslationText.Outline.Color.ToArgb(), actual.Formatting.TranslationText.Outline.Color.ToArgb()); Assert.AreEqual(expected.Formatting.TranslationText.Outline.Width, actual.Formatting.TranslationText.Outline.Width); Assert.AreEqual(expected.Formatting.TranslationText.Shadow.Color.ToArgb(), actual.Formatting.TranslationText.Shadow.Color.ToArgb()); Assert.AreEqual(expected.Formatting.TranslationText.Shadow.Direction, actual.Formatting.TranslationText.Shadow.Direction); Assert.AreEqual(expected.Formatting.TranslationText.Shadow.Distance, actual.Formatting.TranslationText.Shadow.Distance); Assert.AreEqual(expected.Formatting.TranslationLineSpacing, actual.Formatting.TranslationLineSpacing); Assert.AreEqual(expected.Formatting.CopyrightText.Font, actual.Formatting.CopyrightText.Font); Assert.AreEqual(expected.Formatting.CopyrightText.Color.ToArgb(), actual.Formatting.CopyrightText.Color.ToArgb()); Assert.AreEqual(expected.Formatting.CopyrightText.Outline.Color.ToArgb(), actual.Formatting.CopyrightText.Outline.Color.ToArgb()); Assert.AreEqual(expected.Formatting.CopyrightText.Outline.Width, actual.Formatting.CopyrightText.Outline.Width); Assert.AreEqual(expected.Formatting.CopyrightText.Shadow.Color.ToArgb(), actual.Formatting.CopyrightText.Shadow.Color.ToArgb()); Assert.AreEqual(expected.Formatting.CopyrightText.Shadow.Direction, actual.Formatting.CopyrightText.Shadow.Direction); Assert.AreEqual(expected.Formatting.CopyrightText.Shadow.Distance, actual.Formatting.CopyrightText.Shadow.Distance); Assert.AreEqual(expected.Formatting.SourceText.Font, actual.Formatting.SourceText.Font); Assert.AreEqual(expected.Formatting.SourceText.Color.ToArgb(), actual.Formatting.SourceText.Color.ToArgb()); Assert.AreEqual(expected.Formatting.SourceText.Outline.Color.ToArgb(), actual.Formatting.SourceText.Outline.Color.ToArgb()); Assert.AreEqual(expected.Formatting.SourceText.Outline.Width, actual.Formatting.SourceText.Outline.Width); Assert.AreEqual(expected.Formatting.SourceText.Shadow.Color.ToArgb(), actual.Formatting.SourceText.Shadow.Color.ToArgb()); Assert.AreEqual(expected.Formatting.SourceText.Shadow.Direction, actual.Formatting.SourceText.Shadow.Direction); Assert.AreEqual(expected.Formatting.SourceText.Shadow.Distance, actual.Formatting.SourceText.Shadow.Distance); Assert.AreEqual(expected.Formatting.TextOrientation, actual.Formatting.TextOrientation); Assert.AreEqual(expected.Formatting.TextOutlineEnabled, actual.Formatting.TextOutlineEnabled); Assert.AreEqual(expected.Formatting.TextShadowEnabled, actual.Formatting.TextShadowEnabled); Assert.AreEqual(expected.Formatting.TextBorders.TextLeft, actual.Formatting.TextBorders.TextLeft); Assert.AreEqual(expected.Formatting.TextBorders.TextTop, actual.Formatting.TextBorders.TextTop); Assert.AreEqual(expected.Formatting.TextBorders.TextRight, actual.Formatting.TextBorders.TextRight); Assert.AreEqual(expected.Formatting.TextBorders.TextBottom, actual.Formatting.TextBorders.TextBottom); Assert.AreEqual(expected.Formatting.TextBorders.CopyrightBottom, actual.Formatting.TextBorders.CopyrightBottom); Assert.AreEqual(expected.Formatting.TextBorders.SourceRight, actual.Formatting.TextBorders.SourceRight); Assert.AreEqual(expected.Formatting.TextBorders.SourceTop, actual.Formatting.TextBorders.SourceTop); Assert.IsTrue(SongSearchUtil.GetSearchableSongText(actual).Contains("näher mein gott zu dir")); Assert.IsTrue(SongSearchUtil.GetSearchableSongText(actual).Contains("geborgen")); }
public void LoadSimpleTest() { OpenLyricsSongFileMapper mapper = new OpenLyricsSongFileMapper(); OpenLyricsSong source = new OpenLyricsSong { Title = "Amazing Grace", ModifiedTimestamp = "2012-04-10T22:00:00+10:00", CreatedIn = "OpenLP 1.9.0", ModifiedIn = "MyApp 0.0.1" }; OpenLyricsSong.Verse verse = new OpenLyricsSong.Verse { Name = "v1" }; OpenLyricsSong.TextLines lines = new OpenLyricsSong.TextLines(); lines.Text.Add("Amazing grace how sweet the sound"); lines.Text.Add("that saved a wretch like me;"); verse.Lines.Add(lines); source.Verses.Add(verse); Song expected = new Song { Title = "Amazing Grace", ModifiedTimestamp = "2012-04-10T22:00:00+10:00", CreatedIn = "OpenLP 1.9.0", ModifiedIn = "MyApp 0.0.1" }; var part = new SongPart { Caption = "v1" }; var slide = new SongSlide { Text = "Amazing grace how sweet the sound<br/>that saved a wretch like me;" }; part.Slides.Add(slide); expected.Parts.Add(part); var actual = mapper.Map(source); Assert.AreEqual(expected.Title, actual.Title, "Wrong song title"); Assert.AreEqual(expected.ModifiedTimestamp, actual.ModifiedTimestamp, "Wrong song modified date"); Assert.AreEqual(expected.CreatedIn, actual.CreatedIn, "Wrong creator app"); Assert.AreEqual(expected.ModifiedIn, actual.ModifiedIn, "Wrong modifier app"); Assert.AreEqual(expected.Parts.Count, actual.Parts.Count, "Parts incomplete"); for (int i = 0; i < expected.Parts.Count; i++) { Assert.AreEqual(expected.Parts[i].Caption, actual.Parts[i].Caption, "Wrong verse name"); Assert.AreEqual(expected.Parts[i].Slides.Count, actual.Parts[i].Slides.Count, "Slides incomplete"); for (int j = 0; j < expected.Parts[i].Slides.Count; j++) { Assert.AreEqual(expected.Parts[i].Slides[j].Lines.Count, actual.Parts[i].Slides[j].Lines.Count, "Slide lines incomplete"); for (int k = 0; k < expected.Parts[i].Slides[j].Lines.Count; k++) { Assert.AreEqual(expected.Parts[i].Slides[j].Lines[k], actual.Parts[i].Slides[j].Lines[k], "Wrong slide lyrics"); } } } Assert.IsTrue(SongSearchUtil.GetSearchableSongText(actual).Contains(expected.Title.ToLower())); Assert.IsTrue(SongSearchUtil.GetSearchableSongText(actual).Contains("sweet")); }
/// <summary> /// Search the songlist for a given pattern and returns the matching songs /// </summary> /// <param name="needle">The search pattern</param> /// <param name="searchMode"> /// If set to 1, the sogtext is also searched for the pattern. If set to 0, only the song title /// will be used /// </param> /// <returns>Returns a list of matches songs</returns> public Dictionary <string, SongItem> GetSearchResults(string needle, SongSearchMode searchMode) { needle = SongSearchUtil.PrepareSearchText(needle); return(SongList.Where(kvp => kvp.Value.Song.Title.ToLower().Contains(needle) || (searchMode == SongSearchMode.TitleAndText && kvp.Value.SearchText.Contains(needle))).ToDictionary(kvp => kvp.Key, kvp => kvp.Value)); }