// Copyright © 2010 sss // // 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 the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program 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 General Public License for more details. // // 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. #include "commonheaders.h" void test() { string out; DWORD code; TCHAR cmd[512]; _tcscpy(cmd, _T("--list-secret-keys")); // pxExecute(cmd, "", &out, &code); // MessageBoxA(0, out.c_str(), "test", MB_OK); } HWND hwndFirstRun = NULL; int itemnum = 0; static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam) { HWND hwndList=GetDlgItem(hwndDlg, IDC_KEY_LIST); LVCOLUMN col = {0}; LVITEM item = {0}; NMLISTVIEW * hdr = (NMLISTVIEW *) lParam; TCHAR fp[16] = {0}; switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); col.pszText = _T("Fingerprint"); col.mask = LVCF_TEXT | LVCF_WIDTH; col.fmt = LVCFMT_LEFT; col.cx = 50; ListView_InsertColumn(hwndList, 0, &col); ZeroMemory(&col,sizeof(col)); col.pszText = _T("Email"); col.mask = LVCF_TEXT | LVCF_WIDTH; col.fmt = LVCFMT_LEFT; col.cx = 30; ListView_InsertColumn(hwndList, 1, &col); ZeroMemory(&col,sizeof(col)); col.pszText = _T("Name"); col.mask = LVCF_TEXT | LVCF_WIDTH; col.fmt = LVCFMT_LEFT; col.cx = 250; ListView_InsertColumn(hwndList, 2, &col); ZeroMemory(&col,sizeof(col)); col.pszText = _T("Creation date"); col.mask = LVCF_TEXT | LVCF_WIDTH; col.fmt = LVCFMT_LEFT; col.cx = 30; ListView_InsertColumn(hwndList, 3, &col); ZeroMemory(&col,sizeof(col)); col.pszText = _T("Key length"); col.mask = LVCF_TEXT | LVCF_WIDTH; col.fmt = LVCFMT_LEFT; col.cx = 30; ListView_InsertColumn(hwndList, 4, &col); ListView_SetExtendedListViewStyleEx(hwndList, 0, LVS_EX_FULLROWSELECT); int i = 1, iRow = 0; { //parse gpg output item.mask = LVIF_TEXT; item.iItem = i; item.iSubItem = 0; item.pszText = _T(""); { string out; DWORD code; string::size_type p = 0, p2 = 0, stop = 0; { TCHAR cmd[512]; _tcscpy(cmd, _T("--list-secret-keys")); pxExecute(cmd, "", &out, &code); } cp866_to_cp1251(&out); while(p != string::npos) { if((p = out.find("sec ", p)) == string::npos) break; p += 5; if(p < stop) break; stop = p; p2 = out.find("/", p) - 1; TCHAR *tmp = mir_a2t(out.substr(p,p2-p).c_str()); item.pszText = tmp; iRow = ListView_InsertItem(hwndList, &item); ListView_SetItemText(hwndList, iRow, 4, tmp); mir_free(tmp); p2+=2; p = out.find(" ", p2); tmp = mir_a2t(out.substr(p2,p-p2).c_str()); ListView_SetItemText(hwndList, iRow, 0, tmp); mir_free(tmp); p = out.find("uid ", p); p2 = out.find_first_not_of(" ", p+5); p = out.find("<", p2); tmp = mir_a2t(out.substr(p2,p-p2).c_str()); ListView_SetItemText(hwndList, iRow, 2, tmp); mir_free(tmp); p++; p2 = out.find(">", p); tmp = mir_a2t(out.substr(p,p2-p).c_str()); ListView_SetItemText(hwndList, iRow, 1, tmp); mir_free(tmp); p = out.find("ssb ", p2) + 6; p = out.find(" ", p) + 1; p2 = out.find("\n", p); tmp = mir_a2t(out.substr(p,p2-p-1).c_str()); ListView_SetItemText(hwndList, iRow, 3, tmp); mir_free(tmp); i++; } } ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);// not sure about this ListView_SetColumnWidth(hwndList, 1, LVSCW_AUTOSIZE); ListView_SetColumnWidth(hwndList, 2, LVSCW_AUTOSIZE); ListView_SetColumnWidth(hwndList, 3, LVSCW_AUTOSIZE); ListView_SetColumnWidth(hwndList, 4, LVSCW_AUTOSIZE); } return TRUE; } case WM_COMMAND: { switch (LOWORD(wParam)) { case ID_OK: ListView_GetItemText(hwndList, itemnum, 0, fp, 16); { string out; DWORD code; TCHAR cmd[64]; _tcscpy(cmd, _T("--export -a ")); _tcscat(cmd, fp); pxExecute(cmd, "", &out, &code); DBWriteContactSettingString(NULL, szModuleName, "GPGPubKey", out.c_str()); } DestroyWindow(hwndDlg); break; } break; } case WM_NOTIFY: { if(hdr && IsWindowVisible(hdr->hdr.hwndFrom) && hdr->iItem != (-1)) { if(hdr->hdr.code == LVN_ITEMCHANGED) { itemnum = hdr->iItem; } } switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { return TRUE; } } } break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_DESTROY: hwndFirstRun = NULL; break; } return FALSE; } extern HINSTANCE hInst; void ShowFirstRunDialog() { if (hwndFirstRun == NULL) { hwndFirstRun = CreateDialog(hInst, MAKEINTRESOURCE(IDD_FIRST_RUN), NULL, DlgProcFirstRun); } SetForegroundWindow(hwndFirstRun); } void FirstRun() { if(!DBGetContactSettingByte(NULL, szModuleName, "FirstRun", 1)) return; ShowFirstRunDialog(); DBWriteContactSettingByte(NULL, szModuleName, "FirstRun", 0); }