Changed: Create all profiles shortcuts at once, see #279

This commit is contained in:
kervala 2016-07-25 18:31:11 +02:00
parent 6f9a9f66dd
commit 6e169732a1
5 changed files with 86 additions and 84 deletions

View file

@ -60,24 +60,84 @@ QString CProfile::getClientFullPath() const
return s.getClientFullPath(); return s.getClientFullPath();
} }
QString CProfile::getClientDesktopLinkFullPath() const QString CProfile::getClientDesktopShortcutFullPath() const
{ {
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
return CConfigFile::getInstance()->getDesktopDirectory() + "/" + name + ".lnk"; return CConfigFile::getInstance()->getDesktopDirectory() + "/" + name + ".lnk";
#else #elif defined(Q_OS_MAC)
return ""; return "";
#else
return CConfigFile::getInstance()->getDesktopDirectory() + "/" + name + ".desktop";
#endif #endif
} }
QString CProfile::getClientMenuLinkFullPath() const QString CProfile::getClientMenuShortcutFullPath() const
{ {
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
return CConfigFile::getInstance()->getMenuDirectory() + "/" + name + ".lnk"; return CConfigFile::getInstance()->getMenuDirectory() + "/" + name + ".lnk";
#else #elif defined(Q_OS_MAC)
return ""; return "";
#else
return CConfigFile::getInstance()->getMenuDirectory() + "/" + name + ".desktop";
#endif #endif
} }
void CProfile::createShortcuts() const
{
const CServer &s = CConfigFile::getInstance()->getServer(server);
QString executable = getClientFullPath();
QString workingDir = s.getDirectory();
QString arguments = QString("--profile %1").arg(id);
// append custom arguments
if (!arguments.isEmpty()) arguments += QString(" %1").arg(arguments);
QString icon;
#ifdef Q_OS_WIN32
icon = executable;
#else
// TODO: Linux icon
#endif
if (desktopShortcut)
{
QString shortcut = getClientDesktopShortcutFullPath();
// create desktop shortcut
createLink(shortcut, name, executable, arguments, icon, workingDir);
}
if (menuShortcut)
{
QString shortcut = getClientMenuShortcutFullPath();
// create menu shortcut
createLink(shortcut, name, executable, arguments, icon, workingDir);
}
}
void CProfile::deleteShortcuts() const
{
// delete desktop shortcut
QString link = getClientDesktopShortcutFullPath();
if (QFile::exists(link)) QFile::remove(link);
// delete menu shortcut
link = getClientMenuShortcutFullPath();
if (QFile::exists(link)) QFile::remove(link);
}
void CProfile::updateShortcuts() const
{
deleteShortcuts();
createShortcuts();
}
CConfigFile *CConfigFile::s_instance = NULL; CConfigFile *CConfigFile::s_instance = NULL;
CConfigFile::CConfigFile(QObject *parent):QObject(parent), m_defaultServerIndex(0), m_defaultProfileIndex(0), m_use64BitsClient(false), m_shouldUninstallOldClient(true) CConfigFile::CConfigFile(QObject *parent):QObject(parent), m_defaultServerIndex(0), m_defaultProfileIndex(0), m_use64BitsClient(false), m_shouldUninstallOldClient(true)
@ -692,11 +752,9 @@ bool CConfigFile::shouldCreateDesktopShortcut() const
if (!profile.desktopShortcut) return false; if (!profile.desktopShortcut) return false;
#ifdef Q_OS_WIN32 QString shortcut = profile.getClientDesktopShortcutFullPath();
return !NLMISC::CFile::isExists(qToUtf8(profile.getClientDesktopLinkFullPath()));
#else return !shortcut.isEmpty() && !NLMISC::CFile::isExists(qToUtf8(shortcut));
return false;
#endif
} }
bool CConfigFile::shouldCreateMenuShortcut() const bool CConfigFile::shouldCreateMenuShortcut() const
@ -705,11 +763,9 @@ bool CConfigFile::shouldCreateMenuShortcut() const
if (!profile.menuShortcut) return false; if (!profile.menuShortcut) return false;
#ifdef Q_OS_WIN32 QString shortcut = profile.getClientMenuShortcutFullPath();
return !NLMISC::CFile::isExists(qToUtf8(profile.getClientMenuLinkFullPath()));
#else return !shortcut.isEmpty() && !NLMISC::CFile::isExists(qToUtf8(shortcut));
return false;
#endif
} }
QString CConfigFile::getInstallerFullPath() const QString CConfigFile::getInstallerFullPath() const
@ -876,14 +932,9 @@ OperationStep CConfigFile::getInstallNextStep() const
return CopyProfileFiles; return CopyProfileFiles;
} }
if (shouldCreateDesktopShortcut()) if (shouldCreateDesktopShortcut() || shouldCreateMenuShortcut())
{ {
return CreateDesktopShortcut; return CreateProfileShortcuts;
}
if (shouldCreateMenuShortcut())
{
return CreateMenuShortcut;
} }
#ifdef Q_OS_WIN #ifdef Q_OS_WIN

