diff --git a/Output/Languages/de.xml b/Output/Languages/de.xml
index 79e97df3..06ea7c6f 100644
--- a/Output/Languages/de.xml
+++ b/Output/Languages/de.xml
@@ -65,6 +65,7 @@
Artist-Buchstabe
Titel-Buchstabe
Edition
+ Tags
Genre
Jahr
Dekade
@@ -148,6 +149,7 @@
Ohne Jahr
Ohne Genre
Ohne Edition
+ Ohne Tags
Alle Songs
(%v Lieder)
(%v Lied)
diff --git a/Output/Languages/en.xml b/Output/Languages/en.xml
index b315840e..8ada8fe4 100644
--- a/Output/Languages/en.xml
+++ b/Output/Languages/en.xml
@@ -65,6 +65,7 @@
Artist by letter
Title by letter
Edition
+ Tags
Genre
Year
Decade
@@ -148,6 +149,7 @@
No Year
No Genre
No Edition
+ No Tags
All Songs
(%v songs)
(%v song)
diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs
index f464d6d9..152d378a 100644
--- a/Vocaluxe/Base/CCover.cs
+++ b/Vocaluxe/Base/CCover.cs
@@ -252,6 +252,8 @@ namespace Vocaluxe.Base
return ECoverGeneratorType.Edition;
case ESongSorting.TR_CONFIG_GENRE:
return ECoverGeneratorType.Genre;
+ case ESongSorting.TR_CONFIG_TAGS:
+ return ECoverGeneratorType.Tags;
case ESongSorting.TR_CONFIG_LANGUAGE:
return ECoverGeneratorType.Language;
case ESongSorting.TR_CONFIG_YEAR:
diff --git a/Vocaluxe/Base/CSongCategorizer.cs b/Vocaluxe/Base/CSongCategorizer.cs
index 05a9dba4..8354cd3f 100644
--- a/Vocaluxe/Base/CSongCategorizer.cs
+++ b/Vocaluxe/Base/CSongCategorizer.cs
@@ -142,6 +142,9 @@ namespace Vocaluxe.Base
case ESongSorting.TR_CONFIG_GENRE:
noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOGENRE");
break;
+ case ESongSorting.TR_CONFIG_TAGS:
+ noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOTAGS");
+ break;
case ESongSorting.TR_CONFIG_LANGUAGE:
noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE");
break;
@@ -186,4 +189,4 @@ namespace Vocaluxe.Base
_Changed = false;
}
}
-}
\ No newline at end of file
+}
diff --git a/Vocaluxe/Base/CSongSorter.cs b/Vocaluxe/Base/CSongSorter.cs
index d4b59f13..cc253c0b 100644
--- a/Vocaluxe/Base/CSongSorter.cs
+++ b/Vocaluxe/Base/CSongSorter.cs
@@ -154,6 +154,9 @@ namespace Vocaluxe.Base
case ESongSorting.TR_CONFIG_GENRE:
values = song.Genres;
break;
+ case ESongSorting.TR_CONFIG_TAGS:
+ values = song.Tags;
+ break;
case ESongSorting.TR_CONFIG_LANGUAGE:
values = song.Languages;
break;
diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs
index d73741e2..018b3d68 100644
--- a/VocaluxeLib/Enums.cs
+++ b/VocaluxeLib/Enums.cs
@@ -28,6 +28,7 @@ namespace VocaluxeLib
Letter,
Edition,
Genre,
+ Tags,
Language,
Year,
Decade,
@@ -233,6 +234,7 @@ namespace VocaluxeLib
TR_CONFIG_TITLE_LETTER,
TR_CONFIG_EDITION,
TR_CONFIG_GENRE,
+ TR_CONFIG_TAGS,
TR_CONFIG_LANGUAGE,
TR_CONFIG_YEAR,
TR_CONFIG_DECADE,
diff --git a/VocaluxeLib/Songs/CSong.cs b/VocaluxeLib/Songs/CSong.cs
index dfef5a99..3dfacbc7 100644
--- a/VocaluxeLib/Songs/CSong.cs
+++ b/VocaluxeLib/Songs/CSong.cs
@@ -89,7 +89,7 @@ namespace VocaluxeLib.Songs
public SShortEnd ShortEnd;
- public Encoding Encoding = Encoding.Default;
+ public Encoding Encoding = new UTF8Encoding();
public bool ManualEncoding;
public string Folder = String.Empty;
public string FolderName = String.Empty;
@@ -169,6 +169,7 @@ namespace VocaluxeLib.Songs
public readonly List Editions = new List();
public readonly List Genres = new List();
+ public readonly List Tags = new List();
public string Album = "";
public string Year = "";
@@ -263,6 +264,7 @@ namespace VocaluxeLib.Songs
Editions = new List(song.Editions);
Genres = new List(song.Genres);
+ Tags = new List(song.Tags);
Album = song.Album;
Year = song.Year;
diff --git a/VocaluxeLib/Songs/CSongLoader.cs b/VocaluxeLib/Songs/CSongLoader.cs
index beebe242..4542aec7 100644
--- a/VocaluxeLib/Songs/CSongLoader.cs
+++ b/VocaluxeLib/Songs/CSongLoader.cs
@@ -210,6 +210,12 @@ namespace VocaluxeLib.Songs
else
CLog.CSongLog.Warning("[{SongFileName}] Invalid genre: {Value}", CLog.Params(_Song.FileName, value));
break;
+ case "TAGS":
+ if (value.Length > 1)
+ _Song.Tags.AddRange(value.Split(','));
+ else
+ CLog.CSongLog.Warning("[{SongFileName}] Invalid tags: {Value}", CLog.Params(_Song.FileName, value));
+ break;
case "ALBUM":
_Song.Album = value;
break;
diff --git a/VocaluxeLib/Songs/CSongWriter.cs b/VocaluxeLib/Songs/CSongWriter.cs
index 957905e3..f9a7591f 100644
--- a/VocaluxeLib/Songs/CSongWriter.cs
+++ b/VocaluxeLib/Songs/CSongWriter.cs
@@ -88,6 +88,7 @@ namespace VocaluxeLib.Songs
_WriteHeaderEntry("ARTIST-ON-SORTING", _Song.ArtistSorting);
_WriteHeaderEntrys("EDITION", _Song.Editions);
_WriteHeaderEntrys("GENRE", _Song.Genres);
+ _WriteHeaderEntry("TAGS", String.Join(",", _Song.Tags.ToArray()));
_WriteHeaderEntrys("LANGUAGE", _Song.Languages);
_WriteHeaderEntry("ALBUM", _Song.Album);
_WriteHeaderEntry("YEAR", _Song.Year);
diff --git a/appveyor.yml b/appveyor.yml
index 0a3fe02e..436c40d8 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -46,13 +46,16 @@ before_build:
Try
{
- Start-FileDownload 'https://github.com/lukeIam/VocaluxeDependencies/blob/master/zips/themes/vocaluxe.themes.genius.video.zip?raw=true'
- & 7z x '-aoa' '-oOutput/' './vocaluxe.themes.genius.video.zip'
- Remove-Item './vocaluxe.themes.genius.video.zip'
+ Start-FileDownload 'https://github.com/Vocaluxe/VocaluxeDependencies/raw/master/zips/themes/vocaluxe.themes.vocaluxe-2024.video-part1.zip'
+ & 7z x '-aoa' '-oOutput/' './vocaluxe.themes.vocaluxe-2024.video-part1.zip'
+ Start-FileDownload 'https://github.com/Vocaluxe/VocaluxeDependencies/raw/master/zips/themes/vocaluxe.themes.vocaluxe-2024.video-part2.zip'
+ & 7z x '-aoa' '-oOutput/' './vocaluxe.themes.vocaluxe-2024.video-part2.zip'
+ Remove-Item './vocaluxe.themes.vocaluxe-2024.video-part1.zip'
+ Remove-Item './vocaluxe.themes.vocaluxe-2024.video-part2.zip'
}
Catch
{
- Write-Warning "Genius-Video download failed"
+ Write-Warning "Theme-Video download failed"
}
nuget restore -DisableParallelProcessing
@@ -156,4 +159,4 @@ deploy:
on:
APPVEYOR_REPO_TAG: true
NIGHTLY_BUILD: true
- MAIN_REPO: true
\ No newline at end of file
+ MAIN_REPO: true