Changed: New functions to remove a shortcut and check if it exists

This commit is contained in:
kervala 2016-10-03 09:59:19 +02:00
parent 536f438e18
commit 6fb0305497
6 changed files with 63 additions and 35 deletions

View file

@ -18,8 +18,6 @@
#include "configfile.h" #include "configfile.h"
#include "utils.h" #include "utils.h"
#include "nel/misc/path.h"
#ifdef DEBUG_NEW #ifdef DEBUG_NEW
#define new DEBUG_NEW #define new DEBUG_NEW
#endif #endif
@ -674,9 +672,7 @@ bool CConfigFile::shouldCreateDesktopShortcut() const
if (!profile.desktopShortcut) return false; if (!profile.desktopShortcut) return false;
QString shortcut = profile.getClientDesktopShortcutFullPath(); return !shortcutExists(profile.getClientDesktopShortcutFullPath());
return !shortcut.isEmpty() && !NLMISC::CFile::isExists(qToUtf8(appendLinkExtension(shortcut)));
} }
bool CConfigFile::shouldCreateMenuShortcut() const bool CConfigFile::shouldCreateMenuShortcut() const
@ -685,9 +681,7 @@ bool CConfigFile::shouldCreateMenuShortcut() const
if (!profile.menuShortcut) return false; if (!profile.menuShortcut) return false;
QString shortcut = profile.getClientMenuShortcutFullPath(); return !shortcutExists(profile.getClientMenuShortcutFullPath());
return !shortcut.isEmpty() && !NLMISC::CFile::isExists(qToUtf8(appendLinkExtension(shortcut)));
} }
bool CConfigFile::shouldCopyInstaller() const bool CConfigFile::shouldCopyInstaller() const
@ -732,10 +726,16 @@ QString CConfigFile::getInstallerOriginalDirPath() const
return m_installationDirectory; return m_installationDirectory;
} }
QString CConfigFile::getInstallerMenuLinkFullPath() const QString CConfigFile::getInstallerMenuShortcutFullPath() const
{ {
// don't put extension // don't put extension
return QString("%1/%2/%2 Installer").arg(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)).arg(QApplication::applicationName()); return QString("%1/%2 Installer").arg(CConfigFile::getInstance()->getMenuDirectory()).arg(QApplication::applicationName());
}
QString CConfigFile::getInstallerDesktopShortcutFullPath() const
{
// don't put extension
return QString("%1/%2 Installer").arg(CConfigFile::getInstance()->getDesktopDirectory()).arg(QApplication::applicationName());
} }
QStringList CConfigFile::getInstallerRequiredFiles() const QStringList CConfigFile::getInstallerRequiredFiles() const

View file

@ -125,7 +125,8 @@ public:
QString getInstallerOriginalFilePath() const; QString getInstallerOriginalFilePath() const;
QString getInstallerOriginalDirPath() const; QString getInstallerOriginalDirPath() const;
QString getInstallerMenuLinkFullPath() const; QString getInstallerMenuShortcutFullPath() const;
QString getInstallerDesktopShortcutFullPath() const;
QStringList getInstallerRequiredFiles() const; QStringList getInstallerRequiredFiles() const;

View file

@ -770,7 +770,7 @@ void COperationDialog::copyInstaller()
// create installer link in menu // create installer link in menu
QString executable = newInstallerFullPath; QString executable = newInstallerFullPath;
QString shortcut = config->getInstallerMenuLinkFullPath(); QString shortcut = config->getInstallerMenuShortcutFullPath();
QString name = "Ryzom Installer"; QString name = "Ryzom Installer";
QString icon; QString icon;
@ -782,7 +782,7 @@ void COperationDialog::copyInstaller()
icon = config->getInstallationDirectory() + "/ryzom_installer.png"; icon = config->getInstallationDirectory() + "/ryzom_installer.png";
#endif #endif
createLink(shortcut, name, executable, "", icon, ""); createShortcut(shortcut, name, executable, "", icon, "");
} }
emit done(); emit done();
@ -1179,6 +1179,10 @@ void COperationDialog::deleteComponentsInstaller()
} }
} }
// delete installer shortcuts
removeShortcut(config->getInstallerMenuShortcutFullPath());
removeShortcut(config->getInstallerDesktopShortcutFullPath());
// delete configuration file // delete configuration file
config->remove(); config->remove();

