int FoldersChanged(WPARAM wParam, LPARAM lParam) { TCHAR path[MAX_PATH]; if ( FoldersGetCustomPathT(hPATH_MIROTR, path, _countof(path), _T(""))) SetFilenames( VARST(DATA_DIRECTORY)); else SetFilenames(path); ReadPrivkeyFiles(); return 0; }
const TCHAR* CMimAPI::getUserDir() { if (m_userDir[0] == 0) { if (ServiceExists(MS_FOLDERS_REGISTER_PATH)) lstrcpyn(m_userDir, L"%miranda_userdata%", SIZEOF(m_userDir)); else lstrcpyn(m_userDir, VARST(_T("%miranda_userdata%")), SIZEOF(m_userDir)); Utils::ensureTralingBackslash(m_userDir); } return m_userDir; }
int CToxProto::OnAccountRenamed(WPARAM, LPARAM) { mir_cslock locker(profileLock); ptrT newPath(GetToxProfilePath()); TCHAR oldPath[MAX_PATH]; mir_sntprintf(oldPath, MAX_PATH, _T("%s\\%s.tox"), VARST(_T("%miranda_userdata%")), accountName); _trename(oldPath, newPath); mir_free(accountName); accountName = mir_tstrdup(m_tszUserName); return 0; }
void LoadFilenames() { if (hPATH_MIROTR = FoldersRegisterCustomPathT("OTR", LPGEN("Private Data"), DATA_DIRECTORY)) { HookEvent(ME_FOLDERS_PATH_CHANGED, FoldersChanged); // get the path - above are only defaults - there may be a different value in the db FoldersChanged(0, 0); } else { SetFilenames( VARST(DATA_DIRECTORY)); ReadPrivkeyFiles(); } }
// returns 1 if the profile path was returned, without trailing slash int getProfilePath(TCHAR *buf, size_t cch) { TCHAR profiledir[MAX_PATH]; GetPrivateProfileString(_T("Database"), _T("ProfileDir"), _T(""), profiledir, SIZEOF(profiledir), mirandabootini); if (profiledir[0] == 0) _tcscpy(profiledir, _T("%miranda_path%\\Profiles")); size_t len = PathToAbsoluteT( VARST(profiledir), buf); if (buf[len-1] == '/' || buf[len-1] == '\\') buf[len-1] = 0; return 0; }
void CMLua::SetPaths() { TCHAR path[MAX_PATH]; FoldersGetCustomPathT(g_hScriptsFolder, path, _countof(path), VARST(MIRLUA_PATHT)); lua_getglobal(L, "package"); lua_pushfstring(L, "%s\\?.dll", ptrA(mir_utf8encodeT(path))); lua_setfield(L, -2, "cpath"); lua_pushfstring(L, "%s\\?.lua", ptrA(mir_utf8encodeT(path))); lua_setfield(L, -2, "path"); lua_pop(L, 1); }
void CYahooProto::GetAvatarFileName(MCONTACT hContact, TCHAR* pszDest, int cbLen, int type) { int tPathLen = mir_sntprintf(pszDest, cbLen, _T("%s\\%S"), VARST(_T("%miranda_avatarcache%")), m_szModuleName); if (_taccess(pszDest, 0)) CreateDirectoryTreeT(pszDest); if (hContact != NULL) { int ck_sum = getDword(hContact, "PictCK", 0); tPathLen += mir_sntprintf(pszDest + tPathLen, cbLen - tPathLen, _T("\\%lX"), ck_sum); } else tPathLen += mir_sntprintf(pszDest + tPathLen, cbLen - tPathLen, _T("\\%S avatar"), m_szModuleName); _tcsncpy_s((pszDest + tPathLen), (cbLen - tPathLen), (type == 1 ? _T(".swf") : _T(".png")), _TRUNCATE); }
WhatsAppProto::WhatsAppProto(const char *proto_name, const TCHAR *username) : PROTO<WhatsAppProto>(proto_name, username), m_tszDefaultGroup(getTStringA(WHATSAPP_KEY_DEF_GROUP)) { update_loop_lock_ = CreateEvent(NULL, false, false, NULL); db_set_resident(m_szModuleName, "StatusMsg"); CreateProtoService(PS_CREATEACCMGRUI, &WhatsAppProto::SvcCreateAccMgrUI); CreateProtoService(PS_GETAVATARINFO, &WhatsAppProto::GetAvatarInfo); CreateProtoService(PS_GETAVATARCAPS, &WhatsAppProto::GetAvatarCaps); CreateProtoService(PS_GETMYAVATAR, &WhatsAppProto::GetMyAvatar); CreateProtoService(PS_SETMYAVATAR, &WhatsAppProto::SetMyAvatar); HookProtoEvent(ME_DB_CONTACT_DELETED, &WhatsAppProto::OnDeleteChat); HookProtoEvent(ME_OPT_INITIALISE, &WhatsAppProto::OnOptionsInit); HookProtoEvent(ME_CLIST_PREBUILDSTATUSMENU, &WhatsAppProto::OnBuildStatusMenu); // Create standard network connection TCHAR descr[512]; mir_sntprintf(descr, TranslateT("%s server connection"), m_tszUserName); NETLIBUSER nlu = { sizeof(nlu) }; nlu.flags = NUF_INCOMING | NUF_OUTGOING | NUF_HTTPCONNS | NUF_TCHAR; nlu.szSettingsModule = m_szModuleName; nlu.ptszDescriptiveName = descr; m_hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu); if (m_hNetlibUser == NULL) { TCHAR error[200]; mir_sntprintf(error, TranslateT("Unable to initialize Netlib for %s."), m_tszUserName); MessageBox(NULL, error, _T("Miranda NG"), MB_OK | MB_ICONERROR); } WASocketConnection::initNetwork(m_hNetlibUser); m_tszAvatarFolder = std::tstring(VARST(_T("%miranda_avatarcache%"))) + _T("\\") + m_tszUserName; DWORD dwAttributes = GetFileAttributes(m_tszAvatarFolder.c_str()); if (dwAttributes == 0xffffffff || (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) CreateDirectoryTreeT(m_tszAvatarFolder.c_str()); if (m_tszDefaultGroup == NULL) m_tszDefaultGroup = mir_tstrdup(_T("WhatsApp")); Clist_CreateGroup(0, m_tszDefaultGroup); SetAllContactStatuses(ID_STATUS_OFFLINE, true); }
void LogSpamToFile(HANDLE hContact, tstring message) { if (!gbLogToFile) return; tstring LogStrW, LogTime, LogProtocol, LogContactId, LogContactName; tstring filename; std::fstream file; TCHAR pszName[MAX_PATH]; if (hStopSpamLogDirH) FoldersGetCustomPathT(hStopSpamLogDirH, pszName, MAX_PATH, _T("")); else lstrcpyn(pszName, VARST( _T("%miranda_logpath%")), SIZEOF(pszName)); filename = pszName; filename = filename + _T("\\stopspam_mod.log"); file.open(filename.c_str(),std::ios::out |std::ios::app); // Time Log line time_t time_now; tm *TimeNow; time(&time_now); TimeNow = localtime(&time_now); LogTime=_wasctime( TimeNow ); // Time Log line // Name, UID and Protocol Log line LogProtocol=DBGetContactSettingStringPAN(hContact,"Protocol","p",_T("")); LogContactName=(TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM) hContact, GCDNF_TCHAR); LogContactId=(LogProtocol==_T(""))?_T(""):GetContactUid(hContact,LogProtocol); // Name, UID and Protocol Log line LogStrW=_T("[")+LogTime.substr(0,LogTime.length()-1)+_T("] ")+ LogContactId+_T(" - ")+ LogContactName+_T(" (")+ LogProtocol+_T("): ")+ message+_T("\n"); char * buf=mir_u2a(LogStrW.c_str()); file.write(buf,LogStrW.length()); mir_free(buf); file.close(); }
void CIcqProto::GetAvatarFileName(int dwUin, const char *szUid, TCHAR *pszDest, int cbLen) { TCHAR szPath[MAX_PATH * 2]; mir_sntprintf(szPath, MAX_PATH * 2, _T("%s\\%S\\"), VARST(_T("%miranda_avatarcache%")), m_szModuleName); FOLDERSGETDATA fgd = {0}; fgd.cbSize = sizeof(FOLDERSGETDATA); fgd.nMaxPathSize = MAX_PATH * 2; fgd.szPathT = szPath; fgd.flags = FF_TCHAR; // fill the destination lstrcpyn(pszDest, szPath, cbLen - 1); int tPathLen = strlennull(pszDest); // make sure the avatar cache directory exists CreateDirectoryTreeT(szPath); if (dwUin != 0) { _ltot(dwUin, pszDest + tPathLen, 10); } else if (szUid) { TCHAR* p = mir_a2t(szUid); _tcscpy(pszDest + tPathLen, p); mir_free( p ); } else { TCHAR szBuf[MAX_PATH]; if (CallService(MS_DB_GETPROFILENAMET, MAX_PATH, (LPARAM)szBuf)) _tcscpy(pszDest + tPathLen, _T("avatar")); else { TCHAR *szLastDot = _tcsrchr(szBuf, '.'); if (szLastDot) szLastDot[0] = '\0'; _tcscpy(pszDest + tPathLen, szBuf); _tcscat(pszDest + tPathLen, _T("_avt")); } } }
// move profile from profile subdir static void moveProfileDirProfiles(TCHAR *profiledir, BOOL isRootDir = TRUE) { TCHAR pfd[MAX_PATH]; if (isRootDir) _tcsncpy(pfd, VARST( _T("%miranda_path%\\*.dat")), SIZEOF(pfd)); else mir_sntprintf(pfd, SIZEOF(pfd), _T("%s\\*.dat"), profiledir); WIN32_FIND_DATA ffd; HANDLE hFind = FindFirstFile(pfd, &ffd); if (hFind != INVALID_HANDLE_VALUE) { TCHAR *c = _tcsrchr(pfd, '\\'); if (c) *c = 0; do { TCHAR path[MAX_PATH], path2[MAX_PATH]; TCHAR* profile = mir_tstrdup(ffd.cFileName); TCHAR *c = _tcsrchr(profile, '.'); if (c) *c = 0; mir_sntprintf(path, SIZEOF(path), _T("%s\\%s"), pfd, ffd.cFileName); mir_sntprintf(path2, SIZEOF(path2), _T("%s\\%s"), profiledir, profile); CreateDirectoryTreeT(path2); mir_sntprintf(path2, SIZEOF(path2), _T("%s\\%s\\%s"), profiledir, profile, ffd.cFileName); if (_taccess(path2, 0) == 0) { TCHAR buf[512]; mir_sntprintf(buf, SIZEOF(buf), TranslateT("Miranda is trying to upgrade your profile structure.\nIt cannot move profile %s to the new location %s\nBecause profile with this name already exists. Please resolve the issue manually."), path, path2); MessageBox(NULL, buf, _T("Miranda NG"), MB_ICONERROR | MB_OK); } else if (MoveFile(path, path2) == 0) { TCHAR buf[512]; mir_sntprintf(buf, SIZEOF(buf), TranslateT("Miranda is trying to upgrade your profile structure.\nIt cannot move profile %s to the new location %s automatically\nMost likely due to insufficient privileges. Please move profile manually."), path, path2); MessageBox(NULL, buf, _T("Miranda NG"), MB_ICONERROR | MB_OK); break; } mir_free(profile); } while (FindNextFile(hFind, &ffd)); } FindClose(hFind); }
std::tstring CToxProto::GetAvatarFilePath(MCONTACT hContact) { TCHAR path[MAX_PATH]; mir_sntprintf(path, SIZEOF(path), _T("%s\\%S"), VARST(_T("%miranda_avatarcache%")), m_szModuleName); DWORD dwAttributes = GetFileAttributes(path); if (dwAttributes == 0xffffffff || (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) CallService(MS_UTILS_CREATEDIRTREET, 0, (LPARAM)path); ptrT id(getTStringA(hContact, TOX_SETTINGS_ID)); if (hContact != NULL) mir_sntprintf(path, MAX_PATH, _T("%s\\%s.png"), path, id); else if (id != NULL) mir_sntprintf(path, MAX_PATH, _T("%s\\%s avatar.png"), path, id); else return _T(""); return path; }
std::tstring CToxProto::GetAvatarFilePath(MCONTACT hContact) { TCHAR path[MAX_PATH]; mir_sntprintf(path, _countof(path), _T("%s\\%S"), VARST(_T("%miranda_avatarcache%")), m_szModuleName); DWORD dwAttributes = GetFileAttributes(path); if (dwAttributes == 0xffffffff || (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) CreateDirectoryTreeT(path); ptrT address(getTStringA(hContact, TOX_SETTINGS_ID)); if (address == NULL) return _T(""); if (hContact && mir_tstrlen(address) > TOX_PUBLIC_KEY_SIZE * 2) address[TOX_PUBLIC_KEY_SIZE * 2] = 0; mir_sntprintf(path, MAX_PATH, _T("%s\\%s.png"), path, address); return path; }
int CExchangeServer::Connect(int bForceConnect) { int maxRetries = db_get_b(NULL, ModuleName, "MaxRetries", MAX_EXCHANGE_CONNECT_RETRIES); if (bForceConnect) { bTryConnect = 1; cConnections = 0; } if (cConnections >= maxRetries) { bTryConnect = 0; cConnections = 0; _popupUtil("Maximum number of retries reached.\nPlugin will stop trying to connect automatically."); } if (bTryConnect) cConnections++; if ((bTryConnect) && !IsServerAvailable()) { bTryConnect = 0; _popupUtil("Server not available"); } if ( !IsConnected() && bTryConnect) { TCHAR user[1024]; //lovely TCHAR password[1024]; //i know TCHAR server[1024]; GetStringFromDatabase("Username", _T(""), user, _countof(user)); if (ServiceExists(MS_UTILS_REPLACEVARS)) _tcsncpy_s(user, VARST(user), _TRUNCATE); GetStringFromDatabase("Password", _T(""), password, _countof(password)); GetStringFromDatabase("Server", _T(""), server, _countof(server)); int port = db_get_dw(NULL, ModuleName, "Port", EXCHANGE_PORT); if (_tcslen(server) > 0) //only connect if there's a server to connect to return DoConnect(user, password, server, port); _popupUtil("Server is not configured..."); } return -1; //0 on success, != 0 otherwise }
void CVkProto::GetAvatarFileName(MCONTACT hContact, TCHAR* pszDest, size_t cbLen) { int tPathLen = mir_sntprintf(pszDest, cbLen, _T("%s\\%S"), VARST(_T("%miranda_avatarcache%")), m_szModuleName); DWORD dwAttributes = GetFileAttributes(pszDest); if (dwAttributes == 0xffffffff || (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) CreateDirectoryTreeT(pszDest); pszDest[ tPathLen++ ] = '\\'; const TCHAR* szFileType = _T(".jpg"); ptrT szUrl( getTStringA(hContact, "AvatarUrl")); if (szUrl) { TCHAR *p = _tcsrchr(szUrl, '.'); if (p != NULL) szFileType = p; } LONG id = getDword(hContact, "ID", -1); mir_sntprintf(pszDest + tPathLen, MAX_PATH - tPathLen, _T("%d%s"), id, szFileType); }
void CLuaOptions::OnInitDialog() { CDlgBase::OnInitDialog(); m_scripts.SetExtendedListViewStyle(LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_INFOTIP); HIMAGELIST hImageList = m_scripts.CreateImageList(LVSIL_SMALL); ImageList_AddIcon(hImageList, GetIcon(IDI_OPEN)); TCHAR scriptDir[MAX_PATH], relativeScriptDir[MAX_PATH], header[MAX_PATH + 100]; FoldersGetCustomPathT(g_hScriptsFolder, scriptDir, _countof(scriptDir), VARST(MIRLUA_PATHT)); PathToRelativeT(scriptDir, relativeScriptDir, NULL); mir_sntprintf(header, _T("%s (%s)"), TranslateT("Common scripts"), relativeScriptDir); m_scripts.AddColumn(0, _T("Script"), 420); m_scripts.AddColumn(1, NULL, 32 - GetSystemMetrics(SM_CXVSCROLL)); LoadScripts(); isScriptListInit = true; }
int ModulesLoaded(WPARAM, LPARAM) { if (hPluginUpdaterFolder = FoldersRegisterCustomPathT(MODULEA, LPGEN("Plugin Updater"), MIRANDA_PATHT _T("\\")DEFAULT_UPDATES_FOLDER)) { HookEvent(ME_FOLDERS_PATH_CHANGED, OnFoldersChanged); OnFoldersChanged(0, 0); } else lstrcpyn(tszRoot, VARST( _T("%miranda_path%\\"DEFAULT_UPDATES_FOLDER)), _countof(tszRoot)); int iRestartCount = db_get_b(NULL, MODNAME, DB_SETTING_RESTART_COUNT, 2); if (iRestartCount > 0) db_set_b(NULL, MODNAME, DB_SETTING_RESTART_COUNT, iRestartCount - 1); else EmptyFolder(); // silently CheckUpdateOnStartup(); CreateTimer(); return 0; }
CSkypeProto::CSkypeProto(const char* protoName, const TCHAR* userName) : PROTO<CSkypeProto>(protoName, userName), m_PopupClasses(1), m_InviteDialogs(1), m_GCCreateDialogs(1), m_OutMessages(3, PtrKeySortT) { m_hProtoIcon = Icons[0].Handle; InitNetwork(); requestQueue = new RequestQueue(m_hNetlibUser); CreateProtoService(PS_CREATEACCMGRUI, &CSkypeProto::OnAccountManagerInit); CreateProtoService(PS_GETAVATARINFO, &CSkypeProto::SvcGetAvatarInfo); CreateProtoService(PS_GETAVATARCAPS, &CSkypeProto::SvcGetAvatarCaps); CreateProtoService(PS_GETMYAVATAR, &CSkypeProto::SvcGetMyAvatar); CreateProtoService(PS_SETMYAVATAR, &CSkypeProto::SvcSetMyAvatar); CreateProtoService("/IncomingCallCLE", &CSkypeProto::OnIncomingCallCLE); CreateProtoService("/IncomingCallPP", &CSkypeProto::OnIncomingCallPP); m_tszAvatarFolder = std::tstring(VARST(_T("%miranda_avatarcache%"))) + _T("\\") + m_tszUserName; DWORD dwAttributes = GetFileAttributes(m_tszAvatarFolder.c_str()); if (dwAttributes == 0xffffffff || (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) CreateDirectoryTreeT(m_tszAvatarFolder.c_str()); //sounds SkinAddNewSoundEx("skype_inc_call", "SkypeWeb", LPGEN("Incoming call sound")); SkinAddNewSoundEx("skype_call_canceled", "SkypeWeb", LPGEN("Incoming call canceled sound")); m_hTrouterEvent = CreateEvent(NULL, FALSE, FALSE, NULL); m_hPollingEvent = CreateEvent(NULL, FALSE, FALSE, NULL); m_hTrouterHealthEvent = CreateEvent(NULL, FALSE, FALSE, NULL); SkypeSetTimer(); m_hPollingThread = ForkThreadEx(&CSkypeProto::PollingThread, NULL, NULL); m_hTrouterThread = ForkThreadEx(&CSkypeProto::TRouterThread, NULL, NULL); }
WhatsAppProto::WhatsAppProto(const char* proto_name, const TCHAR* username) : PROTO<WhatsAppProto>(proto_name, username) { this->challenge = new std::vector<unsigned char>; this->msgId = 0; this->msgIdHeader = time(NULL); update_loop_lock_ = CreateEvent(NULL, false, false, NULL); FMessage::generating_lock = new Mutex(); CreateProtoService(PS_CREATEACCMGRUI, &WhatsAppProto::SvcCreateAccMgrUI); CreateProtoService(PS_JOINCHAT, &WhatsAppProto::OnJoinChat); CreateProtoService(PS_LEAVECHAT, &WhatsAppProto::OnLeaveChat); HookProtoEvent(ME_OPT_INITIALISE, &WhatsAppProto::OnOptionsInit); HookProtoEvent(ME_SYSTEM_MODULESLOADED, &WhatsAppProto::OnModulesLoaded); HookProtoEvent(ME_CLIST_PREBUILDSTATUSMENU, &WhatsAppProto::OnBuildStatusMenu); this->InitContactMenus(); // Create standard network connection TCHAR descr[512]; NETLIBUSER nlu = {sizeof(nlu)}; nlu.flags = NUF_INCOMING | NUF_OUTGOING | NUF_HTTPCONNS | NUF_TCHAR; char module[512]; mir_snprintf(module, SIZEOF(module), "%s", m_szModuleName); nlu.szSettingsModule = module; mir_sntprintf(descr, SIZEOF(descr), TranslateT("%s server connection"), m_tszUserName); nlu.ptszDescriptiveName = descr; m_hNetlibUser = (HANDLE) CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM) &nlu); if (m_hNetlibUser == NULL) MessageBox(NULL, TranslateT("Unable to get Netlib connection for WhatsApp"), m_tszUserName, MB_OK); WASocketConnection::initNetwork(m_hNetlibUser); def_avatar_folder_ = std::tstring( VARST( _T("%miranda_avatarcache%"))) + _T("\\") + m_tszUserName; SetAllContactStatuses(ID_STATUS_OFFLINE, true); }
int OnModulesLoaded(WPARAM, LPARAM) { if (hBASSFolder = FoldersRegisterCustomPathT(LPGEN("Bass Interface"), LPGEN("Bass library"), PLUGINS_PATHT _T("\\Bass"))) { FoldersGetCustomPathT(hBASSFolder, CurrBassPath, MAX_PATH, _T("")); mir_tstrcat(CurrBassPath, _T("\\bass.dll")); } else { DBVARIANT dbv; if (db_get_ts(NULL, ModuleName, OPT_BASSPATH, &dbv)) { mir_tstrncpy(CurrBassPath, VARST(_T("Plugins\\Bass\\bass.dll")), _countof(CurrBassPath)); db_set_ts(NULL, ModuleName, OPT_BASSPATH, CurrBassPath); } else { mir_tstrcpy(CurrBassPath, dbv.ptszVal); db_free(&dbv); } } LoadBassLibrary(CurrBassPath); HookEvent(ME_OPT_INITIALISE, OptionsInit); HookEvent(ME_FOLDERS_PATH_CHANGED, OnFoldersChanged); return 0; }
int NewsAggrInit(WPARAM, LPARAM) { if (hNewsAggregatorFolder = FoldersRegisterCustomPathT(LPGEN("Avatars"), LPGEN("News Aggregator"), MIRANDA_USERDATAT _T("\\Avatars\\")_T(DEFAULT_AVATARS_FOLDER))) FoldersGetCustomPathT(hNewsAggregatorFolder, tszRoot, MAX_PATH, _T("")); else mir_tstrncpy(tszRoot, VARST( _T("%miranda_userdata%\\Avatars\\" _T(DEFAULT_AVATARS_FOLDER))), _countof(tszRoot)); for (MCONTACT hContact = db_find_first(MODULE); hContact; hContact = db_find_next(hContact, MODULE)) { if (!db_get_b(NULL, MODULE, "StartupRetrieve", 1)) db_set_dw(hContact, MODULE, "LastCheck", time(NULL)); SetContactStatus(hContact, ID_STATUS_ONLINE); } NetlibInit(); InitMenu(); HookEvent(ME_TTB_MODULELOADED, OnToolbarLoaded); HookEvent(ME_FOLDERS_PATH_CHANGED, OnFoldersChanged); // timer for the first update timerId = SetTimer(NULL, 0, 10000, timerProc2); // first update is 10 sec after load return 0; }
DWORD CMraProto::MraAvatarsGetFileName(HANDLE hAvatarsQueueHandle, MCONTACT hContact, DWORD dwFormat, CMStringW &res) { res.Empty(); if (hAvatarsQueueHandle == NULL) return ERROR_INVALID_HANDLE; if (IsContactChatAgent(hContact)) return ERROR_NOT_SUPPORTED; MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = (MRA_AVATARS_QUEUE*)hAvatarsQueueHandle; TCHAR tszBase[MAX_PATH]; mir_sntprintf(tszBase, SIZEOF(tszBase), _T("%s\\%s\\"), VARST(_T("%miranda_avatarcache%")), m_tszUserName); res = tszBase; // some path in buff and free space for file name is avaible CreateDirectoryTreeT(res); if (dwFormat != PA_FORMAT_DEFAULT) { CMStringW szEmail; if (mraGetStringW(hContact, "e-mail", szEmail)) { szEmail.MakeLower(); res += szEmail + ProtoGetAvatarExtension(dwFormat); return NO_ERROR; } } else { CMStringW szDefName; if (!DB_GetStringW(NULL, MRA_AVT_SECT_NAME, "DefaultAvatarFileName", szDefName)) { res += MRA_AVT_DEFAULT_AVT_FILENAME; return NO_ERROR; } } return ERROR_INSUFFICIENT_BUFFER; }
void MyPathToAbsolute(const TCHAR *ptszPath, TCHAR *ptszDest) { PathToAbsoluteT(VARST(ptszPath), ptszDest, g_szDataPath); }
std::tstring TwitterProto::GetAvatarFolder() { TCHAR path[MAX_PATH]; mir_sntprintf(path, _T("%s\\%s"), VARST(_T("%miranda_avatarcache%")), m_tszUserName); return path; }
void CToxOptionsNodeList::OnInitDialog() { m_nodes.SetExtendedListViewStyle(LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT | LVS_EX_LABELTIP); HIMAGELIST hImageList = m_nodes.CreateImageList(LVSIL_SMALL); HICON icon = Skin_LoadIcon(SKINICON_OTHER_TYPING); ImageList_AddIcon(hImageList, icon); IcoLib_ReleaseIcon(icon); icon = Skin_LoadIcon(SKINICON_OTHER_DELETE); ImageList_AddIcon(hImageList, icon); IcoLib_ReleaseIcon(icon); m_nodes.AddColumn(0, _T("IPv4"), 100); m_nodes.AddColumn(1, _T("IPv6"), 100); m_nodes.AddColumn(2, TranslateT("Port"), 50); m_nodes.AddColumn(3, TranslateT("Public key"), 130); m_nodes.AddColumn(4, _T(""), 32 - GetSystemMetrics(SM_CXVSCROLL)); m_nodes.AddColumn(5, _T(""), 32 - GetSystemMetrics(SM_CXVSCROLL)); m_nodes.EnableGroupView(TRUE); m_nodes.AddGroup(0, TranslateT("Common nodes")); m_nodes.AddGroup(1, TranslateT("User nodes")); //////////////////////////////////////// int iItem = -1; if (CToxProto::IsFileExists((TCHAR*)VARST(_T(TOX_INI_PATH)))) { char fileName[MAX_PATH]; mir_strcpy(fileName, VARS(TOX_INI_PATH)); char *section, sections[MAX_PATH], value[MAX_PATH]; GetPrivateProfileSectionNamesA(sections, _countof(sections), fileName); section = sections; while (*section != NULL) { if (strstr(section, TOX_SETTINGS_NODE_PREFIX) == section) { GetPrivateProfileStringA(section, "IPv4", NULL, value, _countof(value), fileName); iItem = m_nodes.AddItem(mir_a2t(value), -1, NULL, 0); GetPrivateProfileStringA(section, "IPv6", NULL, value, _countof(value), fileName); m_nodes.SetItem(iItem, 1, mir_a2t(value)); GetPrivateProfileStringA(section, "Port", NULL, value, _countof(value), fileName); m_nodes.SetItem(iItem, 2, mir_a2t(value)); GetPrivateProfileStringA(section, "PubKey", NULL, value, _countof(value), fileName); m_nodes.SetItem(iItem, 3, mir_a2t(value)); } section += mir_strlen(section) + 1; } } char module[MAX_PATH], setting[MAX_PATH]; mir_snprintf(module, "%s_Nodes", m_proto->m_szModuleName); int nodeCount = db_get_w(NULL, module, TOX_SETTINGS_NODE_COUNT, 0); for (int i = 0; i < nodeCount; i++) { mir_snprintf(setting, TOX_SETTINGS_NODE_IPV4, i); ptrT value(db_get_tsa(NULL, module, setting)); iItem = m_nodes.AddItem(value, -1, NULL, 1); mir_snprintf(setting, TOX_SETTINGS_NODE_IPV6, i); value = db_get_tsa(NULL, module, setting); m_nodes.SetItem(iItem, 1, value); mir_snprintf(setting, TOX_SETTINGS_NODE_PORT, i); int port = db_get_w(NULL, module, setting, 0); if (port > 0) { char portNum[10]; itoa(port, portNum, 10); m_nodes.SetItem(iItem, 2, mir_a2t(portNum)); } mir_snprintf(setting, TOX_SETTINGS_NODE_PKEY, i); value = db_get_tsa(NULL, module, setting); m_nodes.SetItem(iItem, 3, value); m_nodes.SetItem(iItem, 4, _T(""), 0); m_nodes.SetItem(iItem, 5, _T(""), 1); } }
static void DoAutoExec(void) { TCHAR szUse[7], szIniPath[MAX_PATH], szFindPath[MAX_PATH]; TCHAR buf[2048], szSecurity[11], szOverrideSecurityFilename[MAX_PATH], szOnCreateFilename[MAX_PATH]; GetPrivateProfileString(_T("AutoExec"), _T("Use"), _T("prompt"), szUse, _countof(szUse), mirandabootini); if (!mir_tstrcmpi(szUse, _T("no"))) return; GetPrivateProfileString(_T("AutoExec"), _T("Safe"), _T("CLC Icons CLUI CList SkinSounds"), buf, _countof(buf), mirandabootini); ptrA szSafeSections(mir_t2a(buf)); GetPrivateProfileString(_T("AutoExec"), _T("Unsafe"), _T("AIM Facebook GG ICQ IRC JABBER MRA MSN SKYPE Tlen TWITTER VKontakte XFire"), buf, _countof(buf), mirandabootini); ptrA szUnsafeSections(mir_t2a(buf)); GetPrivateProfileString(_T("AutoExec"), _T("Warn"), _T("notsafe"), szSecurity, _countof(szSecurity), mirandabootini); int secur = 0; if (!mir_tstrcmpi(szSecurity, _T("none"))) secur = 0; else if (!mir_tstrcmpi(szSecurity, _T("notsafe"))) secur = 1; else if (!mir_tstrcmpi(szSecurity, _T("onlyunsafe"))) secur = 2; GetPrivateProfileString(_T("AutoExec"), _T("OverrideSecurityFilename"), _T(""), szOverrideSecurityFilename, _countof(szOverrideSecurityFilename), mirandabootini); GetPrivateProfileString(_T("AutoExec"), _T("OnCreateFilename"), _T(""), szOnCreateFilename, _countof(szOnCreateFilename), mirandabootini); GetPrivateProfileString(_T("AutoExec"), _T("Glob"), _T("autoexec_*.ini"), szFindPath, _countof(szFindPath), mirandabootini); if (g_bDbCreated && szOnCreateFilename[0]) { PathToAbsoluteT(VARST(szOnCreateFilename), szIniPath); ProcessIniFile(szIniPath, szSafeSections, szUnsafeSections, 0, 1); } PathToAbsoluteT(VARST(szFindPath), szFindPath); WIN32_FIND_DATA fd; HANDLE hFind = FindFirstFile(szFindPath, &fd); if (hFind == INVALID_HANDLE_VALUE) return; TCHAR *str2 = _tcsrchr(szFindPath, '\\'); if (str2 == NULL) szFindPath[0] = 0; else str2[1] = 0; do { bool secFN = mir_tstrcmpi(fd.cFileName, szOverrideSecurityFilename) == 0; mir_sntprintf(szIniPath, _T("%s%s"), szFindPath, fd.cFileName); if (!mir_tstrcmpi(szUse, _T("prompt")) && !secFN) { int result = DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_INSTALLINI), NULL, InstallIniDlgProc, (LPARAM)szIniPath); if (result == IDC_NOTOALL) break; if (result == IDCANCEL) continue; } ProcessIniFile(szIniPath, szSafeSections, szUnsafeSections, secur, secFN); if (secFN) DeleteFile(szIniPath); else { TCHAR szOnCompletion[8]; GetPrivateProfileString(_T("AutoExec"), _T("OnCompletion"), _T("recycle"), szOnCompletion, _countof(szOnCompletion), mirandabootini); if (!mir_tstrcmpi(szOnCompletion, _T("delete"))) DeleteFile(szIniPath); else if (!mir_tstrcmpi(szOnCompletion, _T("recycle"))) { SHFILEOPSTRUCT shfo = { 0 }; shfo.wFunc = FO_DELETE; shfo.pFrom = szIniPath; szIniPath[mir_tstrlen(szIniPath) + 1] = 0; shfo.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT | FOF_ALLOWUNDO; SHFileOperation(&shfo); } else if (!mir_tstrcmpi(szOnCompletion, _T("rename"))) { TCHAR szRenamePrefix[MAX_PATH], szNewPath[MAX_PATH]; GetPrivateProfileString(_T("AutoExec"), _T("RenamePrefix"), _T("done_"), szRenamePrefix, _countof(szRenamePrefix), mirandabootini); mir_tstrcpy(szNewPath, szFindPath); mir_tstrcat(szNewPath, szRenamePrefix); mir_tstrcat(szNewPath, fd.cFileName); MoveFile(szIniPath, szNewPath); } else if (!mir_tstrcmpi(szOnCompletion, _T("ask"))) DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_INIIMPORTDONE), NULL, IniImportDoneDlgProc, (LPARAM)szIniPath); } } while (FindNextFile(hFind, &fd)); FindClose(hFind); }
int CreateAvatarInCache(MCONTACT hContact, avatarCacheEntry *ace, char *szProto) { ptrT tszValue; TCHAR tszFilename[MAX_PATH]; tszFilename[0] = 0; ace->hbmPic = 0; ace->dwFlags = 0; ace->bmHeight = 0; ace->bmWidth = 0; ace->lpDIBSection = NULL; ace->szFilename[0] = 0; if (szProto == NULL) { char *proto = GetContactProto(hContact); if (proto == NULL || !db_get_b(NULL, AVS_MODULE, proto, 1)) return -1; if (db_get_b(hContact, "ContactPhoto", "Locked", 0) && (tszValue = db_get_tsa(hContact, "ContactPhoto", "Backup"))) MyPathToAbsolute(tszValue, tszFilename); else if (tszValue = db_get_tsa(hContact, "ContactPhoto", "RFile")) MyPathToAbsolute(tszValue, tszFilename); else if (tszValue = db_get_tsa(hContact, "ContactPhoto", "File")) MyPathToAbsolute(tszValue, tszFilename); else return -2; } else { if (hContact == 0) { // create a protocol picture in the proto picture cache if (tszValue = db_get_tsa(NULL, PPICT_MODULE, szProto)) MyPathToAbsolute(tszValue, tszFilename); else if (mir_strcmp(szProto, AVS_DEFAULT)) { if (tszValue = db_get_tsa(NULL, PPICT_MODULE, AVS_DEFAULT)) MyPathToAbsolute(tszValue, tszFilename); if (!strstr(szProto, "Global avatar for")) { PROTOACCOUNT* pdescr = (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)szProto); if (pdescr == NULL) return -1; char key[MAX_PATH]; mir_snprintf(key, SIZEOF(key), "Global avatar for %s accounts", pdescr->szProtoName); if (tszValue = db_get_tsa(NULL, PPICT_MODULE, key)) MyPathToAbsolute(tszValue, tszFilename); } } } else if (hContact == INVALID_CONTACT_ID) { // create own picture - note, own avatars are not on demand, they are loaded once at // startup and everytime they are changed. if (szProto[0] == '\0') { // Global avatar if (tszValue = db_get_tsa(NULL, AVS_MODULE, "GlobalUserAvatarFile")) MyPathToAbsolute(tszValue, tszFilename); else return -10; } else if (ProtoServiceExists(szProto, PS_GETMYAVATART)) { if (CallProtoService(szProto, PS_GETMYAVATART, (WPARAM)tszFilename, (LPARAM)MAX_PATH)) tszFilename[0] = '\0'; } else if (ProtoServiceExists(szProto, PS_GETMYAVATAR)) { char szFileName[MAX_PATH]; if (CallProtoService(szProto, PS_GETMYAVATAR, (WPARAM)szFileName, (LPARAM)MAX_PATH)) tszFilename[0] = '\0'; else MultiByteToWideChar(CP_ACP, 0, szFileName, -1, tszFilename, SIZEOF(tszFilename)); } else if (tszValue = db_get_tsa(NULL, szProto, "AvatarFile")) MyPathToAbsolute(tszValue, tszFilename); else return -1; } } if (mir_tstrlen(tszFilename) < 4) return -1; _tcsncpy_s(tszFilename, VARST(tszFilename), _TRUNCATE); if (_taccess(tszFilename, 4) == -1) return -2; BOOL isTransparentImage = 0; ace->hbmPic = BmpFilterLoadBitmap(&isTransparentImage, tszFilename); ace->dwFlags = 0; ace->bmHeight = 0; ace->bmWidth = 0; ace->lpDIBSection = NULL; _tcsncpy(ace->szFilename, tszFilename, MAX_PATH); ace->szFilename[MAX_PATH - 1] = 0; if (ace->hbmPic == 0) return -1; BITMAP bminfo; GetObject(ace->hbmPic, sizeof(bminfo), &bminfo); ace->cbSize = sizeof(avatarCacheEntry); ace->dwFlags = AVS_BITMAP_VALID; if (hContact != NULL && db_get_b(hContact, "ContactPhoto", "Hidden", 0)) ace->dwFlags |= AVS_HIDEONCLIST; ace->hContact = hContact; ace->bmHeight = bminfo.bmHeight; ace->bmWidth = bminfo.bmWidth; BOOL noTransparency = db_get_b(0, AVS_MODULE, "RemoveAllTransparency", 0); // Calc image hash if (hContact != 0 && hContact != INVALID_CONTACT_ID) { // Have to reset settings? -> do it if image changed DWORD imgHash = GetImgHash(ace->hbmPic); if (imgHash != db_get_dw(hContact, "ContactPhoto", "ImageHash", 0)) { db_unset(hContact, "ContactPhoto", "MakeTransparentBkg"); db_unset(hContact, "ContactPhoto", "TranspBkgNumPoints"); db_unset(hContact, "ContactPhoto", "TranspBkgColorDiff"); db_set_dw(hContact, "ContactPhoto", "ImageHash", imgHash); } // Make transparent? if (!noTransparency && !isTransparentImage && db_get_b(hContact, "ContactPhoto", "MakeTransparentBkg", db_get_b(0, AVS_MODULE, "MakeTransparentBkg", 0))) { if (MakeTransparentBkg(hContact, &ace->hbmPic)) { ace->dwFlags |= AVS_CUSTOMTRANSPBKG | AVS_HASTRANSPARENCY; GetObject(ace->hbmPic, sizeof(bminfo), &bminfo); isTransparentImage = TRUE; } } } else if (hContact == INVALID_CONTACT_ID) { // My avatars if (!noTransparency && !isTransparentImage && db_get_b(0, AVS_MODULE, "MakeTransparentBkg", 0) && db_get_b(0, AVS_MODULE, "MakeMyAvatarsTransparent", 0)) { if (MakeTransparentBkg(0, &ace->hbmPic)) { ace->dwFlags |= AVS_CUSTOMTRANSPBKG | AVS_HASTRANSPARENCY; GetObject(ace->hbmPic, sizeof(bminfo), &bminfo); isTransparentImage = TRUE; } } } if (db_get_b(0, AVS_MODULE, "MakeGrayscale", 0)) ace->hbmPic = MakeGrayscale(ace->hbmPic); if (noTransparency) { fei->FI_CorrectBitmap32Alpha(ace->hbmPic, TRUE); isTransparentImage = FALSE; } if (bminfo.bmBitsPixel == 32 && isTransparentImage) { if (fei->FI_Premultiply(ace->hbmPic)) ace->dwFlags |= AVS_HASTRANSPARENCY; ace->dwFlags |= AVS_PREMULTIPLIED; } if (szProto) { protoPicCacheEntry *pAce = (protoPicCacheEntry *)ace; if (hContact == 0) pAce->dwFlags |= AVS_PROTOPIC; else if (hContact == INVALID_CONTACT_ID) pAce->dwFlags |= AVS_OWNAVATAR; } return 1; }
void CToxProto::SearchByNameAsync(void *arg) { char *query = (char*)arg; char *name = strtok(query, "@"); char *domain = strtok(NULL, ""); int resolved = 0; if (IsFileExists((TCHAR*)VARST(_T(TOX_INI_PATH)))) { char fileName[MAX_PATH]; mir_strcpy(fileName, VARS(TOX_INI_PATH)); char *section, sections[MAX_PATH], value[TOX_PUBLIC_KEY_SIZE * 2]; GetPrivateProfileSectionNamesA(sections, _countof(sections), fileName); section = sections; while (*section != NULL) { if (strstr(section, "Dns_") == section) { GetPrivateProfileStringA(section, "Domain", NULL, value, _countof(value), fileName); ptrA dnsDomain(mir_strdup(value)); GetPrivateProfileStringA(section, "PubKey", NULL, value, _countof(value), fileName); ToxBinAddress dnsPubKey = value; if (domain == NULL || mir_strcmpi(domain, dnsDomain) == 0) { void *dns = tox_dns3_new((uint8_t*)(const uint8_t*)dnsPubKey); uint32_t requestId = 0; uint8_t dnsString[MAX_PATH]; size_t length = tox_generate_dns3_string(dns, dnsString, sizeof(dnsString), &requestId, (uint8_t*)CharLowerA(name), (uint8_t)mir_strlen(name)); if (length != TOX_ERROR) { dnsString[length] = 0; char dnsQuery[MAX_PATH * 2]; mir_snprintf(dnsQuery, "_%s._tox.%s", dnsString, dnsDomain); ToxHexAddress address = ResolveToxAddressFromDns(dnsQuery); if (!address.IsEmpty()) { PROTOSEARCHRESULT psr = { sizeof(PROTOSEARCHRESULT) }; psr.flags = PSR_UTF8; psr.id.a = mir_strdup(address); psr.nick.a = mir_strdup(name); char email[MAX_PATH]; mir_snprintf(email, "%s@%s", name, domain); psr.email.a = mir_strdup(email); ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE)1, (LPARAM)&psr); break; } } tox_dns3_kill(dns); } } section += mir_strlen(section) + 1; } } if (resolved == 0 && domain) { char dnsQuery[MAX_PATH]; mir_snprintf(dnsQuery, "%s._tox.%s", name, domain); ToxHexAddress address = ResolveToxAddressFromDns(dnsQuery); if (!address.IsEmpty()) { PROTOSEARCHRESULT psr = { sizeof(PROTOSEARCHRESULT) }; psr.flags = PSR_UTF8; psr.id.a = mir_strdup(address); psr.nick.a = mir_strdup(name); char email[MAX_PATH]; mir_snprintf(email, "%s@%s", name, domain); psr.email.a = mir_strdup(email); ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE)1, (LPARAM)&psr); } } ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0); mir_free(arg); }
TCHAR* CToxProto::GetToxProfilePath(const TCHAR *accountName) { TCHAR *profilePath = (TCHAR*)mir_calloc(MAX_PATH * sizeof(TCHAR) + 1); TCHAR profileRootPath[MAX_PATH]; FoldersGetCustomPathT(hProfileFolderPath, profileRootPath, _countof(profileRootPath), VARST(_T("%miranda_userdata%"))); mir_sntprintf(profilePath, MAX_PATH, _T("%s\\%s.tox"), profileRootPath, accountName); return profilePath; }
static void __cdecl loadFlash_Thread(void *p) { debug("Avatar thread executed...\n"); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_IDLE); flash_avatar_item* fai = (flash_avatar_item*)p; IShockwaveFlash* flash = fai->pFlash; if ( _tcschr(fai->hFA.cUrl, '?') == NULL) { // make hash of url debug("Making TTH hash from URL...\n"); TigerHash th; th.update(fai->hFA.cUrl, _tcslen(fai->hFA.cUrl)); th.finalize(); // create local path name TCHAR name[MAX_PATH], path[MAX_PATH]; TCHAR tth[((TigerHash::HASH_SIZE * 8) / 5) + 2]; FOLDERSGETDATA fgd = {0}; fgd.cbSize = sizeof(FOLDERSGETDATA); fgd.nMaxPathSize = MAX_PATH; fgd.szPathT = path; fgd.flags = FF_TCHAR; if (!hAvatarsFolder || CallService(MS_FOLDERS_GET_PATH, (WPARAM)hAvatarsFolder, (LPARAM)&fgd)) { if(ServiceExists(MS_UTILS_REPLACEVARS)) mir_sntprintf(path, MAX_PATH, _T("%s\\%s"), VARST(_T("%miranda_avatarcache%")), _T("Flash")); else PathToAbsoluteT( _T("Flash"), path); } else { if(_tcslen(path) && path[_tcslen(path)-1]=='\\') path[_tcslen(path)-1] = 0; } CreateDirectory(path, NULL); // create directory if it doesn't exist mir_sntprintf(name, MAX_PATH, _T("%s\\%s.swf"), path, th.toBase32(tth)); // download remote file if it doesn't exist if (GetFileAttributes(name) == 0xFFFFFFFF) { debug("Downloading flash file...\n"); DownloadFlashFile( _T2A(fai->hFA.cUrl), name, 0); } // load and play local flash movie debug("Loading flash movie...\n"); flash->LoadMovie(0, _bstr_t(name).copy()); } Sleep(100); flash->Play(); // change flash frame according user's status int status; if (fai->hFA.hContact) status = db_get_w(fai->hFA.hContact, fai->getProto(), "Status", ID_STATUS_OFFLINE); else status = CallProtoService(fai->getProto(), PS_GETSTATUS, 0, 0); getFace(); flash->SetVariable(L"face.emotion", _bstr_t(face).copy()); flash->Release(); }