summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-12-29 02:44:13 +0000
committerpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-12-29 02:44:13 +0000
commit236bbc334ca84ca88470cfced8b768f4fd5f591c (patch)
tree10b204a9bf5c48729dae03d318b1f4b8f34c9edd
parent9cb9a1aeaee41c199e23f94062098e0bec4b1866 (diff)
iax: report voice messages as email count
git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@196 c086bb3d-8645-0410-b8da-73a8550f86e7
-rw-r--r--Protocols/IAX/IAXProto.cpp80
-rw-r--r--Protocols/IAX/IAXProto.h25
-rw-r--r--Protocols/IAX/commons.h2
-rw-r--r--Protocols/IAX/resource.rc28
4 files changed, 88 insertions, 47 deletions
diff --git a/Protocols/IAX/IAXProto.cpp b/Protocols/IAX/IAXProto.cpp
index 73b0aef..4763378 100644
--- a/Protocols/IAX/IAXProto.cpp
+++ b/Protocols/IAX/IAXProto.cpp
@@ -35,6 +35,7 @@ IAXProto::IAXProto(const char *aProtoName, const TCHAR *aUserName)
hNetlibUser = 0;
hCallStateEvent = 0;
m_iDesiredStatus = m_iStatus = ID_STATUS_OFFLINE;
+ voiceMessages = 0;
m_tszUserName = mir_tstrdup(aUserName);
m_szProtoName = mir_strdup(aProtoName);
@@ -77,6 +78,7 @@ IAXProto::IAXProto(const char *aProtoName, const TCHAR *aUserName)
LoadOpts(optionsCtrls, MAX_REGS(optionsCtrls), m_szModuleName);
CreateProtoService(PS_CREATEACCMGRUI, &IAXProto::CreateAccMgrUI);
+ CreateProtoService(PS_GETUNREADEMAILCOUNT, &IAXProto::GetUnreadEmailCount);
CreateProtoService(PS_VOICE_CAPS, &IAXProto::VoiceCaps);
CreateProtoService(PS_VOICE_CALL, &IAXProto::VoiceCall);
@@ -122,7 +124,7 @@ DWORD_PTR __cdecl IAXProto::GetCaps( int type, HANDLE hContact )
return PF4_NOCUSTOMAUTH;
case PFLAG_UNIQUEIDTEXT:
- return (UINT_PTR) Translate("User");
+ return (UINT_PTR) Translate("Username");
case PFLAG_UNIQUEIDSETTING:
return (UINT_PTR) "Username";
@@ -135,7 +137,7 @@ DWORD_PTR __cdecl IAXProto::GetCaps( int type, HANDLE hContact )
}
-int __cdecl IAXProto::SetStatus( int iNewStatus )
+INT_PTR __cdecl IAXProto::SetStatus( int iNewStatus )
{
if (m_iStatus == iNewStatus)
return 0;
@@ -157,7 +159,7 @@ int __cdecl IAXProto::SetStatus( int iNewStatus )
reg_id = iaxc_register(TcharToUtf8(opts.username), opts.password, TcharToUtf8(server_port));
if (reg_id <= 0)
{
- Error(TranslateT("Error registering with IAX"));
+ Error(_T("Error registering with IAX"));
BroadcastStatus(ID_STATUS_OFFLINE);
return -1;
}
@@ -255,7 +257,7 @@ void IAXProto::Info(TCHAR *fmt, ...)
va_list args;
va_start(args, fmt);
- ShowMessage(MESSAGE_TYPE_INFO, fmt, args);
+ ShowMessage(MESSAGE_TYPE_INFO, TranslateTS(fmt), args);
va_end(args);
}
@@ -266,7 +268,7 @@ void IAXProto::Error(TCHAR *fmt, ...)
va_list args;
va_start(args, fmt);
- ShowMessage(MESSAGE_TYPE_ERROR, fmt, args);
+ ShowMessage(MESSAGE_TYPE_ERROR, TranslateTS(fmt), args);
va_end(args);
}
@@ -323,7 +325,7 @@ int IAXProto::text_callback(iaxc_ev_text &text)
}
case IAXC_TEXT_TYPE_NOTICE:
{
- Info(TranslateT("Notice: %s"), Utf8ToTchar(text.message));
+ Info(_T("Notice: %s"), Utf8ToTchar(text.message));
return 1;
}
case IAXC_TEXT_TYPE_ERROR:
@@ -333,7 +335,7 @@ int IAXProto::text_callback(iaxc_ev_text &text)
}
case IAXC_TEXT_TYPE_FATALERROR:
{
- Error(TranslateT("Fatal: %s"), Utf8ToTchar(text.message));
+ Error(_T("Fatal: %s"), Utf8ToTchar(text.message));
Disconnect();
return 1;
}
@@ -438,21 +440,29 @@ int IAXProto::registration_callback(iaxc_ev_registration &reg)
{
BroadcastStatus(m_iDesiredStatus > ID_STATUS_OFFLINE ? m_iDesiredStatus : ID_STATUS_ONLINE);
- if (reg.msgcount > 0)
- Info(TranslateT("You have %d voicemail message(s)"), reg.msgcount);
+ int messages = max(0, reg.msgcount);
+
+ if (messages != voiceMessages)
+ {
+ if (messages > 0)
+ Info(_T("You have %d voicemail message(s)"), reg.msgcount);
+
+ voiceMessages = messages;
+ SendBroadcast(NULL, ACKTYPE_EMAIL, ACKRESULT_STATUS, NULL, 0);
+ }
return 1;
}
case IAXC_REGISTRATION_REPLY_REJ:
{
- Error(TranslateT("Registration rejected"));
+ Error(_T("Registration rejected"));
Disconnect();
return 1;
}
case IAXC_REGISTRATION_REPLY_TIMEOUT:
{
- Error(TranslateT("Registration timeout"));
+ Error(_T("Registration timeout"));
Disconnect();
return 1;
@@ -486,12 +496,13 @@ static void CALLBACK ProcessIAXEvents(void *param)
EnterCriticalSection(&proto->cs);
- for(std::vector<iaxc_event>::iterator it = proto->events.begin(); it != proto->events.end(); ++it)
- proto->iaxc_callback(*it);
-
+ std::vector<iaxc_event> events(proto->events);
proto->events.clear();
LeaveCriticalSection(&proto->cs);
+
+ for(unsigned int i = 0; i < events.size(); ++i)
+ proto->iaxc_callback(events[i]);
}
}
@@ -510,7 +521,7 @@ static int static_iaxc_callback(iaxc_event e, void *param)
}
-int __cdecl IAXProto::OnEvent( PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lParam )
+INT_PTR __cdecl IAXProto::OnEvent( PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lParam )
{
switch(iEventType)
{
@@ -532,7 +543,7 @@ int __cdecl IAXProto::OnEvent( PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM
}
-int __cdecl IAXProto::OnModulesLoaded(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::OnModulesLoaded(WPARAM wParam, LPARAM lParam)
{
TCHAR buffer[MAX_PATH];
mir_sntprintf(buffer, MAX_REGS(buffer), TranslateT("%s plugin connections"), m_tszUserName);
@@ -546,7 +557,7 @@ int __cdecl IAXProto::OnModulesLoaded(WPARAM wParam, LPARAM lParam)
if (!ServiceExists(MS_VOICESERVICE_REGISTER))
{
- Error(TranslateT("IAX needs Voice Service plugin to work!"));
+ Error(_T("IAX needs Voice Service plugin to work!"));
return 1;
}
@@ -556,7 +567,7 @@ int __cdecl IAXProto::OnModulesLoaded(WPARAM wParam, LPARAM lParam)
iaxc_set_preferred_source_udp_port(-1);
if (iaxc_initialize(NUM_LINES))
{
- Error(TranslateT("Failed to initialize iaxc lib"));
+ Error(_T("Failed to initialize iaxc lib"));
return 1;
}
@@ -567,7 +578,7 @@ int __cdecl IAXProto::OnModulesLoaded(WPARAM wParam, LPARAM lParam)
if (iaxc_start_processing_thread())
{
- Error(TranslateT("Failed to initialize iax threads"));
+ Error(_T("Failed to initialize iax threads"));
return 1;
}
@@ -575,7 +586,7 @@ int __cdecl IAXProto::OnModulesLoaded(WPARAM wParam, LPARAM lParam)
}
-int __cdecl IAXProto::OnOptionsInit(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::OnOptionsInit(WPARAM wParam, LPARAM lParam)
{
OPTIONSDIALOGPAGE odp = {0};
odp.cbSize = sizeof(odp);
@@ -592,7 +603,7 @@ int __cdecl IAXProto::OnOptionsInit(WPARAM wParam, LPARAM lParam)
}
-int __cdecl IAXProto::OnPreShutdown(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::OnPreShutdown(WPARAM wParam, LPARAM lParam)
{
iaxc_stop_processing_thread();
@@ -602,6 +613,15 @@ int __cdecl IAXProto::OnPreShutdown(WPARAM wParam, LPARAM lParam)
}
+INT_PTR __cdecl IAXProto::GetUnreadEmailCount(WPARAM wParam, LPARAM lParam)
+{
+ if (m_iStatus <= ID_STATUS_OFFLINE)
+ return 0;
+
+ return voiceMessages;
+}
+
+
void IAXProto::NotifyCall(int callNo, int state, HANDLE hContact, TCHAR *name, TCHAR *number)
{
Trace(_T("NotifyCall %d -> %d"), callNo, state);
@@ -683,13 +703,13 @@ void IAXProto::ConfigureDevices()
}
-int __cdecl IAXProto::VoiceCaps(WPARAM wParam,LPARAM lParam)
+INT_PTR __cdecl IAXProto::VoiceCaps(WPARAM wParam,LPARAM lParam)
{
return VOICE_CAPS_VOICE | VOICE_CAPS_CALL_STRING;
}
-int __cdecl IAXProto::VoiceCall(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::VoiceCall(WPARAM wParam, LPARAM lParam)
{
HANDLE hContact = (HANDLE) wParam;
TCHAR *number = (TCHAR *) lParam;
@@ -702,7 +722,7 @@ int __cdecl IAXProto::VoiceCall(WPARAM wParam, LPARAM lParam)
int callNo = iaxc_first_free_call();
if (callNo < 0 || callNo >= NUM_LINES)
{
- Error(TranslateT("No more slots to make calls. You need to drop some calls."));
+ Info(_T("No more slots to make calls. You need to drop some calls."));
return 2;
}
@@ -722,7 +742,7 @@ int __cdecl IAXProto::VoiceCall(WPARAM wParam, LPARAM lParam)
callNo = iaxc_call_ex(buff, TcharToUtf8(myName), TcharToUtf8(myNumber), FALSE);
if (callNo < 0 || callNo >= NUM_LINES)
{
- Error(TranslateT("Error making call (callNo=%d)."), callNo);
+ Error(_T("Error making call (callNo=%d)."), callNo);
return 3;
}
@@ -732,7 +752,7 @@ int __cdecl IAXProto::VoiceCall(WPARAM wParam, LPARAM lParam)
}
-int __cdecl IAXProto::VoiceAnswerCall(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::VoiceAnswerCall(WPARAM wParam, LPARAM lParam)
{
char *id = (char *) wParam;
if (id == NULL || id[0] == 0)
@@ -751,7 +771,7 @@ int __cdecl IAXProto::VoiceAnswerCall(WPARAM wParam, LPARAM lParam)
}
-int __cdecl IAXProto::VoiceDropCall(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::VoiceDropCall(WPARAM wParam, LPARAM lParam)
{
char *id = (char *) wParam;
if (id == NULL || id[0] == 0)
@@ -770,7 +790,7 @@ int __cdecl IAXProto::VoiceDropCall(WPARAM wParam, LPARAM lParam)
}
-int __cdecl IAXProto::VoiceHoldCall(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::VoiceHoldCall(WPARAM wParam, LPARAM lParam)
{
char *id = (char *) wParam;
if (id == NULL || id[0] == 0)
@@ -802,7 +822,7 @@ static bool IsValidDTMF(TCHAR c)
}
-int __cdecl IAXProto::VoiceSendDTMF(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::VoiceSendDTMF(WPARAM wParam, LPARAM lParam)
{
char *id = (char *) wParam;
TCHAR c = (TCHAR) lParam;
@@ -828,7 +848,7 @@ int __cdecl IAXProto::VoiceSendDTMF(WPARAM wParam, LPARAM lParam)
}
-int __cdecl IAXProto::VoiceCallStringValid(WPARAM wParam, LPARAM lParam)
+INT_PTR __cdecl IAXProto::VoiceCallStringValid(WPARAM wParam, LPARAM lParam)
{
TCHAR *number = (TCHAR *) wParam;
diff --git a/Protocols/IAX/IAXProto.h b/Protocols/IAX/IAXProto.h
index db0549b..5a9a1f3 100644
--- a/Protocols/IAX/IAXProto.h
+++ b/Protocols/IAX/IAXProto.h
@@ -32,6 +32,7 @@ private:
HANDLE hNetlibUser;
HANDLE hCallStateEvent;
int reg_id;
+ int voiceMessages;
struct {
TCHAR host[256];
@@ -114,9 +115,9 @@ private:
void HookProtoEvent(const char* szEvent, IAXEventFunc pFunc);
int SendBroadcast(HANDLE hContact, int type, int result, HANDLE hProcess, LPARAM lParam);
- int __cdecl OnModulesLoaded(WPARAM wParam, LPARAM lParam);
- int __cdecl OnOptionsInit(WPARAM wParam,LPARAM lParam);
- int __cdecl OnPreShutdown(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl OnModulesLoaded(WPARAM wParam, LPARAM lParam);
+ INT_PTR __cdecl OnOptionsInit(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl OnPreShutdown(WPARAM wParam,LPARAM lParam);
void Trace(TCHAR *fmt, ...);
void Info(TCHAR *fmt, ...);
@@ -124,7 +125,8 @@ private:
void ShowMessage(int type, TCHAR *fmt, va_list args);
void Disconnect();
- INT_PTR __cdecl CreateAccMgrUI(WPARAM wParam, LPARAM lParam);
+ INT_PTR __cdecl CreateAccMgrUI(WPARAM wParam, LPARAM lParam);
+ INT_PTR __cdecl GetUnreadEmailCount(WPARAM wParam, LPARAM lParam);
int levels_callback(iaxc_ev_levels &levels);
int text_callback(iaxc_ev_text &text);
@@ -135,15 +137,16 @@ private:
void ConfigureDevices();
+
// Voice services
void NotifyCall(int callNo, int state, HANDLE hContact = NULL, TCHAR *name = NULL, TCHAR *number = NULL);
- int __cdecl VoiceCaps(WPARAM wParam,LPARAM lParam);
- int __cdecl VoiceCall(WPARAM wParam,LPARAM lParam);
- int __cdecl VoiceAnswerCall(WPARAM wParam,LPARAM lParam);
- int __cdecl VoiceDropCall(WPARAM wParam,LPARAM lParam);
- int __cdecl VoiceHoldCall(WPARAM wParam,LPARAM lParam);
- int __cdecl VoiceSendDTMF(WPARAM wParam,LPARAM lParam);
- int __cdecl VoiceCallStringValid(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl VoiceCaps(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl VoiceCall(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl VoiceAnswerCall(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl VoiceDropCall(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl VoiceHoldCall(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl VoiceSendDTMF(WPARAM wParam,LPARAM lParam);
+ INT_PTR __cdecl VoiceCallStringValid(WPARAM wParam,LPARAM lParam);
};
diff --git a/Protocols/IAX/commons.h b/Protocols/IAX/commons.h
index 2203660..e3b57ee 100644
--- a/Protocols/IAX/commons.h
+++ b/Protocols/IAX/commons.h
@@ -84,6 +84,8 @@ extern OBJLIST<IAXProto> instances;
#define MAX_REGS(_A_) ( sizeof(_A_) / sizeof(_A_[0]) )
#define MIR_FREE(_X_) if (_X_ != NULL) { mir_free(_X_); _X_ = NULL; }
+#define PS_GETUNREADEMAILCOUNT "/GetUnreadEmailCount"
+
static TCHAR *lstrtrim(TCHAR *str)
diff --git a/Protocols/IAX/resource.rc b/Protocols/IAX/resource.rc
index 5b2d496..9cc6426 100644
--- a/Protocols/IAX/resource.rc
+++ b/Protocols/IAX/resource.rc
@@ -30,13 +30,13 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_ACCMGRUI DIALOGEX 0, 0, 186, 134
STYLE DS_FIXEDSYS | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Server:",IDC_STATIC,0,0,53,12,SS_CENTERIMAGE
EDITTEXT IDC_HOST,54,0,92,12,ES_AUTOHSCROLL
CTEXT ":",IDC_STATIC,147,0,8,12,SS_CENTERIMAGE
EDITTEXT IDC_PORT,155,0,30,12,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "User:",IDC_STATIC,0,16,53,12,SS_CENTERIMAGE
+ LTEXT "Username:",IDC_STATIC,0,16,53,12,SS_CENTERIMAGE
EDITTEXT IDC_USERNAME,54,16,131,12,ES_AUTOHSCROLL
LTEXT "Password:",IDC_STATIC,0,31,53,12,SS_CENTERIMAGE
EDITTEXT IDC_PASSWORD,54,32,131,12,ES_PASSWORD | ES_AUTOHSCROLL
@@ -44,7 +44,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP,54,48,131,10
END
-IDD_OPTIONS DIALOGEX 0, 0, 216, 152
+IDD_OPTIONS DIALOGEX 0, 0, 216, 158
STYLE DS_FIXEDSYS | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Shell Dlg"
@@ -54,21 +54,37 @@ BEGIN
EDITTEXT IDC_HOST,68,17,92,12,ES_AUTOHSCROLL
CTEXT ":",IDC_STATIC,162,17,8,12,SS_CENTERIMAGE
EDITTEXT IDC_PORT,170,17,30,12,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "User:",IDC_STATIC,14,33,53,12,SS_CENTERIMAGE
+ LTEXT "Username:",IDC_STATIC,14,33,53,12,SS_CENTERIMAGE
EDITTEXT IDC_USERNAME,68,33,131,12,ES_AUTOHSCROLL
LTEXT "Password:",IDC_STATIC,14,48,53,12,SS_CENTERIMAGE
EDITTEXT IDC_PASSWORD,68,49,131,12,ES_PASSWORD | ES_AUTOHSCROLL
CONTROL "Save password",IDC_SAVEPASSWORD,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,68,65,131,10
- GROUPBOX "Caller ID",IDC_STATIC,3,84,209,64
+ GROUPBOX "Caller ID",IDC_STATIC,3,84,209,67
LTEXT "Name:",IDC_STATIC,14,98,53,12,SS_CENTERIMAGE
EDITTEXT IDC_NAME,68,98,131,12,ES_AUTOHSCROLL
LTEXT "Number:",IDC_STATIC,14,113,53,12,SS_CENTERIMAGE
EDITTEXT IDC_NUMBER,68,114,131,12,ES_AUTOHSCROLL
CTEXT "These are only used if the server allows.",IDC_STATIC,
- 13,132,186,12
+ 13,134,186,12
END
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO DISCARDABLE
+BEGIN
+ IDD_OPTIONS, DIALOG
+ BEGIN
+ BOTTOMMARGIN, 152
+ END
+END
+#endif // APSTUDIO_INVOKED
+
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////