[Top][All Lists]
[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;
}
/*