View file

@ -100,7 +100,7 @@ void CProfile::createShortcuts() const
QString shortcut = getClientDesktopShortcutFullPath(); QString shortcut = getClientDesktopShortcutFullPath();
// create desktop shortcut // create desktop shortcut
createLink(shortcut, name, exe, profileArguments, icon, workingDir); createShortcut(shortcut, name, exe, profileArguments, icon, workingDir);
} }
if (menuShortcut) if (menuShortcut)
@ -108,21 +108,17 @@ void CProfile::createShortcuts() const
QString shortcut = getClientMenuShortcutFullPath(); QString shortcut = getClientMenuShortcutFullPath();
// create menu shortcut // create menu shortcut
createLink(shortcut, name, exe, profileArguments, icon, workingDir); createShortcut(shortcut, name, exe, profileArguments, icon, workingDir);
} }
} }
void CProfile::deleteShortcuts() const void CProfile::deleteShortcuts() const
{ {
// delete desktop shortcut // delete desktop shortcut
QString link = getClientDesktopShortcutFullPath(); removeShortcut(getClientDesktopShortcutFullPath());
if (QFile::exists(link)) QFile::remove(link);
// delete menu shortcut // delete menu shortcut
link = getClientMenuShortcutFullPath(); removeShortcut(getClientMenuShortcutFullPath());
if (QFile::exists(link)) QFile::remove(link);
} }
void CProfile::updateShortcuts() const void CProfile::updateShortcuts() const

View file

