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 @@
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp> #include <boost/filesystem/fstream.hpp>
#if BOOST_FILESYSTEM_VERSION >= 3
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
#endif
#include <QAbstractItemView> #include <QAbstractItemView>
#include <QApplication> #include <QApplication>
@ -54,6 +57,10 @@
#include <QUrlQuery> #include <QUrlQuery>
#endif #endif
#if BOOST_FILESYSTEM_VERSION >= 3
static boost::filesystem::detail::utf8_codecvt_facet utf8;
#endif
namespace GUIUtil { namespace GUIUtil {
QString dateTimeStr(const QDateTime &date) QString dateTimeStr(const QDateTime &date)
@ -352,7 +359,7 @@ void openDebugLogfile()
/* Open debug.log with the associated application */ /* Open debug.log with the associated application */
if (boost::filesystem::exists(pathDebug)) 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) : ToolTipToRichTextFilter::ToolTipToRichTextFilter(int size_threshold, QObject *parent) :
@ -718,4 +725,27 @@ void setClipboard(const QString& str)
QApplication::clipboard()->setText(str, QClipboard::Selection); 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 } // namespace GUIUtil

8
src/qt/guiutil.h

@ -11,6 +11,8 @@
#include <QTableView> #include <QTableView>
#include <QHeaderView> #include <QHeaderView>
#include <boost/filesystem.hpp>
class QValidatedLineEdit; class QValidatedLineEdit;
class SendCoinsRecipient; class SendCoinsRecipient;
@ -164,6 +166,12 @@ namespace GUIUtil
/** Restore window size and position */ /** Restore window size and position */
void restoreWindowGeometry(const QString& strSetting, const QSize &defaultSizeIn, QWidget *parent); 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 } // namespace GUIUtil
#endif // GUIUTIL_H #endif // GUIUTIL_H

18
src/qt/intro.cpp

@ -5,9 +5,12 @@
#include "intro.h" #include "intro.h"
#include "ui_intro.h" #include "ui_intro.h"
#include "guiutil.h"
#include "util.h" #include "util.h"
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <QFileDialog> #include <QFileDialog>
#include <QSettings> #include <QSettings>
#include <QMessageBox> #include <QMessageBox>
@ -59,7 +62,7 @@ void FreespaceChecker::check()
{ {
namespace fs = boost::filesystem; namespace fs = boost::filesystem;
QString dataDirStr = intro->getPathToCheck(); QString dataDirStr = intro->getPathToCheck();
fs::path dataDir = fs::path(dataDirStr.toStdString()); fs::path dataDir = GUIUtil::qstringToBoostPath(dataDirStr);
uint64_t freeBytesAvailable = 0; uint64_t freeBytesAvailable = 0;
int replyStatus = ST_OK; int replyStatus = ST_OK;
QString replyMessage = tr("A new data directory will be created."); QString replyMessage = tr("A new data directory will be created.");
@ -143,7 +146,7 @@ void Intro::setDataDirectory(const QString &dataDir)
QString Intro::getDefaultDataDirectory() QString Intro::getDefaultDataDirectory()
{ {
return QString::fromStdString(GetDefaultDataDir().string()); return GUIUtil::boostPathToQString(GetDefaultDataDir());
} }
void Intro::pickDataDirectory() void Intro::pickDataDirectory()
@ -159,7 +162,7 @@ void Intro::pickDataDirectory()
/* 2) Allow QSettings to override default dir */ /* 2) Allow QSettings to override default dir */
dataDir = settings.value("strDataDir", dataDir).toString(); 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 */ /* If current default data directory does not exist, let the user choose one */
Intro intro; Intro intro;
@ -175,7 +178,7 @@ void Intro::pickDataDirectory()
} }
dataDir = intro.getDataDirectory(); dataDir = intro.getDataDirectory();
try { try {
fs::create_directory(dataDir.toStdString()); fs::create_directory(GUIUtil::qstringToBoostPath(dataDir));
break; break;
} catch(fs::filesystem_error &e) { } catch(fs::filesystem_error &e) {
QMessageBox::critical(0, tr("Bitcoin"), QMessageBox::critical(0, tr("Bitcoin"),
@ -186,7 +189,12 @@ void Intro::pickDataDirectory()
settings.setValue("strDataDir", dataDir); 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) void Intro::setStatus(int status, const QString &message, quint64 bytesAvailable)

Loading…
Cancel
Save