Added translation framework and translated a few strings.
[gpgol.git] / src / verify-dialog.c
index d8260d4..09b19c2 100644 (file)
@@ -1,14 +1,14 @@
 /* verify-dialog.c
  *     Copyright (C) 2005 g10 Code GmbH
  *
- * This file is part of OutlGPG.
+ * This file is part of GPGol.
  * 
- * OutlGPG is free software; you can redistribute it and/or
+ * GPGol is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2 of the License, or (at your option) any later version.
  * 
- * OutlGPG is distributed in the hope that it will be useful,
+ * GPGol is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  * GNU Lesser General Public License for more details.
 #include <time.h>
 #include <gpgme.h>
 
-#include "outlgpg-ids.h"
-#include "keycache.h"
+#include "gpgol-ids.h"
 #include "intern.h"
+#include "util.h"
+
+struct dialog_context
+{
+  gpgme_verify_result_t res;
+  const char *filename;
+};
+
 
 static char*
 get_timestamp (time_t l)
@@ -69,95 +76,114 @@ load_akalist (HWND dlg, gpgme_key_t key)
 static void 
 load_sigbox (HWND dlg, gpgme_verify_result_t ctx)
 {
-    gpgme_key_t key;
-    char *s, buf[2+16+1];
-    char *p;
-    int stat;
-    int valid, no_key = 0, n = 0;
-
-    s = get_timestamp (ctx->signatures->timestamp);
-    SetDlgItemText (dlg, IDC_VRY_TIME, s);
-
-    s = ctx->signatures->fpr;
-    if (strlen (s) == 40)
-       strncpy (buf+2, s+40-8, 8);
-    else if (strlen (s) == 32) /* MD5:RSAv3 */
-       strncpy (buf+2, s+32-8, 8);
-    else
-       strncpy (buf+2, s+8, 8);
-    buf[10] = 0;
-    buf[0] = '0'; 
-    buf[1] = 'x';
-    SetDlgItemText (dlg, IDC_VRY_KEYID, buf);
-    /*key = find_gpg_key (buf+2, 0);*/
-    key = get_gpg_key (buf+2);
-    
-    stat = ctx->signatures->summary;
-    if (stat & GPGME_SIGSUM_GREEN)
-       s = "Good signature";
-    else if (stat & GPGME_SIGSUM_RED)
-       s = "BAD signature!";
-    else if (stat & GPGME_SIGSUM_KEY_REVOKED)
-       s = "Good signature from revoked key";
-    else if (stat & GPGME_SIGSUM_KEY_EXPIRED)
-       s = "Good signature from expired key";
-    else if (stat & GPGME_SIGSUM_SIG_EXPIRED)
-       s = "Good expired signature";
-    else if (stat & GPGME_SIGSUM_KEY_MISSING) {
-       s = "Could not check signature: missing key";
-       no_key = 1;
+  gpgme_error_t err;
+  gpgme_key_t key;
+  char buf[2+16+1];
+  char *p;
+  const char *s;
+  int stat;
+  int valid, no_key = 0, n = 0;
+  
+  s = get_timestamp (ctx->signatures->timestamp);
+  SetDlgItemText (dlg, IDC_VRY_TIME, s);
+  
+  s = ctx->signatures->fpr;
+  if (strlen (s) == 40)
+    strncpy (buf+2, s+40-8, 8);
+  else if (strlen (s) == 32) /* MD5:RSAv3 */
+    strncpy (buf+2, s+32-8, 8);
+  else
+    strncpy (buf+2, s+8, 8);
+  buf[10] = 0;
+  buf[0] = '0'; 
+  buf[1] = 'x';
+  SetDlgItemText (dlg, IDC_VRY_KEYID, buf);
+
+  {
+    gpgme_ctx_t gctx;
+
+    key = NULL;
+    if (!gpgme_new (&gctx))
+      {
+        err = gpgme_get_key (gctx, buf+2, &key, 0);
+        if (err)
+          {
+            log_debug ("getting key `%s' failed: %s",
+                       buf+2, gpg_strerror (err));
+            key = NULL;
+          }
+        gpgme_release (gctx);
+      }
+  }
+
+  stat = ctx->signatures->summary;
+  if (stat & GPGME_SIGSUM_GREEN)
+    s = _("Good signature");
+  else if (stat & GPGME_SIGSUM_RED)
+    s = _("BAD signature!");
+  else if (stat & GPGME_SIGSUM_KEY_REVOKED)
+    s = _("Good signature from revoked key");
+  else if (stat & GPGME_SIGSUM_KEY_EXPIRED)
+    s = _("Good signature from expired key");
+  else if (stat & GPGME_SIGSUM_SIG_EXPIRED)
+    s = _("Good expired signature");
+  else if (stat & GPGME_SIGSUM_KEY_MISSING) 
+    {
+      s = _("Could not check signature: missing key");
+      no_key = 1;
     }
-    else
-       s = "Verification error";
-    /* XXX: if we have a key we do _NOT_ trust, stat is 'wrong' */
-    SetDlgItemText (dlg, IDC_VRY_STATUS, s);
-    
-    if (key) {
-       s = (char*)gpgme_key_get_string_attr (key, GPGME_ATTR_USERID, NULL, 0);
-       SetDlgItemText (dlg, IDC_VRY_ISSUER, s);
-
-       n = load_akalist (dlg, key);
-       gpgme_key_release (key);
-       if (n == 0)
-           EnableWindow (GetDlgItem (dlg, IDC_VRY_AKALIST), FALSE);
-    }
-    else {
-       s = "User-ID not found";
-       SetDlgItemText (dlg, IDC_VRY_ISSUER, s);
+  else
+    s = _("Verification error");
+  /* XXX: if we have a key we do _NOT_ trust, stat is 'wrong' */
+  SetDlgItemText (dlg, IDC_VRY_STATUS, s);
+  
+  if (key && key->uids) 
+    {
+      s = key->uids->uid;
+      SetDlgItemText (dlg, IDC_VRY_ISSUER, s);
+      
+      n = load_akalist (dlg, key);
+      gpgme_key_release (key);
+      if (n == 0)
+       EnableWindow (GetDlgItem (dlg, IDC_VRY_AKALIST), FALSE);
     }
-
-    switch (ctx->signatures->pubkey_algo) {
-    case GPGME_PK_RSA: s = "RSA"; break;
-    case GPGME_PK_DSA: s = "DSA"; break;
-    default:           s = "???"; break;
+  else 
+    {
+      s = _("User-ID not found");
+      SetDlgItemText (dlg, IDC_VRY_ISSUER, s);
     }
-    SetDlgItemText (dlg, IDC_VRY_PKALGO, s);
-
-    valid = ctx->signatures->validity;
-    if (stat & GPGME_SIGSUM_SIG_EXPIRED) {
-       char *fmt;
-
-       fmt = "Signature expired on %s";
-       s = get_timestamp (ctx->signatures->exp_timestamp);
-       p = xmalloc (strlen (s)+1+strlen (fmt)+2);
-       sprintf (p, fmt, s);
-       SetDlgItemText (dlg, IDC_VRY_HINT, s);
-       xfree (p);
+  
+  s = get_pubkey_algo_str (ctx->signatures->pubkey_algo);
+  SetDlgItemText (dlg, IDC_VRY_PKALGO, s);
+  
+  valid = ctx->signatures->validity;
+  if (stat & GPGME_SIGSUM_SIG_EXPIRED) 
+    {
+      char *fmt;
+    
+      fmt = "Signature expired on %s";
+      s = get_timestamp (ctx->signatures->exp_timestamp);
+      p = xmalloc (strlen (s)+1+strlen (fmt)+2);
+      sprintf (p, fmt, s);
+      SetDlgItemText (dlg, IDC_VRY_HINT, s);
+      xfree (p);
     }
-    else if (valid < GPGME_VALIDITY_MARGINAL) {
-       switch (valid) {
+  else if (valid < GPGME_VALIDITY_MARGINAL) 
+    {
+      switch (valid) 
+       {
        case GPGME_VALIDITY_NEVER:
-           s = "Signature issued by a key we do NOT trust.";
-           break;
-
+         s = "Signature issued by a key we do NOT trust.";
+         break;
+         
        default:
-           if (no_key)
-               s = "";
-           else
-               s = "Signature issued by a non-valid key.";
-           break;
+         if (no_key)
+           s = "";
+         else
+           s = "Signature issued by a non-valid key.";
+         break;
        }
-       SetDlgItemText (dlg, IDC_VRY_HINT, s);
+      SetDlgItemText (dlg, IDC_VRY_HINT, s);
     }
 }
 
@@ -165,14 +191,22 @@ load_sigbox (HWND dlg, gpgme_verify_result_t ctx)
 static BOOL CALLBACK
 verify_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
 {
-    static gpgme_verify_result_t ctx;
+    static struct dialog_context *ctx;
 
     switch (msg) {
     case WM_INITDIALOG:
-       ctx = (gpgme_verify_result_t)lparam;
-       load_sigbox (dlg, ctx);
+       ctx = (struct dialog_context *)lparam;
+       load_sigbox (dlg, ctx->res);
        center_window (dlg, NULL);
        SetForegroundWindow (dlg);
+        if (ctx->filename)
+          {
+            char *tmp = xmalloc (strlen (ctx->filename) + 100);
+            strcpy (stpcpy (stpcpy (tmp, "Verification Result ("),
+                            ctx->filename), ")");
+            SetWindowText (dlg, tmp);
+            xfree (tmp);
+          }
        break;
 
     case WM_COMMAND:
@@ -187,11 +221,19 @@ verify_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
 }
 
 
-/* Display the verify dialog based on the gpgme result in @res. */
+/* Display the verify dialog based on the gpgme result in
+   RES. FILENAME is used to modify the caption of the dialog; it may
+   be NULL. */
 int
-verify_dialog_box (gpgme_verify_result_t res)
+verify_dialog_box (gpgme_verify_result_t res, const char *filename)
 {
-    DialogBoxParam (glob_hinst, (LPCTSTR)IDD_VRY, GetDesktopWindow (),
-                   verify_dlg_proc, (LPARAM)res);
-    return res->signatures->summary == GPGME_SIGSUM_GREEN? 0 : -1;
+  struct dialog_context ctx;
+
+  memset (&ctx,0, sizeof ctx);
+  ctx.res = res;
+  ctx.filename = filename;
+
+  DialogBoxParam (glob_hinst, (LPCTSTR)IDD_VRY, GetDesktopWindow (),
+                  verify_dlg_proc, (LPARAM)&ctx);
+  return res->signatures->summary == GPGME_SIGSUM_GREEN? 0 : -1;
 }