Usual Windows fixes
[claws.git] / src / plugins / pgpcore / sgpgme.c
index 52f6d36ba3cbb15d397d24961f6423331322b467..a2d7fa38a468e53072f9d81d83b100e4d98effef 100644 (file)
@@ -85,7 +85,6 @@ gpgme_verify_result_t sgpgme_verify_signature(gpgme_ctx_t ctx, gpgme_data_t sig,
 
 SignatureStatus sgpgme_sigstat_gpgme_to_privacy(gpgme_ctx_t ctx, gpgme_verify_result_t status)
 {
-       unsigned long validity = 0;
        gpgme_signature_t sig = NULL;
        
        if (GPOINTER_TO_INT(status) == -GPG_ERR_SYSTEM_ERROR) {
@@ -103,7 +102,6 @@ SignatureStatus sgpgme_sigstat_gpgme_to_privacy(gpgme_ctx_t ctx, gpgme_verify_re
                debug_print("sig == NULL\n");
                return SIGNATURE_UNCHECKED;
        }
-       validity = sig->validity;
 
        debug_print("err code %d\n", gpg_err_code(sig->status));
        switch (gpg_err_code(sig->status)) {
@@ -267,6 +265,8 @@ gchar *sgpgme_sigstat_info_full(gpgme_ctx_t ctx, gpgme_verify_result_t status)
        sig = status->signatures;
        
        while (sig) {
+               char buf[100];
+               struct tm lt;
                gpgme_user_id_t user = NULL;
                gpgme_key_t key;
                gpgme_error_t err;
@@ -292,9 +292,12 @@ gchar *sgpgme_sigstat_info_full(gpgme_ctx_t ctx, gpgme_verify_result_t status)
                        keyid = "?";
                        uid = "?";
                }
+
+               memset(buf, 0, sizeof(buf));
+               fast_strftime(buf, sizeof(buf)-1, prefs_common_get_prefs()->date_format, localtime_r(&sig->timestamp, &lt));
                g_string_append_printf(siginfo,
-                       _("Signature made using %s key ID %s\n"),
-                       keytype, keyid);
+                       _("Signature made on %s using %s key ID %s\n"),
+                       buf, keytype, keyid);
                
                switch (gpg_err_code(sig->status)) {
                case GPG_ERR_NO_ERROR:
@@ -611,17 +614,55 @@ bail:
 
 void sgpgme_init()
 {
+       gchar *ctype_locale = NULL, *messages_locale = NULL;
+       gchar *ctype_utf8_locale = NULL, *messages_utf8_locale = NULL;
+
        gpgme_engine_info_t engineInfo;
        if (gpgme_check_version("1.0.0")) {
 #ifdef LC_CTYPE
-               gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL));
+               debug_print("setting gpgme CTYPE locale\n");
+#ifdef G_OS_WIN32
+               ctype_locale = g_win32_getlocale();
+#else
+               ctype_locale = g_strdup(setlocale(LC_CTYPE, NULL));
+#endif
+               debug_print("setting gpgme locale to: %s\n", ctype_locale ? ctype_locale : "NULL");
+               if (strchr(ctype_locale, '.'))
+                       *(strchr(ctype_locale, '.')) = '\0';
+               else if (strchr(ctype_locale, '@'))
+                       *(strchr(ctype_locale, '@')) = '\0';
+               ctype_utf8_locale = g_strconcat(ctype_locale, ".UTF-8", NULL);
+
+               debug_print("setting gpgme locale to UTF8: %s\n", ctype_utf8_locale ? ctype_utf8_locale : "NULL");
+               gpgme_set_locale(NULL, LC_CTYPE, ctype_utf8_locale);
+
+               debug_print("done\n");
+               g_free(ctype_utf8_locale);
+               g_free(ctype_locale);
 #endif
 #ifdef LC_MESSAGES
-               gpgme_set_locale(NULL, LC_MESSAGES, setlocale(LC_MESSAGES, NULL));
+               debug_print("setting gpgme MESSAGES locale\n");
+#ifdef G_OS_WIN32
+               messages_locale = g_win32_getlocale();
+#else
+               messages_locale = g_strdup(setlocale(LC_MESSAGES, NULL));
+#endif
+               debug_print("setting gpgme locale to: %s\n", messages_locale ? messages_locale : "NULL");
+               if (strchr(messages_locale, '.'))
+                       *(strchr(messages_locale, '.')) = '\0';
+               else if (strchr(messages_locale, '@'))
+                       *(strchr(messages_locale, '@')) = '\0';
+               messages_utf8_locale = g_strconcat(messages_locale, ".UTF-8", NULL);
+               debug_print("setting gpgme locale to UTF8: %s\n", messages_utf8_locale ? messages_utf8_locale : "NULL");
+
+               gpgme_set_locale(NULL, LC_MESSAGES, messages_utf8_locale);
+
+               debug_print("done\n");
+               g_free(messages_utf8_locale);
+               g_free(messages_locale);
 #endif
                if (!gpgme_get_engine_info(&engineInfo)) {
                        while (engineInfo) {
-#ifndef G_OS_WIN32
                                debug_print("GpgME Protocol: %s\n"
                                            "Version: %s (req %s)\n"
                                            "Executable: %s\n",
@@ -629,7 +670,6 @@ void sgpgme_init()
                                        engineInfo->version ? engineInfo->version:"???",
                                        engineInfo->req_version ? engineInfo->req_version:"???",
                                        engineInfo->file_name ? engineInfo->file_name:"???");
-#endif
                                if (engineInfo->protocol == GPGME_PROTOCOL_OpenPGP
                                &&  gpgme_engine_check_version(engineInfo->protocol) != 
                                        GPG_ERR_NO_ERROR) {