Skip to content

Commit

Permalink
portable mode initial revision, small cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
aliakseis committed Nov 7, 2018
1 parent cd9facc commit 37c3684
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 26 deletions.
8 changes: 4 additions & 4 deletions src/common/ui_utils/mainwindowwithtray.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ void MainWindowWithTray::trayAction(QSystemTrayIcon::ActivationReason reason)
void MainWindowWithTray::closeApp()
{
m_isExiting = true;
qApp->closeAllWindows();
qApp->exit(0);
QApplication::closeAllWindows();
QCoreApplication::exit(0);
}

void MainWindowWithTray::setVisible(bool visible)
Expand Down Expand Up @@ -104,7 +104,7 @@ void MainWindowWithTray::showHideNotify() {}

void MainWindowWithTray::createTrayMenu(QIcon const& icon, utilities::Tr::Translation const& projFullNameTr)
{
qApp->setWindowIcon(icon);
QApplication::setWindowIcon(icon);
#if !defined(Q_OS_MAC)
m_tray = new QSystemTrayIcon(this);
utilities::Tr::SetTr(m_tray, &QSystemTrayIcon::setToolTip, projFullNameTr);
Expand Down Expand Up @@ -136,7 +136,7 @@ QAction* MainWindowWithTray::addTrayMenuItem(TrayMenu::ItemType itemType)
case TrayMenu::Show:
{
action = createAction("actionShow", appShowTr, QKeySequence::UnknownKey, SLOT(restore()));
action->setIcon(qApp->windowIcon());
action->setIcon(QApplication::windowIcon());
action->setIconVisibleInMenu(true);
m_tray->contextMenu()->addAction(action);
}
Expand Down
6 changes: 3 additions & 3 deletions src/common/utilities/associate_app_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const auto torrentClassName = QStringLiteral(PROJECT_NAME ".torrent");

void setClassesToSelf(QSettings& settingRoot)
{
QString appPath = QDir::toNativeSeparators(qApp->applicationFilePath());
QString appPath = QDir::toNativeSeparators(QCoreApplication::applicationFilePath());
settingRoot.setValue(".", torrentClassName);

settingRoot.beginGroup("DefaultIcon");
Expand All @@ -34,7 +34,7 @@ void associateApp(QString const& ext, WId parent = NULL)
const bool isChangeNeeded =
QSettings("HKEY_CLASSES_ROOT\\" + torrentClassName, QSettings::NativeFormat).value(".") != PROJECT_FULLNAME ||
QSettings("HKEY_CLASSES_ROOT\\" + ext, QSettings::NativeFormat).value(".") != torrentClassName ||
QSettings("HKEY_CLASSES_ROOT\\" + torrentClassName + "\\shell\\open\\command", QSettings::NativeFormat).value(".") != QString("\"%1\" \"%2\"").arg(QDir::toNativeSeparators(qApp->applicationFilePath()), "%1");
QSettings("HKEY_CLASSES_ROOT\\" + torrentClassName + "\\shell\\open\\command", QSettings::NativeFormat).value(".") != QString("\"%1\" \"%2\"").arg(QDir::toNativeSeparators(QCoreApplication::applicationFilePath()), "%1");

if (isChangeNeeded)
{
Expand Down Expand Up @@ -75,7 +75,7 @@ bool utilities::isDefaultTorrentApp()
const bool isSelf =
QSettings("HKEY_CLASSES_ROOT\\Magnet", QSettings::NativeFormat).value(".") == torrentClassName &&
QSettings("HKEY_CLASSES_ROOT\\.torrent", QSettings::NativeFormat).value(".") == torrentClassName &&
QSettings("HKEY_CLASSES_ROOT\\" + torrentClassName + "\\shell\\open\\command", QSettings::NativeFormat).value(".") == QString("\"%1\" \"%2\"").arg(QDir::toNativeSeparators(qApp->applicationFilePath()), "%1") &&
QSettings("HKEY_CLASSES_ROOT\\" + torrentClassName + "\\shell\\open\\command", QSettings::NativeFormat).value(".") == QString("\"%1\" \"%2\"").arg(QDir::toNativeSeparators(QCoreApplication::applicationFilePath()), "%1") &&
QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.torrent\\UserChoice", QSettings::NativeFormat).value("ProgId") == torrentClassName;

return isSelf;
Expand Down
48 changes: 41 additions & 7 deletions src/common/utilities/filesystem_utils.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
#include "filesystem_utils.h"

#include <QApplication>
#include <QFileInfo>
#include <QFile>
#include <QDir>
#include <QDebug>
#include <QSettings>
#include <QThread>
#include <QProcess>
#include <QNetworkReply>
Expand All @@ -24,6 +26,9 @@ typedef HRESULT(STDAPICALLTYPE* GetPathFunc)(REFKNOWNFOLDERID, DWORD, HANDLE, PW

namespace {

const char PORTABLE_MODE_FILE[] = "portable";
const char DOWNLOADS_FOLDER_NAME[] = "downloads";

#ifdef Q_OS_WIN32
const char EXPLORER_LABEL[] = "explorer";
#elif defined(Q_OS_MAC)
Expand Down Expand Up @@ -153,6 +158,27 @@ bool MoveToTrashImpl(const QString& file)
}
#endif //Q_OS_MAC

QString StringOrEmpty(const QStringList& list)
{
return list.empty() ? QString() : list.at(0);
}

QString GetOrganizationName()
{
return
#ifdef Q_OS_MAC
QCoreApplication::organizationDomain().isEmpty()
? QCoreApplication::organizationName()
: QCoreApplication::organizationDomain()
#else
QCoreApplication::organizationName().isEmpty()
? QCoreApplication::organizationDomain()
: QCoreApplication::organizationName()
#endif
;
}


} // namespace


Expand Down Expand Up @@ -239,22 +265,30 @@ QString GetFileName(const QString& full_path)
return (file_name.isEmpty()) ? full_path : file_name;
}

bool IsPortableMode()
{
static const bool isPortableMode = QFileInfo::exists(
QCoreApplication::applicationDirPath() + QDir::separator() + PORTABLE_MODE_FILE);
return isPortableMode;
}

QString getPathForDownloadFolder()
{
QStringList paths = QStandardPaths::standardLocations(QStandardPaths::DownloadLocation);
QString startPath = !paths.empty() ? paths.at(0) : QString();
return startPath;
return IsPortableMode()
? PrepareCacheFolder(DOWNLOADS_FOLDER_NAME)
: StringOrEmpty(QStandardPaths::standardLocations(QStandardPaths::DownloadLocation));
}


QString PrepareCacheFolder(const QString& subdir)
{
QStringList paths = QStandardPaths::standardLocations(QStandardPaths::DataLocation);
QString path = !paths.isEmpty() ? paths.at(0) : QString();
QString path = IsPortableMode()
? QCoreApplication::applicationDirPath()
: StringOrEmpty(QStandardPaths::standardLocations(QStandardPaths::DataLocation));

if (!subdir.isEmpty())
if (!subdir.isEmpty() || IsPortableMode()) // indirect top level portable stuff like settings do
{
path += QDir::separator() + subdir;
path += QDir::separator() + (subdir.isEmpty()? GetOrganizationName() : subdir);
}
Q_ASSERT(!path.isEmpty());

Expand Down
2 changes: 2 additions & 0 deletions src/common/utilities/filesystem_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ void SelectFile(const QString& fileName, const QString& defFolderName);
QString GetFileName(QNetworkReply* reply);
QString GetFileName(const QString& full_path);

bool IsPortableMode();

// Parameter: const QString & subdir - subdir to create; Returns: QString - directory name with ending slash
QString PrepareCacheFolder(const QString& subdir = QString());

Expand Down
4 changes: 2 additions & 2 deletions src/common/utilities/translatable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,15 @@ void Translatable::retranslateApp(const QString& locale)
{
if (translator_)
{
qApp->removeTranslator(translator_);
QCoreApplication::removeTranslator(translator_);
translator_->deleteLater();
}
translator_ = new QTranslator(qApp);

QString filename = translationFilePrefix + locale;
if (translator_->load(filename, getTranslationsFolder()))
{
qApp->installTranslator(translator_);
QCoreApplication::installTranslator(translator_);
}

Tr::RetranslateAll(qApp);
Expand Down
4 changes: 2 additions & 2 deletions src/common/utilities/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -349,8 +349,8 @@ bool isAdminRights()

void runWithPrivileges(const wchar_t* arg, WId parent)
{
const auto applicationFilePath = qApp->applicationFilePath();
const auto applicationDirPath = qApp->applicationDirPath();
const auto applicationFilePath = QCoreApplication::applicationFilePath();
const auto applicationDirPath = QCoreApplication::applicationDirPath();

SHELLEXECUTEINFOW shex =
{
Expand Down
9 changes: 5 additions & 4 deletions src/gui/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ MainWindow::MainWindow()
m_dlManager(nullptr)
, isAutorun(false)
{
qApp->setWindowIcon(QIcon(PROJECT_ICON));
QApplication::setWindowIcon(QIcon(PROJECT_ICON));

ui->setupUi(this);

Expand Down Expand Up @@ -153,7 +153,7 @@ MainWindow::MainWindow()

VERIFY(connect(ui->linkEdit, SIGNAL(linksAdd(bool)), ui->lblClearText, SLOT(setVisible(bool))));
VERIFY(connect(ui->linkEdit, SIGNAL(returnPressed()), this, SLOT(on_buttonStart_clicked())));
VERIFY(connect(ui->lblClearText, SIGNAL(clicked()), this, SLOT(onlblClearTextCliced())));
VERIFY(connect(ui->lblClearText, SIGNAL(clicked()), this, SLOT(onlblClearTextClicked())));

refreshButtons();
}
Expand Down Expand Up @@ -211,7 +211,8 @@ void MainWindow::showMainWindowAndPerformChecks()

void MainWindow::checkDefaultTorrentApplication()
{
if (QSettings().value(ShowAssociateTorrentDialog, ShowAssociateTorrentDialog_Default).toBool()
const bool initiallyShowDialog = ShowAssociateTorrentDialog_Default && !utilities::IsPortableMode();
if (QSettings().value(ShowAssociateTorrentDialog, initiallyShowDialog).toBool()
&& !utilities::isDefaultTorrentApp())
{
QMessageBox msgBox(
Expand Down Expand Up @@ -318,7 +319,7 @@ void MainWindow::prepareToExit()
#endif
}

void MainWindow::onlblClearTextCliced()
void MainWindow::onlblClearTextClicked()
{
ui->linkEdit->setText(QString());
refreshButtons();
Expand Down
2 changes: 1 addition & 1 deletion src/gui/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public Q_SLOTS:
void closeApp();
void onAboutClicked();
void on_openTorrent_clicked();
void onlblClearTextCliced();
void onlblClearTextClicked();

private Q_SLOTS:
void prepareToExit();
Expand Down
2 changes: 1 addition & 1 deletion src/gui/torrentdetailsform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ template<class Val_t> bool isNotAllSkipped(std::vector<Val_t> const& priorities)

void TorrentDetailsForm::accept()
{
qApp->processEvents(); // must call this to stop editing operations
QCoreApplication::processEvents(); // must call this to stop editing operations

bool isEverithingOk = true;
if (m_torrentHandle.is_valid())
Expand Down
18 changes: 16 additions & 2 deletions src/main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,26 @@ Q_IMPORT_PLUGIN(qico)
#endif//QT_STATICPLUGINS


// Called once QCoreApplication exists
static void ApplicationDependentInitialization()
{
if (utilities::IsPortableMode())
{
QSettings::setDefaultFormat(QSettings::IniFormat);
QSettings::setPath(QSettings::IniFormat, QSettings::UserScope,
QCoreApplication::applicationDirPath());
}

utilities::setWriteToLogFile(
QSettings().value(app_settings::LoggingEnabled, false).toBool());
}

Q_COREAPP_STARTUP_FUNCTION(ApplicationDependentInitialization)

int main(int argc, char* argv[])
{
utilities::InitializeProjectDescription();

utilities::setWriteToLogFile(QSettings().value(app_settings::LoggingEnabled, false).toBool());

// single app
Application app(QString(PROJECT_NAME), argc, argv);

Expand Down

0 comments on commit 37c3684

Please sign in to comment.