diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/UserInfoEx/UInfoEx.vcxproj.filters | 24 | ||||
-rw-r--r-- | plugins/UserInfoEx/src/mir_menuitems.cpp | 3 | ||||
-rw-r--r-- | plugins/UserInfoEx/src/stdafx.h | 2 | ||||
-rw-r--r-- | plugins/UserInfoEx/src/svc_email.cpp | 174 | ||||
-rw-r--r-- | plugins/UserInfoEx/src/svc_email.h | 28 | ||||
-rw-r--r-- | plugins/UserInfoEx/src/svc_homepage.cpp | 134 | ||||
-rw-r--r-- | plugins/UserInfoEx/src/svc_homepage.h | 28 |
7 files changed, 393 insertions, 0 deletions
diff --git a/plugins/UserInfoEx/UInfoEx.vcxproj.filters b/plugins/UserInfoEx/UInfoEx.vcxproj.filters index 902edc4d65..0904da07ed 100644 --- a/plugins/UserInfoEx/UInfoEx.vcxproj.filters +++ b/plugins/UserInfoEx/UInfoEx.vcxproj.filters @@ -1,7 +1,31 @@ <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files\Export">
+ <UniqueIdentifier>{c8dd3d4e-3adb-4b2d-ac98-78e190c2b499}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Flags">
+ <UniqueIdentifier>{c8dd3d4e-3adb-4b2d-ac98-78e190c2b49A}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
<Import Project="$(ProjectDir)..\..\build\vc.common\common.filters" />
<ItemGroup>
+ <ClInclude Include="src\ex_import\*.h">
+ <Filter>Source Files\Export</Filter>
+ </ClInclude>
+ <ClCompile Include="src\ex_import\*.cpp">
+ <Filter>Source Files\Export</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\Flags\*.h">
+ <Filter>Source Files\Flags</Filter>
+ </ClInclude>
+ <ClCompile Include="src\Flags\*.cpp">
+ <Filter>Source Files\Flags</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
<ClInclude Include="src\*.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/plugins/UserInfoEx/src/mir_menuitems.cpp b/plugins/UserInfoEx/src/mir_menuitems.cpp index ecbf3837f5..f3c1c6200c 100644 --- a/plugins/UserInfoEx/src/mir_menuitems.cpp +++ b/plugins/UserInfoEx/src/mir_menuitems.cpp @@ -69,6 +69,9 @@ void RebuildContact() HGENMENU mhExIm = nullptr;
static HGENMENU hMenuItem[4] = { nullptr, nullptr, nullptr, nullptr };
+ SvcEMailRebuildMenu();
+ SvcHomepageRebuildMenu();
+
// load options
int flag = g_plugin.getByte(SET_MI_CONTACT, MCAS_NOTINITIATED);
if (flag == MCAS_NOTINITIATED) {
diff --git a/plugins/UserInfoEx/src/stdafx.h b/plugins/UserInfoEx/src/stdafx.h index 22a8c54bca..c6bcb36aea 100644 --- a/plugins/UserInfoEx/src/stdafx.h +++ b/plugins/UserInfoEx/src/stdafx.h @@ -110,6 +110,8 @@ using namespace std; #include "../IconPacks/ice/src/icons.h"
#include "svc_constants.h"
#include "svc_avatar.h"
+#include "svc_email.h"
+#include "svc_homepage.h"
#include "svc_gender.h"
#include "svc_refreshci.h"
#include "svc_reminder.h"
diff --git a/plugins/UserInfoEx/src/svc_email.cpp b/plugins/UserInfoEx/src/svc_email.cpp new file mode 100644 index 0000000000..873328b6fb --- /dev/null +++ b/plugins/UserInfoEx/src/svc_email.cpp @@ -0,0 +1,174 @@ +/* +UserinfoEx plugin for Miranda IM + +Copyright: +© 2006-2010 DeathAxe, Yasnovidyashii, Merlin, K. Romanov, Kreol + +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 "stdafx.h" + +static HGENMENU ghMenuItem = nullptr; +static HANDLE hPrebuildMenuHook = nullptr; + +/** +* This function reads the email address of the contact. +* +* @param hContact - handle to contact to read email from +* +* @retval email address +* @retval NULL, if contact does not provide any email address +**/ + +static LPSTR Get(MCONTACT hContact) +{ + // ignore owner + if (hContact != NULL) { + LPCSTR pszProto = Proto_GetBaseAccountName(hContact); + + if (pszProto != nullptr) { + LPCSTR e[2][4] = { + { SET_CONTACT_EMAIL, SET_CONTACT_EMAIL0, SET_CONTACT_EMAIL1, "Mye-mail0"}, + { SET_CONTACT_COMPANY_EMAIL, SET_CONTACT_COMPANY_EMAIL0, SET_CONTACT_COMPANY_EMAIL1, "MyCompanye-mail0"} + }; + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 4; j++) { + LPSTR pszEMail = DB::Setting::GetAStringEx(hContact, USERINFO, pszProto, e[i][j]); + if (pszEMail) { + if (strchr(pszEMail, '@')) + return pszEMail; + + mir_free(pszEMail); + } + } + } + } + } + return nullptr; +} + +/** +* Service function that sends emails +* +* @param wParam - handle to contact to send an email to +* @param lParam - not used +* +* @retval 0 if email was sent +* @retval 1 if no email can be sent +**/ + +static INT_PTR MenuCommand(WPARAM wParam,LPARAM lParam) +{ + int result = 0; + LPSTR val = nullptr; + + __try + { + val = Get(wParam); + if (val) { + LPSTR szUrl; + INT_PTR len; + + len = mir_strlen(val) + mir_strlen("mailto:"); + + szUrl = (LPSTR)_alloca(len + 1); + + mir_snprintf(szUrl, len + 1, "mailto:%s", val); + mir_free(val); + + Utils_OpenUrl(szUrl); + } + else { + result = 1; + MsgBox((HWND)lParam, MB_OK, LPGENW("Send e-mail"), nullptr, LPGENW("Memory allocation error!")); + } + } + __except(GetExceptionCode()==EXCEPTION_ACCESS_VIOLATION ? + EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) + { + mir_free(val); + result = 1; + MsgErr((HWND)lParam, LPGENW("Memory allocation error!")); + } + return result; +} + +/*********************************************************************************************************** + * Event Handler functions + ***********************************************************************************************************/ + +/** +* This function decides whether to show menuitem for sending emails or not. +* +* @param wParam - handle to contact to send an email to +* @param lParam - not used +* +* @return always 0 +**/ + +static int OnPreBuildMenu(WPARAM wParam, LPARAM) +{ + LPSTR val = Get(wParam); + Menu_ShowItem(ghMenuItem, val != nullptr); + mir_free(val); + return 0; +} + +/*********************************************************************************************************** + * public Module Interface functions + ***********************************************************************************************************/ + +void SvcEMailRebuildMenu() +{ + if (g_plugin.getByte(SET_EXTENDED_EMAILSERVICE, TRUE)) { + if (!hPrebuildMenuHook) + hPrebuildMenuHook = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, OnPreBuildMenu); + + if (!ghMenuItem) { + // insert contact menuitem + CMenuItem mi(&g_plugin); + SET_UID(mi, 0x61d8e25a, 0x92e, 0x4470, 0x84, 0x57, 0x5e, 0x52, 0x17, 0x7f, 0xfa, 0x3); + mi.position = -2000010000; + mi.hIcolibItem = g_plugin.getIconHandle(IDI_DLG_EMAIL); + mi.name.a = "&E-mail"; + mi.pszService = MS_EMAIL_SENDEMAIL; + ghMenuItem = Menu_AddContactMenuItem(&mi); + } + } + else { + if (hPrebuildMenuHook) + UnhookEvent(ME_CLIST_PREBUILDCONTACTMENU), hPrebuildMenuHook = NULL; + + if (ghMenuItem) { + Menu_RemoveItem(ghMenuItem); + ghMenuItem = nullptr; + } + } +} + +/** +* This function initially loads the module upon startup. +**/ + +void SvcEMailLoadModule() +{ + if (g_plugin.getByte(SET_EXTENDED_EMAILSERVICE, TRUE)) { + // create own email send command + DestroyServiceFunction(MS_EMAIL_SENDEMAIL); + CreateServiceFunction(MS_EMAIL_SENDEMAIL, MenuCommand); + } +} diff --git a/plugins/UserInfoEx/src/svc_email.h b/plugins/UserInfoEx/src/svc_email.h new file mode 100644 index 0000000000..e19d3b2882 --- /dev/null +++ b/plugins/UserInfoEx/src/svc_email.h @@ -0,0 +1,28 @@ +/* +UserinfoEx plugin for Miranda IM + +Copyright: +© 2006-2010 DeathAxe, Yasnovidyashii, Merlin, K. Romanov, Kreol + +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. +*/ + +#ifndef _UINFOEX_SVCEMAIL_H_INCLUDED_ +#define _UINFOEX_SVCEMAIL_H_INCLUDED_ + +void SvcEMailRebuildMenu(); +void SvcEMailLoadModule(); + +#endif /* _UINFOEX_SVCEMAIL_H_INCLUDED_ */
\ No newline at end of file diff --git a/plugins/UserInfoEx/src/svc_homepage.cpp b/plugins/UserInfoEx/src/svc_homepage.cpp new file mode 100644 index 0000000000..4d6561c640 --- /dev/null +++ b/plugins/UserInfoEx/src/svc_homepage.cpp @@ -0,0 +1,134 @@ +/* +UserinfoEx plugin for Miranda IM + +Copyright: +© 2006-2010 DeathAxe, Yasnovidyashii, Merlin, K. Romanov, Kreol + +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 "stdafx.h" + +static HGENMENU ghMenuItem = nullptr; +static HANDLE hPrebuildMenuHook = nullptr; + +/** +* This function reads the homepage address of the contact. +* +* @param hContact - handle to contact to read email from +* +* @retval URL to contacts homepage +* @retval NULL if contact provides no homepage +**/ + +static LPSTR Get(MCONTACT hContact) +{ + // ignore owner + if (hContact != NULL) { + LPCSTR pszProto = Proto_GetBaseAccountName(hContact); + if (pszProto != nullptr) { + LPCSTR e[2] = { SET_CONTACT_HOMEPAGE, SET_CONTACT_COMPANY_HOMEPAGE }; + for (int i = 0; i < 2; i++) { + LPSTR pszHomepage = DB::Setting::GetAStringEx(hContact, USERINFO, pszProto, e[i]); + if (pszHomepage) + return pszHomepage; + } + } + } + return nullptr; +} + +/** +* Service function that opens the default browser and displays the homepage. +* +* @param wParam - handle to contact to send an email to +* @param lParam - not used +* +* @retval 0 if email was sent +* @retval 1 if no email can be sent +**/ + +static INT_PTR MenuCommand(WPARAM wParam, LPARAM lParam) +{ + LPSTR szUrl = Get(wParam); + if (szUrl) { + Utils_OpenUrl(szUrl); + mir_free(szUrl); + } + else MessageBox((HWND)lParam, TranslateT("User has no valid homepage"), TranslateT("View Homepage"), MB_OK); + + return 0; +} + +/*********************************************************************************************************** + * Event Handler functions + ***********************************************************************************************************/ + +/** +* This function decides whether to show menuitem for sending emails or not. +* +* @param wParam - handle to contact to send an email to +* @param lParam - not used +* +* @return always 0 +**/ + +static int OnPreBuildMenu(WPARAM wParam, LPARAM) +{ + LPSTR val = Get(wParam); + Menu_ShowItem(ghMenuItem, val != nullptr); + mir_free(val); + return 0; +} + +/*********************************************************************************************************** + * public Module Interface functions + ***********************************************************************************************************/ + +/** +* enable or disable menuitem +* +* @param not used +* @return nothing +**/ + +void SvcHomepageRebuildMenu() +{ + if (!hPrebuildMenuHook) + hPrebuildMenuHook = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, OnPreBuildMenu); + + if (!ghMenuItem) { + // insert contact menuitem + CMenuItem mi(&g_plugin); + SET_UID(mi, 0xdb78c16e, 0x50db, 0x4a40, 0x80, 0x0, 0xd1, 0xa4, 0x1c, 0x1b, 0xa3, 0x2d); + mi.position = -2000010000; + mi.hIcolibItem = g_plugin.getIconHandle(IDI_BTN_GOTO); + mi.name.a = LPGEN("&Homepage"); + mi.pszService = MS_USERINFO_HOMEPAGE_OPENURL; + ghMenuItem = Menu_AddContactMenuItem(&mi); + } +} + +/** +* This function initially loads the module upon startup. +* +* @param not used +* @return nothing +**/ + +void SvcHomepageLoadModule() +{ + CreateServiceFunction(MS_USERINFO_HOMEPAGE_OPENURL, MenuCommand); +} diff --git a/plugins/UserInfoEx/src/svc_homepage.h b/plugins/UserInfoEx/src/svc_homepage.h new file mode 100644 index 0000000000..51900522c8 --- /dev/null +++ b/plugins/UserInfoEx/src/svc_homepage.h @@ -0,0 +1,28 @@ +/* +UserinfoEx plugin for Miranda IM + +Copyright: +© 2006-2010 DeathAxe, Yasnovidyashii, Merlin, K. Romanov, Kreol + +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. +*/ + +#ifndef _UINFOEX_SvcHomepage_H_INCLUDED_ +#define _UINFOEX_SvcHomepage_H_INCLUDED_ + +void SvcHomepageRebuildMenu(); +void SvcHomepageLoadModule(); + +#endif /* _UINFOEX_SvcHomepage_H_INCLUDED_ */
\ No newline at end of file |