summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gpg_wrapper.cpp12
-rw-r--r--main.cpp67
-rw-r--r--options.cpp48
-rw-r--r--utilities.cpp16
-rw-r--r--utilities.h1
5 files changed, 91 insertions, 53 deletions
diff --git a/gpg_wrapper.cpp b/gpg_wrapper.cpp
index 8ff6631..f9f4207 100644
--- a/gpg_wrapper.cpp
+++ b/gpg_wrapper.cpp
@@ -77,6 +77,7 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD
TCHAR *home_dir = UniGetContactSettingUtf(NULL, szGPGModuleName, "szHomePath", _T(""));
commandline += home_dir;
commandline += _T("\" ");
+ commandline += _T("--display-charset utf-8 ");
commandline += *acommandline;
mir_free(bin_path);
mir_free(home_dir);
@@ -87,8 +88,15 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD
char* tmp = mir_utf8encodeW(commandline.c_str());
debuglog<<"in: "<<tmp<<"\n";
mir_free(tmp);
- }
- success = CreateProcess(NULL, (TCHAR*)commandline.c_str(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &sinfo, &pri);
+ }
+
+ TCHAR chNewEnv[128];
+ LPTSTR lpszCurrentVariable;
+ lpszCurrentVariable = (LPTSTR)chNewEnv;
+ _tcscpy(lpszCurrentVariable, _T("LANGUAGE=0"));
+
+
+ success = CreateProcess(NULL, (TCHAR*)commandline.c_str(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE, (LPVOID)chNewEnv, NULL, &sinfo, &pri);
if (!success)
{
diff --git a/main.cpp b/main.cpp
index 3d9eba6..e14ff6c 100644
--- a/main.cpp
+++ b/main.cpp
@@ -78,7 +78,7 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
{//parse gpg output
string out;
DWORD code;
- string::size_type p = 0, p2 = 0, stop = 0;
+ wstring::size_type p = 0, p2 = 0, stop = 0;
{
wstring cmd = _T("--batch --list-secret-keys");
if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
@@ -87,7 +87,6 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
break;
}
}
- cp866_to_cp1251(&out);
while(p != string::npos)
{
if((p = out.find("sec ", p)) == string::npos)
@@ -97,31 +96,31 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
break;
stop = p;
p2 = out.find("/", p) - 1;
- TCHAR *tmp = mir_a2t(out.substr(p,p2-p).c_str());
+ TCHAR *tmp = mir_utf8decodeW(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());
+ tmp = mir_utf8decodeW(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());
+ tmp = mir_utf8decodeW(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());
+ tmp = mir_utf8decodeW(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());
+ tmp = mir_utf8decodeW(out.substr(p,p2-p-1).c_str());
ListView_SetItemText(hwndList, iRow, 3, tmp);
mir_free(tmp);
ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);// not sure about this
@@ -558,7 +557,6 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam,
break;
}
}
- cp866_to_cp1251(&out);
ListView_DeleteAllItems(hwndList_g);
while(p != string::npos)
{
@@ -569,31 +567,31 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam,
break;
stop = p;
p2 = out.find("/", p) - 1;
- TCHAR *tmp = mir_a2t(out.substr(p,p2-p).c_str());
+ TCHAR *tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str());
item.pszText = tmp;
iRow = ListView_InsertItem(hwndList_g, &item);
ListView_SetItemText(hwndList_g, iRow, 4, tmp);
mir_free(tmp);
p2+=2;
p = out.find(" ", p2);
- tmp = mir_a2t(out.substr(p2,p-p2).c_str());
+ tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str());
ListView_SetItemText(hwndList_g, 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());
+ tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str());
ListView_SetItemText(hwndList_g, iRow, 2, tmp);
mir_free(tmp);
p++;
p2 = out.find(">", p);
- tmp = mir_a2t(out.substr(p,p2-p).c_str());
+ tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str());
ListView_SetItemText(hwndList_g, 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());
+ tmp = mir_utf8decodeW(out.substr(p,p2-p-1).c_str());
ListView_SetItemText(hwndList_g, iRow, 3, tmp);
mir_free(tmp);
ListView_SetColumnWidth(hwndList_g, 0, LVSCW_AUTOSIZE);// not sure about this
@@ -696,7 +694,6 @@ static BOOL CALLBACK DlgProcLoadExistingKey(HWND hwndDlg,UINT msg,WPARAM wParam,
break;
}
}
- cp866_to_cp1251(&out);
while(p != string::npos)
{
if((p = out.find("pub ", p)) == string::npos)
@@ -706,31 +703,31 @@ static BOOL CALLBACK DlgProcLoadExistingKey(HWND hwndDlg,UINT msg,WPARAM wParam,
break;
stop = p;
p2 = out.find("/", p) - 1;
- TCHAR *tmp = mir_a2t(out.substr(p,p2-p).c_str());
+ TCHAR *tmp = mir_utf8decodeW(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());
+ tmp = mir_utf8decodeW(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());
+ tmp = mir_utf8decodeW(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());
+ tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str());
ListView_SetItemText(hwndList, iRow, 1, tmp);
mir_free(tmp);
p = out.find("sub ", p2) + 6;
p = out.find(" ", p) + 1;
p2 = out.find("\n", p);
- tmp = mir_a2t(out.substr(p,p2-p-1).c_str());
+ tmp = mir_utf8decodeW(out.substr(p,p2-p-1).c_str());
ListView_SetItemText(hwndList, iRow, 3, tmp);
mir_free(tmp);
ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);// not sure about this
@@ -910,8 +907,8 @@ void ImportKey()
return;
}
DBDeleteContactSetting(new_key_hcnt, szGPGModuleName, "bAlwatsTrust");
- cp866_to_cp1251(&output);
{
+ char *tmp = NULL;
string::size_type s = output.find("gpg: key ") + strlen("gpg: key ");
string::size_type s2 = output.find(":", s);
DBWriteContactSettingString(new_key_hcnt, szGPGModuleName, "KeyID", output.substr(s,s2-s).c_str());
@@ -922,21 +919,41 @@ void ImportKey()
s+=2;
if((s2 = output.find("(", s)) == string::npos)
s2 = output.find("<", s);
- DBWriteContactSettingString(new_key_hcnt, szGPGModuleName, "KeyMainName", output.substr(s,s2-s-1).c_str());
+ tmp = new char [output.substr(s,s2-s-1).length()+1];
+ strcpy(tmp, output.substr(s,s2-s-1).c_str());
+ mir_utf8decode(tmp, 0);
+ DBWriteContactSettingString(new_key_hcnt, szGPGModuleName, "KeyMainName", tmp);
+ mir_free(tmp);
if((s = output.find(")", s2)) == string::npos)
s = output.find(">", s2);
s2++;
if(output[s] == ')')
{
- DBWriteContactSettingString(new_key_hcnt, szGPGModuleName, "KeyComment", output.substr(s2,s-s2).c_str());
+ tmp = new char [output.substr(s2,s-s2).length()+1];
+ strcpy(tmp, output.substr(s2,s-s2).c_str());
+ mir_utf8decode(tmp, 0);
+ DBWriteContactSettingString(new_key_hcnt, szGPGModuleName, "KeyComment", tmp);
+ mir_free(tmp);
s+=3;
s2 = output.find(">", s);
- DBWriteContactSettingString(new_key_hcnt, szGPGModuleName, "KeyMainEmail", output.substr(s,s2-s).c_str());
+ tmp = new char [output.substr(s,s2-s).length()+1];
+ strcpy(tmp, output.substr(s,s2-s).c_str());
+ mir_utf8decode(tmp, 0);
+ DBWriteContactSettingString(new_key_hcnt, szGPGModuleName, "KeyMainEmail", tmp);
+ mir_free(tmp);
}
else
+ {
+ tmp = new char [output.substr(s2,s-s2).length()+1];
+ strcpy(tmp, output.substr(s2,s-s2).c_str());
+ mir_utf8decode(tmp, 0);
DBWriteContactSettingString(new_key_hcnt, szGPGModuleName, "KeyMainEmail", output.substr(s2,s-s2).c_str());
- }
- MessageBoxA(0, output.c_str(), "", MB_OK);
+ mir_free(tmp);
+ }
+ }
+ ptmp = mir_utf8decodeW(output.c_str());
+ MessageBox(0, ptmp, _T(""), MB_OK);
+ mir_free(ptmp);
DeleteFile(tmp2);
}
} \ No newline at end of file
diff --git a/options.cpp b/options.cpp
index 42d81d2..e00ebbd 100644
--- a/options.cpp
+++ b/options.cpp
@@ -289,12 +289,16 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA
{
if(hdr->hdr.code == LVN_ITEMCHANGED)
{
+ void setClistIcon(HANDLE hContact);
+ void setSrmmIcon(HANDLE hContact);
int i = hdr->iItem;
if(ListView_GetItemState(hwndList, i, 0xF000) == 0x2000)
DBWriteContactSettingByte(user_data[i+1], szGPGModuleName, "GPGEncryption", 1);
else
DBWriteContactSettingByte(user_data[i+1], szGPGModuleName, "GPGEncryption", 0);
item_num = hdr->iItem;
+ setClistIcon(user_data[i+1]);
+ setSrmmIcon(user_data[i+1]);
}
}
switch (((LPNMHDR)lParam)->code)
@@ -592,27 +596,39 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP
}
mir_free(begin);
mir_free(end);
- cp866_to_cp1251(&output);
DBDeleteContactSetting(user_data[item_num+1], szGPGModuleName, "bAlwatsTrust");
{
TCHAR *tmp;
+ char *tmp2;
string::size_type s = output.find("gpg: key ") + strlen("gpg: key ");
- string::size_type s2 = output.find(":", s);
- DBWriteContactSettingString(user_data[item_num+1], szGPGModuleName, "KeyID", output.substr(s,s2-s).c_str());
- tmp = mir_a2t(output.substr(s,s2-s).c_str());
+ string::size_type s2 = output.find(":", s);
+ tmp2 = new char [output.substr(s,s2-s).length()+1];
+ strcpy(tmp2, output.substr(s,s2-s).c_str());
+ mir_utf8decode(tmp2, 0);
+ DBWriteContactSettingString(user_data[item_num+1], szGPGModuleName, "KeyID", tmp2);
+ mir_free(tmp2);
+ tmp = mir_utf8decodeW(output.substr(s,s2-s).c_str());
ListView_SetItemText(hwndList_p, item_num, 1, tmp);
mir_free(tmp);
s2+=2;
s = output.find("\"", s2)-1;
if(s != s2-1)
- {
+ {
+ tmp2 = new char [output.substr(s2,s-s2).length()+1];
+ strcpy(tmp2, output.substr(s2,s-s2).c_str());
+ mir_utf8decode(tmp2, 0);
DBWriteContactSettingString(user_data[item_num+1], szGPGModuleName, "KeyType", output.substr(s2,s-s2).c_str());
+ mir_free(tmp2);
}
s+=2;
if((s2 = output.find("(", s)) == string::npos)
s2 = output.find("<", s);
+ tmp2 = new char [output.substr(s,s2-s-1).length()+1];
+ strcpy(tmp2, output.substr(s,s2-s-1).c_str());
+ mir_utf8decode(tmp2, 0);
DBWriteContactSettingString(user_data[item_num+1], szGPGModuleName, "KeyMainName", output.substr(s,s2-s-1).c_str());
- tmp = mir_a2t(output.substr(s,s2-s-1).c_str());
+ mir_free(tmp2);
+ tmp = mir_utf8decodeW(output.substr(s,s2-s-1).c_str());
ListView_SetItemText(hwndList_p, item_num, 2, tmp);
mir_free(tmp);
if((s = output.find(")", s2)) == string::npos)
@@ -620,18 +636,30 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP
s2++;
if(output[s] == ')')
{
+ tmp2 = new char [output.substr(s2,s-s2).length()+1];
+ strcpy(tmp2, output.substr(s2,s-s2).c_str());
+ mir_utf8decode(tmp2, 0);
DBWriteContactSettingString(user_data[item_num+1], szGPGModuleName, "KeyComment", output.substr(s2,s-s2).c_str());
+ mir_free(tmp2);
s+=3;
s2 = output.find(">", s);
+ tmp2 = new char [output.substr(s,s2-s).length()+1];
+ strcpy(tmp2, output.substr(s,s2-s).c_str());
+ mir_utf8decode(tmp2, 0);
DBWriteContactSettingString(user_data[item_num+1], szGPGModuleName, "KeyMainEmail", output.substr(s,s2-s).c_str());
- tmp = mir_a2t(output.substr(s,s2-s).c_str());
+ mir_free(tmp2);
+ tmp = mir_utf8decodeW(output.substr(s,s2-s).c_str());
ListView_SetItemText(hwndList_p, item_num, 3, tmp);
mir_free(tmp);
}
else
{
+ tmp2 = new char [output.substr(s2,s-s2).length()+1];
+ strcpy(tmp2, output.substr(s2,s-s2).c_str());
+ mir_utf8decode(tmp2, 0);
DBWriteContactSettingString(user_data[item_num+1], szGPGModuleName, "KeyMainEmail", output.substr(s2,s-s2).c_str());
- tmp = mir_a2t(output.substr(s2,s-s2).c_str());
+ mir_free(tmp2);
+ tmp = mir_utf8decodeW(output.substr(s2,s-s2).c_str());
ListView_SetItemText(hwndList_p, item_num, 3, tmp);
mir_free(tmp);
}
@@ -640,7 +668,9 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP
ListView_SetColumnWidth(hwndList_p, 2, LVSCW_AUTOSIZE);
ListView_SetColumnWidth(hwndList_p, 3, LVSCW_AUTOSIZE);
}
- MessageBoxA(0, output.c_str(), "", MB_OK);
+ tmp = mir_utf8decodeW(output.c_str());
+ MessageBox(0, tmp, _T(""), MB_OK);
+ mir_free(tmp);
DeleteFile(tmp2);
}
delete [] tmp;
diff --git a/utilities.cpp b/utilities.cpp
index 07623e1..7d0b241 100644
--- a/utilities.cpp
+++ b/utilities.cpp
@@ -261,22 +261,6 @@ void storeOutput(HANDLE ahandle, string *output)
} while (available>0);
}
-void cp866_to_cp1251(string *str)
-{
- string::iterator p;
- for(p = str->begin(); p != str->end(); p++)
- {
- if(*p > -129 && *p < -80)
- *p += 64;
- else if(*p > -33 && *p < -16)
- *p += 16;
- else if(*p == -16)
- *p -= 72;
- else if(*p == -17)
- *p -= 57;
- }
-}
-
void HistoryLog(HANDLE hContact, char *data, int event_type, int flags)
{
DBEVENTINFO Event = {0};
diff --git a/utilities.h b/utilities.h
index b89dc2f..dadf5a6 100644
--- a/utilities.h
+++ b/utilities.h
@@ -24,7 +24,6 @@ void GetFolderPath(TCHAR *WindowTittle, char *szSetting);
void storeOutput(HANDLE ahandle, string *output);
-void cp866_to_cp1251(string *str);
void HistoryLog(HANDLE hContact, char *data, int event_type, int flags);
int ComboBoxAddStringUtf(HWND hCombo, const TCHAR *szString, DWORD data);