Strip dchub:// prefix from XML hublists.
[doldaconnect.git] / clients / gtk2 / hublist-xml.c
index e67f717..fcd9d73 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Dolda Connect - Modular multiuser Direct Connect-style client
- *  Copyright (C) 2007 Fredrik Tolf (fredrik@dolda2000.com)
+ *  Copyright (C) 2007 Fredrik Tolf <fredrik@dolda2000.com>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -61,7 +61,7 @@ static int checkvalid(xmlNodePtr n)
 int pubhubxmlhandler(int op, char *buf, size_t len)
 {
     static xmlParserCtxtPtr ctxt = NULL;
-    int i;
+    int i, o;
     xmlNodePtr dr, r, cr, c, n;
     int numcols, *cols, sortcol;
     GType type, *types;
@@ -119,6 +119,8 @@ int pubhubxmlhandler(int op, char *buf, size_t len)
                    type = G_TYPE_STRING;
                else if(!strcmp(stype, "int"))
                    type = G_TYPE_INT;
+               else if(!strcmp(stype, "percent"))
+                   type = G_TYPE_INT;
                else if(!strcmp(stype, "bytes"))
                    type = G_TYPE_INT64;
            }
@@ -142,14 +144,16 @@ int pubhubxmlhandler(int op, char *buf, size_t len)
        }
        for(i = 0; i < numcols; i++)
        {
-           if(!strcmp(names[i], "Address"))
+           if(!strcasecmp(names[i], "Address"))
            {
-               name = names[0];
-               names[0] = names[i];
-               names[i] = name;
-               type = types[0];
-               types[0] = types[i];
-               types[i] = type;
+               for(o = i; o > 0; o--) {
+                   name = names[o];
+                   type = types[o];
+                   names[o] = names[o - 1];
+                   types[o] = types[o - 1];
+                   names[o - 1] = name;
+                   types[o - 1] = type;
+               }
                break;
            }
        }
@@ -171,12 +175,18 @@ int pubhubxmlhandler(int op, char *buf, size_t len)
                attr = (char *)xmlGetProp(n, (xmlChar *)names[i]);
                if(attr != NULL)
                {
-                   if(types[i] == G_TYPE_STRING)
+                   if(!strcmp(names[i], "Address")) {
+                       if(!strncmp(attr, "dchub://", 8))
+                           gtk_list_store_set(model, &iter, i, attr + 8, -1);
+                       else
+                           gtk_list_store_set(model, &iter, i, attr, -1);
+                   } else if(types[i] == G_TYPE_STRING) {
                        gtk_list_store_set(model, &iter, i, attr, -1);
-                   else if(types[i] == G_TYPE_INT)
+                   } else if(types[i] == G_TYPE_INT) {
                        gtk_list_store_set(model, &iter, i, atoi(attr), -1);
-                   else if(types[i] == G_TYPE_INT64)
+                   } else if(types[i] == G_TYPE_INT64) {
                        gtk_list_store_set(model, &iter, i, strtoll(attr, NULL, 0), -1);
+                   }
                    xmlFree(attr);
                }
            }