From 877b3e777c4c727842516768207da1f126de6258 Mon Sep 17 00:00:00 2001
From: Pasi Kallinen <paxed@alt.org>
Date: Tue, 25 Dec 2007 16:27:30 +0000
Subject: [PATCH] Simplify the watching-screen sorting.

git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@372 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
---
 dgamelaunch.h | 13 ++++---------
 dgl-common.c  | 34 +++++++++-------------------------
 2 files changed, 13 insertions(+), 34 deletions(-)

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;