13 #include <boost/filesystem.hpp> 15 #include <QFileDialog> 17 #include <QMessageBox> 55 void reply(
int status,
const QString &message, quint64 available);
70 namespace fs = boost::filesystem;
73 uint64_t freeBytesAvailable = 0;
74 int replyStatus =
ST_OK;
75 QString replyMessage = tr(
"A new data directory will be created.");
78 fs::path parentDir = dataDir;
79 fs::path parentDirOld = fs::path();
80 while(parentDir.has_parent_path() && !fs::exists(parentDir))
82 parentDir = parentDir.parent_path();
85 if (parentDirOld == parentDir)
88 parentDirOld = parentDir;
92 freeBytesAvailable = fs::space(parentDir).available;
93 if(fs::exists(dataDir))
95 if(fs::is_directory(dataDir))
97 QString separator =
"<code>" + QDir::toNativeSeparators(
"/") + tr(
"name") +
"</code>";
99 replyMessage = tr(
"Directory already exists. Add %1 if you intend to create a new directory here.").arg(separator);
102 replyMessage = tr(
"Path already exists, and is not a directory.");
105 }
catch (
const fs::filesystem_error&)
109 replyMessage = tr(
"Cannot create data directory here.");
111 Q_EMIT
reply(replyStatus, replyMessage, freeBytesAvailable);
122 uint64_t pruneTarget = std::max<int64_t>(0,
GetArg(
"-prune", 0));
165 namespace fs = boost::filesystem;
169 if(!
GetArg(
"-datadir",
"").empty())
174 QString dataDir =
settings.value(
"strDataDir", dataDirDefaultCurrent).toString();
176 QString dataDirDefaultSettings =
settings.value(
"strDataDirDefault").toString();
183 intro.setWindowIcon(QIcon(
":icons/bitcoin"));
196 }
catch (
const fs::filesystem_error&) {
197 QMessageBox::critical(0, tr(
"Dash Core"),
198 tr(
"Error: Specified data directory \"%1\" cannot be created.").arg(dataDir));
203 settings.setValue(
"strDataDir", dataDir);
204 settings.setValue(
"strDataDirDefault", dataDirDefaultCurrent);
210 if(dataDir != dataDirDefaultCurrent)
232 QString freeString = tr(
"%1 GB of free space available").arg(bytesAvailable/
GB_BYTES);
235 freeString +=
" " + tr(
"(of %1 GB needed)").arg(
requiredSpace);
236 ui->
freeSpace->setStyleSheet(
"QLabel { color: #800000 }");
249 ui->
buttonBox->button(QDialogButtonBox::Ok)->setEnabled(
false);
255 QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(0,
"Choose data directory",
ui->
dataDirectory->text()));
273 thread =
new QThread(
this);
275 executor->moveToThread(
thread);
277 connect(executor, SIGNAL(reply(
int,QString,quint64)),
this, SLOT(
setStatus(
int,QString,quint64)));
278 connect(
this, SIGNAL(
requestCheck()), executor, SLOT(check()));
280 connect(
this, SIGNAL(
stopThread()), executor, SLOT(deleteLater()));
QPushButton * ellipsisButton
static const bool DEFAULT_CHOOSE_DATADIR
static void pickDataDirectory()
QRadioButton * dataDirDefault
QString boostPathToQString(const boost::filesystem::path &path)
QString getDataDirectory()
void reply(int status, const QString &message, quint64 available)
void setDataDirectory(const QString &dataDir)
QLabel * sizeWarningLabel
static const uint64_t BLOCK_CHAIN_SIZE
static uint64_t requiredSpace
QRadioButton * dataDirCustom
bool GetBoolArg(const std::string &strArg, bool fDefault)
bool SoftSetArg(const std::string &strArg, const std::string &strValue)
static const uint64_t GB_BYTES
bool TryCreateDirectory(const boost::filesystem::path &p)
FreespaceChecker(Intro *intro)
void on_ellipsisButton_clicked()
QLineEdit * dataDirectory
QDialogButtonBox * buttonBox
friend class FreespaceChecker
void on_dataDirectory_textChanged(const QString &arg1)
void on_dataDirCustom_clicked()
void setStatus(int status, const QString &message, quint64 bytesAvailable)
void on_dataDirDefault_clicked()
std::string GetArg(const std::string &strArg, const std::string &strDefault)
static QString getDefaultDataDirectory()
void setupUi(QDialog *Intro)
void checkPath(const QString &dataDir)
boost::filesystem::path qstringToBoostPath(const QString &path)
static const uint64_t CHAIN_STATE_SIZE
boost::filesystem::path GetDefaultDataDir()