preserve the binary content of keys and bucket names during edit operations
This commit is contained in:
parent
21588021d3
commit
26f7a11d80
@ -35,6 +35,8 @@ MainWindow::~MainWindow()
|
||||
}
|
||||
|
||||
static const int BdbPointerRole = Qt::UserRole + 1;
|
||||
static const int BinaryDataRole = Qt::UserRole + 2;
|
||||
|
||||
#define SET_BDB(top, bdb) top->setData(0, BdbPointerRole, QVariant::fromValue<void*>(static_cast<void*>(bdb)))
|
||||
#define GET_BDB(top) static_cast<BoltDB*>( top->data(0, BdbPointerRole).value<void*>() )
|
||||
|
||||
@ -86,6 +88,12 @@ void MainWindow::openDatabase(QString file, bool readOnly)
|
||||
ui->bucketTree->expandItem(top);
|
||||
}
|
||||
|
||||
static const QString getDisplayName(const QByteArray &qba) {
|
||||
// FIXME the formatting isn't so great when control characters, etc. are used
|
||||
// A C-style escape display, or the unicode-replacement-character would be preferable
|
||||
return QString::fromUtf8(qba);
|
||||
}
|
||||
|
||||
void MainWindow::refreshBucketTree(QTreeWidgetItem* itm)
|
||||
{
|
||||
QTreeWidgetItem *top = itm;
|
||||
@ -108,7 +116,8 @@ void MainWindow::refreshBucketTree(QTreeWidgetItem* itm)
|
||||
error,
|
||||
[=](QByteArray qba){
|
||||
QTreeWidgetItem *child = new QTreeWidgetItem();
|
||||
child->setText(0, QString::fromUtf8(qba));
|
||||
child->setText(0, getDisplayName(qba));
|
||||
child->setData(0, BinaryDataRole, qba);
|
||||
child->setIcon(0, QIcon(":/rsrc/table.png"));
|
||||
itm->addChild(child);
|
||||
|
||||
@ -257,7 +266,8 @@ void MainWindow::refreshData(BoltDB *bdb, QStringList browse)
|
||||
QString err;
|
||||
bool ok = bdb->listKeys(browse, err, [=](QByteArray name, int64_t dataLen) {
|
||||
auto *itm = new QTreeWidgetItem();
|
||||
itm->setText(0, QString::fromUtf8(name));
|
||||
itm->setText(0, getDisplayName(name));
|
||||
itm->setData(0, BinaryDataRole, name);
|
||||
itm->setText(1, QString("%1").arg(dataLen));
|
||||
ui->bucketData->addTopLevelItem(itm);
|
||||
});
|
||||
@ -320,15 +330,15 @@ void MainWindow::on_bucketData_doubleClicked(const QModelIndex &index)
|
||||
// Get item key
|
||||
|
||||
auto model = index.model();
|
||||
QString key = model->data(model->index(index.row(), 0), 0).toString();
|
||||
const QByteArray& key = model->data(model->index(index.row(), 0), BinaryDataRole).toByteArray();
|
||||
|
||||
// DB lookup
|
||||
|
||||
bdb->getData(
|
||||
browse,
|
||||
key.toUtf8(),
|
||||
key,
|
||||
[=](QByteArray content) {
|
||||
openEditor(bdb, browse, key.toUtf8(), content);
|
||||
openEditor(bdb, browse, key, content);
|
||||
},
|
||||
[=](QString error) {
|
||||
QMessageBox qmb;
|
||||
@ -369,8 +379,16 @@ void MainWindow::on_actionDelete_bucket_triggered()
|
||||
GET_ITM_TOP_BROWSE_BDB;
|
||||
|
||||
// Prompt for confirmation
|
||||
QString bucketToDelete = itm->text(0);
|
||||
if (QMessageBox::question(this, tr("Delete bucket"), tr("Are you sure you want to remove the bucket '%1'?").arg(bucketToDelete), QMessageBox::Yes, QMessageBox::Cancel) != QMessageBox::Yes) {
|
||||
const QByteArray& bucketToDelete = itm->data(0, BinaryDataRole).toByteArray();
|
||||
if (
|
||||
QMessageBox::question(
|
||||
this,
|
||||
tr("Delete bucket"),
|
||||
tr("Are you sure you want to remove the bucket '%1'?").arg(getDisplayName(bucketToDelete)),
|
||||
QMessageBox::Yes,
|
||||
QMessageBox::Cancel
|
||||
) != QMessageBox::Yes
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -381,7 +399,7 @@ void MainWindow::on_actionDelete_bucket_triggered()
|
||||
browse.pop_back();
|
||||
|
||||
QString err;
|
||||
if (! bdb->deleteBucket(browse, bucketToDelete.toUtf8(), err)) {
|
||||
if (! bdb->deleteBucket(browse, bucketToDelete, err)) {
|
||||
QMessageBox qmb;
|
||||
qmb.setText(tr("Error removing bucket: %1").arg(err));
|
||||
qmb.exec();
|
||||
|
Loading…
Reference in New Issue
Block a user