diff options
author | Szymon Tokarz <wsx22@o2.pl> | 2012-12-05 01:10:24 +0000 |
---|---|---|
committer | Szymon Tokarz <wsx22@o2.pl> | 2012-12-05 01:10:24 +0000 |
commit | e5602ebb20922f0ba0c9ef8fc9da03e712ddd67a (patch) | |
tree | 4e6c8e5170b275e5e91853b69228a19c7177544b /protocols/Gadu-Gadu/src | |
parent | 565aef440e39cf0ee2f25f689934478c979875a5 (diff) |
Gadu-Gadu protocol: account avatar work
- fixes with groupchats support
- fixed import/export contact list to text file
- Nick, MyHandle, ChatRoomID stored in db as unicode
(1st step to implement unicode support in GG protocol)
git-svn-id: http://svn.miranda-ng.org/main/trunk@2646 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/Gadu-Gadu/src')
-rw-r--r-- | protocols/Gadu-Gadu/src/core.cpp | 124 | ||||
-rw-r--r-- | protocols/Gadu-Gadu/src/dialogs.cpp | 2 | ||||
-rw-r--r-- | protocols/Gadu-Gadu/src/gg.h | 6 | ||||
-rw-r--r-- | protocols/Gadu-Gadu/src/gg_proto.cpp | 4 | ||||
-rw-r--r-- | protocols/Gadu-Gadu/src/gg_proto.h | 16 | ||||
-rw-r--r-- | protocols/Gadu-Gadu/src/groupchat.cpp | 120 | ||||
-rw-r--r-- | protocols/Gadu-Gadu/src/import.cpp | 18 |
7 files changed, 180 insertions, 110 deletions
diff --git a/protocols/Gadu-Gadu/src/core.cpp b/protocols/Gadu-Gadu/src/core.cpp index acd2d89b74..607f67533b 100644 --- a/protocols/Gadu-Gadu/src/core.cpp +++ b/protocols/Gadu-Gadu/src/core.cpp @@ -683,13 +683,17 @@ retry: || res->seq == GG_SEQ_CHINFO)
{
// Change nickname if it's not present
- if (__nick && (res->seq == GG_SEQ_GETNICK || res->seq == GG_SEQ_CHINFO))
- db_set_s(hContact, m_szModuleName, GG_KEY_NICK, __nick);
+ if (__nick && (res->seq == GG_SEQ_GETNICK || res->seq == GG_SEQ_CHINFO)){
+ TCHAR* __nickT = mir_a2t(__nick);
+ db_set_ts(hContact, m_szModuleName, GG_KEY_NICK, __nickT);
+ mir_free(__nickT);
+ }
- if (__nick)
+ if (__nick){
db_set_s(hContact, m_szModuleName, "NickName", __nick);
- else if (res->seq == GG_SEQ_CHINFO)
+ } else if (res->seq == GG_SEQ_CHINFO) {
db_unset(NULL, m_szModuleName, "NickName");
+ }
// Change other info
if (__city)
@@ -821,23 +825,26 @@ retry: // Check if groupchat
if (e->event.msg.recipients_count && gc_enabled && !db_get_b(NULL, m_szModuleName, GG_KEY_IGNORECONF, GG_KEYDEF_IGNORECONF))
{
- char *chat = gc_getchat(e->event.msg.sender, e->event.msg.recipients, e->event.msg.recipients_count);
+ TCHAR *chat = gc_getchat(e->event.msg.sender, e->event.msg.recipients, e->event.msg.recipients_count);
if (chat)
{
- char id[32];
- GCDEST gcdest = {m_szModuleName, chat, GC_EVENT_MESSAGE};
+ TCHAR id[32];
+ GCDEST gcdest = {0};
+ gcdest.pszModule = m_szModuleName;
+ gcdest.ptszID = chat;
+ gcdest.iType = GC_EVENT_MESSAGE;
GCEVENT gcevent = {sizeof(GCEVENT), &gcdest};
time_t t = time(NULL);
- UIN2ID(e->event.msg.sender, id);
+ UIN2IDT(e->event.msg.sender, id);
- gcevent.pszUID = id;
+ gcevent.ptszUID = id;
TCHAR* messageT = mir_a2t(e->event.msg.message);
gcevent.ptszText = messageT;
gcevent.ptszNick = (TCHAR*) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM) getcontact(e->event.msg.sender, 1, 0, NULL), GCDNF_TCHAR);
gcevent.time = (!(e->event.msg.msgclass & GG_CLASS_OFFLINE) || e->event.msg.time > (t - timeDeviation)) ? t : e->event.msg.time;
gcevent.dwFlags = GC_TCHAR | GCEF_ADDTOLOG;
- netlog("mainthread() (%x): Conference message to room %s & id %s.", this, chat, id);
+ netlog("mainthread() (%x): Conference message to room %S & id %S.", this, chat, id);
CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gcevent);
mir_free(messageT);
}
@@ -886,34 +893,37 @@ retry: case GG_EVENT_MULTILOGON_MSG:
if (e->event.multilogon_msg.recipients_count && gc_enabled && !db_get_b(NULL, m_szModuleName, GG_KEY_IGNORECONF, GG_KEYDEF_IGNORECONF))
{
- char *chat = gc_getchat(e->event.multilogon_msg.sender, e->event.multilogon_msg.recipients, e->event.multilogon_msg.recipients_count);
+ TCHAR *chat = gc_getchat(e->event.multilogon_msg.sender, e->event.multilogon_msg.recipients, e->event.multilogon_msg.recipients_count);
if (chat)
{
- char id[32];
+ TCHAR id[32];
DBVARIANT dbv;
- GCDEST gcdest = {m_szModuleName, chat, GC_EVENT_MESSAGE};
+ GCDEST gcdest = {0};
+ gcdest.pszModule = m_szModuleName;
+ gcdest.ptszID = chat;
+ gcdest.iType = GC_EVENT_MESSAGE;
GCEVENT gcevent = {sizeof(GCEVENT), &gcdest};
- UIN2ID( db_get_dw(NULL, m_szModuleName, GG_KEY_UIN, 0), id);
+ UIN2IDT(db_get_dw(NULL, m_szModuleName, GG_KEY_UIN, 0), id);
- gcevent.pszUID = id;
+ gcevent.ptszUID = id;
TCHAR* messageT = mir_a2t(e->event.multilogon_msg.message);
gcevent.ptszText = messageT;
- TCHAR* pszValT;
- if (!db_get_s(NULL, m_szModuleName, GG_KEY_NICK, &dbv, DBVT_ASCIIZ)){
- pszValT = mir_a2t(dbv.pszVal);
- gcevent.ptszNick = pszValT;
+ TCHAR* nickT;
+ if (!db_get_s(NULL, m_szModuleName, GG_KEY_NICK, &dbv, DBVT_TCHAR)){
+ nickT = mir_tstrdup(dbv.ptszVal);
DBFreeVariant(&dbv);
} else {
- gcevent.ptszNick = TranslateT("Me");
+ nickT = mir_tstrdup(TranslateT("Me"));
}
+ gcevent.ptszNick = nickT;
gcevent.time = e->event.multilogon_msg.time;
gcevent.bIsMe = 1;
gcevent.dwFlags = GCEF_ADDTOLOG;
- netlog("mainthread() (%x): Sent conference message to room %s.", this, chat);
+ netlog("mainthread() (%x): Sent conference message to room %S.", this, chat);
CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gcevent);
mir_free(messageT);
- if (pszValT != NULL) mir_free(pszValT);;
+ mir_free(nickT);
}
}
else if (!e->event.multilogon_msg.recipients_count && e->event.multilogon_msg.message && *e->event.multilogon_msg.message
@@ -1282,11 +1292,15 @@ int GGPROTO::contactdeleted(WPARAM wParam, LPARAM lParam) type = db_get_b(hContact, m_szModuleName, "ChatRoom", 0);
// Terminate conference if contact is deleted
- if (type && !db_get_s(hContact, m_szModuleName, "ChatRoomID", &dbv, DBVT_ASCIIZ) && gc_enabled)
+ if (type && !db_get_s(hContact, m_szModuleName, "ChatRoomID", &dbv, DBVT_TCHAR) && gc_enabled)
{
- GCDEST gcdest = {m_szModuleName, dbv.pszVal, GC_EVENT_CONTROL};
+
+ GCDEST gcdest = {0};
+ gcdest.pszModule = m_szModuleName;
+ gcdest.ptszID = dbv.ptszVal;
+ gcdest.iType = GC_EVENT_CONTROL;
GCEVENT gcevent = {sizeof(GCEVENT), &gcdest};
- GGGC *chat = gc_lookup(dbv.pszVal);
+ GGGC *chat = gc_lookup(dbv.ptszVal);
netlog("contactdeleted(): Terminating chat %x, id %s from contact list...", chat, dbv.pszVal);
if (chat)
@@ -1316,6 +1330,19 @@ int GGPROTO::contactdeleted(WPARAM wParam, LPARAM lParam) ////////////////////////////////////////////////////////////
// When db settings changed
+static TCHAR* sttSettingToTchar( DBVARIANT* value )
+{
+ switch(value->type) {
+ case DBVT_ASCIIZ:
+ return mir_a2t(value->pszVal);
+ case DBVT_UTF8:
+ return mir_utf8decodeT(value->pszVal);
+ case DBVT_WCHAR:
+ return mir_u2t(value->pwszVal);
+ }
+ return NULL;
+}
+
int GGPROTO::dbsettingchanged(WPARAM wParam, LPARAM lParam)
{
DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING *) lParam;
@@ -1336,40 +1363,51 @@ int GGPROTO::dbsettingchanged(WPARAM wParam, LPARAM lParam) }
// Contact is being renamed
- if (gc_enabled && !strcmp(cws->szModule, m_szModuleName) && !strcmp(cws->szSetting, GG_KEY_NICK)
- && cws->value.pszVal)
- {
+ if (gc_enabled && !strcmp(cws->szModule, m_szModuleName) && !strcmp(cws->szSetting, GG_KEY_NICK)){
+
+ TCHAR* ptszVal = sttSettingToTchar(&(cws->value));
+ if(ptszVal==NULL) return 0;
+
// Groupchat window contact is being renamed
DBVARIANT dbv;
int type = db_get_b(hContact, m_szModuleName, "ChatRoom", 0);
- if (type && !db_get_s(hContact, m_szModuleName, "ChatRoomID", &dbv, DBVT_ASCIIZ))
+ if (type && !db_get_s(hContact, m_szModuleName, "ChatRoomID", &dbv, DBVT_TCHAR))
{
// Most important... check redundancy (fucking cascading)
static int cascade = 0;
- if (!cascade && dbv.pszVal)
+ if (!cascade && dbv.ptszVal)
{
- GCDEST gcdest = {m_szModuleName, dbv.pszVal, GC_EVENT_CHANGESESSIONAME};
+ GCDEST gcdest = {0};
+ gcdest.pszModule = m_szModuleName;
+ gcdest.ptszID = dbv.ptszVal;
+ gcdest.iType = GC_EVENT_CHANGESESSIONAME;
GCEVENT gcevent = {sizeof(GCEVENT), &gcdest};
- gcevent.pszText = cws->value.pszVal;
- netlog("dbsettingchanged(): Conference %s was renamed to %s.", dbv.pszVal, cws->value.pszVal);
+ gcevent.dwFlags = GC_TCHAR;
+ gcevent.ptszText = ptszVal;
+ netlog("dbsettingchanged(): Conference %s was renamed.", dbv.pszVal);
// Mark cascading
/* FIXME */ cascade = 1;
CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gcevent);
/* FIXME */ cascade = 0;
}
DBFreeVariant(&dbv);
- }
- else
+ } else {
// Change contact name on all chats
- gc_changenick(hContact, cws->value.pszVal);
+ gc_changenick(hContact, ptszVal);
+ }
+ mir_free(ptszVal);
}
// Contact list changes
if (!strcmp(cws->szModule, "CList"))
{
// If name changed... change nick
- if (!strcmp(cws->szSetting, "MyHandle") && cws->value.type == DBVT_ASCIIZ && cws->value.pszVal)
- db_set_s(hContact, m_szModuleName, GG_KEY_NICK, cws->value.pszVal);
+ if (!strcmp(cws->szSetting, "MyHandle")){
+ TCHAR* ptszVal = sttSettingToTchar(&(cws->value));
+ if(ptszVal==NULL) return 0;
+ db_set_ts(hContact, m_szModuleName, GG_KEY_NICK, ptszVal);
+ mir_free(ptszVal);
+ }
// If not on list changed
if (!strcmp(cws->szSetting, "NotOnList"))
@@ -1552,7 +1590,7 @@ HANDLE GGPROTO::getcontact(uin_t uin, int create, int inlist, TCHAR *szNick) hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0);
if (!hContact) {
- netlog("getcontact(): Failed to create Gadu-Gadu contact %s", szNick);
+ netlog("getcontact(): Failed to create Gadu-Gadu contact %S", szNick);
return NULL;
}
@@ -1572,9 +1610,7 @@ HANDLE GGPROTO::getcontact(uin_t uin, int create, int inlist, TCHAR *szNick) // If nick specified use it
if (szNick) {
- char* szNickA = mir_t2a(szNick);
- db_set_s(hContact, m_szModuleName, GG_KEY_NICK, szNickA);
- mir_free(szNickA);
+ db_set_ts(hContact, m_szModuleName, GG_KEY_NICK, szNick);
} else if (isonline()) {
gg_pubdir50_t req;
@@ -1587,7 +1623,9 @@ HANDLE GGPROTO::getcontact(uin_t uin, int create, int inlist, TCHAR *szNick) gg_pubdir50(sess, req);
gg_LeaveCriticalSection(&sess_mutex, "getcontact", 31, 1, "sess_mutex", 1);
gg_pubdir50_free(req);
- db_set_s(hContact, m_szModuleName, GG_KEY_NICK, ditoa(uin));
+ TCHAR* uinT = mir_a2t(ditoa(uin));
+ db_set_ts(hContact, m_szModuleName, GG_KEY_NICK, uinT);
+ mir_free(uinT);
netlog("getcontact(): Search for nick on uin: %d", uin);
}
}
diff --git a/protocols/Gadu-Gadu/src/dialogs.cpp b/protocols/Gadu-Gadu/src/dialogs.cpp index 440e0718e4..1e194f0951 100644 --- a/protocols/Gadu-Gadu/src/dialogs.cpp +++ b/protocols/Gadu-Gadu/src/dialogs.cpp @@ -133,11 +133,11 @@ int GGPROTO::options_init(WPARAM wParam, LPARAM lParam) odp.ptszGroup = LPGENT("Network");
odp.ptszTitle = m_tszUserName;
odp.dwInitParam = (LPARAM)this;
+ odp.flags = ODPF_TCHAR | ODPF_BOLDGROUPS | ODPF_DONTTRANSLATE;
odp.ptszTab = LPGENT("General");
odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_GG_GENERAL);
odp.pfnDlgProc = gg_genoptsdlgproc;
- odp.flags = ODPF_TCHAR | ODPF_BOLDGROUPS | ODPF_DONTTRANSLATE;
Options_AddPage(wParam, &odp);
odp.ptszTab = LPGENT("Conference");
diff --git a/protocols/Gadu-Gadu/src/gg.h b/protocols/Gadu-Gadu/src/gg.h index 64cb806ff5..0885779876 100644 --- a/protocols/Gadu-Gadu/src/gg.h +++ b/protocols/Gadu-Gadu/src/gg.h @@ -119,7 +119,7 @@ typedef struct {
uin_t *recipients;
int recipients_count;
- char id[32];
+ TCHAR id[32];
BOOL ignore;
} GGGC;
@@ -329,7 +329,9 @@ void gg_links_instancemenu_init(); void gg_links_init();
void gg_links_destroy();
-#define UIN2ID(uin,id) _itoa(uin,id,10)
+#define UIN2ID(uin,id) _itoa(uin,id,10) //@deprecated
+#define UIN2IDA(uin,id) _itoa(uin,id,10)
+#define UIN2IDT(uin,id) _itot(uin,id,10)
// Debug functions
const char *ggdebug_eventtype(gg_event *e);
diff --git a/protocols/Gadu-Gadu/src/gg_proto.cpp b/protocols/Gadu-Gadu/src/gg_proto.cpp index 8911110ccf..ced5f83cd5 100644 --- a/protocols/Gadu-Gadu/src/gg_proto.cpp +++ b/protocols/Gadu-Gadu/src/gg_proto.cpp @@ -23,6 +23,10 @@ GGPROTO::GGPROTO(const char* pszProtoName, const TCHAR* tszUserName)
{
+#ifdef DEBUGMODE
+ extendedLogging = 0;
+#endif
+
// Init mutexes
InitializeCriticalSection(&sess_mutex);
InitializeCriticalSection(&ft_mutex);
diff --git a/protocols/Gadu-Gadu/src/gg_proto.h b/protocols/Gadu-Gadu/src/gg_proto.h index e1be4c2cff..10ca4efafa 100644 --- a/protocols/Gadu-Gadu/src/gg_proto.h +++ b/protocols/Gadu-Gadu/src/gg_proto.h @@ -111,6 +111,9 @@ struct GGPROTO : public PROTO_INTERFACE, public MZeroedObject HANDLE forkthreadex(GGThreadFunc pFunc, void *param, UINT *threadId);
void threadwait(GGTHREAD *thread);
+#ifdef DEBUGMODE
+ volatile int extendedLogging;
+#endif
void gg_EnterCriticalSection(CRITICAL_SECTION* mutex, char* callingFunction, int sectionNumber, char* mutexName, int logging);
void gg_LeaveCriticalSection(CRITICAL_SECTION* mutex, char* callingFunction, int sectionNumber, int returnNumber, char* mutexName, int logging);
void gg_sleep(DWORD miliseconds, BOOL alterable, char* callingFunction, int sleepNumber, int logging);
@@ -217,9 +220,9 @@ struct GGPROTO : public PROTO_INTERFACE, public MZeroedObject int gc_init();
void gc_menus_init(HGENMENU hRoot);
int gc_destroy();
- char * gc_getchat(uin_t sender, uin_t *recipients, int recipients_count);
- GGGC *gc_lookup(char *id);
- int gc_changenick(HANDLE hContact, char *pszNick);
+ TCHAR * gc_getchat(uin_t sender, uin_t *recipients, int recipients_count);
+ GGGC *gc_lookup(TCHAR *id);
+ int gc_changenick(HANDLE hContact, TCHAR *ptszNick);
#define UIN2ID(uin,id) _itoa(uin,id,10)
int __cdecl gc_event(WPARAM wParam, LPARAM lParam);
@@ -301,6 +304,7 @@ inline void GGPROTO::gg_EnterCriticalSection(CRITICAL_SECTION* mutex, char* call {
#ifdef DEBUGMODE
int logAfter = 0;
+ extendedLogging = 1;
if(logging == 1 && mutex->LockCount != -1) {
logAfter = 1;
netlog("%s(): %i before EnterCriticalSection %s LockCount=%ld RecursionCount=%ld OwningThread=%ld", callingFunction, sectionNumber, mutexName, mutex->LockCount, mutex->RecursionCount, mutex->OwningThread);
@@ -309,13 +313,15 @@ inline void GGPROTO::gg_EnterCriticalSection(CRITICAL_SECTION* mutex, char* call EnterCriticalSection(mutex);
#ifdef DEBUGMODE
if(logging == 1 && logAfter == 1) netlog("%s(): %i after EnterCriticalSection %s LockCount=%ld RecursionCount=%ld OwningThread=%ld", callingFunction, sectionNumber, mutexName, mutex->LockCount, mutex->RecursionCount, mutex->OwningThread);
+ extendedLogging = 0;
#endif
+
}
inline void GGPROTO::gg_LeaveCriticalSection(CRITICAL_SECTION* mutex, char* callingFunction, int sectionNumber, int returnNumber, char* mutexName, int logging) /*0-never, 1-debug, 2-all*/
{
#ifdef DEBUGMODE
- if(logging == 1) netlog("%s(): %i.%i LeaveCriticalSection %s", callingFunction, sectionNumber, returnNumber, mutexName);
+ if(logging == 1 && extendedLogging == 1) netlog("%s(): %i.%i LeaveCriticalSection %s", callingFunction, sectionNumber, returnNumber, mutexName);
#endif
LeaveCriticalSection(mutex);
}
@@ -323,7 +329,7 @@ inline void GGPROTO::gg_LeaveCriticalSection(CRITICAL_SECTION* mutex, char* call inline void GGPROTO::gg_sleep(DWORD miliseconds, BOOL alterable, char* callingFunction, int sleepNumber, int logging){
SleepEx(miliseconds, alterable);
#ifdef DEBUGMODE
- if(logging == 1) netlog("%s(): %i after SleepEx(%ld,%u)", callingFunction, sleepNumber, miliseconds, alterable);
+ if(logging == 1 && extendedLogging == 1) netlog("%s(): %i after SleepEx(%ld,%u)", callingFunction, sleepNumber, miliseconds, alterable);
#endif
}
diff --git a/protocols/Gadu-Gadu/src/groupchat.cpp b/protocols/Gadu-Gadu/src/groupchat.cpp index c9e56fc777..48ab50ca81 100644 --- a/protocols/Gadu-Gadu/src/groupchat.cpp +++ b/protocols/Gadu-Gadu/src/groupchat.cpp @@ -103,7 +103,7 @@ int GGPROTO::gc_destroy() return 1;
}
-GGGC* GGPROTO::gc_lookup(char *id)
+GGGC* GGPROTO::gc_lookup(TCHAR *id)
{
GGGC *chat;
list_t l;
@@ -111,7 +111,7 @@ GGGC* GGPROTO::gc_lookup(char *id) for(l = chats; l; l = l->next)
{
chat = (GGGC *)l->data;
- if (chat && !strcmp(chat->id, id))
+ if (chat && !_tcscmp(chat->id, id))
return chat;
}
@@ -127,18 +127,18 @@ int GGPROTO::gc_event(WPARAM wParam, LPARAM lParam) // Check if we got our protocol, and fields are set
if (!gch
|| !gch->pDest
- || !gch->pDest->pszID
+ || !gch->pDest->ptszID
|| !gch->pDest->pszModule
|| lstrcmpiA(gch->pDest->pszModule, m_szModuleName)
|| !(uin = db_get_dw(NULL, m_szModuleName, GG_KEY_UIN, 0))
- || !(chat = gc_lookup(gch->pDest->pszID)))
+ || !(chat = gc_lookup(gch->pDest->ptszID)))
return 0;
- // Window terminated
+ // Window terminated (Miranda exit)
if (gch->pDest->iType == SESSION_TERMINATE)
{
HANDLE hContact = NULL;
- netlog("gc_event(): Terminating chat %x, id %s from chat window...", chat, gch->pDest->pszID);
+ netlog("gc_event(): Terminating chat %x, id %S from chat window...", chat, gch->pDest->ptszID);
// Destroy chat entry
free(chat->recipients);
list_remove(&chats, chat, 1);
@@ -147,9 +147,9 @@ int GGPROTO::gc_event(WPARAM wParam, LPARAM lParam) while (hContact)
{
DBVARIANT dbv;
- if (!db_get_s(hContact, m_szModuleName, "ChatRoomID", &dbv, DBVT_ASCIIZ))
+ if (!db_get_s(hContact, m_szModuleName, "ChatRoomID", &dbv, DBVT_TCHAR))
{
- if (dbv.pszVal && !strcmp(gch->pDest->pszID, dbv.pszVal))
+ if (dbv.ptszVal && !_tcscmp(gch->pDest->ptszID, dbv.ptszVal))
CallService(MS_DB_CONTACT_DELETE, (WPARAM)hContact, 0);
DBFreeVariant(&dbv);
}
@@ -161,24 +161,27 @@ int GGPROTO::gc_event(WPARAM wParam, LPARAM lParam) // Message typed / send only if online
if (isonline() && (gch->pDest->iType == GC_USER_MESSAGE) && gch->ptszText)
{
- char id[32];
+ TCHAR id[32];
DBVARIANT dbv;
- GCDEST gcdest = {m_szModuleName, gch->pDest->pszID, GC_EVENT_MESSAGE};
+ GCDEST gcdest = {0};
+ gcdest.pszModule = m_szModuleName;
+ gcdest.ptszID = gch->pDest->ptszID;
+ gcdest.iType = GC_EVENT_MESSAGE;
GCEVENT gcevent = {sizeof(GCEVENT), &gcdest};
int lc;
- UIN2ID(uin, id);
+ UIN2IDT(uin, id);
- gcevent.pszUID = id;
+ gcevent.ptszUID = id;
gcevent.ptszText = gch->ptszText;
- TCHAR* pszValT;
- if (!db_get_s(NULL, m_szModuleName, GG_KEY_NICK, &dbv, DBVT_ASCIIZ)){
- pszValT = mir_a2t(dbv.pszVal);
- gcevent.ptszNick = pszValT;
+ TCHAR* nickT;
+ if (!db_get_s(NULL, m_szModuleName, GG_KEY_NICK, &dbv, DBVT_TCHAR)){
+ nickT = mir_tstrdup(dbv.ptszVal);
DBFreeVariant(&dbv);
} else {
- gcevent.ptszNick = TranslateT("Me");
+ nickT = mir_tstrdup(TranslateT("Me"));
}
+ gcevent.ptszNick = nickT;
// Get rid of CRLF at back
lc = (int)_tcslen(gch->ptszText) - 1;
@@ -188,9 +191,9 @@ int GGPROTO::gc_event(WPARAM wParam, LPARAM lParam) gcevent.time = time(NULL);
gcevent.bIsMe = 1;
gcevent.dwFlags = GC_TCHAR | GCEF_ADDTOLOG;
- netlog("gc_event(): Sending conference message to room %s, \"%s\".", gch->pDest->pszID, pszText);
+ netlog("gc_event(): Sending conference message to room %S, \"%s\".", gch->pDest->ptszID, pszText);
CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gcevent);
- if (pszValT != NULL) mir_free(pszValT);;
+ mir_free(nickT);
gg_EnterCriticalSection(&sess_mutex, "gc_event", 57, "sess_mutex", 1);
gg_send_message_confer(sess, GG_CLASS_CHAT, chat->recipients_count, chat->recipients, (BYTE*)pszText);
@@ -204,7 +207,7 @@ int GGPROTO::gc_event(WPARAM wParam, LPARAM lParam) if (gch->pDest->iType == GC_USER_PRIVMESS)
{
HANDLE hContact = NULL;
- if ((uin = atoi(gch->pszUID)) && (hContact = getcontact(uin, 1, 0, NULL)))
+ if ((uin = _ttoi(gch->ptszUID)) && (hContact = getcontact(uin, 1, 0, NULL)))
CallService(MS_MSG_SENDMESSAGE, (WPARAM)hContact, 0);
}
char* pszText = mir_t2a(gch->ptszText);
@@ -225,11 +228,11 @@ typedef struct _gg_gc_echat ////////////////////////////////////////////////////////////////////////////////
// This is main groupchat initialization routine
-char* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count)
+TCHAR* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count)
{
list_t l; int i;
GGGC *chat;
- char id[32];
+ TCHAR id[32];
uin_t uin; DBVARIANT dbv;
GCDEST gcdest = {m_szModuleName, 0, GC_EVENT_ADDGROUP};
GCEVENT gcevent = {sizeof(GCEVENT), &gcdest};
@@ -260,9 +263,9 @@ char* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count) if (found == recipients_count)
{
if (chat->ignore)
- netlog("gc_getchat(): Ignoring existing id %s, size %d.", chat->id, chat->recipients_count);
+ netlog("gc_getchat(): Ignoring existing id %S, size %d.", chat->id, chat->recipients_count);
else
- netlog("gc_getchat(): Returning existing id %s, size %d.", chat->id, chat->recipients_count);
+ netlog("gc_getchat(): Returning existing id %S, size %d.", chat->id, chat->recipients_count);
return !(chat->ignore) ? chat->id : NULL;
}
}
@@ -270,7 +273,8 @@ char* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count) // Make new uin list to chat mapping
chat = (GGGC *)malloc(sizeof(GGGC));
- UIN2ID(gc_id ++, chat->id); chat->ignore = FALSE;
+ UIN2IDT(gc_id ++, chat->id);
+ chat->ignore = FALSE;
// Check groupchat policy (new) / only for incoming
if (sender)
@@ -307,7 +311,7 @@ char* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count) for(i = 0; i < recipients_count; i++)
chat->recipients[i] = recipients[i];
if (sender) chat->recipients[i] = sender;
- netlog("gc_getchat(): Ignoring new chat %s, count %d.", chat->id, chat->recipients_count);
+ netlog("gc_getchat(): Ignoring new chat %S, count %d.", chat->id, chat->recipients_count);
list_add(&chats, chat, 0);
return NULL;
}
@@ -318,12 +322,13 @@ char* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count) TCHAR *senderName = sender ? pcli->pfnGetContactDisplayName(getcontact(sender, 1, 0, NULL), 0) : NULL;
mir_sntprintf(status, 255, (sender) ? TranslateT("%s initiated the conference.") : TranslateT("This is my own conference."), senderName);
GCSESSION gcwindow = { 0 };
- gcwindow.cbSize = sizeof(GCSESSION);
- gcwindow.iType = GCW_CHATROOM;
+ gcwindow.cbSize = sizeof(GCSESSION);
+ gcwindow.iType = GCW_CHATROOM;
+ gcwindow.dwFlags = GC_TCHAR;
gcwindow.pszModule = m_szModuleName;
- gcwindow.ptszName = sender ? senderName : TranslateT("Conference");
- gcwindow.pszID = chat->id;
- gcwindow.dwFlags = GC_TCHAR;
+ gcwindow.ptszName = sender ? senderName : TranslateT("Conference");
+ gcwindow.ptszID = chat->id;
+ gcwindow.dwFlags = GC_TCHAR;
gcwindow.dwItemData = (DWORD)chat;
gcwindow.ptszStatusbarText = status;
@@ -334,15 +339,15 @@ char* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count) // Create new room
if (CallServiceSync(MS_GC_NEWSESSION, 0, (LPARAM) &gcwindow))
{
- netlog("gc_getchat(): Cannot create new chat window %s.", chat->id);
+ netlog("gc_getchat(): Cannot create new chat window %S.", chat->id);
free(name);
free(chat);
return NULL;
}
free(name);
- gcdest.pszID = chat->id;
- gcevent.pszUID = id;
+ gcdest.ptszID = chat->id;
+ gcevent.ptszUID = id;
gcevent.dwFlags = GC_TCHAR | GCEF_ADDTOLOG;
gcevent.time = 0;
@@ -354,15 +359,21 @@ char* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count) // Add myself
if (uin = db_get_dw(NULL, m_szModuleName, GG_KEY_UIN, 0))
{
- UIN2ID(uin, id);
- if (!db_get_s(NULL, m_szModuleName, GG_KEY_NICK, &dbv, DBVT_ASCIIZ)) {
- gcevent.ptszNick = mir_a2t(dbv.pszVal);
+ UIN2IDT(uin, id);
+
+ TCHAR* nickT;
+ if (!db_get_s(NULL, m_szModuleName, GG_KEY_NICK, &dbv, DBVT_TCHAR)) {
+ nickT = mir_tstrdup(dbv.ptszVal);
db_free(&dbv);
+ } else {
+ nickT = mir_tstrdup(TranslateT("Me"));
}
- else gcevent.ptszNick = TranslateT("Me");
+ gcevent.ptszNick = nickT;
+
gcevent.bIsMe = 1;
CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gcevent);
- netlog("gc_getchat(): Myself %s: %S (%S) to the list...", gcevent.pszUID, gcevent.ptszNick, gcevent.ptszStatus);
+ mir_free(nickT);
+ netlog("gc_getchat(): Myself %S: %S (%S) to the list...", gcevent.ptszUID, gcevent.ptszNick, gcevent.ptszStatus);
}
else netlog("gc_getchat(): Myself adding failed with uin %d !!!", uin);
@@ -376,14 +387,14 @@ char* GGPROTO::gc_getchat(uin_t sender, uin_t *recipients, int recipients_count) // Add contacts
for(i = 0; i < chat->recipients_count; i++) {
HANDLE hContact = getcontact(chat->recipients[i], 1, 0, NULL);
- UIN2ID(chat->recipients[i], id);
+ UIN2IDT(chat->recipients[i], id);
if (hContact && (name = pcli->pfnGetContactDisplayName(hContact, 0)) != NULL)
gcevent.ptszNick = name;
else
gcevent.ptszNick = TranslateT("'Unknown'");
gcevent.bIsMe = 0;
gcevent.dwFlags = GC_TCHAR;
- netlog("gc_getchat(): Added %s: %S (%S) to the list...", gcevent.pszUID, gcevent.ptszNick, gcevent.pszStatus);
+ netlog("gc_getchat(): Added %S: %S (%S) to the list...", gcevent.ptszUID, gcevent.ptszNick, gcevent.pszStatus);
CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gcevent);
}
gcdest.iType = GC_EVENT_CONTROL;
@@ -483,7 +494,7 @@ static INT_PTR CALLBACK gg_gc_openconfdlg(HWND hwndDlg, UINT message, WPARAM wPa else if (hwndList && (count = gg_gc_countcheckmarks(hwndList)) >= 2)
{
// Create new participiants table
- char* chat;
+ TCHAR* chat;
uin_t* participants = (uin_t*)calloc(count, sizeof(uin_t));
HANDLE hItem, hContact = db_find_first();
gg->netlog("gg_gc_openconfdlg(): WM_COMMAND IDOK Opening new conference for %d contacts.", count);
@@ -501,7 +512,10 @@ static INT_PTR CALLBACK gg_gc_openconfdlg(HWND hwndDlg, UINT message, WPARAM wPa chat = gg->gc_getchat(0, participants, count);
if (chat)
{
- GCDEST gcdest = {gg->m_szModuleName, chat, GC_EVENT_CONTROL};
+ GCDEST gcdest = {0};
+ gcdest.pszModule = gg->m_szModuleName;
+ gcdest.ptszID = chat;
+ gcdest.iType = GC_EVENT_CONTROL;
GCEVENT gcevent = {sizeof(GCEVENT), &gcdest};
CallServiceSync(MS_GC_EVENT, WINDOW_VISIBLE, (LPARAM)&gcevent);
}
@@ -641,13 +655,13 @@ INT_PTR GGPROTO::gc_openconf(WPARAM wParam, LPARAM lParam) return 1;
}
-int GGPROTO::gc_changenick(HANDLE hContact, char *pszNick)
+int GGPROTO::gc_changenick(HANDLE hContact, TCHAR *ptszNick)
{
list_t l;
uin_t uin = db_get_dw(hContact, m_szModuleName, GG_KEY_UIN, 0);
- if (!uin || !pszNick) return 0;
+ if (!uin || !ptszNick) return 0;
- netlog("gc_changenick(): Nickname for uin %d changed to %s.", uin, pszNick);
+ netlog("gc_changenick(): Nickname for uin %d changed. Lookup for chats having this nick", uin);
// Lookup for chats having this nick
for(l = chats; l; l = l->next) {
GGGC *chat = (GGGC *)l->data;
@@ -656,18 +670,20 @@ int GGPROTO::gc_changenick(HANDLE hContact, char *pszNick) // Rename this window if it's exising in the chat
if (chat->recipients[i] == uin)
{
- char id[32];
+ TCHAR id[32];
GCEVENT gce = {sizeof(GCEVENT)};
GCDEST gcd;
- UIN2ID(uin, id);
+ UIN2IDT(uin, id);
gcd.iType = GC_EVENT_NICK;
gcd.pszModule = m_szModuleName;
gce.pDest = &gcd;
- gcd.pszID = chat->id;
- gce.pszUID = id;
- gce.pszText = pszNick;
- netlog("gc_changenick(): Found room %s with uin %d, sending nick change %s.", chat->id, uin, id);
+ gcd.ptszID = chat->id;
+ gce.ptszUID = id;
+ gce.dwFlags = GC_TCHAR;
+ gce.ptszText = ptszNick;
+
+ netlog("gc_changenick(): Found room %S with uin %d, sending nick change %s.", chat->id, uin, id);
CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gce);
break;
diff --git a/protocols/Gadu-Gadu/src/import.cpp b/protocols/Gadu-Gadu/src/import.cpp index 7fd3d73b59..6de84ca6ff 100644 --- a/protocols/Gadu-Gadu/src/import.cpp +++ b/protocols/Gadu-Gadu/src/import.cpp @@ -125,18 +125,20 @@ char *gg_makecontacts(GGPROTO *gg, int cr) string_append_c(s, ';');
// Readup Nick
- if (!db_get_s(hContact, "CList", "MyHandle", &dbv, DBVT_ASCIIZ) || !db_get_s(hContact, gg->m_szModuleName, GG_KEY_NICK, &dbv, DBVT_ASCIIZ))
+ if (!db_get_s(hContact, "CList", "MyHandle", &dbv, DBVT_TCHAR) || !db_get_s(hContact, gg->m_szModuleName, GG_KEY_NICK, &dbv, DBVT_TCHAR))
{
+ char* dbvA = mir_t2a(dbv.ptszVal);
DBVARIANT dbv2;
if (!db_get_s(hContact, gg->m_szModuleName, "NickName", &dbv2, DBVT_ASCIIZ))
{
string_append(s, dbv2.pszVal);
DBFreeVariant(&dbv2);
+ } else {
+ string_append(s, dbvA);
}
- else
- string_append(s, dbv.pszVal);
string_append_c(s, ';');
- string_append(s, dbv.pszVal);
+ string_append(s, dbvA);
+ mir_free(dbvA);
DBFreeVariant(&dbv);
}
else
@@ -438,6 +440,8 @@ INT_PTR GGPROTO::import_text(WPARAM wParam, LPARAM lParam) return 0;
*pfilter = '\0';
+ *str = _T('\0');
+
ofn.lpstrFilter = filter;
ofn.lpstrFile = str;
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
@@ -481,8 +485,8 @@ INT_PTR GGPROTO::export_text(WPARAM wParam, LPARAM lParam) TCHAR filter[512], *pfilter;
FILE *f;
- _tcsncpy(str, TranslateT("contacts"), sizeof(str));
- _tcsncat(str, _T(".txt"), sizeof(str) - _tcslen(str));
+ _tcsncpy(str, TranslateT("contacts"), SIZEOF(str));
+ _tcsncat(str, _T(".txt"), SIZEOF(str) - _tcslen(str));
ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
_tcsncpy(filter, TranslateT("Text files"), SIZEOF(filter));
@@ -512,7 +516,7 @@ INT_PTR GGPROTO::export_text(WPARAM wParam, LPARAM lParam) ofn.lpstrDefExt = _T("txt");
#ifdef DEBUGMODE
- netlog("export_text(%s).", str);
+ netlog("export_text(%S).", str);
#endif
if (!GetSaveFileName(&ofn)) return 0;
|