2006-01-30 [colin] 2.0.0cvs1
[claws.git] / src / manual.c
index 981c7346866c87725ba5cfeef03dd432fb5d3501..88608f826d8db4cc2f92732d8cf18b6c7714e829 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Sylpheed-Claws team
  *
  * 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
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #ifdef HAVE_CONFIG_H
 
 #include <glib.h>
 #include <string.h>
-#include <locale.h>
+
+#if HAVE_LOCALE_H
+#  include <locale.h>
+#endif
+
+#if !defined(LC_MESSAGES) && defined(G_OS_WIN32)
+#include <libintl.h>
+#endif
+
 
 #include "prefs_common.h"
 #include "manual.h"
 #include "utils.h"
 
-static gchar *sylpheeddoc_manuals[] =
-{
-    "en",
-    "es", 
-    "fr", 
-    "de",
-};
 
 static gchar *get_language()
 {
        gchar *language;
        gchar *c;
 
-       language = g_strdup(setlocale(LC_ALL, NULL));
+#ifdef G_OS_WIN32
+       language = g_strdup(gtk_set_locale());
+#else
+        /* FIXME: Why not using gtk_set_locale here too? -wk */
+       language = g_strdup(setlocale(LC_MESSAGES, NULL));
+#endif
+        /* At least under W32 it is possible that gtk_set_locate
+           returns NULL.  This is not documented but well, it happens
+           and g_strdup is happy with a NULL argument.  We return a
+           standard language string in this case. */
+        if (!language)
+                return g_strdup("en");
        if((c = strchr(language, ',')) != NULL)
                *c = '\0';
        if((c = strchr(language, '_')) != NULL)
@@ -77,21 +89,19 @@ static gchar *get_local_path_with_locale(gchar *rootpath)
 gboolean manual_available(ManualType type)
 {
        gboolean ret = FALSE;
-       gchar *dir = NULL;
+       gchar *dir = NULL, *uri = NULL;
        
        switch (type) {
                case MANUAL_MANUAL_LOCAL:
                        dir = get_local_path_with_locale(MANUALDIR);
                        if (dir != NULL) {
+                               uri = g_strconcat(dir, G_DIR_SEPARATOR_S, MANUAL_HTML_INDEX, NULL);
                                g_free(dir);
-                               ret = TRUE;
-                       }
-                       break;
-               case MANUAL_FAQ_LOCAL:
-                       dir = get_local_path_with_locale(FAQDIR);
-                       if (dir != NULL) {
-                               g_free(dir);
-                               ret = TRUE;
+                               if (is_file_exist(uri))
+                                       ret = TRUE;
+                               else
+                                       ret = FALSE;
+                               g_free(uri);
                        }
                        break;
                default:
@@ -101,27 +111,10 @@ gboolean manual_available(ManualType type)
        return ret;
 }
 
-static gchar *get_syldoc_language()
-{
-       gchar *language;
-       int i;
-       
-       language = get_language();
-       for (i = 0; i < sizeof(sylpheeddoc_manuals) / sizeof(sylpheeddoc_manuals[0]); i++) {
-               if (strcmp(language, sylpheeddoc_manuals[i]) == 0) {
-                       return language;
-               }
-       }
-       g_free(language);
-       
-       return g_strdup("en");
-}
-
 void manual_open(ManualType type)
 {
        gchar *uri = NULL;
        gchar *dir;
-       gchar *lang_str;
 
        switch (type) {
                case MANUAL_MANUAL_LOCAL:
@@ -131,25 +124,8 @@ void manual_open(ManualType type)
                                g_free(dir);
                        }
                        break;
-
-               case MANUAL_FAQ_LOCAL:
-                       dir = get_local_path_with_locale(FAQDIR);
-                       if (dir != NULL) {
-                               uri = g_strconcat("file://", dir, G_DIR_SEPARATOR_S, FAQ_HTML_INDEX, NULL);
-                               g_free(dir);
-                       }
-                       break;
-
-               case MANUAL_MANUAL_SYLDOC:
-                       lang_str = get_syldoc_language();
-                       uri = g_strconcat("http://sylpheeddoc.sourceforge.net/", lang_str, "/manual/manual.html", NULL);
-                       g_free(lang_str);
-                       break;
-
-               case MANUAL_FAQ_SYLDOC:
-                       lang_str = get_syldoc_language();
-                       uri = g_strconcat("http://sylpheeddoc.sourceforge.net/", lang_str, "/faq/faq.html", NULL);
-                       g_free(lang_str);
+               case MANUAL_FAQ_CLAWS:
+                       uri = g_strconcat(FAQ_URI, NULL);
                        break;
 
                default: