Browse Source

Merge pull request #3935

c61fe44 qt: Only override -datadir if different from the default (Wladimir J. van der Laan)
7e591c1 qt: Do proper boost::path conversion (Wladimir J. van der Laan)
0.10
Wladimir J. van der Laan 11 years ago
parent
commit
f284b5998a
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
  1. 32
      src/qt/guiutil.cpp
  2. 8
      src/qt/guiutil.h
  3. 18
      src/qt/intro.cpp

32
src/qt/guiutil.cpp

@ -33,6 +33,9 @@ @@ -33,6 +33,9 @@
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#if BOOST_FILESYSTEM_VERSION >= 3
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
#endif
#include <QAbstractItemView>
#include <QApplication>
@ -54,6 +57,10 @@ @@ -54,6 +57,10 @@
#include <QUrlQuery>
#endif
#if BOOST_FILESYSTEM_VERSION >= 3
static boost::filesystem::detail::utf8_codecvt_facet utf8;
#endif
namespace GUIUtil {
QString dateTimeStr(const QDateTime &date)
@ -352,7 +359,7 @@ void openDebugLogfile() @@ -352,7 +359,7 @@ void openDebugLogfile()
/* Open debug.log with the associated application */
if (boost::filesystem::exists(pathDebug))
QDesktopServices::openUrl(QUrl::fromLocalFile(QString::fromStdString(pathDebug.string())));
QDesktopServices::openUrl(QUrl::fromLocalFile(boostPathToQString(pathDebug)));
}
ToolTipToRichTextFilter::ToolTipToRichTextFilter(int size_threshold, QObject *parent) :
@ -718,4 +725,27 @@ void setClipboard(const QString& str) @@ -718,4 +725,27 @@ void setClipboard(const QString& str)
QApplication::clipboard()->setText(str, QClipboard::Selection);
}
#if BOOST_FILESYSTEM_VERSION >= 3
boost::filesystem::path qstringToBoostPath(const QString &path)
{
return boost::filesystem::path(path.toStdString(), utf8);
}
QString boostPathToQString(const boost::filesystem::path &path)
{
return QString::fromStdString(path.string(utf8));
}
#else
#warning Conversion between boost path and QString can use invalid character encoding with boost_filesystem v2 and older
boost::filesystem::path qstringToBoostPath(const QString &path)
{
return boost::filesystem::path(path.toStdString());
}
QString boostPathToQString(const boost::filesystem::path &path)
{
return QString::fromStdString(path.string());
}
#endif
} // namespace GUIUtil

8
src/qt/guiutil.h

@ -11,6 +11,8 @@ @@ -11,6 +11,8 @@
#include <QTableView>
#include <QHeaderView>
#include <boost/filesystem.hpp>
class QValidatedLineEdit;
class SendCoinsRecipient;
@ -164,6 +166,12 @@ namespace GUIUtil @@ -164,6 +166,12 @@ namespace GUIUtil
/** Restore window size and position */
void restoreWindowGeometry(const QString& strSetting, const QSize &defaultSizeIn, QWidget *parent);
/* Convert QString to OS specific boost path through UTF-8 */
boost::filesystem::path qstringToBoostPath(const QString &path);
/* Convert OS specific boost path to QString through UTF-8 */
QString boostPathToQString(const boost::filesystem::path &path);
} // namespace GUIUtil
#endif // GUIUTIL_H

18
src/qt/intro.cpp

@ -5,9 +5,12 @@ @@ -5,9 +5,12 @@
#include "intro.h"
#include "ui_intro.h"
#include "guiutil.h"
#include "util.h"
#include <boost/filesystem.hpp>
#include <QFileDialog>
#include <QSettings>
#include <QMessageBox>
@ -59,7 +62,7 @@ void FreespaceChecker::check() @@ -59,7 +62,7 @@ void FreespaceChecker::check()
{
namespace fs = boost::filesystem;
QString dataDirStr = intro->getPathToCheck();
fs::path dataDir = fs::path(dataDirStr.toStdString());
fs::path dataDir = GUIUtil::qstringToBoostPath(dataDirStr);
uint64_t freeBytesAvailable = 0;
int replyStatus = ST_OK;
QString replyMessage = tr("A new data directory will be created.");
@ -143,7 +146,7 @@ void Intro::setDataDirectory(const QString &dataDir) @@ -143,7 +146,7 @@ void Intro::setDataDirectory(const QString &dataDir)
QString Intro::getDefaultDataDirectory()
{
return QString::fromStdString(GetDefaultDataDir().string());
return GUIUtil::boostPathToQString(GetDefaultDataDir());
}
void Intro::pickDataDirectory()
@ -159,7 +162,7 @@ void Intro::pickDataDirectory() @@ -159,7 +162,7 @@ void Intro::pickDataDirectory()
/* 2) Allow QSettings to override default dir */
dataDir = settings.value("strDataDir", dataDir).toString();
if(!fs::exists(dataDir.toStdString()) || GetBoolArg("-choosedatadir", false))
if(!fs::exists(GUIUtil::qstringToBoostPath(dataDir)) || GetBoolArg("-choosedatadir", false))
{
/* If current default data directory does not exist, let the user choose one */
Intro intro;
@ -175,7 +178,7 @@ void Intro::pickDataDirectory() @@ -175,7 +178,7 @@ void Intro::pickDataDirectory()
}
dataDir = intro.getDataDirectory();
try {
fs::create_directory(dataDir.toStdString());
fs::create_directory(GUIUtil::qstringToBoostPath(dataDir));
break;
} catch(fs::filesystem_error &e) {
QMessageBox::critical(0, tr("Bitcoin"),
@ -186,7 +189,12 @@ void Intro::pickDataDirectory() @@ -186,7 +189,12 @@ void Intro::pickDataDirectory()
settings.setValue("strDataDir", dataDir);
}
SoftSetArg("-datadir", dataDir.toStdString());
/* Only override -datadir if different from the default, to make it possible to
* override -datadir in the bitcoin.conf file in the default data directory
* (to be consistent with bitcoind behavior)
*/
if(dataDir != getDefaultDataDirectory())
SoftSetArg("-datadir", GUIUtil::qstringToBoostPath(dataDir).string()); // use OS locale for path setting
}
void Intro::setStatus(int status, const QString &message, quint64 bytesAvailable)

Loading…
Cancel
Save