graveman-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Graveman-cvs] Changes to graveman/current/src/themes.c


From: sylvain cresto
Subject: [Graveman-cvs] Changes to graveman/current/src/themes.c
Date: Tue, 19 Apr 2005 21:00:45 -0400

Index: graveman/current/src/themes.c
diff -u graveman/current/src/themes.c:1.1 graveman/current/src/themes.c:1.2
--- graveman/current/src/themes.c:1.1   Sun Apr 17 21:54:37 2005
+++ graveman/current/src/themes.c       Wed Apr 20 01:00:31 2005
@@ -24,33 +24,172 @@
 
 #include "graveman.h"
 
-void get_theme_list(GError **Aerror)
+#define THEME_NAME    "NAME="
+#define THEME_DESC    "DESC="
+#define THEME_AUTHOR  "AUTHOR="
+#define THEME_VERSION "VERSION="
+#define THEME_DATE    "DATE="
+#define THEME_URL     "URL="
+
+Ttheme *free_theme(Ttheme *Atheme)
+{
+  g_free(Atheme->path);
+  g_free(Atheme->name);
+  g_free(Atheme->desc);
+  g_free(Atheme->author);
+  g_free(Atheme->date);
+  g_free(Atheme->url);
+  g_free(Atheme);
+
+  return NULL;
+}
+
+/* allocation theme */
+Ttheme *read_theme_desc(const gchar *Afile, GError **Aerror)
+{
+  gchar *Lbuf;
+  gchar **Larrbuf;
+  gint i;
+  gchar *s;
+  Ttheme *Ltheme = g_malloc0(sizeof(Ttheme));
+  
+  if (!g_file_get_contents(Afile, &Lbuf, NULL, Aerror)) return NULL;
+  Larrbuf = g_strsplit(Lbuf, "\n", 0);
+  g_free(Lbuf);
+
+  for (i=0; Larrbuf[i]; i++) {
+    s=ltrim(Larrbuf[i]);
+    if (*s==';' || *s=='#' || !*s) continue;
+
+    if (!strncmp(s, THEME_NAME, strlen(THEME_NAME))) {
+      g_free(Ltheme->name);
+      Ltheme->name = g_strdup(ltrim(s+strlen(THEME_NAME)));
+    } else if (!strncmp(s, THEME_DESC, strlen(THEME_DESC))) {
+      g_free(Ltheme->desc);
+      Ltheme->desc = g_strdup(ltrim(s+strlen(THEME_DESC)));
+    } else if (!strncmp(s, THEME_AUTHOR, strlen(THEME_AUTHOR))) {
+      g_free(Ltheme->author);
+      Ltheme->author = g_strdup(ltrim(s+strlen(THEME_AUTHOR)));
+    } else if (!strncmp(s, THEME_VERSION, strlen(THEME_VERSION))) {
+      Ltheme->version = atoi(ltrim(s+strlen(THEME_VERSION)));
+    } else if (!strncmp(s, THEME_DATE, strlen(THEME_DATE))) {
+      g_free(Ltheme->date);
+      Ltheme->date = g_strdup(ltrim(s+strlen(THEME_DATE)));
+    } else if (!strncmp(s, THEME_URL, strlen(THEME_URL))) {
+      g_free(Ltheme->url);
+      Ltheme->url = g_strdup(ltrim(s+strlen(THEME_URL)));
+    }
+  }
+  g_strfreev(Larrbuf);
+
+  /* un theme valide doit au moins avoir un nom .. */
+  if (Ltheme->name && *Ltheme->name) {
+    Ltheme->path = g_strdup(Afile);
+    return Ltheme;
+  } else {
+    return free_theme(Ltheme);
+  }
+}
+
+/* retourne un hash contenant un chemin d'acces vers toutes les images */
+GHashTable *get_imagespath_plus_from_theme(Timages *Aimages, gchar *Atheme, 
gchar *Aplus, GError **Aerror)
+{
+  GHashTable *Lhashimagespath = _hash();
+  GSList *Lthemesemp = get_data_path();
+  GSList *Lcur;
+  Timages *Luneimage;
+  gchar Lpath[MAXPATHLEN];
+  gboolean Ltrouve;
+  gboolean Laumoinsun = FALSE;
+
+  for (Luneimage = Aimages; Luneimage->code; Luneimage++) {
+    _DEB("on cherche l'image [%s]", Luneimage->code);
+
+    Ltrouve = FALSE;
+    /* on recherche d'abord dans les repertoires themes specifiques */
+    if (Atheme) {
+      for (Lcur = Lthemesemp; Lcur && Lcur->data; Lcur = Lcur->next) {
+        g_snprintf(Lpath, sizeof(Lpath)-1, "%s/themes/%s/%s%s.png", (gchar 
*)Lcur->data,
+            Atheme, Luneimage->code, Aplus ? Aplus : "");
+fprintf(stderr, "on cherche dans [%s]\n", Lpath);
+        if (g_file_test(Lpath, G_FILE_TEST_IS_REGULAR)) {
+          Ltrouve = TRUE;
+          break;
+        }
+      }
+    }
+
+    /* puis dans les repertoires themes par defaut */
+    if (Ltrouve == FALSE && ((!Atheme) || strcmp(Atheme, _THEME_DEFAULT))) {
+      for (Lcur = Lthemesemp; Lcur && Lcur->data; Lcur = Lcur->next) {
+        g_snprintf(Lpath, sizeof(Lpath)-1, "%s/themes/%s/%s%s.png",
+            (gchar *)Lcur->data, _THEME_DEFAULT, Aplus ? Aplus : "", 
Luneimage->code);
+
+        if (g_file_test(Lpath, G_FILE_TEST_IS_REGULAR)) {
+          Ltrouve = TRUE;
+          break;
+        }
+      }
+    }
+
+    if (Ltrouve == TRUE) {
+      _DEB("on trouve [%s] => [%s]", Luneimage->code, Lpath);
+      g_hash_table_insert(Lhashimagespath, Luneimage->code, g_strdup(Lpath));
+      Laumoinsun = TRUE;
+    } else {
+      g_warning(_("cannot find file '%s' in any theme directories :-("), 
Luneimage->code);
+    }
+  }
+
+  g_slist_free(Lthemesemp);
+
+  if (!Laumoinsun) {
+    g_hash_table_destroy(Lhashimagespath);
+  }
+
+  return Laumoinsun ? Lhashimagespath : NULL;
+}
+
+/* retourne une liste de tous les themes */
+GSList *get_theme_list(GError **Aerror)
 {
-  GSList *Lthemelist = get_data_path();
+  GSList *Lthemesemp = get_data_path();
+  GSList *Lthemeslist = NULL;
   GSList *Lcur;
   gchar Lpath[MAXPATHLEN];
   gchar Ltestpath[MAXPATHLEN];
   const gchar *Lcurnom;
   GDir *Ldir;
+  Ttheme *Luntheme = NULL;
 
-  for (Lcur = Lthemelist; Lcur && Lcur->data; Lcur = Lcur->next) {
+  for (Lcur = Lthemesemp; Lcur && Lcur->data; Lcur = Lcur->next) {
     g_snprintf(Lpath, sizeof(Lpath)-1, "%s/themes/", (gchar *)Lcur->data);
-
+fprintf(stderr, "on test [%s]\n", Lpath);
     if (g_file_test(Lpath, G_FILE_TEST_IS_DIR)==FALSE) continue;
 
     if (!(Ldir = g_dir_open(Lpath, 0, NULL))) continue;
 
     while ((Lcurnom = g_dir_read_name(Ldir))) {
       g_snprintf(Ltestpath, sizeof(Ltestpath)-1, "%s%s/graveman", Lpath, 
Lcurnom);
+fprintf(stderr, "test 2 sur [%s]\n", Ltestpath);
       
-      if (g_file_test(Lpath, G_FILE_TEST_IS_REGULAR)) {
+      if (g_file_test(Ltestpath, G_FILE_TEST_IS_REGULAR)) {
+fprintf(stderr, "on a un theme [%s]\n", Ltestpath);
 g_message("oui un fichier !!\n");
+        if ((Luntheme = read_theme_desc(Ltestpath, NULL))) {
+g_message("et oui un theme [%s]\n", Luntheme->name);
+          Lthemeslist = g_slist_append(Lthemeslist, Luntheme);
+        }
       }
     }
 
 
     g_dir_close(Ldir);
   }
+
+  g_slist_free(Lthemesemp);
+
+  return Lthemeslist;
 }
 
 /*




reply via email to

[Prev in Thread] Current Thread [Next in Thread]