]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
show encryption status; bookmark by server ID
authorRudolf Polzer <divverent@alientrap.org>
Sat, 28 Aug 2010 14:49:08 +0000 (16:49 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Sat, 28 Aug 2010 14:49:08 +0000 (16:49 +0200)
qcsrc/menu/skin-customizables.inc
qcsrc/menu/xonotic/serverlist.c

index c3320e503874d751d0a1688c8fa9c986a851f0c0..b93ecaa7ce84d5f4cc63dd9099c78e1963b0e3f9 100644 (file)
@@ -220,6 +220,8 @@ SKINBEGIN
        SKINFLOAT(ALPHA_SERVERLIST_HIGHPING, 0.4);
        SKINFLOAT(ALPHA_SERVERLIST_FAVORITE, 0.8);
        SKINVECTOR(COLOR_SERVERLIST_FAVORITE, '1 1 1');
+       SKINFLOAT(ALPHA_SERVERLIST_IMPOSSIBLE, 0.7);
+       SKINVECTOR(COLOR_SERVERLIST_IMPOSSIBLE, '0.3 0.3 0.3');
 
        // item: server info
        SKINVECTOR(COLOR_SERVERINFO_NAME, '1 1 1');
index d721c2555e2dbae45621da79f75b5d4601c88978..9de685ef4fbe0528e945d728aba70dc6ba1bc160 100644 (file)
@@ -95,41 +95,76 @@ void ServerList_UpdateFieldIDs()
 
 float IsFavorite(string srv)
 {
+       string p;
        float i, n;
+       if(srv == "")
+               return FALSE;
        srv = netaddress_resolve(srv, 26000);
+       p = crypto_getidfp(srv);
        n = tokenize_console(cvar_string("net_slist_favorites"));
        for(i = 0; i < n; ++i)
-               if(srv == netaddress_resolve(argv(i), 26000))
-                       return TRUE;
+       {
+               if(substring(argv(i), 0, 1) != "[" && strlen(argv(i)) == 44 && strstrofs(argv(i), ".", 0) < 0)
+               {
+                       if(p)
+                               if(argv(i) == p)
+                                       return TRUE;
+               }
+               else
+               {
+                       if(srv == netaddress_resolve(argv(i), 26000))
+                               return TRUE;
+               }
+       }
        return FALSE;
 }
 
 void ToggleFavorite(string srv)
 {
-       string s, s0, s1, s2, srv_resolved;
-       float i, n;
+       string s, s0, s1, s2, srv_resolved, p;
+       float i, n, f;
        srv_resolved = netaddress_resolve(srv, 26000);
+       p = crypto_getidfp(srv_resolved);
        s = cvar_string("net_slist_favorites");
        n = tokenize_console(s);
+       f = 0;
        for(i = 0; i < n; ++i)
-               if(srv_resolved == netaddress_resolve(argv(i), 26000))
+       {
+               if(substring(argv(i), 0, 1) != "[" && strlen(argv(i)) == 44 && strstrofs(argv(i), ".", 0) < 0)
                {
-                       s0 = s1 = s2 = "";
-                       if(i > 0)
-                               s0 = substring(s, 0, argv_end_index(i - 1));
-                       if(i < n-1)
-                               s2 = substring(s, argv_start_index(i + 1), -1);
-                       if(s0 != "" && s2 != "")
-                               s1 = " ";
-                       print("s0 = >>", s0, "<<\ns1 = >>", s1, "<<\ns2 = >>", s2, "<<\n");
-                       cvar_set("net_slist_favorites", strcat(s0, s1, s2));
-                       return;
+                       if(p)
+                               if(argv(i) != p)
+                                       continue;
                }
+               else
+               {
+                       if(srv_resolved != netaddress_resolve(argv(i), 26000))
+                               continue;
+               }
+               s0 = s1 = s2 = "";
+               if(i > 0)
+                       s0 = substring(s, 0, argv_end_index(i - 1));
+               if(i < n-1)
+                       s2 = substring(s, argv_start_index(i + 1), -1);
+               if(s0 != "" && s2 != "")
+                       s1 = " ";
+               cvar_set("net_slist_favorites", strcat(s0, s1, s2));
+               s = cvar_string("net_slist_favorites");
+               n = tokenize_console(s);
+               f = 1;
+               --i;
+       }
        
-       s1 = "";
-       if(s != "")
-               s1 = " ";
-       cvar_set("net_slist_favorites", strcat(s, " ", srv));
+       if(!f)
+       {
+               s1 = "";
+               if(s != "")
+                       s1 = " ";
+               if(p)
+                       cvar_set("net_slist_favorites", strcat(s, s1, p));
+               else
+                       cvar_set("net_slist_favorites", strcat(s, s1, srv));
+       }
 
        resorthostcache();
 }
@@ -556,6 +591,15 @@ void XonoticServerList_drawListBoxItem(entity me, float i, vector absSize, float
                theAlpha = theAlpha * (1 - SKINALPHA_SERVERLIST_FAVORITE) + SKINALPHA_SERVERLIST_FAVORITE;
        }
 
+       s = gethostcachestring(SLIST_FIELD_CNAME, i);
+       p = stof(substring(crypto_getencryptlevel(s), 0, 1));
+       if((p <= 0 && cvar("crypto_aeslevel") >= 3) || (p >= 3 && cvar("crypto_aeslevel") <= 0))
+       {
+               theColor = SKINCOLOR_SERVERLIST_IMPOSSIBLE;
+               theAlpha = SKINALPHA_SERVERLIST_IMPOSSIBLE;
+       }
+       // TODO show an icon for encryption status
+
        s = ftos(p);
        draw_Text(me.realUpperMargin * eY + (me.columnPingSize - draw_TextWidth(s, 0, me.realFontSize)) * eX, s, me.realFontSize, theColor, theAlpha, 0);
        s = draw_TextShortenToWidth(gethostcachestring(SLIST_FIELD_NAME, i), me.columnNameSize, 0, me.realFontSize);