From ce9e426baef0e4fcb51fff823fe6c8910179c2a3 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 25 Feb 2013 00:17:14 +0100 Subject: [PATCH 1/4] Refactored sorting and filtering --- .gitignore | 4 + Vocaluxe/Base/CSongs.cs | 864 ++++++++++------------------- VocaluxeLib/Menu/SongMenu/CSong.cs | 9 +- 3 files changed, 289 insertions(+), 588 deletions(-) diff --git a/.gitignore b/.gitignore index dc52224f..1ea3fff8 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,7 @@ Output/Songs /Vocaluxe/Vocaluxe.csproj.user /Output/Config.xml + +*.ipch + +*.log diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 789b741f..c2456204 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -36,6 +36,7 @@ namespace Vocaluxe.Base static class CSongs { private static List _Songs = new List(); + private static List _FilteredSongs = new List(); private static SongPointer[] _SongsSortList = new SongPointer[0]; private static List _SongsForRandom = new List(); @@ -44,6 +45,7 @@ namespace Vocaluxe.Base private static bool _CoverLoaded = false; private static int _CoverLoadIndex = -1; private static int _CatIndex = -1; + private static bool _Init = false; private static List _Categories = new List(); private static List _CategoriesForRandom = new List(); @@ -379,6 +381,274 @@ namespace Vocaluxe.Base get { return _Categories.ToArray(); } } + private static void FilterSongs(String SearchFilter, bool ShowDuetSongs) + { + if (_Init && _SearchFilter == SearchFilter && _ShowDuetSongs == ShowDuetSongs) + return; + + _Init = true; + _SearchFilter = SearchFilter; + _ShowDuetSongs = ShowDuetSongs; + _FilteredSongs.Clear(); + + string[] searchStrings = null; + if (_SearchFilter != String.Empty) + searchStrings = _SearchFilter.ToUpper().Split(new char[] { ' ' }); + + foreach (CSong song in _Songs) + { + if (!song.IsDuet || _ShowDuetSongs) + { + if (_SearchFilter == String.Empty) + _FilteredSongs.Add(song); + else if (searchStrings != null) + { + string search = song.Title.ToUpper() + " " + song.Artist.ToUpper() + " " + song.FolderName.ToUpper() + " " + song.FileName.ToUpper(); + + bool contains = true; + + foreach (string str in searchStrings) + { + contains &= search.Contains(str); + } + if (contains) + _FilteredSongs.Add(song); + } + } + } + } + + private static void SortSongs() + { + List SortList = new List(); + switch (_SongSorting) + { + case ESongSorting.TR_CONFIG_EDITION: + foreach (CSong song in _FilteredSongs) + { + if (song.Edition.Count == 0) + SortList.Add(new SongPointer(song.ID, "")); + else + { + foreach (String edition in song.Edition) + { + SortList.Add(new SongPointer(song.ID, edition)); + } + } + } + break; + + case ESongSorting.TR_CONFIG_GENRE: + foreach (CSong song in _FilteredSongs) + { + if (song.Genre.Count == 0) + SortList.Add(new SongPointer(song.ID, "")); + else + { + foreach (String genre in song.Genre) + { + SortList.Add(new SongPointer(song.ID, genre)); + } + } + } + break; + + case ESongSorting.TR_CONFIG_FOLDER: + foreach (CSong song in _FilteredSongs) + { + SortList.Add(new SongPointer(song.ID, song.FolderName)); + } + break; + + case ESongSorting.TR_CONFIG_ARTIST: + foreach (CSong song in _FilteredSongs) + { + SortList.Add(new SongPointer(song.ID, song.Artist)); + } + break; + + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + foreach (CSong song in _FilteredSongs) + { + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + SortList.Add(new SongPointer(song.ID, song.ArtistSorting)); + else + SortList.Add(new SongPointer(song.ID, song.Artist)); + } + break; + + case ESongSorting.TR_CONFIG_NONE: + case ESongSorting.TR_CONFIG_TITLE_LETTER: + foreach (CSong song in _FilteredSongs) + { + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + SortList.Add(new SongPointer(song.ID, song.TitleSorting)); + else + SortList.Add(new SongPointer(song.ID, song.Title)); + } + break; + + case ESongSorting.TR_CONFIG_DECADE: + foreach (CSong song in _FilteredSongs) + { + string sortString = song.Year; + if (sortString == "0000") + sortString = ""; + else + { + sortString = sortString.Substring(0, 3); + sortString += "0 - " + sortString + "9"; + } + SortList.Add(new SongPointer(song.ID, sortString)); + } + break; + case ESongSorting.TR_CONFIG_YEAR: + foreach (CSong song in _FilteredSongs) + { + SortList.Add(new SongPointer(song.ID, song.Year)); + } + break; + + case ESongSorting.TR_CONFIG_LANGUAGE: + foreach (CSong song in _FilteredSongs) + { + if (song.Language.Count == 0) + SortList.Add(new SongPointer(song.ID, "")); + else + { + foreach (String language in song.Language) + { + SortList.Add(new SongPointer(song.ID, language)); + } + } + } + break; + default: + break; + } + SortList.Sort(delegate(SongPointer s1, SongPointer s2) + { + int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); + if (res == 0) + { + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + { + res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); + if (res == 0) + { + return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); + } + return res; + } + else + { + res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); + if (res == 0) + { + return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); + } + return res; + } + } + return res; + }); + _SongsSortList = SortList.ToArray(); + } + + private static void FillCategories() + { + string category = ""; + string NoCategoryName = ""; + bool done = false; + + switch (_SongSorting) + { + case ESongSorting.TR_CONFIG_EDITION: + NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOEDITION"); + break; + case ESongSorting.TR_CONFIG_GENRE: + NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOGENRE"); + break; + case ESongSorting.TR_CONFIG_DECADE: + case ESongSorting.TR_CONFIG_YEAR: + NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOYEAR"); + break; + case ESongSorting.TR_CONFIG_LANGUAGE: + NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE"); + break; + case ESongSorting.TR_CONFIG_FOLDER: + case ESongSorting.TR_CONFIG_ARTIST: + break; + case ESongSorting.TR_CONFIG_NONE: + for (int i = 0; i < _SongsSortList.Length; i++) + { + _SongsSortList[i].CatIndex = 0; + } + category = CLanguage.Translate("TR_SCREENSONG_ALLSONGS"); + _Categories.Add(new CCategory(category)); + done = true; + break; + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + case ESongSorting.TR_CONFIG_TITLE_LETTER: + int NotLetterCat = -1; + for (int i = 0; i < _SongsSortList.Length; i++) + { + Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]); + + if (!Char.IsLetter(firstLetter)) + { + firstLetter = '#'; + } + if (firstLetter.ToString() != category) + { + if (firstLetter != '#' || NotLetterCat == -1) + { + category = firstLetter.ToString(); + _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); + + _SongsSortList[i].CatIndex = _Categories.Count - 1; + + if (firstLetter == '#') + NotLetterCat = _SongsSortList[i].CatIndex; + } + else + _SongsSortList[i].CatIndex = NotLetterCat; + } + else + _SongsSortList[i].CatIndex = _Categories.Count - 1; + } + done = true; + break; + default: + break; + } + if (!done) + { + for (int i = 0; i < _SongsSortList.Length; i++) + { + if (_SongsSortList[i].SortString.Length > 0) + { + if (_SongsSortList[i].SortString != category) + { + category = _SongsSortList[i].SortString; + _Categories.Add(new CCategory(category)); + } + _SongsSortList[i].CatIndex = _Categories.Count - 1; + } + else + { + if (NoCategoryName != category) + { + category = NoCategoryName; + _Categories.Add(new CCategory(category)); + } + _SongsSortList[i].CatIndex = _Categories.Count - 1; + } + } + + } + } + public static void Sort(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString) { _Sort(Sorting, Tabs, IgnoreArticles, SearchString, false, _ShowDuetSongs); @@ -397,606 +667,28 @@ namespace Vocaluxe.Base if (!force && Sorting == _SongSorting && Tabs == _Tabs && IgnoreArticles == _IgnoreArticles && SearchString == _SearchFilter && ShowDuetSongs == _ShowDuetSongs) return; //nothing to do - _Categories.Clear(); - string category = String.Empty; - _IgnoreArticles = IgnoreArticles; _SongSorting = Sorting; _Tabs = Tabs; - _ShowDuetSongs = ShowDuetSongs; - - _SearchFilter = SearchString; - - List _SortList = new List(); - List _SongList = new List(); - - foreach (CSong song in _Songs) - { - if (!song.IsDuet || _ShowDuetSongs) - { - if (_SearchFilter == String.Empty) - _SongList.Add(song); - else - { - string search = song.Title.ToUpper() + " " + song.Artist.ToUpper() + " " + song.FolderName.ToUpper() + " " + song.FileName.ToUpper(); - string[] searchStrings = _SearchFilter.ToUpper().Split(new char[]{' '}); - bool contains = searchStrings != null; - - foreach (string str in searchStrings) - { - contains &= search.Contains(str); - } - if (contains) - _SongList.Add(song); - } - } - } - - switch (_SongSorting) - { - case ESongSorting.TR_CONFIG_EDITION: - foreach (CSong song in _SongList) - { - if (song.Edition.Count == 0) - _SortList.Add(new SongPointer(song.ID, String.Empty)); - else - { - for (int i = 0; i < song.Edition.Count; i++) - { - _SortList.Add(new SongPointer(song.ID, song.Edition[i])); - } - } - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - return res; - } - else - { - res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - } - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - for (int i = 0; i < _SongsSortList.Length; i++ ) - { - if (_SongsSortList[i].SortString.Length > 0) - { - if (_SongsSortList[i].SortString != category) - { - category = _SongsSortList[i].SortString; - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - else - { - if (CLanguage.Translate("TR_SCREENSONG_NOEDITION") != category) - { - category = CLanguage.Translate("TR_SCREENSONG_NOEDITION"); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - } - break; - - case ESongSorting.TR_CONFIG_GENRE: - foreach (CSong song in _SongList) - { - if (song.Genre.Count == 0) - _SortList.Add(new SongPointer(song.ID, String.Empty)); - else - { - for (int i = 0; i < song.Genre.Count; i++) - { - _SortList.Add(new SongPointer(song.ID, song.Genre[i])); - } - } - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - return res; - } - else - { - res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - } - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - for (int i = 0; i < _SongsSortList.Length; i++) - { - if (_SongsSortList[i].SortString.Length > 0) - { - - if (_SongsSortList[i].SortString != category) - { - category = _SongsSortList[i].SortString; - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - else - { - if (CLanguage.Translate("TR_SCREENSONG_NOGENRE") != category) - { - category = CLanguage.Translate("TR_SCREENSONG_NOGENRE"); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - } - break; - - case ESongSorting.TR_CONFIG_NONE: - foreach (CSong song in _SongList) - { - _SortList.Add(new SongPointer(song.ID, String.Empty)); - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - for (int i = 0; i < _SongsSortList.Length; i++) - { - _SongsSortList[i].CatIndex = 0; - } - category = CLanguage.Translate("TR_SCREENSONG_ALLSONGS"); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - break; - - case ESongSorting.TR_CONFIG_FOLDER: - foreach (CSong song in _SongList) - { - _SortList.Add(new SongPointer(song.ID, song.FolderName)); - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - return res; - } - else - { - res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - } - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - for (int i = 0; i < _SongsSortList.Length; i++) - { - if (_SongsSortList[i].SortString != category) - { - category = _SongsSortList[i].SortString; - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - break; - - case ESongSorting.TR_CONFIG_ARTIST: - foreach (CSong song in _SongList) - { - _SortList.Add(new SongPointer(song.ID, song.Artist)); - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - int res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - return res; - } - else - { - int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - } - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - for (int i = 0; i < _SongsSortList.Length; i++) - { - if (_SongsSortList[i].SortString != category) - { - category = _SongsSortList[i].SortString; - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - break; - - case ESongSorting.TR_CONFIG_ARTIST_LETTER: - foreach (CSong song in _SongList) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - _SortList.Add(new SongPointer(song.ID, song.ArtistSorting)); - else - _SortList.Add(new SongPointer(song.ID, song.Artist)); - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - else - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - - int NotLetterCat = -1; - for (int i=0; i < _SongsSortList.Length; i++) - { - Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]); - - if (!Char.IsLetter(firstLetter)) - { - firstLetter = '#'; - } - if (firstLetter.ToString() != category) - { - if (firstLetter != '#' || NotLetterCat == -1) - { - category = firstLetter.ToString(); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - - _SongsSortList[i].CatIndex = _Categories.Count - 1; - - if (firstLetter == '#') - NotLetterCat = _SongsSortList[i].CatIndex; - } - else - _SongsSortList[i].CatIndex = NotLetterCat; - } - else - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - break; - - case ESongSorting.TR_CONFIG_TITLE_LETTER: - foreach (CSong song in _SongList) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - _SortList.Add(new SongPointer(song.ID, song.TitleSorting)); - else - _SortList.Add(new SongPointer(song.ID, song.Title)); - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - return _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - } - else - { - return _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); - } - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - - NotLetterCat = -1; - for (int i=0; i < _SongsSortList.Length; i++) - { - Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]); - - if (!Char.IsLetter(firstLetter)) - { - firstLetter = '#'; - } - if (firstLetter.ToString() != category) - { - if (firstLetter != '#' || NotLetterCat == -1) - { - category = firstLetter.ToString(); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - - _SongsSortList[i].CatIndex = _Categories.Count - 1; - - if (firstLetter == '#') - NotLetterCat = _SongsSortList[i].CatIndex; - } - else - _SongsSortList[i].CatIndex = NotLetterCat; - } - else - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - break; - - case ESongSorting.TR_CONFIG_DECADE: - foreach (CSong song in _SongList) - { - _SortList.Add(new SongPointer(song.ID, song.Year)); - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.CompareTo(s2.SortString); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - return res; - } - else - { - res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - } - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - for (int i=0; i < _SongsSortList.Length; i++) - { - if (_SongsSortList[i].SortString.Length > 0 && !_SongsSortList[i].SortString.Equals("0000")) - { - String decade = _SongsSortList[i].SortString.Substring(0, 3) + "0 - " + _SongsSortList[i].SortString.Substring(0, 3) + "9"; - if (decade != category) - { - category = decade; - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - else - { - if (CLanguage.Translate("TR_SCREENSONG_NOYEAR") != category) - { - category = CLanguage.Translate("TR_SCREENSONG_NOYEAR"); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - } - break; - - case ESongSorting.TR_CONFIG_YEAR: - foreach (CSong song in _SongList) - { - _SortList.Add(new SongPointer(song.ID, song.Year)); - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.CompareTo(s2.SortString); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - return res; - } - else - { - res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - } - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - for (int i=0; i < _SongsSortList.Length; i++) - { - if (_SongsSortList[i].SortString.Length > 0 && !_SongsSortList[i].SortString.Equals("0000")) - { - if (_SongsSortList[i].SortString != category) - { - category = _SongsSortList[i].SortString; - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - else - { - if (CLanguage.Translate("TR_SCREENSONG_NOYEAR") != category) - { - category = CLanguage.Translate("TR_SCREENSONG_NOYEAR"); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - } - break; - - case ESongSorting.TR_CONFIG_LANGUAGE: - foreach (CSong song in _SongList) - { - if (song.Language.Count == 0) - _SortList.Add(new SongPointer(song.ID, String.Empty)); - else - { - for (int i = 0; i < song.Language.Count; i++) - { - _SortList.Add(new SongPointer(song.ID, song.Language[i])); - } - } - } - - _SortList.Sort(delegate(SongPointer s1, SongPointer s2) - { - int res = s1.SortString.CompareTo(s2.SortString); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - return res; - } - else - { - res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - } - } - return res; - }); - - _SongsSortList = _SortList.ToArray(); - _Categories.Clear(); - for (int i=0; i < _SongsSortList.Length; i++) - { - if (_SongsSortList[i].SortString.Length > 0) - { - if (_SongsSortList[i].SortString != category) - { - category = _SongsSortList[i].SortString; - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - else - { - if (CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE") != category) - { - category = CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE"); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - } - break; - default: - break; - } + FilterSongs(SearchString, ShowDuetSongs); + SortSongs(); + _Categories.Clear(); if (_Tabs == EOffOn.TR_CONFIG_OFF) { - _Categories.Clear(); - _Categories.Add(new CCategory("", new STexture(-1), new STexture(-1))); + //No categories. So don't create them! + _Categories.Add(new CCategory("")); for (int i = 0; i < _SongsSortList.Length; i++) { _SongsSortList[i].CatIndex = 0; } - } + }else + FillCategories(); foreach (CCategory cat in _Categories) { - STexture cover = CCover.Cover(cat.Name); - cat.CoverTextureSmall = cover; + cat.CoverTextureSmall = CCover.Cover(cat.Name); } Category = _CatIndex; } diff --git a/VocaluxeLib/Menu/SongMenu/CSong.cs b/VocaluxeLib/Menu/SongMenu/CSong.cs index 22b10840..cc10fafa 100644 --- a/VocaluxeLib/Menu/SongMenu/CSong.cs +++ b/VocaluxeLib/Menu/SongMenu/CSong.cs @@ -31,8 +31,13 @@ namespace Vocaluxe.Menu.SongMenu public class CCategory { public string Name = String.Empty; - public STexture CoverTextureSmall = new STexture(); - public STexture CoverTextureBig = new STexture(); + public STexture CoverTextureSmall = new STexture(-1); + public STexture CoverTextureBig = new STexture(-1); + + public CCategory(string name) + { + Name = name; + } public CCategory(string name, STexture CoverSmall, STexture CoverBig) { From e6f70daf63d72d53de72b08ebefcb8438b5b8de7 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 25 Feb 2013 18:32:41 +0100 Subject: [PATCH 2/4] Further simplification of sorting/filtering --- Vocaluxe/Base/CSongs.cs | 361 +++++++++++++++-------------- VocaluxeLib/Menu/SongMenu/CSong.cs | 5 +- 2 files changed, 185 insertions(+), 181 deletions(-) diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index c2456204..74cb7faf 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -6,6 +6,7 @@ using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Threading; +using System.Reflection; using Vocaluxe.Lib.Draw; @@ -381,7 +382,7 @@ namespace Vocaluxe.Base get { return _Categories.ToArray(); } } - private static void FilterSongs(String SearchFilter, bool ShowDuetSongs) + private static void _FilterSongs(String SearchFilter, bool ShowDuetSongs) { if (_Init && _SearchFilter == SearchFilter && _ShowDuetSongs == ShowDuetSongs) return; @@ -418,148 +419,200 @@ namespace Vocaluxe.Base } } + private static int _SortByFieldArtistTitle(SongPointer s1, SongPointer s2) + { + int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); + if (res == 0) + { + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + { + res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); + if (res == 0) + { + return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); + } + return res; + } + else + { + res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); + if (res == 0) + { + return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); + } + return res; + } + } + return res; + } + + private static int _SortByFieldTitle(SongPointer s1, SongPointer s2) + { + int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); + if (res == 0) + { + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); + else + return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); + } + return res; + } + + private static List _CreateSortList(string fieldName) + { + FieldInfo field = null; + bool isString = false; + List SortList = new List(); + if (fieldName == String.Empty) + _FilteredSongs.ForEach((song) => SortList.Add(new SongPointer(song.ID, ""))); + { + field = Type.GetType("Vocaluxe.Menu.SongMenu.CSong,VocaluxeLib").GetField(fieldName, BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public); + isString = field.FieldType == typeof(string); + if (!isString && field.FieldType != typeof(List)) + throw new Exception("Unkown sort field type"); + foreach (CSong song in _FilteredSongs) + { + object value = field.GetValue(song); + if (isString) + SortList.Add(new SongPointer(song.ID, (String)value)); + else + { + List values = (List)value; + if (values.Count == 0) + { + SortList.Add(new SongPointer(song.ID, "")); + } + else + { + foreach (String sortString in (List)value) + { + SortList.Add(new SongPointer(song.ID, sortString)); + } + } + } + } + } + return SortList; + } + private static void SortSongs() { - List SortList = new List(); + String fieldName; switch (_SongSorting) { case ESongSorting.TR_CONFIG_EDITION: - foreach (CSong song in _FilteredSongs) - { - if (song.Edition.Count == 0) - SortList.Add(new SongPointer(song.ID, "")); - else - { - foreach (String edition in song.Edition) - { - SortList.Add(new SongPointer(song.ID, edition)); - } - } - } + fieldName = "Edition"; break; - case ESongSorting.TR_CONFIG_GENRE: - foreach (CSong song in _FilteredSongs) - { - if (song.Genre.Count == 0) - SortList.Add(new SongPointer(song.ID, "")); - else - { - foreach (String genre in song.Genre) - { - SortList.Add(new SongPointer(song.ID, genre)); - } - } - } + fieldName = "Genre"; break; - case ESongSorting.TR_CONFIG_FOLDER: - foreach (CSong song in _FilteredSongs) - { - SortList.Add(new SongPointer(song.ID, song.FolderName)); - } + fieldName = "FolderName"; break; - - case ESongSorting.TR_CONFIG_ARTIST: - foreach (CSong song in _FilteredSongs) - { - SortList.Add(new SongPointer(song.ID, song.Artist)); - } - break; - case ESongSorting.TR_CONFIG_ARTIST_LETTER: - foreach (CSong song in _FilteredSongs) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - SortList.Add(new SongPointer(song.ID, song.ArtistSorting)); - else - SortList.Add(new SongPointer(song.ID, song.Artist)); - } + case ESongSorting.TR_CONFIG_ARTIST: + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + fieldName = "ArtistSorting"; + else + fieldName = "Artist"; break; - - case ESongSorting.TR_CONFIG_NONE: case ESongSorting.TR_CONFIG_TITLE_LETTER: - foreach (CSong song in _FilteredSongs) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - SortList.Add(new SongPointer(song.ID, song.TitleSorting)); - else - SortList.Add(new SongPointer(song.ID, song.Title)); - } - break; - - case ESongSorting.TR_CONFIG_DECADE: - foreach (CSong song in _FilteredSongs) - { - string sortString = song.Year; - if (sortString == "0000") - sortString = ""; - else - { - sortString = sortString.Substring(0, 3); - sortString += "0 - " + sortString + "9"; - } - SortList.Add(new SongPointer(song.ID, sortString)); - } + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + fieldName = "TitleSorting"; + else + fieldName = "Title"; break; case ESongSorting.TR_CONFIG_YEAR: - foreach (CSong song in _FilteredSongs) - { - SortList.Add(new SongPointer(song.ID, song.Year)); - } + case ESongSorting.TR_CONFIG_DECADE: + fieldName = "Year"; break; - case ESongSorting.TR_CONFIG_LANGUAGE: - foreach (CSong song in _FilteredSongs) - { - if (song.Language.Count == 0) - SortList.Add(new SongPointer(song.ID, "")); - else - { - foreach (String language in song.Language) - { - SortList.Add(new SongPointer(song.ID, language)); - } - } - } + fieldName = "Language"; break; default: + fieldName = ""; break; } - SortList.Sort(delegate(SongPointer s1, SongPointer s2) + List SortList = _CreateSortList(fieldName); + switch (_SongSorting) { - int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper()); - if (res == 0) - { - if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) - { - res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper()); - } - return res; - } - else - { - res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper()); - if (res == 0) - { - return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper()); - } - return res; - } - } - return res; - }); + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + case ESongSorting.TR_CONFIG_ARTIST: + case ESongSorting.TR_CONFIG_NONE: + SortList.Sort(_SortByFieldTitle); + break; + default: + SortList.Sort(_SortByFieldArtistTitle); + break; + } _SongsSortList = SortList.ToArray(); } - private static void FillCategories() + private static void _CreateCategoriesLetter() { string category = ""; + int NotLetterCat = -1; + for (int i = 0; i < _SongsSortList.Length; i++) + { + Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]); + + if (!Char.IsLetter(firstLetter)) + { + firstLetter = '#'; + } + if (firstLetter.ToString() != category) + { + if (firstLetter != '#' || NotLetterCat == -1) + { + category = firstLetter.ToString(); + _Categories.Add(new CCategory(category)); + + _SongsSortList[i].CatIndex = _Categories.Count - 1; + + if (firstLetter == '#') + NotLetterCat = _SongsSortList[i].CatIndex; + } + else + _SongsSortList[i].CatIndex = NotLetterCat; + } + else + _SongsSortList[i].CatIndex = _Categories.Count - 1; + } + } + + private static void _CreateCategoriesNormal(string NoCategoryName) + { + string category = ""; + int NoCategoryIndex = -1; + for (int i = 0; i < _SongsSortList.Length; i++) + { + if (_SongsSortList[i].SortString.Length > 0) + { + if (_SongsSortList[i].SortString != category) + { + category = _SongsSortList[i].SortString; + _Categories.Add(new CCategory(category)); + } + _SongsSortList[i].CatIndex = _Categories.Count - 1; + } + else + { + if (NoCategoryIndex < 0) + { + category = NoCategoryName; + _Categories.Add(new CCategory(category)); + NoCategoryIndex = _Categories.Count - 1; + } + _SongsSortList[i].CatIndex = NoCategoryIndex; + } + } + + } + + private static void _FillCategories() + { string NoCategoryName = ""; - bool done = false; switch (_SongSorting) { @@ -576,77 +629,27 @@ namespace Vocaluxe.Base case ESongSorting.TR_CONFIG_LANGUAGE: NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE"); break; - case ESongSorting.TR_CONFIG_FOLDER: - case ESongSorting.TR_CONFIG_ARTIST: - break; case ESongSorting.TR_CONFIG_NONE: - for (int i = 0; i < _SongsSortList.Length; i++) - { - _SongsSortList[i].CatIndex = 0; - } - category = CLanguage.Translate("TR_SCREENSONG_ALLSONGS"); - _Categories.Add(new CCategory(category)); - done = true; - break; - case ESongSorting.TR_CONFIG_ARTIST_LETTER: - case ESongSorting.TR_CONFIG_TITLE_LETTER: - int NotLetterCat = -1; - for (int i = 0; i < _SongsSortList.Length; i++) - { - Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]); - - if (!Char.IsLetter(firstLetter)) - { - firstLetter = '#'; - } - if (firstLetter.ToString() != category) - { - if (firstLetter != '#' || NotLetterCat == -1) - { - category = firstLetter.ToString(); - _Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1))); - - _SongsSortList[i].CatIndex = _Categories.Count - 1; - - if (firstLetter == '#') - NotLetterCat = _SongsSortList[i].CatIndex; - } - else - _SongsSortList[i].CatIndex = NotLetterCat; - } - else - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - done = true; - break; - default: + NoCategoryName = CLanguage.Translate("TR_SCREENSONG_ALLSONGS"); break; } - if (!done) + if (_SongSorting == ESongSorting.TR_CONFIG_ARTIST_LETTER || _SongSorting == ESongSorting.TR_CONFIG_TITLE_LETTER) + _CreateCategoriesLetter(); + else { - for (int i = 0; i < _SongsSortList.Length; i++) - { - if (_SongsSortList[i].SortString.Length > 0) + if(_SongSorting==ESongSorting.TR_CONFIG_DECADE) + for (int i = 0; i < _SongsSortList.Length; i++) { - if (_SongsSortList[i].SortString != category) + string Year = _SongsSortList[i].SortString; + if (Year != "") { - category = _SongsSortList[i].SortString; - _Categories.Add(new CCategory(category)); + Year = Year.Substring(0, 3); + _SongsSortList[i].SortString = Year + "0 - " + Year + "9"; } - _SongsSortList[i].CatIndex = _Categories.Count - 1; } - else - { - if (NoCategoryName != category) - { - category = NoCategoryName; - _Categories.Add(new CCategory(category)); - } - _SongsSortList[i].CatIndex = _Categories.Count - 1; - } - } - + _CreateCategoriesNormal(NoCategoryName); } + } public static void Sort(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString) @@ -671,7 +674,7 @@ namespace Vocaluxe.Base _SongSorting = Sorting; _Tabs = Tabs; - FilterSongs(SearchString, ShowDuetSongs); + _FilterSongs(SearchString, ShowDuetSongs); SortSongs(); _Categories.Clear(); @@ -684,7 +687,7 @@ namespace Vocaluxe.Base _SongsSortList[i].CatIndex = 0; } }else - FillCategories(); + _FillCategories(); foreach (CCategory cat in _Categories) { diff --git a/VocaluxeLib/Menu/SongMenu/CSong.cs b/VocaluxeLib/Menu/SongMenu/CSong.cs index cc10fafa..8e51fb0b 100644 --- a/VocaluxeLib/Menu/SongMenu/CSong.cs +++ b/VocaluxeLib/Menu/SongMenu/CSong.cs @@ -176,7 +176,8 @@ namespace Vocaluxe.Menu.SongMenu public List Edition = new List(); public List Genre = new List(); - public string Year = "0000"; + public string Year = ""; + public List Language = new List(); // Notes @@ -449,7 +450,7 @@ namespace Vocaluxe.Menu.SongMenu break; case "YEAR": int num = 0; - if (Value.Length == 4 && int.TryParse(Value, out num)) + if (Value.Length == 4 && int.TryParse(Value, out num) && num != 0) { this.Year = Value; } From 78870ae26d9738eb2ea0bcd9474c48b7e61404dd Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 25 Feb 2013 19:54:00 +0100 Subject: [PATCH 3/4] CHelper now fully static --- Vocaluxe/Base/CBackgroundMusic.cs | 3 +-- Vocaluxe/Base/CCover.cs | 12 +++++------- Vocaluxe/Base/CLanguage.cs | 5 ++--- Vocaluxe/Base/CParty.cs | 6 ++---- Vocaluxe/Base/CPlaylists.cs | 5 ++--- Vocaluxe/Base/CProfiles.cs | 11 +++++------ Vocaluxe/Base/CSongs.cs | 5 ++--- Vocaluxe/Base/CTheme.cs | 8 ++------ Vocaluxe/Lib/Playlist/CPlaylistFile.cs | 1 - VocaluxeLib/Menu/CHelper.cs | 10 +++++----- VocaluxeLib/Menu/SongMenu/CSong.cs | 10 ++++------ 11 files changed, 30 insertions(+), 46 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 9284b73c..7137d260 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -15,7 +15,6 @@ namespace Vocaluxe.Base { static class CBackgroundMusic { - private static CHelper Helper = new CHelper(); private static int _CurrentMusicStream = -1; private static int _PreviousMusicIndex = 0; private static PlaylistElement _CurrentPlaylistElement = new PlaylistElement(); @@ -155,7 +154,7 @@ namespace Vocaluxe.Base foreach(string ending in CSettings.MusicFileTypes) { - templist.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, ending, true, true)); + templist.AddRange(CHelper.ListFiles(CSettings.sFolderBackgroundMusic, ending, true, true)); } foreach (string path in templist) diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index 87138cfc..dc402c45 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -157,9 +157,8 @@ namespace Vocaluxe.Base { _CoverThemes.Clear(); - CHelper Helper = new CHelper(); string path = CSettings.sFolderCover; - List files = Helper.ListFiles(path, "*.xml", false); + List files = CHelper.ListFiles(path, "*.xml", false); foreach (string file in files) { @@ -230,13 +229,12 @@ namespace Vocaluxe.Base } } - CHelper Helper = new CHelper(); List files = new List(); - files.AddRange(Helper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.png", true, true)); - files.AddRange(Helper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.jpg", true, true)); - files.AddRange(Helper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.jpeg", true, true)); - files.AddRange(Helper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.bmp", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.png", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.jpg", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.jpeg", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.bmp", true, true)); foreach (string file in files) diff --git a/Vocaluxe/Base/CLanguage.cs b/Vocaluxe/Base/CLanguage.cs index bc366e11..1c9b13ad 100644 --- a/Vocaluxe/Base/CLanguage.cs +++ b/Vocaluxe/Base/CLanguage.cs @@ -28,7 +28,6 @@ namespace Vocaluxe.Base { private static XmlWriterSettings _settings = new XmlWriterSettings(); private static List _Languages; - private static CHelper Helper = new CHelper(); private static int _CurrentLanguage = 0; private static int _FallbackLanguage = 0; @@ -62,7 +61,7 @@ namespace Vocaluxe.Base _settings.ConformanceLevel = ConformanceLevel.Document; List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderLanguages, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderLanguages, "*.xml", true, true)); foreach (string file in files) { @@ -228,7 +227,7 @@ namespace Vocaluxe.Base public static bool LoadPartyLanguageFiles(int PartyModeID, string Path) { List files = new List(); - files.AddRange(Helper.ListFiles(Path, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(Path, "*.xml", true, true)); foreach (string file in files) { diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index e8bd61ec..3ade852f 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -34,7 +34,6 @@ namespace Vocaluxe.Base { const int PartyModeSystemVersion = 1; - private static CHelper Helper; private static Dictionary _PartyModes; private static Queue _IDs; @@ -44,7 +43,6 @@ namespace Vocaluxe.Base #region public stuff public static void Init() { - Helper = new CHelper(); _PartyModes = new Dictionary(); _IDs = new Queue(1000); @@ -206,7 +204,7 @@ namespace Vocaluxe.Base private static void LoadPartyModes() { List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderPartyModes, "*.xml", false, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderPartyModes, "*.xml", false, true)); foreach (string file in files) { @@ -269,7 +267,7 @@ namespace Vocaluxe.Base string PathToCode = Path.Combine(Path.Combine(CSettings.sFolderPartyModes, pm.Folder), CSettings.sFolderPartyModeCode); List FilesToCompile = new List(); - FilesToCompile.AddRange(Helper.ListFiles(PathToCode, "*.cs", false, true)); + FilesToCompile.AddRange(CHelper.ListFiles(PathToCode, "*.cs", false, true)); Assembly Output = CompileFiles(FilesToCompile.ToArray()); if (Output == null) diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index 6a0fc124..70569215 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -15,7 +15,6 @@ namespace Vocaluxe.Base static class CPlaylists { private static List _Playlists; - private static CHelper Helper = new CHelper(); public static CPlaylistFile[] Playlists { @@ -51,7 +50,7 @@ namespace Vocaluxe.Base public static void ConvertUSDXPlaylists() { List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderPlaylists, "*.upl", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderPlaylists, "*.upl", true, true)); foreach (string file in files) { @@ -65,7 +64,7 @@ namespace Vocaluxe.Base { _Playlists = new List(); List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderPlaylists, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderPlaylists, "*.xml", true, true)); foreach (string file in files) { diff --git a/Vocaluxe/Base/CProfiles.cs b/Vocaluxe/Base/CProfiles.cs index 8b7712cc..686f5c4a 100644 --- a/Vocaluxe/Base/CProfiles.cs +++ b/Vocaluxe/Base/CProfiles.cs @@ -12,7 +12,6 @@ namespace Vocaluxe.Base static class CProfiles { private static XmlWriterSettings _settings = new XmlWriterSettings(); - private static CHelper Helper = new CHelper(); private static List _Profiles; private static List _Avatars = new List(); @@ -86,7 +85,7 @@ namespace Vocaluxe.Base { _Profiles = new List(); List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.xml", true, true)); foreach (string file in files) { @@ -106,10 +105,10 @@ namespace Vocaluxe.Base _Avatars.Clear(); List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.png", true, true)); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.jpg", true, true)); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.jpeg", true, true)); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.bmp", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.png", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.jpg", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.jpeg", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.bmp", true, true)); foreach (string file in files) { diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 74cb7faf..16b288c1 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -41,7 +41,6 @@ namespace Vocaluxe.Base private static SongPointer[] _SongsSortList = new SongPointer[0]; private static List _SongsForRandom = new List(); - private static CHelper Helper = new CHelper(); private static bool _SongsLoaded = false; private static bool _CoverLoaded = false; private static int _CoverLoadIndex = -1; @@ -707,8 +706,8 @@ namespace Vocaluxe.Base foreach (string p in CConfig.SongFolder) { string path = p; - files.AddRange(Helper.ListFiles(path, "*.txt", true, true)); - files.AddRange(Helper.ListFiles(path, "*.txd", true, true)); + files.AddRange(CHelper.ListFiles(path, "*.txt", true, true)); + files.AddRange(CHelper.ListFiles(path, "*.txd", true, true)); } CLog.StopBenchmark(2, "List Songs"); diff --git a/Vocaluxe/Base/CTheme.cs b/Vocaluxe/Base/CTheme.cs index 6c5dcf13..cbd80aab 100644 --- a/Vocaluxe/Base/CTheme.cs +++ b/Vocaluxe/Base/CTheme.cs @@ -406,11 +406,10 @@ namespace Vocaluxe.Base private static void ListThemes() { - CHelper Helper = new CHelper(); _Themes.Clear(); string path = Path.Combine(Directory.GetCurrentDirectory(), CSettings.sFolderThemes); - List files = Helper.ListFiles(path, "*.xml", false); + List files = CHelper.ListFiles(path, "*.xml", false); foreach (string file in files) { @@ -469,7 +468,6 @@ namespace Vocaluxe.Base public static void ListSkins() { - CHelper Helper = new CHelper(); int themeIndex = GetThemeIndex(-1); _Skins.Clear(); @@ -483,8 +481,6 @@ namespace Vocaluxe.Base public static void ListSkins(int ThemeIndex) { - CHelper Helper = new CHelper(); - if (ThemeIndex < 0 || ThemeIndex >= _Themes.Count) { CLog.LogError("Error List Skins. Can't find Theme index: " + ThemeIndex.ToString()); @@ -494,7 +490,7 @@ namespace Vocaluxe.Base Theme theme = _Themes[ThemeIndex]; string path = Path.Combine(theme.Path, theme.SkinFolder); - List files = Helper.ListFiles(path, "*.xml", false); + List files = CHelper.ListFiles(path, "*.xml", false); foreach (string file in files) { diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index db08989d..38cca523 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -14,7 +14,6 @@ namespace Vocaluxe.Lib.Playlist public class CPlaylistFile { private static XmlWriterSettings _settings = new XmlWriterSettings(); - private static CHelper Helper = new CHelper(); public string PlaylistName; public string PlaylistFile; diff --git a/VocaluxeLib/Menu/CHelper.cs b/VocaluxeLib/Menu/CHelper.cs index c6f49b82..67d8a75e 100644 --- a/VocaluxeLib/Menu/CHelper.cs +++ b/VocaluxeLib/Menu/CHelper.cs @@ -7,8 +7,9 @@ using System.Text; namespace Vocaluxe.Menu { - public class CHelper + public static class CHelper { + public static int nCk(int n, int k) { if (k > n) @@ -128,17 +129,17 @@ namespace Vocaluxe.Menu - public List ListFiles(string path, string cast) + public static List ListFiles(string path, string cast) { return ListFiles(path, cast, false, false); } - public List ListFiles(string path, string cast, bool recursive) + public static List ListFiles(string path, string cast, bool recursive) { return ListFiles(path, cast, recursive, false); } - public List ListFiles(string path, string cast, bool recursive, bool fullpath) + public static List ListFiles(string path, string cast, bool recursive, bool fullpath) { List files = new List(); DirectoryInfo dir = new DirectoryInfo(path); @@ -151,7 +152,6 @@ namespace Vocaluxe.Menu if (!fullpath) files.Add(file.Name); else - //files.Add(Path.Combine(file.DirectoryName, file.Name)); files.Add(file.FullName); } diff --git a/VocaluxeLib/Menu/SongMenu/CSong.cs b/VocaluxeLib/Menu/SongMenu/CSong.cs index 8e51fb0b..9dc01b08 100644 --- a/VocaluxeLib/Menu/SongMenu/CSong.cs +++ b/VocaluxeLib/Menu/SongMenu/CSong.cs @@ -818,11 +818,9 @@ namespace Vocaluxe.Menu.SongMenu private void CheckFiles() { - CHelper Helper = new CHelper(); - if(this.CoverFileName == String.Empty){ - List files = Helper.ListFiles(this.Folder, "*.jpg", false); - files.AddRange(Helper.ListFiles(this.Folder, "*.png", false)); + List files = CHelper.ListFiles(this.Folder, "*.jpg", false); + files.AddRange(CHelper.ListFiles(this.Folder, "*.png", false)); foreach(String file in files) { if (Regex.IsMatch(file, @".[CO].", RegexOptions.IgnoreCase) && (Regex.IsMatch(file, @"" + Regex.Escape(this.Title), RegexOptions.IgnoreCase) || Regex.IsMatch(file, @"" + Regex.Escape(this.Artist), RegexOptions.IgnoreCase))) @@ -834,8 +832,8 @@ namespace Vocaluxe.Menu.SongMenu if (this.BackgroundFileName == String.Empty) { - List files = Helper.ListFiles(this.Folder, "*.jpg", false); - files.AddRange(Helper.ListFiles(this.Folder, "*.png", false)); + List files = CHelper.ListFiles(this.Folder, "*.jpg", false); + files.AddRange(CHelper.ListFiles(this.Folder, "*.png", false)); foreach (String file in files) { From 13e856db16d5b8a1c766c618cd8ef4d8f94b9b44 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 25 Feb 2013 20:15:24 +0100 Subject: [PATCH 4/4] Made CXMLReader.OpenFile private so factory method has to be used --- Vocaluxe/Base/CConfig.cs | 14 ++------ Vocaluxe/Base/CFont.cs | 13 ++----- Vocaluxe/Base/CLanguage.cs | 24 +++---------- Vocaluxe/Base/CParty.cs | 13 ++----- Vocaluxe/Base/CProfiles.cs | 12 ++----- Vocaluxe/Base/CTheme.cs | 48 +++++--------------------- Vocaluxe/Lib/Playlist/CPlaylistFile.cs | 12 ++----- VocaluxeLib/Menu/CMenu.cs | 21 +++-------- VocaluxeLib/Menu/CXMLReader.cs | 7 ++-- 9 files changed, 33 insertions(+), 131 deletions(-) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index ecd3d5c1..9199d70f 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -121,19 +121,9 @@ namespace Vocaluxe.Base public static bool LoadConfig() { - #region Inits - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(CSettings.sFileConfig); - } - catch (Exception e) - { - CLog.LogError("Error opening Config.xml " + CSettings.sFileConfig + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(CSettings.sFileConfig); + if (xmlReader == null) return false; - } - #endregion Inits string value = string.Empty; diff --git a/Vocaluxe/Base/CFont.cs b/Vocaluxe/Base/CFont.cs index dbdc14f9..b1c96f2b 100644 --- a/Vocaluxe/Base/CFont.cs +++ b/Vocaluxe/Base/CFont.cs @@ -673,17 +673,10 @@ namespace Vocaluxe.Base /// private static bool LoadFontList() { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(System.IO.Path.Combine(CSettings.sFolderFonts, CSettings.sFileFonts)); - } - catch (Exception e) - { - CLog.LogError("Error loading default fonts: " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(System.IO.Path.Combine(CSettings.sFolderFonts, CSettings.sFileFonts)); + if (xmlReader == null) return false; - } + _Fonts.Clear(); string value = string.Empty; diff --git a/Vocaluxe/Base/CLanguage.cs b/Vocaluxe/Base/CLanguage.cs index 1c9b13ad..c81900b1 100644 --- a/Vocaluxe/Base/CLanguage.cs +++ b/Vocaluxe/Base/CLanguage.cs @@ -239,17 +239,9 @@ namespace Vocaluxe.Base private static bool LoadPartyLanguageFile(int PartyModeID, string file) { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(file); - } - catch (Exception e) - { - CLog.LogError("Error opening Party Language File " + file + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(file); + if (xmlReader == null) return false; - } string value = string.Empty; if (xmlReader.GetValue("//resources/string[@name='language']", ref value, value)) @@ -295,17 +287,9 @@ namespace Vocaluxe.Base SLanguage lang = new SLanguage(); lang.LanguageFilePath = Path.Combine(CSettings.sFolderLanguages, FileName); - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(lang.LanguageFilePath); - } - catch (Exception e) - { - CLog.LogError("Error opening Language File " + FileName + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(lang.LanguageFilePath); + if (xmlReader == null) return; - } string value = string.Empty; if (xmlReader.GetValue("//resources/string[@name='language']", ref value, value)) diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index 3ade852f..3774dad8 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -220,18 +220,11 @@ namespace Vocaluxe.Base pm.ScreenFiles = new List(); pm.NoErrors = false; - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(file); - } - catch (Exception e) - { - CLog.LogError("Error opening party mode file " + file + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(file); + //Error... + if (xmlReader == null) return pm; - } bool loaded = true; diff --git a/Vocaluxe/Base/CProfiles.cs b/Vocaluxe/Base/CProfiles.cs index 686f5c4a..df23a380 100644 --- a/Vocaluxe/Base/CProfiles.cs +++ b/Vocaluxe/Base/CProfiles.cs @@ -360,17 +360,9 @@ namespace Vocaluxe.Base SProfile profile = new SProfile(); profile.ProfileFile = Path.Combine(CSettings.sFolderProfiles, FileName); - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(profile.ProfileFile); - } - catch (Exception e) - { - CLog.LogError("Error opening Profile File " + FileName + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(profile.ProfileFile); + if (xmlReader == null) return; - } string value = String.Empty; if (xmlReader.GetValue("//root/Info/PlayerName", ref value, value)) diff --git a/Vocaluxe/Base/CTheme.cs b/Vocaluxe/Base/CTheme.cs index cbd80aab..a84e2874 100644 --- a/Vocaluxe/Base/CTheme.cs +++ b/Vocaluxe/Base/CTheme.cs @@ -147,17 +147,9 @@ namespace Vocaluxe.Base public static bool LoadSkin(int SkinIndex) { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(Path.Combine(_Skins[SkinIndex].Path, _Skins[SkinIndex].FileName)); - } - catch (Exception e) - { - CLog.LogError("Error loading skin " + _Skins[SkinIndex].FileName + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(_Skins[SkinIndex].Path, _Skins[SkinIndex].FileName)); + if (xmlReader == null) return false; - } string value = String.Empty; @@ -264,17 +256,9 @@ namespace Vocaluxe.Base return false; } - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(Path.Combine(_Themes[ThemeIndex].Path, _Themes[ThemeIndex].FileName)); - } - catch (Exception e) - { - CLog.LogError("Error loading theme " + _Themes[ThemeIndex].FileName + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(_Themes[ThemeIndex].Path, _Themes[ThemeIndex].FileName)); + if (xmlReader == null) return false; - } int skinIndex = GetSkinIndex(_Themes[ThemeIndex].PartyModeID); @@ -419,17 +403,9 @@ namespace Vocaluxe.Base public static bool AddTheme(string FilePath, int PartyModeID) { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(FilePath); - } - catch (Exception e) - { - CLog.LogError("Error loading theme " + FilePath + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(FilePath); + if (xmlReader == null) return false; - } Theme theme = new Theme(); @@ -494,17 +470,9 @@ namespace Vocaluxe.Base foreach (string file in files) { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(Path.Combine(path, file)); - } - catch (Exception e) - { - CLog.LogError("Error loading skin " + file + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(path, file)); + if (xmlReader == null) continue; - } Skin skin = new Skin(); diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index 38cca523..f0942bcc 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -120,17 +120,9 @@ namespace Vocaluxe.Lib.Playlist private void LoadPlaylist() { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(PlaylistFile); - } - catch (Exception e) - { - CLog.LogError("Error opening Playlist File " + PlaylistFile + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(PlaylistFile); + if (xmlReader == null) return; - } string value = String.Empty; if (xmlReader.GetValue("//root/Info/PlaylistName", ref value, value)) diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 977674c5..4f82474a 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -172,27 +172,16 @@ namespace Vocaluxe.Menu { string file = Path.Combine(XmlPath, _ThemeName + ".xml"); - CXMLReader xmlReader = null; - - try - { - xmlReader = new CXMLReader(file); - } - catch (Exception e) - { - if (xmlReader != null) - xmlReader = null; - - CBase.Log.LogError("Error loading theme file " + file + ": " + e.Message); - } + CXMLReader xmlReader = CXMLReader.OpenFile(file); + if (xmlReader == null) + return; bool VersionCheck = false; - if (xmlReader != null) - VersionCheck = CheckVersion(_ScreenVersion, xmlReader); + VersionCheck = CheckVersion(_ScreenVersion, xmlReader); int SkinIndex = CBase.Theme.GetSkinIndex(_PartyModeID); - if (xmlReader != null && VersionCheck && SkinIndex != -1) + if (VersionCheck && SkinIndex != -1) { _ThemePath = XmlPath; LoadThemeBasics(xmlReader, SkinIndex); diff --git a/VocaluxeLib/Menu/CXMLReader.cs b/VocaluxeLib/Menu/CXMLReader.cs index a176df21..2bf58133 100644 --- a/VocaluxeLib/Menu/CXMLReader.cs +++ b/VocaluxeLib/Menu/CXMLReader.cs @@ -9,7 +9,8 @@ namespace Vocaluxe.Menu { private XPathNavigator _Navigator; - public CXMLReader(string uri) + //Private method. Use OpenFile factory method to get an instance + private CXMLReader(string uri) { XPathDocument xPathDoc = new XPathDocument(uri); _Navigator = xPathDoc.CreateNavigator(); @@ -26,9 +27,9 @@ namespace Vocaluxe.Menu { return new CXMLReader(sUri); } - catch (Exception) + catch (Exception e) { - CBase.Log.LogError("Can't open XML file: " + sUri); + CBase.Log.LogError("Can't open XML file: " + sUri + ": " + e.Message); return null; } }