View file

@ -74,8 +74,12 @@ public:
// helpers // helpers
QString getDirectory() const; QString getDirectory() const;
QString getClientFullPath() const; QString getClientFullPath() const;
QString getClientDesktopLinkFullPath() const; QString getClientDesktopShortcutFullPath() const;
QString getClientMenuLinkFullPath() const; QString getClientMenuShortcutFullPath() const;
void createShortcuts() const;
void deleteShortcuts() const;
void updateShortcuts() const;
}; };
extern const CProfile NoProfile; extern const CProfile NoProfile;

View file

@ -64,8 +64,7 @@ enum OperationStep
CopyInstaller, CopyInstaller,
UninstallOldClient, UninstallOldClient,
CreateProfile, CreateProfile,
CreateDesktopShortcut, CreateProfileShortcuts,
CreateMenuShortcut,
CreateAddRemoveEntry, CreateAddRemoveEntry,
Done Done
}; };

View file

@ -175,12 +175,8 @@ void COperationDialog::processInstallNextStep()
createDefaultProfile(); createDefaultProfile();
break; break;
case CreateDesktopShortcut: case CreateProfileShortcuts:
createClientDesktopShortcut(0); createProfileShortcuts(0);
break;
case CreateMenuShortcut:
createClientMenuShortcut(0);
break; break;
case CreateAddRemoveEntry: case CreateAddRemoveEntry:
@ -869,60 +865,15 @@ bool COperationDialog::createDefaultProfile()
return true; return true;
} }
bool COperationDialog::createClientDesktopShortcut(const QString &profileId) bool COperationDialog::createProfileShortcuts(const QString &profileId)
{ {
CConfigFile *config = CConfigFile::getInstance(); CConfigFile *config = CConfigFile::getInstance();
const CProfile &profile = config->getProfile(profileId); const CProfile &profile = config->getProfile(profileId);
const CServer &server = config->getServer(profile.server);
m_currentOperation = tr("Create desktop shortcut for profile %1").arg(profile.id); m_currentOperation = tr("Create shortcuts for profile %1").arg(profile.id);
#ifdef Q_OS_WIN32 profile.createShortcuts();
if (profile.desktopShortcut)
{
QString executable = profile.getClientFullPath();
QString shortcut = profile.getClientDesktopLinkFullPath();
QString workingDir = server.getDirectory();
QString arguments = QString("--profile %1").arg(profile.id);
// append custom arguments
if (!profile.arguments.isEmpty()) arguments += QString(" %1").arg(profile.arguments);
createLink(executable, shortcut, arguments, workingDir, profile.comments);
}
#endif
emit done();
return true;
}
bool COperationDialog::createClientMenuShortcut(const QString &profileId)
{
CConfigFile *config = CConfigFile::getInstance();
const CProfile &profile = config->getProfile(profileId);
const CServer &server = config->getServer(profile.server);
m_currentOperation = tr("Create menu shortcut for profile %1").arg(profile.id);
#ifdef Q_OS_WIN32
if (profile.menuShortcut)
{
QString executable = profile.getClientFullPath();
QString shortcut = profile.getClientMenuLinkFullPath();
QString workingDir = server.getDirectory();
QString arguments = QString("--profile %1").arg(profile.id);
// append custom arguments
if (!profile.arguments.isEmpty()) arguments += QString(" %1").arg(profile.arguments);
createLink(executable, shortcut, arguments, workingDir, profile.comments);
}
#endif
emit done(); emit done();
@ -1080,9 +1031,7 @@ void COperationDialog::addComponentsProfiles()
{ {
const CProfile &profile = config->getProfile(profileId); const CProfile &profile = config->getProfile(profileId);
if (profile.desktopShortcut) createClientDesktopShortcut(profile.id); profile.createShortcuts();
if (profile.menuShortcut) createClientMenuShortcut(profile.id);
} }
} }

View file

@ -103,8 +103,7 @@ protected:
void uninstallOldClient(); void uninstallOldClient();
bool createDefaultProfile(); bool createDefaultProfile();
bool createClientDesktopShortcut(const QString &profileId); bool createProfileShortcuts(const QString &profileId);
bool createClientMenuShortcut(const QString &profileId);
bool createAddRemoveEntry(); bool createAddRemoveEntry();
bool updateAddRemoveEntry(); bool updateAddRemoveEntry();