Merge branch 'develop' into ScalingFix
This commit is contained in:
29 files changed
+712
-125
No files matched your search
File renamed without changes.
@@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<Info>
|
||||
<Name>Genius Blue</Name>
|
||||
<Folder>Genius</Folder>
|
||||
<Author>Jiiniasu</Author>
|
||||
</Info>
|
||||
<!--Cover definitions when a category is missing a cover-->
|
||||
<!--Possible types are: Default, Song, Artist, Letter, Edition, Genre, Language, Year, Decade, Date -->
|
||||
<CoverGenerator Type="Default">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.855</R>
|
||||
<G>0.937</G>
|
||||
<B>0.945</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Left>24</Left>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Year">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.855</R>
|
||||
<G>0.937</G>
|
||||
<B>0.945</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Top>-150</Top>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Artist">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.855</R>
|
||||
<G>0.937</G>
|
||||
<B>0.945</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Bottom>150</Bottom>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Date">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>120</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.855</R>
|
||||
<G>0.937</G>
|
||||
<B>0.945</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="5">
|
||||
<Top>-150</Top>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
</root>
|
||||
@@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<Info>
|
||||
<Name>Genius Red</Name>
|
||||
<Folder>Genius</Folder>
|
||||
<Author>Jiiniasu</Author>
|
||||
</Info>
|
||||
<!--Cover definitions when a category is missing a cover-->
|
||||
<!--Possible types are: Default, Song, Artist, Letter, Edition, Genre, Language, Year, Decade, Date -->
|
||||
<CoverGenerator Type="Default">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.988</R>
|
||||
<G>0.682</G>
|
||||
<B>0.733</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Left>24</Left>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Year">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.988</R>
|
||||
<G>0.682</G>
|
||||
<B>0.733</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Top>-150</Top>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Artist">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.988</R>
|
||||
<G>0.682</G>
|
||||
<B>0.733</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Bottom>150</Bottom>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Date">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>120</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.988</R>
|
||||
<G>0.682</G>
|
||||
<B>0.733</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="5">
|
||||
<Top>-150</Top>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
</root>
|
||||
@@ -152,6 +152,9 @@
|
||||
<string name="TR_SCREENSONG_NUMSONGS">(%v songs)</string>
|
||||
<string name="TR_SCREENSONG_NUMSONG">(%v song)</string>
|
||||
<string name="TR_SCREENSONG_ARTIST_TITLE">%a - %t</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGE">A-Z = Jump to the letter • F3 = Search • CTRL+R = Random selection • CTRL+S = Start medley • CTRL+A = Start all random • CTRL+V = Start visible random • Space = Open song options • ESC = Back to main menu</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGESEARCH">A-Z = Search artist and title, prefixes for the search → a: = artist • t: = title • c: = creator • e: = edition • g: = genre • y: = year (e.g. 1999 or 1980-1989) • l: = language • al: = album • fi: = file name • fo: = folder name</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGEPARTY">1-6 = Press your team number to use a random song joker</string>
|
||||
<string name="TR_SCREENSING_PAUSE">Pause</string>
|
||||
<string name="TR_SCREENSING_BUTTON_CANCEL">Stop singing</string>
|
||||
<string name="TR_SCREENSING_BUTTON_CONTINUE">Continue</string>
|
||||
|
||||
@@ -147,6 +147,9 @@
|
||||
<string name="TR_SCREENSONG_NUMSONGS">(%v Lieder)</string>
|
||||
<string name="TR_SCREENSONG_NUMSONG">(%v Lied)</string>
|
||||
<string name="TR_SCREENSONG_ARTIST_TITLE">%a -%t</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGE">A-Z = Zum Buchstaben springen • F3 = Suchen • STRG+R = Zufällige Auswahl • STRG+S = Starte Medley • STRG+A = Alle zufällig starten • STRG+V = Sichtbare zufällig starten • Leertaste = Lied-Optionen öffnen • ESC = Zurück zum Hauptmenü</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGESEARCH">A-Z = Interpreten und Titel durchsuchen, Präfixe für die Suche → a: = Interpret • t: = Titel • c: = Ersteller • e: = Edition • g: = Genre • y: = Jahr (z.B. 1999 oder 1980-1989) • l: = Sprache • al: = Album • fi: = Dateiname • fo: = Ordnername</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGEPARTY">1-6 = Drücke die Teamnummer um einen Zufallssong Joker zu verwenden</string>
|
||||
<string name="TR_SCREENSING_PAUSE">Pause</string>
|
||||
<string name="TR_SCREENSING_BUTTON_CANCEL">Lied beenden</string>
|
||||
<string name="TR_SCREENSING_BUTTON_CONTINUE">Fortfahren</string>
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
ScreenSong
|
||||
|
||||
++++++++++
|
||||
Version 7:
|
||||
|
||||
Add:
|
||||
<TextHelpBar>
|
||||
<TextHelpBarSearch>
|
||||
<TextHelpBarParty>
|
||||
Shows key shortcut and search usage as small text line at the bottom of the screen.
|
||||
|
||||
++++++++++
|
||||
Version 6:
|
||||
|
||||
@@ -43,4 +52,4 @@ to SongMenu
|
||||
Add:
|
||||
<StaticMedleyCalcIcon> and <StaticMedleyTagIcon>
|
||||
to SongMenu.SongMenuTileBoard
|
||||
++++++++++
|
||||
++++++++++
|
||||
@@ -261,7 +261,7 @@
|
||||
<Text Name="TextTitle">
|
||||
<X>60</X>
|
||||
<Y>50</Y>
|
||||
<Z>0</Z>
|
||||
<Z>-1</Z>
|
||||
<H>27</H>
|
||||
<MaxW>0</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
@@ -275,7 +275,7 @@
|
||||
<Text Name="TextSong">
|
||||
<X>640</X>
|
||||
<Y>50</Y>
|
||||
<Z>0</Z>
|
||||
<Z>-1</Z>
|
||||
<H>27</H>
|
||||
<MaxW>0</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Screen xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Informations>
|
||||
<ScreenName>ScreenSong</ScreenName>
|
||||
<ScreenVersion>6</ScreenVersion>
|
||||
<ScreenVersion>7</ScreenVersion>
|
||||
</Informations>
|
||||
<Backgrounds>
|
||||
<Background Name="Background1">
|
||||
@@ -238,6 +238,48 @@
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_SONGOPTIONS</Text>
|
||||
</Text>
|
||||
<Text Name="TextHelpBar">
|
||||
<X>40</X>
|
||||
<Y>700</Y>
|
||||
<Z>0</Z>
|
||||
<H>16</H>
|
||||
<MaxW>1200</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Left</Align>
|
||||
<ResizeAlign>Bottom</ResizeAlign>
|
||||
<Style>Normal</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_HELPMESSAGE</Text>
|
||||
</Text>
|
||||
<Text Name="TextHelpBarSearch">
|
||||
<X>40</X>
|
||||
<Y>700</Y>
|
||||
<Z>0</Z>
|
||||
<H>16</H>
|
||||
<MaxW>1200</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Left</Align>
|
||||
<ResizeAlign>Bottom</ResizeAlign>
|
||||
<Style>Normal</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_HELPMESSAGESEARCH</Text>
|
||||
</Text>
|
||||
<Text Name="TextHelpBarParty">
|
||||
<X>40</X>
|
||||
<Y>700</Y>
|
||||
<Z>0</Z>
|
||||
<H>16</H>
|
||||
<MaxW>1200</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Left</Align>
|
||||
<ResizeAlign>Bottom</ResizeAlign>
|
||||
<Style>Normal</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_HELPMESSAGEPARTY</Text>
|
||||
</Text>
|
||||
</Texts>
|
||||
<Buttons>
|
||||
<Button Name="ButtonJoker1">
|
||||
|
||||
@@ -427,6 +427,7 @@ namespace VocaluxeLib.PartyModes.Challenge
|
||||
_ScreenSongOptions.Sorting.Tabs = CBase.Config.GetTabs();
|
||||
_ScreenSongOptions.Sorting.FilterPlaylistID = -1;
|
||||
|
||||
_ScreenSongOptions.Selection.SongIndex = -1;
|
||||
_ScreenSongOptions.Selection.CategoryIndex = -1;
|
||||
_ScreenSongOptions.Selection.CategoryChangeAllowed = true;
|
||||
break;
|
||||
@@ -718,4 +719,4 @@ namespace VocaluxeLib.PartyModes.Challenge
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,7 +76,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Verbose] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Verbose] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -287,7 +287,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Debug] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -340,7 +340,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Debug] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -498,7 +498,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Information] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -551,7 +551,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Information] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -709,7 +709,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Warning] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -762,7 +762,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Warning] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -920,7 +920,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Error] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
@@ -973,7 +973,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[Error] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
|
||||
StringAssert.Contains(_TestMessageWithResolvedData, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ namespace Tests.VocaluxeLib.Log
|
||||
StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
|
||||
StringAssert.Contains("[<#= LogLevel #>] " + <#= WithData?"_TestMessageWithResolvedData":"_TestMessage" #>, log, "Main log entry wrong");
|
||||
|
||||
StringAssert.Contains(<#= WithData?"_TestMessageWithData":"_TestMessage" #>, error, "Error message wrong");
|
||||
StringAssert.Contains(<#= WithData?"_TestMessageWithResolvedData":"_TestMessage" #>, error, "Error message wrong");
|
||||
},
|
||||
ELogLevel.Verbose);
|
||||
|
||||
|
||||
@@ -152,6 +152,7 @@ Global
|
||||
{54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseWin|x64.ActiveCfg = Release|x64
|
||||
{54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseWin|x64.Build.0 = Release|x64
|
||||
{54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseWin|x86.ActiveCfg = Release|Win32
|
||||
{54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseWin|x86.Build.0 = Release|Win32
|
||||
{8EDF4429-251A-416D-BB68-93F227191BCF}.DebugLinux|x64.ActiveCfg = Debug|x64
|
||||
{8EDF4429-251A-416D-BB68-93F227191BCF}.DebugLinux|x64.Build.0 = Debug|x64
|
||||
{8EDF4429-251A-416D-BB68-93F227191BCF}.DebugLinux|x86.ActiveCfg = Debug|x86
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace Vocaluxe.Base
|
||||
if (_Initialized)
|
||||
return;
|
||||
|
||||
List<string> soundFiles = CHelper.ListSoundFiles(CSettings.FolderNameBackgroundMusic, true, true);
|
||||
IEnumerable<string> soundFiles = CHelper.ListSoundFiles(CSettings.FolderNameBackgroundMusic, true, true);
|
||||
|
||||
foreach (string path in soundFiles)
|
||||
_BGMusicFiles.Add(new CPlaylistElement(path));
|
||||
|
||||
@@ -133,6 +133,11 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
_UnloadCovers();
|
||||
_LoadCovers();
|
||||
|
||||
// Stefan1200: Added a workaround to fix issue #446, because switching the cover theme gets bugged on the song screen and needed a game restart.
|
||||
// Toggle the tabs view fixes this bug somehow.
|
||||
CSongs.Categorizer.Tabs = (CConfig.Config.Game.Tabs == EOffOn.TR_CONFIG_ON ? EOffOn.TR_CONFIG_OFF : EOffOn.TR_CONFIG_ON);
|
||||
CSongs.Categorizer.Tabs = CConfig.Config.Game.Tabs;
|
||||
}
|
||||
|
||||
private static void _UnloadCovers()
|
||||
@@ -174,7 +179,7 @@ namespace Vocaluxe.Base
|
||||
_CoverThemes.Clear();
|
||||
|
||||
string folderPath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover);
|
||||
List<string> files = CHelper.ListFiles(folderPath, "*.xml");
|
||||
IEnumerable<string> files = CHelper.ListFiles(folderPath, "*.xml");
|
||||
|
||||
var xml = new CXmlDeserializer();
|
||||
foreach (string file in files)
|
||||
@@ -207,7 +212,7 @@ namespace Vocaluxe.Base
|
||||
|
||||
Debug.Assert(!String.IsNullOrEmpty(coverTheme.Info.Name));
|
||||
|
||||
List<string> files = CHelper.ListImageFiles(coverTheme.FolderPath, true, true);
|
||||
IEnumerable<string> files = CHelper.ListImageFiles(coverTheme.FolderPath, true, true);
|
||||
|
||||
lock (_Covers)
|
||||
{
|
||||
@@ -288,4 +293,4 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#region license
|
||||
#region license
|
||||
// This file is part of Vocaluxe.
|
||||
//
|
||||
// Vocaluxe is free software: you can redistribute it and/or modify
|
||||
@@ -93,6 +93,89 @@ namespace Vocaluxe.Base
|
||||
if (_SearchString != "")
|
||||
searchStrings = _SearchString.ToUpper().Split(new char[] {' '});
|
||||
|
||||
String searchForArtist = null; // a:
|
||||
String searchForTitle = null; // t:
|
||||
String searchForGenre = null; // g:
|
||||
String searchForYear = null; // y:
|
||||
String searchForLanguage = null; // l:
|
||||
String searchForCreator = null; // c:
|
||||
String searchForEdition = null; // e:
|
||||
String searchForAlbum = null; // al:
|
||||
String searchForFileName = null; // fi:
|
||||
String searchForFolderName = null; // fo:
|
||||
bool expertSearch = false;
|
||||
|
||||
if (searchStrings != null)
|
||||
{
|
||||
foreach (String searchToken in searchStrings)
|
||||
{
|
||||
if (searchToken.Length < 3)
|
||||
continue;
|
||||
|
||||
String temp = searchToken.Substring(0, 2);
|
||||
bool foundIt = true;
|
||||
|
||||
switch (temp)
|
||||
{
|
||||
case "A:":
|
||||
searchForArtist = searchToken.Substring(2);
|
||||
break;
|
||||
case "T:":
|
||||
searchForTitle = searchToken.Substring(2);
|
||||
break;
|
||||
case "G:":
|
||||
searchForGenre = searchToken.Substring(2);
|
||||
break;
|
||||
case "Y:":
|
||||
searchForYear = searchToken.Substring(2);
|
||||
break;
|
||||
case "L:":
|
||||
searchForLanguage = searchToken.Substring(2);
|
||||
break;
|
||||
case "C:":
|
||||
searchForCreator = searchToken.Substring(2);
|
||||
break;
|
||||
case "E:":
|
||||
searchForEdition = searchToken.Substring(2);
|
||||
break;
|
||||
default:
|
||||
foundIt = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (foundIt)
|
||||
{
|
||||
if (!expertSearch) expertSearch = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (searchToken.Length < 4)
|
||||
continue;
|
||||
|
||||
foundIt = true;
|
||||
temp = searchToken.Substring(0, 3);
|
||||
|
||||
switch (temp)
|
||||
{
|
||||
case "AL:":
|
||||
searchForAlbum = searchToken.Substring(3);
|
||||
break;
|
||||
case "FI:":
|
||||
searchForFileName = searchToken.Substring(3);
|
||||
break;
|
||||
case "FO:":
|
||||
searchForFolderName = searchToken.Substring(3);
|
||||
break;
|
||||
default:
|
||||
foundIt = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (foundIt && !expertSearch)
|
||||
expertSearch = true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (CSong song in CSongs.Songs)
|
||||
{
|
||||
if (_PlaylistID != -1 && !CBase.Playlist.ContainsSong(_PlaylistID, song.ID))
|
||||
@@ -102,9 +185,85 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
if (searchStrings == null)
|
||||
_FilteredSongs.Add(song);
|
||||
else if (expertSearch)
|
||||
{
|
||||
// Stefan1200: Stop at a maximum of 500 search result to prevent performance issues
|
||||
if (_FilteredSongs.Count >= 500)
|
||||
break;
|
||||
|
||||
if (searchForAlbum != null && song.Album.ToUpper().Contains(searchForAlbum))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForArtist != null && song.Artist.ToUpper().Contains(searchForArtist))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForTitle != null && song.Title.ToUpper().Contains(searchForTitle))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForCreator != null && song.Creator.ToUpper().Contains(searchForCreator))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForFileName != null && song.FileName.ToUpper().Contains(searchForFileName))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForFolderName != null && song.FolderName.ToUpper().Contains(searchForFolderName))
|
||||
_FilteredSongs.Add(song);
|
||||
|
||||
if (searchForGenre != null)
|
||||
{
|
||||
foreach (String genre in song.Genres)
|
||||
{
|
||||
if (genre.ToUpper().Contains(searchForGenre))
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
}
|
||||
|
||||
if (searchForLanguage != null)
|
||||
{
|
||||
foreach (String language in song.Languages)
|
||||
{
|
||||
if (language.ToUpper().Contains(searchForLanguage))
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
}
|
||||
|
||||
if (searchForEdition != null)
|
||||
{
|
||||
foreach (String edition in song.Editions)
|
||||
{
|
||||
if (edition.ToUpper().Contains(searchForEdition))
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
}
|
||||
|
||||
if (searchForYear != null)
|
||||
{
|
||||
int pos = searchForYear.IndexOf("-");
|
||||
if (pos == -1)
|
||||
{
|
||||
if (song.Year.Contains(searchForYear))
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
else if (searchForYear.Length == 9)
|
||||
{
|
||||
int yearStart = -1;
|
||||
int yearEnd = -1;
|
||||
if (!Int32.TryParse(searchForYear.Substring(0, pos), out yearStart))
|
||||
continue;
|
||||
if (!Int32.TryParse(searchForYear.Substring(pos + 1), out yearEnd))
|
||||
continue;
|
||||
|
||||
// Stefan1200: Prevent searches like 0000-9999, limit for a max distance of 100 years
|
||||
if (yearEnd - yearStart > 100)
|
||||
continue;
|
||||
|
||||
int yearSearch = -1;
|
||||
if (!Int32.TryParse(song.Year, out yearSearch))
|
||||
continue;
|
||||
|
||||
if (yearSearch >= yearStart && yearSearch <= yearEnd)
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string search = song.Title.ToUpper() + " " + song.Artist.ToUpper() + " " + song.FolderName.ToUpper() + " " + song.FileName.ToUpper();
|
||||
string search = song.Title.ToUpper() + " " + song.Artist.ToUpper();
|
||||
|
||||
if (searchStrings.All(search.Contains))
|
||||
_FilteredSongs.Add(song);
|
||||
@@ -114,4 +273,4 @@ namespace Vocaluxe.Base
|
||||
_Changed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -339,18 +339,17 @@ namespace Vocaluxe.Base
|
||||
SongsLoaded = false;
|
||||
_Songs.Clear();
|
||||
|
||||
var files = new List<string>();
|
||||
var files = Enumerable.Empty<string>();
|
||||
|
||||
using (CBenchmark.Time("List Songs"))
|
||||
{
|
||||
|
||||
foreach (string p in CConfig.SongFolders)
|
||||
foreach (string path in CConfig.SongFolders)
|
||||
{
|
||||
if (Directory.Exists(p))
|
||||
if (Directory.Exists(path))
|
||||
{
|
||||
string path = p;
|
||||
files.AddRange(CHelper.ListFiles(path, "*.txt", true, true));
|
||||
files.AddRange(CHelper.ListFiles(path, "*.txd", true, true));
|
||||
files = files.Union(CHelper.ListFiles(path, "*.txt", true, true));
|
||||
files = files.Union(CHelper.ListFiles(path, "*.txd", true, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace Vocaluxe.Base.ThemeSystem
|
||||
}
|
||||
|
||||
string path = Path.Combine(_Folder, Name);
|
||||
List<string> files = CHelper.ListFiles(path, "*.xml");
|
||||
IEnumerable<string> files = CHelper.ListFiles(path, "*.xml");
|
||||
|
||||
// Load skins, succeed if at least 1 skin was loaded
|
||||
bool ok = false;
|
||||
|
||||
@@ -135,7 +135,7 @@ namespace Vocaluxe.Base.ThemeSystem
|
||||
|
||||
public static bool ReadThemesFromFolder(string path, int partyModeID)
|
||||
{
|
||||
List<string> files = CHelper.ListFiles(path, "*.xml", false, true);
|
||||
IEnumerable<string> files = CHelper.ListFiles(path, "*.xml", false, true);
|
||||
|
||||
List<CTheme> newThemes = new List<CTheme>();
|
||||
foreach (string file in files)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#region license
|
||||
#region license
|
||||
// This file is part of Vocaluxe.
|
||||
//
|
||||
// Vocaluxe is free software: you can redistribute it and/or modify
|
||||
@@ -112,7 +112,7 @@ namespace Vocaluxe.Screens
|
||||
private float _Length = -1f;
|
||||
|
||||
private CVideoStream _CurrentVideo;
|
||||
private EAspect _VideoAspect = EAspect.Crop;
|
||||
private EAspect _VideoAspect = EAspect.Automatic;
|
||||
private CTextureRef _CurrentWebcamFrameTexture;
|
||||
private CTextureRef _Background;
|
||||
|
||||
@@ -794,18 +794,21 @@ namespace Vocaluxe.Screens
|
||||
if (_CurrentVideo != null && CConfig.Config.Video.VideosInSongs == EOffOn.TR_CONFIG_ON && !_Webcam)
|
||||
{
|
||||
background = _CurrentVideo.Texture;
|
||||
aspect = _VideoAspect;
|
||||
}
|
||||
else if (_Webcam)
|
||||
{
|
||||
background = _CurrentWebcamFrameTexture;
|
||||
aspect = _VideoAspect;
|
||||
}
|
||||
else
|
||||
background = _Background;
|
||||
if (background != null)
|
||||
{
|
||||
SRectF bounds = CSettings.RenderRect;
|
||||
|
||||
if (_VideoAspect == EAspect.Automatic)
|
||||
_VideoAspect = (background.OrigAspect <= 1.5 ? EAspect.LetterBox : EAspect.Crop);
|
||||
aspect = _VideoAspect;
|
||||
|
||||
SRectF rect = CHelper.FitInBounds(bounds, background.OrigAspect, aspect);
|
||||
CDraw.DrawTexture(background, rect, background.Color, bounds);
|
||||
}
|
||||
@@ -1087,7 +1090,7 @@ namespace Vocaluxe.Screens
|
||||
{
|
||||
_CurrentVideo = CVideo.Load(Path.Combine(song.Folder, song.VideoFileName));
|
||||
CVideo.Skip(_CurrentVideo, song.Start, song.VideoGap);
|
||||
_VideoAspect = song.VideoAspect;
|
||||
_VideoAspect = EAspect.Automatic;
|
||||
}
|
||||
|
||||
CDraw.RemoveTexture(ref _Background);
|
||||
@@ -1828,4 +1831,4 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#region license
|
||||
#region license
|
||||
// This file is part of Vocaluxe.
|
||||
//
|
||||
// Vocaluxe is free software: you can redistribute it and/or modify
|
||||
@@ -42,13 +42,16 @@ namespace Vocaluxe.Screens
|
||||
// Version number for theme files. Increment it, if you've changed something on the theme files!
|
||||
protected override int _ScreenVersion
|
||||
{
|
||||
get { return 6; }
|
||||
get { return 7; }
|
||||
}
|
||||
|
||||
private const string _TextCategory = "TextCategory";
|
||||
private const string _TextSelection = "TextSelection";
|
||||
private const string _TextSearchBarTitle = "TextSearchBarTitle";
|
||||
private const string _TextSearchBar = "TextSearchBar";
|
||||
private const string _TextHelpBar = "TextHelpBar";
|
||||
private const string _TextHelpBarSearch = "TextHelpBarSearch";
|
||||
private const string _TextHelpBarParty = "TextHelpBarParty";
|
||||
private const string _TextOptionsTitle = "TextOptionsTitle";
|
||||
|
||||
private const string _ButtonOpenOptions = "ButtonOpenOptions";
|
||||
@@ -77,6 +80,9 @@ namespace Vocaluxe.Screens
|
||||
private string _SearchText = String.Empty;
|
||||
private bool _SearchActive;
|
||||
|
||||
private int _JumpTo_lastCharTime = 0;
|
||||
private String _JumpTo_lastSearchString = "";
|
||||
|
||||
private readonly List<string> _ButtonsJoker = new List<string>();
|
||||
private readonly List<string> _TextsPlayer = new List<string>();
|
||||
private ESongOptionsView _CurSongOptionsView;
|
||||
@@ -134,6 +140,9 @@ namespace Vocaluxe.Screens
|
||||
tlist.Add(_TextSelection);
|
||||
tlist.Add(_TextSearchBarTitle);
|
||||
tlist.Add(_TextSearchBar);
|
||||
tlist.Add(_TextHelpBar);
|
||||
tlist.Add(_TextHelpBarSearch);
|
||||
tlist.Add(_TextHelpBarParty);
|
||||
tlist.Add(_TextOptionsTitle);
|
||||
|
||||
_ThemeStatics = new string[] {_StaticSearchBar, _StaticOptionsBG};
|
||||
@@ -279,6 +288,21 @@ namespace Vocaluxe.Screens
|
||||
else if (!_Sso.Selection.PartyMode)
|
||||
_SearchActive = true;
|
||||
break;
|
||||
|
||||
case Keys.V:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
_StartRandomVisibleSongs();
|
||||
break;
|
||||
|
||||
case Keys.R:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.RandomOnly)
|
||||
_SelectNextRandom(-1);
|
||||
break;
|
||||
|
||||
case Keys.S:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
|
||||
_StartMedleySong(_SongMenu.GetPreviewSongNr());
|
||||
break;
|
||||
}
|
||||
if (!_SearchActive)
|
||||
{
|
||||
@@ -293,23 +317,9 @@ namespace Vocaluxe.Screens
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
_StartRandomAllSongs();
|
||||
break;
|
||||
case Keys.V:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
_StartRandomVisibleSongs();
|
||||
break;
|
||||
|
||||
case Keys.R:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.RandomOnly)
|
||||
_SelectNextRandom(-1);
|
||||
break;
|
||||
|
||||
case Keys.S:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
|
||||
_StartMedleySong(_SongMenu.GetPreviewSongNr());
|
||||
break;
|
||||
|
||||
case Keys.F:
|
||||
if (keyEvent.Mod == EModifier.Ctrl)
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
_SearchActive = true;
|
||||
break;
|
||||
|
||||
@@ -727,12 +737,18 @@ namespace Vocaluxe.Screens
|
||||
|
||||
_Texts[_TextSearchBar].Visible = true;
|
||||
_Texts[_TextSearchBarTitle].Visible = true;
|
||||
_Texts[_TextHelpBar].Visible = false;
|
||||
_Texts[_TextHelpBarSearch].Visible = true;
|
||||
_Texts[_TextHelpBarParty].Visible = false;
|
||||
_Statics[_StaticSearchBar].Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_Texts[_TextSearchBar].Visible = false;
|
||||
_Texts[_TextSearchBarTitle].Visible = false;
|
||||
_Texts[_TextHelpBar].Visible = !_Sso.Selection.PartyMode;
|
||||
_Texts[_TextHelpBarSearch].Visible = false;
|
||||
_Texts[_TextHelpBarParty].Visible = _Sso.Selection.PartyMode;
|
||||
_Statics[_StaticSearchBar].Visible = false;
|
||||
}
|
||||
|
||||
@@ -1042,8 +1058,14 @@ namespace Vocaluxe.Screens
|
||||
|
||||
private void _JumpTo(char letter)
|
||||
{
|
||||
// Stefan1200: Add all letters from a key press within one second to a search string. Clear search string, if last key press is older than one second.
|
||||
String searchString;
|
||||
if (Environment.TickCount - _JumpTo_lastCharTime < 1000)
|
||||
searchString = _JumpTo_lastSearchString + letter.ToString();
|
||||
else
|
||||
searchString = letter.ToString();
|
||||
|
||||
int start = 0;
|
||||
int curSelected = CSongs.IsInCategory ? _SongMenu.GetSelectedSongNr() : _SongMenu.GetSelectedCategory();
|
||||
bool firstLevel = CConfig.Config.Game.Tabs == EOffOn.TR_CONFIG_OFF && CSongs.IsInCategory;
|
||||
bool secondSort = CConfig.Config.Game.Tabs == EOffOn.TR_CONFIG_ON &&
|
||||
(CConfig.Config.Game.SongSorting == ESongSorting.TR_CONFIG_ARTIST ||
|
||||
@@ -1055,34 +1077,25 @@ namespace Vocaluxe.Screens
|
||||
//TODO: What's to do with multiple tags?
|
||||
//Flamefire: What? We only sorted by one tag, sorting by multiple tags (e.g. Album) will be by e.g. the first entry. That can be used here too as otherwhise it will confuse users because it jumps randomly
|
||||
ReadOnlyCollection<CSong> songs = CSongs.VisibleSongs;
|
||||
int ct = songs.Count;
|
||||
int visibleID = -1;
|
||||
switch (CConfig.Config.Game.SongSorting)
|
||||
{
|
||||
case ESongSorting.TR_CONFIG_ARTIST:
|
||||
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_YEAR:
|
||||
case ESongSorting.TR_CONFIG_DECADE:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Year.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Year.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Year.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_TITLE_LETTER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_FOLDER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Folder.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Folder.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.FolderName.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
}
|
||||
if (visibleID > -1)
|
||||
@@ -1091,22 +1104,17 @@ namespace Vocaluxe.Screens
|
||||
else if (secondSort && CSongs.IsInCategory)
|
||||
{
|
||||
ReadOnlyCollection<CSong> songs = CSongs.VisibleSongs;
|
||||
int ct = songs.Count;
|
||||
int visibleID = -1;
|
||||
switch (CConfig.Config.Game.SongSorting)
|
||||
{
|
||||
case ESongSorting.TR_CONFIG_FOLDER:
|
||||
case ESongSorting.TR_CONFIG_TITLE_LETTER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_ARTIST:
|
||||
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
}
|
||||
if (visibleID > -1)
|
||||
@@ -1115,13 +1123,14 @@ namespace Vocaluxe.Screens
|
||||
else if (!CSongs.IsInCategory)
|
||||
{
|
||||
ReadOnlyCollection<CCategory> categories = CSongs.Categories;
|
||||
int ct = categories.Count;
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && categories[curSelected].Name.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
int visibleID = _FindIndex(categories, start, element => element.Name.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
int visibleID = _FindIndex(categories, start, element => element.Name.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
if (visibleID > -1)
|
||||
_SongMenu.SetSelectedCategory(visibleID);
|
||||
}
|
||||
|
||||
// Stefan1200: Remember search string and current TickCount in class variables.
|
||||
_JumpTo_lastCharTime = Environment.TickCount;
|
||||
_JumpTo_lastSearchString = searchString;
|
||||
}
|
||||
|
||||
private void _ApplyNewSearchFilter(string newFilterString)
|
||||
@@ -1395,4 +1404,4 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
#endregion Playlist Actions
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
-23
@@ -1,4 +1,4 @@
|
||||
#region license
|
||||
#region license
|
||||
// This file is part of Vocaluxe.
|
||||
//
|
||||
// Vocaluxe is free software: you can redistribute it and/or modify
|
||||
@@ -20,6 +20,7 @@ using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using VocaluxeLib.Log;
|
||||
|
||||
namespace VocaluxeLib
|
||||
@@ -100,6 +101,7 @@ namespace VocaluxeLib
|
||||
|
||||
switch (aspect)
|
||||
{
|
||||
case EAspect.Automatic:
|
||||
case EAspect.Crop:
|
||||
if (boundsAspectRatio >= aspectRatio)
|
||||
{
|
||||
@@ -137,7 +139,12 @@ namespace VocaluxeLib
|
||||
}
|
||||
break;
|
||||
case EAspect.LetterBox:
|
||||
if (boundsAspectRatio <= aspectRatio)
|
||||
if (boundsAspectRatio == aspectRatio) // Pillarbox
|
||||
{
|
||||
scaledWidth = bounds.W * 0.77f;
|
||||
scaledHeight = bounds.W / aspectRatio;
|
||||
}
|
||||
else if (boundsAspectRatio < aspectRatio)
|
||||
{
|
||||
scaledWidth = bounds.W;
|
||||
scaledHeight = bounds.W / aspectRatio;
|
||||
@@ -165,25 +172,20 @@ namespace VocaluxeLib
|
||||
/// <param name="recursive">Search directories recursively</param>
|
||||
/// <param name="fullpath">False for just file names, True for full path</param>
|
||||
/// <returns>List of file names</returns>
|
||||
public static List<string> ListFiles(string path, string searchPattern, bool recursive = false, bool fullpath = false)
|
||||
public static IEnumerable<string> ListFiles(string path, string searchPattern, bool recursive = false, bool fullpath = false)
|
||||
{
|
||||
var files = new List<string>();
|
||||
IEnumerable<string> files = Enumerable.Empty<string>();
|
||||
var dir = new DirectoryInfo(path);
|
||||
if (!dir.Exists)
|
||||
return files;
|
||||
|
||||
if (recursive && !fullpath)
|
||||
throw new NotSupportedException("recursive file listing with relative path names is not supported");
|
||||
|
||||
try
|
||||
{
|
||||
// ReSharper disable LoopCanBeConvertedToQuery
|
||||
foreach (FileInfo file in dir.GetFiles(searchPattern))
|
||||
// ReSharper restore LoopCanBeConvertedToQuery
|
||||
files.Add(!fullpath ? file.Name : file.FullName);
|
||||
|
||||
if (recursive)
|
||||
{
|
||||
foreach (DirectoryInfo di in dir.GetDirectories())
|
||||
files.AddRange(ListFiles(di.FullName, searchPattern, true, fullpath));
|
||||
}
|
||||
files = Directory.EnumerateFiles(dir.FullName, searchPattern, recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
|
||||
files = files.Select(fullpath ? (Func<string, string>)Path.GetFullPath : Path.GetFileName);
|
||||
}
|
||||
catch (Exception) {}
|
||||
|
||||
@@ -198,13 +200,9 @@ namespace VocaluxeLib
|
||||
/// <param name="recursive">Search directories recursively</param>
|
||||
/// <param name="fullpath">False for just file names, True for full path</param>
|
||||
/// <returns>List of file names</returns>
|
||||
public static List<string> ListFiles(string path, IEnumerable<string> searchPatterns, bool recursive = false, bool fullpath = false)
|
||||
public static IEnumerable<string> ListFiles(string path, IEnumerable<string> searchPatterns, bool recursive = false, bool fullpath = false)
|
||||
{
|
||||
var files = new List<string>();
|
||||
foreach (string pattern in searchPatterns)
|
||||
files.AddRange(ListFiles(path, pattern, recursive, fullpath));
|
||||
|
||||
return files;
|
||||
return searchPatterns.SelectMany(pattern => ListFiles(path, pattern, recursive, fullpath));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -214,7 +212,7 @@ namespace VocaluxeLib
|
||||
/// <param name="recursive">Search directories recursively</param>
|
||||
/// <param name="fullpath">False for just file names, True for full path</param>
|
||||
/// <returns>List of image file names</returns>
|
||||
public static List<string> ListImageFiles(string path, bool recursive = false, bool fullpath = false)
|
||||
public static IEnumerable<string> ListImageFiles(string path, bool recursive = false, bool fullpath = false)
|
||||
{
|
||||
return ListFiles(path, _ImageFileTypes, recursive, fullpath);
|
||||
}
|
||||
@@ -226,7 +224,7 @@ namespace VocaluxeLib
|
||||
/// <param name="recursive">Search directories recursively</param>
|
||||
/// <param name="fullpath">False for just file names, True for full path</param>
|
||||
/// <returns>List of image file names</returns>
|
||||
public static List<string> ListSoundFiles(string path, bool recursive = false, bool fullpath = false)
|
||||
public static IEnumerable<string> ListSoundFiles(string path, bool recursive = false, bool fullpath = false)
|
||||
{
|
||||
return ListFiles(path, _SoundFileTypes, recursive, fullpath);
|
||||
}
|
||||
@@ -314,4 +312,4 @@ namespace VocaluxeLib
|
||||
return bmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,6 +64,7 @@ namespace VocaluxeLib
|
||||
#region Fonts
|
||||
public enum EAspect
|
||||
{
|
||||
Automatic,
|
||||
Crop,
|
||||
LetterBox,
|
||||
Stretch,
|
||||
@@ -436,4 +437,4 @@ namespace VocaluxeLib
|
||||
TR_USERROLE_PROFILEEDITOR = 32
|
||||
// ReSharper restore InconsistentNaming
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -196,10 +196,10 @@ namespace VocaluxeLib.Log
|
||||
int i = 0;
|
||||
return theRegex.Replace(template, delegate(Match match)
|
||||
{
|
||||
if (propertyValues.Length >= i)
|
||||
if (i >= propertyValues.Length)
|
||||
return match.Value;
|
||||
return propertyValues[i++].ToString();
|
||||
});
|
||||
return "\"" + propertyValues[i++] + "\"";
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -288,7 +288,9 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
|
||||
public void LeaveSelectedCategory()
|
||||
{
|
||||
_LeaveCategory();
|
||||
// Stefan1200: This was implemented with the pull request #359 and is the reason for the bug described in issue #390.
|
||||
// Currently disabled until we know if this is still needed or we find a better solution!
|
||||
// _LeaveCategory();
|
||||
}
|
||||
|
||||
public virtual void UnloadSkin() {}
|
||||
@@ -425,4 +427,4 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
}
|
||||
#endregion ThemeEdit
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -511,7 +511,9 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
}
|
||||
_TextBG.Draw();
|
||||
|
||||
CTextureRef vidtex = CBase.BackgroundMusic.IsPlayingPreview() ? CBase.BackgroundMusic.GetVideoTexture() : null;
|
||||
CTextureRef vidtex = null;
|
||||
if (CBase.Config.GetVideoPreview() == EOffOn.TR_CONFIG_ON)
|
||||
vidtex = (CBase.BackgroundMusic.IsPlayingPreview() ? CBase.BackgroundMusic.GetVideoTexture() : null);
|
||||
|
||||
if (vidtex != null)
|
||||
{
|
||||
@@ -592,13 +594,28 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
|
||||
private void _UpdateList(bool force = false)
|
||||
{
|
||||
bool isInCategory = CBase.Songs.IsInCategory();
|
||||
int itemCount = isInCategory ? CBase.Songs.GetNumSongsVisible() : CBase.Songs.GetNumCategories();
|
||||
int halfListLength = _ListLength / 2;
|
||||
int offset;
|
||||
|
||||
if (_SelectionNr < _Offset && _SelectionNr >= 0)
|
||||
offset = _SelectionNr;
|
||||
{
|
||||
if (_SelectionNr - halfListLength >= 0)
|
||||
offset = _SelectionNr - halfListLength;
|
||||
else
|
||||
offset = 0;
|
||||
}
|
||||
else if (_SelectionNr >= _Offset + _ListLength)
|
||||
offset = _SelectionNr - _ListLength + 1;
|
||||
{
|
||||
if (_SelectionNr + halfListLength > itemCount)
|
||||
offset = itemCount - _ListLength;
|
||||
else
|
||||
offset = _SelectionNr - halfListLength;
|
||||
}
|
||||
else
|
||||
offset = _Offset;
|
||||
|
||||
_UpdateList(offset, force);
|
||||
}
|
||||
|
||||
@@ -653,4 +670,4 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
base.LoadSkin();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -485,7 +485,9 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
|
||||
_TextBG.Draw();
|
||||
|
||||
CTextureRef vidtex = CBase.BackgroundMusic.IsPlayingPreview() ? CBase.BackgroundMusic.GetVideoTexture() : null;
|
||||
CTextureRef vidtex = null;
|
||||
if (CBase.Config.GetVideoPreview() == EOffOn.TR_CONFIG_ON)
|
||||
vidtex = (CBase.BackgroundMusic.IsPlayingPreview() ? CBase.BackgroundMusic.GetVideoTexture() : null);
|
||||
|
||||
if (vidtex != null)
|
||||
{
|
||||
@@ -608,4 +610,4 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
Init();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -101,7 +101,7 @@ namespace VocaluxeLib.Songs
|
||||
public readonly List<string> BackgroundFileNames = new List<string>();
|
||||
public string VideoFileName = String.Empty;
|
||||
|
||||
public EAspect VideoAspect = EAspect.Crop;
|
||||
public EAspect VideoAspect = EAspect.Automatic;
|
||||
|
||||
public bool NotesLoaded { get; private set; }
|
||||
|
||||
@@ -325,7 +325,7 @@ namespace VocaluxeLib.Songs
|
||||
{
|
||||
if (CoverFileName == "")
|
||||
{
|
||||
List<string> files = CHelper.ListImageFiles(Folder);
|
||||
IEnumerable<string> files = CHelper.ListImageFiles(Folder);
|
||||
foreach (String file in files)
|
||||
{
|
||||
if (file.ContainsIgnoreCase("[CO]") &&
|
||||
@@ -336,7 +336,7 @@ namespace VocaluxeLib.Songs
|
||||
|
||||
if (BackgroundFileNames.Count == 0)
|
||||
{
|
||||
List<string> files = CHelper.ListImageFiles(Folder);
|
||||
IEnumerable<string> files = CHelper.ListImageFiles(Folder);
|
||||
foreach (String file in files)
|
||||
{
|
||||
if (file.ContainsIgnoreCase("[BG]") &&
|
||||
@@ -518,4 +518,4 @@ namespace VocaluxeLib.Songs
|
||||
ShortEnd.Source = EDataSource.Calculated;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -110,6 +110,7 @@ namespace VocaluxeLib.Utils.Player
|
||||
|
||||
if (_Video != null || !SongHasVideo)
|
||||
return;
|
||||
|
||||
string videoFilePath = Path.Combine(_Song.Folder, _Song.VideoFileName);
|
||||
_Video = CBase.Video.Load(videoFilePath);
|
||||
if (_Video == null)
|
||||
@@ -175,4 +176,4 @@ namespace VocaluxeLib.Utils.Player
|
||||
_CloseVideo();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-5
@@ -9,7 +9,7 @@ platform:
|
||||
clone_depth: 15
|
||||
environment:
|
||||
GitHubKey:
|
||||
secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW
|
||||
secure: sGetWh2XUYs95VBT+QYNPtDW9Rh2/JBuxNNYXytpn7mMudUMcjSKDGErkCTum+ZE
|
||||
init:
|
||||
- git config --global core.autocrlf true
|
||||
install:
|
||||
@@ -63,7 +63,7 @@ before_build:
|
||||
choco install "msbuild-sonarqube-runner" -y
|
||||
SonarScanner.MSBuild.exe begin `
|
||||
/k:"Vocaluxe" `
|
||||
/d:sonar.organization="vocaluxe" `
|
||||
/o:"vocaluxe" `
|
||||
/d:sonar.host.url="https://sonarcloud.io" `
|
||||
/d:sonar.login="$Env:SonarQubeToken" `
|
||||
/d:"sonar.pullrequest.key=$env:APPVEYOR_PULL_REQUEST_NUMBER" `
|
||||
@@ -74,7 +74,7 @@ before_build:
|
||||
choco install "msbuild-sonarqube-runner" -y
|
||||
SonarScanner.MSBuild.exe begin `
|
||||
/k:"Vocaluxe" `
|
||||
/d:sonar.organization="vocaluxe" `
|
||||
/o:"vocaluxe" `
|
||||
/d:sonar.host.url="https://sonarcloud.io" `
|
||||
/v:"$Env:GIT_VERSION_TAG" `
|
||||
/d:sonar.login="$Env:SonarQubeToken" `
|
||||
@@ -135,7 +135,7 @@ deploy:
|
||||
release: $(APPVEYOR_REPO_TAG_NAME)
|
||||
description: $(APPVEYOR_REPO_COMMIT)
|
||||
auth_token:
|
||||
secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW
|
||||
secure: sGetWh2XUYs95VBT+QYNPtDW9Rh2/JBuxNNYXytpn7mMudUMcjSKDGErkCTum+ZE
|
||||
artifact: ReleaseZip
|
||||
prerelease: $(IS_BETA_RELEASE)
|
||||
on:
|
||||
@@ -147,7 +147,7 @@ deploy:
|
||||
release: Latest Nightly build
|
||||
description: $(APPVEYOR_REPO_COMMIT)
|
||||
auth_token:
|
||||
secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW
|
||||
secure: sGetWh2XUYs95VBT+QYNPtDW9Rh2/JBuxNNYXytpn7mMudUMcjSKDGErkCTum+ZE
|
||||
artifact: ReleaseZip
|
||||
prerelease: true
|
||||
on:
|
||||
|
||||
Reference in new issue
Block a user