@ -17,6 +17,8 @@
#include "stdpch.h" #include "stdpch.h"
#include "utils.h" #include "utils.h"
#include "nel/misc/path.h"
#ifdef DEBUG_NEW #ifdef DEBUG_NEW
#define new DEBUG_NEW #define new DEBUG_NEW
#endif #endif
@ -130,9 +132,14 @@ wchar_t* qToWide(const QString &str)
return (wchar_t*)str.utf16(); return (wchar_t*)str.utf16();
} }
bool shortcutExists(const QString &shortcut)
{
return !shortcut.isEmpty() && NLMISC::CFile::isExists(qToUtf8(appendShortcutExtension(shortcut)));
}
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
bool createLink(const QString &link, const QString &name, const QString &executable, const QString &arguments, const QString &icon, const QString &workingDir) bool createShortcut(const QString &shortcut, const QString &name, const QString &executable, const QString &arguments, const QString &icon, const QString &workingDir)
{ {
CCOMHelper comHelper; CCOMHelper comHelper;
@ -141,9 +148,10 @@ bool createLink(const QString &link, const QString &name, const QString &executa
// Get a pointer to the IShellLink interface. It is assumed that CoInitialize // Get a pointer to the IShellLink interface. It is assumed that CoInitialize
// has already been called. // has already been called.
HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID*)&psl); HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID*)&psl);
if (SUCCEEDED(hres)) if (SUCCEEDED(hres))
{ {
IPersistFile* ppf; IPersistFile* ppf = NULL;
// Set the path to the shortcut target and add the description. // Set the path to the shortcut target and add the description.
psl->SetPath(qToWide(QDir::toNativeSeparators(executable))); psl->SetPath(qToWide(QDir::toNativeSeparators(executable)));
@ -157,18 +165,20 @@ bool createLink(const QString &link, const QString &name, const QString &executa
if (SUCCEEDED(hres)) if (SUCCEEDED(hres))
{ {
QString path(link + ".lnk"); QString path(shortcut + ".lnk");
// Save the link by calling IPersistFile::Save. // Save the link by calling IPersistFile::Save.
hres = ppf->Save(qToWide(QDir::toNativeSeparators(path)), TRUE); hres = ppf->Save(qToWide(QDir::toNativeSeparators(path)), TRUE);
ppf->Release(); ppf->Release();
} }
psl->Release(); psl->Release();
} }
return SUCCEEDED(hres); return SUCCEEDED(hres);
} }
bool resolveLink(const QWidget &window, const QString &linkFile, QString &path) bool resolveShortcut(const QWidget &window, const QString &shortcut, QString &path)
{ {
CCOMHelper comHelper; CCOMHelper comHelper;
@ -193,7 +203,7 @@ bool resolveLink(const QWidget &window, const QString &linkFile, QString &path)
// for success. // for success.
// Load the shortcut. // Load the shortcut.
hres = ppf->Load(qToWide(QDir::toNativeSeparators(linkFile)), STGM_READ); hres = ppf->Load(qToWide(QDir::toNativeSeparators(shortcut)), STGM_READ);
if (SUCCEEDED(hres)) if (SUCCEEDED(hres))
{ {
@ -239,7 +249,7 @@ bool resolveLink(const QWidget &window, const QString &linkFile, QString &path)
#else #else
bool createLink(const QString &link, const QString &name, const QString &executable, const QString &arguments, const QString &icon, const QString &workingDir) bool createShortcut(const QString &shortcut, const QString &name, const QString &executable, const QString &arguments, const QString &icon, const QString &workingDir)
{ {
// open template // open template
QFile file(":/templates/template.desktop"); QFile file(":/templates/template.desktop");
@ -259,7 +269,7 @@ bool createLink(const QString &link, const QString &name, const QString &executa
data.replace("$COMMAND", command); data.replace("$COMMAND", command);
data.replace("$ICON", icon); data.replace("$ICON", icon);
QString path(link + ".desktop"); QString path(shortcut + ".desktop");
// write file // write file
file.setFileName(path); file.setFileName(path);
@ -275,14 +285,29 @@ bool createLink(const QString &link, const QString &name, const QString &executa
return true; return true;
} }
bool resolveLink(const QWidget &window, const QString &pathLink, QString &pathObj) bool resolveShortcut(const QWidget &window, const QString &pathLink, QString &pathObj)
{ {
return false; return false;
} }
#endif #endif
QString appendLinkExtension(const QString &link) bool removeShortcut(const QString &shortcut)
{
// empty links are invalid
if (shortcut.isEmpty()) return false;
// append extension if missing
QString fullPath = appendShortcutExtension(shortcut);
// link doesn't exist
if (!NLMISC::CFile::isExists(qToUtf8(fullPath))) return false;
// remove it
return QFile::remove(fullPath);
}
QString appendShortcutExtension(const QString &shortcut)
{ {
QString extension; QString extension;
@ -295,9 +320,9 @@ QString appendLinkExtension(const QString &link)
#endif #endif
// already the good extension // already the good extension
if (link.indexOf(extension) > -1) return link; if (shortcut.indexOf(extension) > -1) return shortcut;
return link + extension; return shortcut + extension;
} }
QString getVersionFromExecutable(const QString &path) QString getVersionFromExecutable(const QString &path)

View file

@ -50,9 +50,11 @@ QString qFromWide(const wchar_t *str);
wchar_t* qToWide(const QString &str); wchar_t* qToWide(const QString &str);
bool createLink(const QString &link, const QString &name, const QString &executable, const QString &arguments, const QString &icon, const QString &workingDir); bool shortcutExists(const QString &shortcut);
bool resolveLink(const QWidget &window, const QString &pathLink, QString &pathObj); bool createShortcut(const QString &shortcut, const QString &name, const QString &executable, const QString &arguments, const QString &icon, const QString &workingDir);
QString appendLinkExtension(const QString &link); bool removeShortcut(const QString &shortcut);
bool resolveShortcut(const QWidget &window, const QString &shortcut, QString &pathObj);
QString appendShortcutExtension(const QString &shortcut);
QString getVersionFromExecutable(const QString &path); QString getVersionFromExecutable(const QString &path);