Add Recently Played and Most Played per Profile as sorts
This commit is contained in:
+1
-1
@@ -234,7 +234,7 @@ void Banner::LoadFromSortOrder( SortOrder so )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( so != SORT_GROUP && so != SORT_RECENT )
|
if( so != SORT_GROUP && so != SORT_RECENT && so != SORT_RECENT_P1 && so != SORT_RECENT_P2 )
|
||||||
Load( THEME->GetPathG("Banner",ssprintf("%s",SortOrderToString(so).c_str())) );
|
Load( THEME->GetPathG("Banner",ssprintf("%s",SortOrderToString(so).c_str())) );
|
||||||
}
|
}
|
||||||
m_bScrolling = (bool)SCROLL_SORT_ORDER;
|
m_bScrolling = (bool)SCROLL_SORT_ORDER;
|
||||||
|
|||||||
@@ -163,6 +163,8 @@ static const char *SortOrderNames[] = {
|
|||||||
"Title",
|
"Title",
|
||||||
"BPM",
|
"BPM",
|
||||||
"Popularity",
|
"Popularity",
|
||||||
|
"PopularityP1",
|
||||||
|
"PopularityP2",
|
||||||
"TopGrades",
|
"TopGrades",
|
||||||
"TopP1Grades",
|
"TopP1Grades",
|
||||||
"TopP2Grades",
|
"TopP2Grades",
|
||||||
@@ -186,6 +188,8 @@ static const char *SortOrderNames[] = {
|
|||||||
"Length",
|
"Length",
|
||||||
"Roulette",
|
"Roulette",
|
||||||
"Recent",
|
"Recent",
|
||||||
|
"RecentP1",
|
||||||
|
"RecentP2",
|
||||||
};
|
};
|
||||||
XToString( SortOrder );
|
XToString( SortOrder );
|
||||||
StringToX( SortOrder );
|
StringToX( SortOrder );
|
||||||
|
|||||||
@@ -167,6 +167,8 @@ enum SortOrder
|
|||||||
SORT_TITLE, /**< Sort by the Song's title. */
|
SORT_TITLE, /**< Sort by the Song's title. */
|
||||||
SORT_BPM, /**< Sort by the Song's BPM. */
|
SORT_BPM, /**< Sort by the Song's BPM. */
|
||||||
SORT_POPULARITY, /**< Sort by how popular the Song is. */
|
SORT_POPULARITY, /**< Sort by how popular the Song is. */
|
||||||
|
SORT_POPULARITY_P1, /**< Sort by how popular the Song is for P1. */
|
||||||
|
SORT_POPULARITY_P2, /**< Sort by how popular the Song is for P2. */
|
||||||
SORT_TOP_GRADES, /**< Sort by the highest grades earned on a Song. */
|
SORT_TOP_GRADES, /**< Sort by the highest grades earned on a Song. */
|
||||||
SORT_TOP_GRADES_P1, /**< Sort by the highest grades earned on a Song for P1. */
|
SORT_TOP_GRADES_P1, /**< Sort by the highest grades earned on a Song for P1. */
|
||||||
SORT_TOP_GRADES_P2, /**< Sort by the highest grades earned on a Song for P2. */
|
SORT_TOP_GRADES_P2, /**< Sort by the highest grades earned on a Song for P2. */
|
||||||
@@ -192,6 +194,8 @@ enum SortOrder
|
|||||||
SORT_LENGTH, /**< Sort the songs/courses by how long they would last. */
|
SORT_LENGTH, /**< Sort the songs/courses by how long they would last. */
|
||||||
SORT_ROULETTE,
|
SORT_ROULETTE,
|
||||||
SORT_RECENT,
|
SORT_RECENT,
|
||||||
|
SORT_RECENT_P1, /**< Sort by the most recent play for P1. */
|
||||||
|
SORT_RECENT_P2, /**< Sort by the most recent play for P2. */
|
||||||
NUM_SortOrder,
|
NUM_SortOrder,
|
||||||
SortOrder_Invalid
|
SortOrder_Invalid
|
||||||
};
|
};
|
||||||
|
|||||||
+34
-1
@@ -562,6 +562,8 @@ void MusicWheel::BuildWheelItemDatas( std::vector<MusicWheelItemData *> &arrayWh
|
|||||||
case SORT_TITLE:
|
case SORT_TITLE:
|
||||||
case SORT_BPM:
|
case SORT_BPM:
|
||||||
case SORT_POPULARITY:
|
case SORT_POPULARITY:
|
||||||
|
case SORT_POPULARITY_P1:
|
||||||
|
case SORT_POPULARITY_P2:
|
||||||
case SORT_TOP_GRADES:
|
case SORT_TOP_GRADES:
|
||||||
case SORT_TOP_GRADES_P1:
|
case SORT_TOP_GRADES_P1:
|
||||||
case SORT_TOP_GRADES_P2:
|
case SORT_TOP_GRADES_P2:
|
||||||
@@ -578,6 +580,8 @@ void MusicWheel::BuildWheelItemDatas( std::vector<MusicWheelItemData *> &arrayWh
|
|||||||
case SORT_DOUBLE_CHALLENGE_METER:
|
case SORT_DOUBLE_CHALLENGE_METER:
|
||||||
case SORT_LENGTH:
|
case SORT_LENGTH:
|
||||||
case SORT_RECENT:
|
case SORT_RECENT:
|
||||||
|
case SORT_RECENT_P1:
|
||||||
|
case SORT_RECENT_P2:
|
||||||
{
|
{
|
||||||
// Make an array of Song*, then sort them
|
// Make an array of Song*, then sort them
|
||||||
std::vector<Song*> arraySongs;
|
std::vector<Song*> arraySongs;
|
||||||
@@ -623,6 +627,20 @@ void MusicWheel::BuildWheelItemDatas( std::vector<MusicWheelItemData *> &arrayWh
|
|||||||
arraySongs.erase( arraySongs.begin()+MOST_PLAYED_SONGS_TO_SHOW, arraySongs.end() );
|
arraySongs.erase( arraySongs.begin()+MOST_PLAYED_SONGS_TO_SHOW, arraySongs.end() );
|
||||||
bUseSections = false;
|
bUseSections = false;
|
||||||
break;
|
break;
|
||||||
|
case SORT_POPULARITY_P1:
|
||||||
|
if( PROFILEMAN->IsPersistentProfile(PLAYER_1) )
|
||||||
|
SongUtil::SortSongPointerArrayByNumPlays( arraySongs, ProfileSlot_Player1, true );
|
||||||
|
if( (int) arraySongs.size() > MOST_PLAYED_SONGS_TO_SHOW )
|
||||||
|
arraySongs.erase( arraySongs.begin()+MOST_PLAYED_SONGS_TO_SHOW, arraySongs.end() );
|
||||||
|
bUseSections = true;
|
||||||
|
break;
|
||||||
|
case SORT_POPULARITY_P2:
|
||||||
|
if( PROFILEMAN->IsPersistentProfile(PLAYER_2) )
|
||||||
|
SongUtil::SortSongPointerArrayByNumPlays( arraySongs, ProfileSlot_Player2, true );
|
||||||
|
if( (int) arraySongs.size() > MOST_PLAYED_SONGS_TO_SHOW )
|
||||||
|
arraySongs.erase( arraySongs.begin()+MOST_PLAYED_SONGS_TO_SHOW, arraySongs.end() );
|
||||||
|
bUseSections = true;
|
||||||
|
break;
|
||||||
case SORT_TOP_GRADES:
|
case SORT_TOP_GRADES:
|
||||||
SongUtil::SortSongPointerArrayByGrades( arraySongs, true );
|
SongUtil::SortSongPointerArrayByGrades( arraySongs, true );
|
||||||
break;
|
break;
|
||||||
@@ -650,6 +668,20 @@ void MusicWheel::BuildWheelItemDatas( std::vector<MusicWheelItemData *> &arrayWh
|
|||||||
arraySongs.erase( arraySongs.begin()+RECENT_SONGS_TO_SHOW, arraySongs.end() );
|
arraySongs.erase( arraySongs.begin()+RECENT_SONGS_TO_SHOW, arraySongs.end() );
|
||||||
bUseSections = false;
|
bUseSections = false;
|
||||||
break;
|
break;
|
||||||
|
case SORT_RECENT_P1:
|
||||||
|
if( PROFILEMAN->IsPersistentProfile(PLAYER_1) )
|
||||||
|
SongUtil::SortByMostRecentlyPlayedForProfile( arraySongs, PLAYER_1 );
|
||||||
|
if( (int) arraySongs.size() > RECENT_SONGS_TO_SHOW )
|
||||||
|
arraySongs.erase( arraySongs.begin()+RECENT_SONGS_TO_SHOW, arraySongs.end() );
|
||||||
|
bUseSections = true;
|
||||||
|
break;
|
||||||
|
case SORT_RECENT_P2:
|
||||||
|
if( PROFILEMAN->IsPersistentProfile(PLAYER_2) )
|
||||||
|
SongUtil::SortByMostRecentlyPlayedForProfile( arraySongs, PLAYER_2 );
|
||||||
|
if( (int) arraySongs.size() > RECENT_SONGS_TO_SHOW )
|
||||||
|
arraySongs.erase( arraySongs.begin()+RECENT_SONGS_TO_SHOW, arraySongs.end() );
|
||||||
|
bUseSections = true;
|
||||||
|
break;
|
||||||
case SORT_BEGINNER_METER:
|
case SORT_BEGINNER_METER:
|
||||||
case SORT_EASY_METER:
|
case SORT_EASY_METER:
|
||||||
case SORT_MEDIUM_METER:
|
case SORT_MEDIUM_METER:
|
||||||
@@ -1175,7 +1207,8 @@ void MusicWheel::FilterWheelItemDatas(std::vector<MusicWheelItemData *> &aUnFilt
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Update the popularity. This is affected by filtering. */
|
/* Update the popularity. This is affected by filtering. */
|
||||||
if( so == SORT_POPULARITY )
|
if( so == SORT_POPULARITY || so == SORT_POPULARITY_P1 || so == SORT_POPULARITY_P2 )
|
||||||
|
|
||||||
{
|
{
|
||||||
for( unsigned i=0; i < std::min<unsigned int>(3u, aFilteredData.size()); i++ )
|
for( unsigned i=0; i < std::min<unsigned int>(3u, aFilteredData.size()); i++ )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -708,7 +708,11 @@ RString SongUtil::GetSectionNameFromSongAndSort( const Song* pSong, SortOrder so
|
|||||||
return RString();
|
return RString();
|
||||||
}
|
}
|
||||||
case SORT_POPULARITY:
|
case SORT_POPULARITY:
|
||||||
|
case SORT_POPULARITY_P1:
|
||||||
|
case SORT_POPULARITY_P2:
|
||||||
case SORT_RECENT:
|
case SORT_RECENT:
|
||||||
|
case SORT_RECENT_P1:
|
||||||
|
case SORT_RECENT_P2:
|
||||||
return RString();
|
return RString();
|
||||||
case SORT_TOP_GRADES_P1:
|
case SORT_TOP_GRADES_P1:
|
||||||
{
|
{
|
||||||
@@ -840,6 +844,19 @@ void SongUtil::SortByMostRecentlyPlayedForMachine( std::vector<Song*> &vpSongsIn
|
|||||||
g_mapSongSortVal.clear();
|
g_mapSongSortVal.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SongUtil::SortByMostRecentlyPlayedForProfile( std::vector<Song*> &vpSongsInOut, PlayerNumber pn )
|
||||||
|
{
|
||||||
|
Profile *pProfile = PROFILEMAN->GetProfile(pn);
|
||||||
|
for (Song const *s : vpSongsInOut)
|
||||||
|
{
|
||||||
|
int iNumTimesPlayed = pProfile->GetSongNumTimesPlayed( s );
|
||||||
|
RString val = iNumTimesPlayed ? pProfile->GetSongLastPlayedDateTime(s).GetString() : RString("0");
|
||||||
|
g_mapSongSortVal[s] = val;
|
||||||
|
}
|
||||||
|
stable_sort( vpSongsInOut.begin(), vpSongsInOut.end(), CompareSongPointersBySortValueDescending );
|
||||||
|
g_mapSongSortVal.clear();
|
||||||
|
}
|
||||||
|
|
||||||
bool SongUtil::IsEditDescriptionUnique( const Song* pSong, StepsType st, const RString &sPreferredDescription, const Steps *pExclude )
|
bool SongUtil::IsEditDescriptionUnique( const Song* pSong, StepsType st, const RString &sPreferredDescription, const Steps *pExclude )
|
||||||
{
|
{
|
||||||
for (Steps const *pSteps : pSong->GetAllSteps())
|
for (Steps const *pSteps : pSong->GetAllSteps())
|
||||||
|
|||||||
@@ -160,6 +160,7 @@ namespace SongUtil
|
|||||||
RString GetSectionNameFromSongAndSort( const Song *pSong, SortOrder so );
|
RString GetSectionNameFromSongAndSort( const Song *pSong, SortOrder so );
|
||||||
void SortSongPointerArrayBySectionName( std::vector<Song*> &vpSongsInOut, SortOrder so );
|
void SortSongPointerArrayBySectionName( std::vector<Song*> &vpSongsInOut, SortOrder so );
|
||||||
void SortByMostRecentlyPlayedForMachine( std::vector<Song*> &vpSongsInOut );
|
void SortByMostRecentlyPlayedForMachine( std::vector<Song*> &vpSongsInOut );
|
||||||
|
void SortByMostRecentlyPlayedForProfile( std::vector<Song*> &vpSongsInOut, PlayerNumber pn);
|
||||||
void SortSongPointerArrayByLength( std::vector<Song*> &vpSongsInOut );
|
void SortSongPointerArrayByLength( std::vector<Song*> &vpSongsInOut );
|
||||||
|
|
||||||
int CompareSongPointersByGroup(const Song *pSong1, const Song *pSong2);
|
int CompareSongPointersByGroup(const Song *pSong1, const Song *pSong2);
|
||||||
|
|||||||
Reference in New Issue
Block a user