diff --git a/dgamelaunch.h b/dgamelaunch.h index 08daf0d..6ba724b 100644 --- a/dgamelaunch.h +++ b/dgamelaunch.h @@ -75,23 +75,18 @@ struct dg_globalconfig }; -/* username asc and idletime desc are most important */ typedef enum { SORTMODE_NONE = 0, - SORTMODE_USERNAME_ASC, - SORTMODE_IDLETIME_DESC, - SORTMODE_IDLETIME_ASC, - SORTMODE_USERNAME_DESC, + SORTMODE_USERNAME, + SORTMODE_IDLETIME, NUM_SORTMODES } dg_sortmode; static const char *SORTMODE_NAME[] = { "Unsorted", - "Username, asc", - "Idletime, desc", - "Idletime, asc", - "Username, desc", + "Username", + "Idletime", "", }; diff --git a/dgl-common.c b/dgl-common.c index a9e509f..f410df8 100644 --- a/dgl-common.c +++ b/dgl-common.c @@ -112,46 +112,30 @@ dgl_format_str(int game, struct dg_user *me, char *str) static int -sort_game_username_asc(const void *g1, const void *g2) +sort_game_username(const void *g1, const void *g2) { const struct dg_game *game1 = *(const struct dg_game **)g1; const struct dg_game *game2 = *(const struct dg_game **)g2; - return strcmp(game1->name, game2->name); + return strcasecmp(game1->name, game2->name); } static int -sort_game_username_desc(const void *g1, const void *g2) +sort_game_idletime(const void *g1, const void *g2) { const struct dg_game *game1 = *(const struct dg_game **)g1; const struct dg_game *game2 = *(const struct dg_game **)g2; - return strcmp(game2->name, game1->name); + if (game2->idle_time != game1->idle_time) + return difftime(game2->idle_time, game1->idle_time); + else + return strcasecmp(game1->name, game2->name); } -static int -sort_game_idletime_asc(const void *g1, const void *g2) -{ - const struct dg_game *game1 = *(const struct dg_game **)g1; - const struct dg_game *game2 = *(const struct dg_game **)g2; - return difftime(game1->idle_time, game2->idle_time); -} - -static int -sort_game_idletime_desc(const void *g1, const void *g2) -{ - const struct dg_game *game1 = *(const struct dg_game **)g1; - const struct dg_game *game2 = *(const struct dg_game **)g2; - return difftime(game2->idle_time, game1->idle_time); -} - - struct dg_game ** sort_games (struct dg_game **games, int len, dg_sortmode sortmode) { switch (sortmode) { - case SORTMODE_USERNAME_ASC: qsort(games, len, sizeof(struct dg_game *), sort_game_username_asc); break; - case SORTMODE_USERNAME_DESC: qsort(games, len, sizeof(struct dg_game *), sort_game_username_desc); break; - case SORTMODE_IDLETIME_ASC: qsort(games, len, sizeof(struct dg_game *), sort_game_idletime_asc); break; - case SORTMODE_IDLETIME_DESC: qsort(games, len, sizeof(struct dg_game *), sort_game_idletime_desc); break; + case SORTMODE_USERNAME: qsort(games, len, sizeof(struct dg_game *), sort_game_username); break; + case SORTMODE_IDLETIME: qsort(games, len, sizeof(struct dg_game *), sort_game_idletime); break; default: ; } return games;