/[winpt]/trunk/Src/wptKeyManagerDlg.cpp
ViewVC logotype

Diff of /trunk/Src/wptKeyManagerDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 164 by twoaday, Fri Jan 20 09:19:15 2006 UTC revision 166 by twoaday, Tue Jan 24 10:17:47 2006 UTC
# Line 97  struct mybuttons myb[] = { Line 97  struct mybuttons myb[] = {
97  };  };
98    
99    
100    static void km_gui_import (struct km_info_s *kmi, int cmd_id, void *param);
101    
102  /* Subclass the keylist listview control to allow extended commands. */  /* Subclass the keylist listview control to allow extended commands. */
103  static BOOL CALLBACK  static BOOL CALLBACK
104  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
105  {  {
106      struct listview_ctrl_s lv;      struct listview_ctrl_s lv;
107        struct km_info_s *kmi;
108    
109      switch (msg) {      switch (msg) {
110        case WM_DROPFILES:
111            kmi = (km_info_s *)keylist_proc.opaque;
112            km_gui_import (kmi, WM_DROPFILES, (void*)wparam);
113            break;
114    
115      case WM_LBUTTONDBLCLK:      case WM_LBUTTONDBLCLK:
116          send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PROPS);          send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PROPS);
117          break;          break;
# Line 1020  updated_keys_avail (void) Line 1028  updated_keys_avail (void)
1028  static int  static int
1029  find_keypos (listview_ctrl_t lv, gpgme_key_t key)  find_keypos (listview_ctrl_t lv, gpgme_key_t key)
1030  {  {
1031      gpgme_key_t src;      char keyid[16+1];
1032      int i;      int i;
1033    
1034      for (i=0; i < listview_count_items (lv, 0); i++) {      for (i=0; i < listview_count_items (lv, 0); i++) {
1035          src = (gpgme_key_t)listview_get_item2 (lv, i);          listview_get_item_text (lv, i, KM_COL_KEYID, keyid, sizeof (keyid)-1);
1036          if (src && src->subkeys->keyid == key->subkeys->keyid)          if (!strcmp (key->subkeys->keyid+8, keyid+2))
1037              return i;              return i;
1038      }      }
1039      return -1;      return -1;
# Line 1039  refresh_keylist (struct km_info_s *kmi) Line 1047  refresh_keylist (struct km_info_s *kmi)
1047  {  {
1048      struct keycache_s *ctx;      struct keycache_s *ctx;
1049      gpg_keycache_t kc;      gpg_keycache_t kc;
1050      int status=0;      int status=0, pos;
1051    
1052      kc = keycache_get_ctx (1);      kc = keycache_get_ctx (1);
1053      while (!gpg_keycache_next_updated_key (kc, &ctx, &status)) {      while (!gpg_keycache_next_updated_key (kc, &ctx, &status)) {
1054          if (status == KC_FLAG_ADD)          if (status == KC_FLAG_ADD)
1055              keylist_add_key (kmi->lv, KEYLIST_LIST, ctx->key);              keylist_add_key (kmi->lv, KEYLIST_LIST, ctx->key);
1056          else          else {
1057              keylist_upd_key (kmi->lv, find_keypos (kmi->lv, ctx->key), ctx->key);              pos = find_keypos (kmi->lv, ctx->key);
1058          /*log_box ("debug", 0, "(%d) %s", status, ctx->key->uids->name);*/              if (pos != -1)
1059                    keylist_upd_key (kmi->lv, pos, ctx->key);
1060            }
1061      }      }
1062      keylist_sort (kmi->lv, KEY_SORT_USERID);      keylist_sort (kmi->lv, KEY_SORT_USERID);
1063      update_status_bar (kmi->statbar, kmi->lv);      update_status_bar (kmi->statbar, kmi->lv);
# Line 1061  reload_keylist (struct km_info_s *kmi) Line 1071  reload_keylist (struct km_info_s *kmi)
1071      keycache_reload (kmi->dlg);      keycache_reload (kmi->dlg);
1072      keylist_reload (kmi->lv, keycache_get_ctx (1),      keylist_reload (kmi->lv, keycache_get_ctx (1),
1073                      KEYLIST_LIST, KEY_SORT_USERID);                      KEYLIST_LIST, KEY_SORT_USERID);
1074        update_status_bar (kmi->statbar, kmi->lv);
1075        keyring_check_last_access ();
1076    }
1077    
1078    
1079    /* Reload the entire key cache and update the listview. */
1080    static void
1081    reload_keycache (struct km_info_s *kmi)
1082    {
1083        refresh_cache_s rcs = {0};
1084        gpg_keycache_t c;
1085    
1086        rcs.kr_reload = rcs.kr_update = 1;
1087        rcs.tr_update = 0;
1088        DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, kmi->dlg,
1089                        keycache_dlg_proc, (LPARAM)&rcs);
1090        c = keycache_get_ctx (1);
1091        if (!c)
1092            BUG (0);
1093        keylist_reload (kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID);
1094        update_status_bar (kmi->statbar, kmi->lv);
1095        SetForegroundWindow (kmi->dlg);
1096    }
1097    
1098    
1099    /* Handle all import request. */
1100    static void
1101    km_gui_import (struct km_info_s *kmi, int cmd_id, void *param)
1102    {
1103        int newkeys=0, newsks=0;
1104        int err = 0;
1105    
1106        switch (cmd_id) {
1107        case ID_KEYMISC_PASTE:
1108            err = km_clip_import (kmi->dlg, &newkeys, &newsks);
1109            break;
1110    
1111        case ID_KEYMISC_IMPORT:
1112            err = km_file_import (kmi->dlg, NULL, &newkeys, &newsks);
1113            break;
1114    
1115        case WM_DROPFILES:
1116            err = km_dropped_file_import (kmi->dlg, (HDROP)param,
1117                                          &newkeys, &newsks);
1118            break;
1119    
1120        default:
1121            err = 1;
1122            break;
1123        }
1124    
1125        if (!err && !newsks && (newkeys > 0 && newkeys < KM_PRELOAD_KEYS))
1126            refresh_keylist (kmi);
1127        else if (!err) /* avoid to spawn too much processes. */
1128            reload_keylist (kmi);
1129    
1130        SetForegroundWindow (kmi->dlg);
1131        center_window (kmi->dlg, NULL);
1132  }  }
1133    
1134    
# Line 1077  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1145  keymanager_dlg_proc (HWND dlg, UINT msg,
1145      struct genkey_s genkey;      struct genkey_s genkey;
1146      struct winpt_key_s k = {0};      struct winpt_key_s k = {0};
1147      struct URL_ctx_s *url;      struct URL_ctx_s *url;
     refresh_cache_s rcs = {0};  
1148      char type[32], *name;      char type[32], *name;
1149      const char *t, *host;      const char *t, *host;
1150      WORD port = 0;      WORD port = 0;
# Line 1109  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1176  keymanager_dlg_proc (HWND dlg, UINT msg,
1176          kmi->lv = keylist_load (GetDlgItem (dlg, IDC_KEYMISC_KEYLIST), c,          kmi->lv = keylist_load (GetDlgItem (dlg, IDC_KEYMISC_KEYLIST), c,
1177                                  NULL, KEYLIST_LIST, kmi->keylist_sortby);                                  NULL, KEYLIST_LIST, kmi->keylist_sortby);
1178          /* init subclassing for the listview */          /* init subclassing for the listview */
1179            keylist_proc.opaque = kmi;
1180          keylist_proc.dlg = dlg;          keylist_proc.dlg = dlg;
1181          keylist_proc.current = (WNDPROC)keylist_subclass_proc;          keylist_proc.current = (WNDPROC)keylist_subclass_proc;
1182          keylist_proc.old = (WNDPROC)GetWindowLong(kl, GWL_WNDPROC);          keylist_proc.old = (WNDPROC)GetWindowLong(kl, GWL_WNDPROC);
# Line 1148  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1216  keymanager_dlg_proc (HWND dlg, UINT msg,
1216          set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X", type);          set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X", type);
1217          ltoa (kmi->pos_y, type, 10);          ltoa (kmi->pos_y, type, 10);
1218          set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y", type);          set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y", type);
1219            /* XXX: store window size. */
1220                    
1221          /* Remove runtime information. This should be the last action taken here. */          /* Remove runtime information. This should be the last action taken here. */
1222          delete kmi; kmi = NULL;          delete kmi; kmi = NULL;
# Line 1509  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1578  keymanager_dlg_proc (HWND dlg, UINT msg,
1578                            
1579          case ID_KEYMISC_PROPS:                case ID_KEYMISC_PROPS:      
1580              if (kmi->lv_idx == -1) {              if (kmi->lv_idx == -1) {
1581                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR);
1582                  return TRUE;                  return TRUE;
1583              }              }
1584              key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx);              key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx);
1585              if (!key)              if (!key)
1586                  BUG (NULL);                  BUG (NULL);
1587              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
1588                strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8);
1589                k.keyid = k.tmp_keyid;
1590              k.key_pair = km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL)? 1 : 0;              k.key_pair = km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL)? 1 : 0;
             k.keyid = key->subkeys->keyid+8;  
