blob: 49bbd7bda5aa03b266b53330d8122f115d077c04 [file] [log] [blame]
Edric Milaret4bba46d2015-04-29 16:33:38 -04001/***************************************************************************
Edric Milaretbab169d2016-01-07 15:13:33 -05002 * Copyright (C) 2015-2016 by Savoir-faire Linux *
Edric Milaret4bba46d2015-04-29 16:33:38 -04003 * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 3 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
17 **************************************************************************/
18
19#include "utils.h"
20
Edric Milaret36587362016-02-04 12:30:52 -050021#ifdef Q_OS_WIN
Edric Milaret3ba22ca2016-03-01 13:28:01 -050022#include <windows.h>
Edric Milaretb37aa1f2015-07-09 16:39:04 -040023#include <lmcons.h>
24#include <shobjidl.h>
25#include <shlguid.h>
26#include <shlobj.h>
27#include <shlwapi.h>
28#endif
29
Edric Milaret3ba22ca2016-03-01 13:28:01 -050030
31//Qt
32#include <QObject>
33#include <QErrorMessage>
34
Edric Milaret4bba46d2015-04-29 16:33:38 -040035bool
Edric Milaret1eca0292015-06-29 12:03:36 -040036Utils::CreateStartupLink()
37{
Edric Milaret36587362016-02-04 12:30:52 -050038#ifdef Q_OS_WIN
Edric Milaret465a3142015-06-02 15:02:52 -040039 TCHAR szPath[MAX_PATH];
40 GetModuleFileName(NULL, szPath, MAX_PATH);
Edric Milaret4bba46d2015-04-29 16:33:38 -040041
Edric Milaret465a3142015-06-02 15:02:52 -040042 std::wstring programPath(szPath);
Edric Milaret4bba46d2015-04-29 16:33:38 -040043
Edric Milaret465a3142015-06-02 15:02:52 -040044 TCHAR startupPath[MAX_PATH];
45 SHGetFolderPathW(NULL, CSIDL_STARTUP, NULL, 0, startupPath);
46
47 std::wstring linkPath(startupPath);
48 linkPath += TEXT("\\Ring.lnk");
Edric Milaret4bba46d2015-04-29 16:33:38 -040049
50 return Utils::CreateLink(programPath.c_str(), linkPath.c_str());
Edric Milaretb37aa1f2015-07-09 16:39:04 -040051#else
52 return true;
53#endif
Edric Milaret4bba46d2015-04-29 16:33:38 -040054}
55
56bool
57Utils::CreateLink(LPCWSTR lpszPathObj, LPCWSTR lpszPathLink) {
Edric Milaret36587362016-02-04 12:30:52 -050058#ifdef Q_OS_WIN
Edric Milaret4bba46d2015-04-29 16:33:38 -040059 HRESULT hres;
60 IShellLink* psl;
61
62 hres = CoCreateInstance(CLSID_ShellLink, NULL,
63 CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
64 if (SUCCEEDED(hres))
65 {
66 IPersistFile* ppf;
67 psl->SetPath(lpszPathObj);
Edric Milaret90bd5a82015-06-08 10:07:59 -040068 psl->SetArguments(TEXT("--minimized"));
Edric Milaret4bba46d2015-04-29 16:33:38 -040069
70 hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
71 if (SUCCEEDED(hres))
72 {
73 hres = ppf->Save(lpszPathLink, TRUE);
74 ppf->Release();
75 }
76 psl->Release();
77 }
78 return hres;
Edric Milaretb37aa1f2015-07-09 16:39:04 -040079#else
Edric Milaret36587362016-02-04 12:30:52 -050080 Q_UNUSED(lpszPathObj)
81 Q_UNUSED(lpszPathLink)
Edric Milaretb37aa1f2015-07-09 16:39:04 -040082 return true;
83#endif
Edric Milaret4bba46d2015-04-29 16:33:38 -040084}
85
86void
87Utils::DeleteStartupLink() {
Edric Milaret36587362016-02-04 12:30:52 -050088#ifdef Q_OS_WIN
Edric Milaret465a3142015-06-02 15:02:52 -040089 TCHAR startupPath[MAX_PATH];
90 SHGetFolderPathW(NULL, CSIDL_STARTUP, NULL, 0, startupPath);
Edric Milaret4bba46d2015-04-29 16:33:38 -040091
Edric Milaret465a3142015-06-02 15:02:52 -040092 std::wstring linkPath(startupPath);
93 linkPath += TEXT("\\Ring.lnk");
Edric Milaret4bba46d2015-04-29 16:33:38 -040094
95 DeleteFile(linkPath.c_str());
Edric Milaretb37aa1f2015-07-09 16:39:04 -040096#endif
Edric Milaret4bba46d2015-04-29 16:33:38 -040097}
98
99bool
100Utils::CheckStartupLink() {
Edric Milaret36587362016-02-04 12:30:52 -0500101#ifdef Q_OS_WIN
Edric Milaret465a3142015-06-02 15:02:52 -0400102 TCHAR startupPath[MAX_PATH];
103 SHGetFolderPathW(NULL, CSIDL_STARTUP, NULL, 0, startupPath);
Edric Milaret4bba46d2015-04-29 16:33:38 -0400104
Edric Milaret465a3142015-06-02 15:02:52 -0400105 std::wstring linkPath(startupPath);
106 linkPath += TEXT("\\Ring.lnk");
Edric Milaret4bba46d2015-04-29 16:33:38 -0400107 return PathFileExists(linkPath.c_str());
Edric Milaretb37aa1f2015-07-09 16:39:04 -0400108#else
109 return true;
110#endif
Edric Milaret4bba46d2015-04-29 16:33:38 -0400111}
112
Edric Milaret031c3052015-04-29 18:14:18 -0400113QString
114Utils::GetRingtonePath() {
Edric Milaret36587362016-02-04 12:30:52 -0500115#ifdef Q_OS_WIN
Edric Milaret031c3052015-04-29 18:14:18 -0400116 TCHAR workingDirectory[MAX_PATH];
117 GetCurrentDirectory(MAX_PATH, workingDirectory);
118
119 QString ringtonePath = QString::fromWCharArray(workingDirectory);
Edric Milaretb1b00ce2016-02-03 14:10:05 -0500120 ringtonePath += QStringLiteral("\\ringtones\\default.wav");
Edric Milaret031c3052015-04-29 18:14:18 -0400121
122 return ringtonePath;
Edric Milaretb37aa1f2015-07-09 16:39:04 -0400123#else
124 return QString("/usr/local");
125#endif
Edric Milaret031c3052015-04-29 18:14:18 -0400126}
127
Edric Milaret43f3c1e2015-07-16 17:52:47 -0400128QString
129Utils::GenGUID() {
Edric Milaret36587362016-02-04 12:30:52 -0500130#ifdef Q_OS_WIN
Edric Milaret43f3c1e2015-07-16 17:52:47 -0400131 GUID gidReference;
132 wchar_t *str;
133 HRESULT hCreateGuid = CoCreateGuid(&gidReference);
134 if (hCreateGuid == S_OK) {
135 StringFromCLSID(gidReference, &str);
136 auto gStr = QString::fromWCharArray(str);
137 return gStr.remove("{").remove("}").toLower();
138 }
139 else
Edric Milaret36587362016-02-04 12:30:52 -0500140 return QString();
Edric Milaret43f3c1e2015-07-16 17:52:47 -0400141#else
142 return QString("");
143#endif
144}
145
146QString
147Utils::GetISODate() {
Edric Milaret36587362016-02-04 12:30:52 -0500148#ifdef Q_OS_WIN
Edric Milaret43f3c1e2015-07-16 17:52:47 -0400149 SYSTEMTIME lt;
150 GetSystemTime(&lt);
151 return QString("%1-%2-%3T%4:%5:%6Z").arg(lt.wYear).arg(lt.wMonth,2,10,QChar('0')).arg(lt.wDay,2,10,QChar('0'))
152 .arg(lt.wHour,2,10,QChar('0')).arg(lt.wMinute,2,10,QChar('0')).arg(lt.wSecond,2,10,QChar('0'));
153#else
Edric Milaret36587362016-02-04 12:30:52 -0500154 return QString();
155#endif
156}
157
158QString
159Utils::GetCurrentUserName() {
160#ifdef Q_OS_WIN
161 wchar_t username[UNLEN+1];
162 DWORD username_len = UNLEN+1;
163 GetUserName(username, &username_len);
164 return QString::fromWCharArray(username, username_len);
165#else
166 return QString();
Edric Milaret43f3c1e2015-07-16 17:52:47 -0400167#endif
168}
169
Edric Milaret4097d2f2016-02-09 14:41:50 -0500170void
171Utils::InvokeMailto(const QString& subject,
172 const QString& body,
173 const QString& attachement) {
Edric Milaret3ba22ca2016-03-01 13:28:01 -0500174#ifdef Q_OS_WIN
175 HKEY hKey;
176 LONG lRes = RegOpenKeyExW(HKEY_CLASSES_ROOT, L"mailto", 0, KEY_READ, &hKey);
177 if (lRes != ERROR_FILE_NOT_FOUND) {
178 auto addr = QString("mailto:?subject=%1&body=%2").arg(subject).arg(body);
179 if (not attachement.isEmpty())
180 addr += QString("&attachement=%1").arg(attachement);
181 ShellExecute(nullptr, L"open", addr.toStdWString().c_str(), NULL, NULL, SW_SHOWNORMAL);
182 } else {
183 QErrorMessage errorMessage;
184 errorMessage.showMessage(QObject::tr("No default mail client found"));
185 }
186#endif
Edric Milaret4097d2f2016-02-09 14:41:50 -0500187}