1591              k.callback.ctl = kmi->lv;              k.callback.ctl = kmi->lv;
1592              k.callback.idx = kmi->lv_idx;              k.callback.idx = kmi->lv_idx;
1593              k.is_v3 = km_key_is_v3 (kmi->lv, kmi->lv_idx);              k.is_v3 = km_key_is_v3 (kmi->lv, kmi->lv_idx);
1594              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,
1595                                keyprops_dlg_proc, (LPARAM)&k,                                keyprops_dlg_proc, (LPARAM)&k,
1596                                _("Key Properties"), IDS_WINPT_KEYPROPS );                                _("Key Properties"), IDS_WINPT_KEYPROPS);
             if (k.callback.new_val != 0) {  
                 t = get_key_trust_str (k.callback.new_val);  
                 listview_add_sub_item (kmi->lv, kmi->lv_idx, 6, t);  
             }  
1597              if (k.update)              if (k.update)
1598                  refresh_keylist (kmi);                  update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, k.key_pair);
1599              return TRUE;              return TRUE;
1600                            
1601          case ID_KEYMISC_RECACHE:          case ID_KEYMISC_RECACHE:
# Line 1543  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1609  keymanager_dlg_proc (HWND dlg, UINT msg,
1609                               "Do you really want to reload the keycache?"));                               "Do you really want to reload the keycache?"));
1610                  l_idx = msg_box (dlg, inf, _("Key Manager"), MB_YESNO);                  l_idx = msg_box (dlg, inf, _("Key Manager"), MB_YESNO);
1611              }              }
1612              if (l_idx == IDYES) {              if (l_idx == IDYES)
1613                  rcs.kr_reload = rcs.kr_update = 1;                  reload_keycache (kmi);
                 rcs.tr_update = 0;  
                 DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,  
                                 keycache_dlg_proc, (LPARAM)&rcs);  
                 c = keycache_get_ctx (1);  
                 if (!c)  
                     BUG (dlg);  
                 keylist_reload (kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID);  
             }  
             SetForegroundWindow (dlg);  
1614              return TRUE;              return TRUE;
1615                            
1616          case ID_KEYMISC_REBUILD:          case ID_KEYMISC_REBUILD:
# Line 1607  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1664  keymanager_dlg_proc (HWND dlg, UINT msg,
1664              return TRUE;              return TRUE;
1665                            
1666          case ID_KEYMISC_GPGPREFS:          case ID_KEYMISC_GPGPREFS:
1667              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_GPGPREFS, dlg,              rc = dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_GPGPREFS,
1668                                gpgprefs_dlg_proc, 0, _("GnuPG Preferences"),                                     dlg, gpgprefs_dlg_proc, 0,
1669                                IDS_WINPT_GPGPREFS);                                     _("GnuPG Preferences"), IDS_WINPT_GPGPREFS);
1670                if (rc == TRUE) {
1671                    /* XXX: TRUE should indicate a value changed. */
1672                    reload_keycache (kmi);
1673                }
1674              return TRUE;              return TRUE;
1675                            
1676          case ID_KEYMISC_GPGOPT:          case ID_KEYMISC_GPGOPT:
# Line 1619  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1680  keymanager_dlg_proc (HWND dlg, UINT msg,
1680              return TRUE;              return TRUE;
1681                            
1682          case ID_KEYMISC_IMPORT:          case ID_KEYMISC_IMPORT:
1683              t = get_fileopen_dlg (dlg, _("Choose Name of the Key File"),              km_gui_import (kmi, LOWORD (wparam), NULL);
                                   NULL, NULL);  
             if (!t)  
                 break;  
             if (!km_file_import (dlg, t, &i)) {  
                 if (i < KM_PRELOAD_KEYS)  
                     refresh_keylist (kmi);  
                 else /* avoid to spawn too much processes. */  
                     reload_keylist (kmi);  
             }  
1684              return TRUE;              return TRUE;
1685    
1686          case ID_KEYMISC_IMPORT_HTTP:          case ID_KEYMISC_IMPORT_HTTP:
# Line 1743  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1795  keymanager_dlg_proc (HWND dlg, UINT msg,
1795              break;              break;
1796    
1797          case ID_KEYMISC_PASTE:          case ID_KEYMISC_PASTE:
1798              if (!km_clip_import (dlg, &i)) {              km_gui_import (kmi, LOWORD (wparam), NULL);
                 if (i < KM_PRELOAD_KEYS)  
                     refresh_keylist (kmi);  
                 else  
                     reload_keylist (kmi);  
             }  
1799              break;              break;
1800                            
1801          case ID_KEYCTX_SETPREFKS:          case ID_KEYCTX_SETPREFKS:
# Line 1873  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1920  keymanager_dlg_proc (HWND dlg, UINT msg,
1920    
1921          case ID_KEYCTX_RECVFROM:          case ID_KEYCTX_RECVFROM:
1922              km_refresh_from_keyserver (kmi->lv, dlg);              km_refresh_from_keyserver (kmi->lv, dlg);
1923                if (updated_keys_avail ())
1924                    refresh_keylist (kmi);
1925                else
1926                    msg_box (NULL, "no updates", "", MB_OK);
1927              break;              break;
1928    
1929          case ID_KEYCTX_UID_COPY:          case ID_KEYCTX_UID_COPY:

Legend:
Removed from v.164  
changed lines
  Added in v.166

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26