# # # patch "src/view/dialogs/RevisionManifest.cpp" # from [01451a2aff2dac00dc1026aa90a11c469f41e2e4] # to [736a6cd757dfe3b1523445bb4bc76d7153d2247c] # # patch "src/view/dialogs/RevisionManifest.h" # from [55c5f87ddce26d91aa7b2331ceba4c6e665eb947] # to [f52de1b4ac11bb65b418ecdf8923f6760018e956] # ============================================================ --- src/view/dialogs/RevisionManifest.cpp 01451a2aff2dac00dc1026aa90a11c469f41e2e4 +++ src/view/dialogs/RevisionManifest.cpp 736a6cd757dfe3b1523445bb4bc76d7153d2247c @@ -19,8 +19,8 @@ ***************************************************************************/ #include "RevisionManifest.h" -#include "Guitone.h" #include "Platform.h" +#include "MonotoneUtil.h" #include "FileExporter.h" #include @@ -29,42 +29,34 @@ #include #include -RevisionManifest::RevisionManifest(QWidget* parent, QString rev) - : Dialog(parent), revision(rev) +RevisionManifest::RevisionManifest(QWidget * parent, const QString & db) + : Dialog(parent), databaseFile(db) { setupUi(this); Dialog::init(); - - setWindowTitle(windowTitle().arg(revision)); - - manifestModel = new Manifest(this); + + manifestModel = new Manifest(this, databaseFile); manifestView->setModel(manifestModel); - + connect( saveSelected, SIGNAL(clicked()), this, SLOT(saveSelectedFiles()) ); - + connect( saveAll, SIGNAL(clicked()), this, SLOT(saveAllFiles()) ); - + connect( manifestView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(openFile(const QModelIndex &)) ); - + connect( manifestView, SIGNAL(contextMenuRequested(const QModelIndexList &, const QPoint &)), this, SLOT(contextMenuRequested(const QModelIndexList &, const QPoint &)) ); - - if (!manifestModel->readManifest(revision)) - { - C("Couldn't execute readManifest"); - // FIXME: proper error handling here - } } RevisionManifest::~RevisionManifest() @@ -72,28 +64,34 @@ RevisionManifest::~RevisionManifest() delete manifestModel; } +void RevisionManifest::readManifest(const QString & rev) +{ + revision = rev; + setWindowTitle(windowTitle().arg(revision)); + manifestModel->readManifest(revision); +} + void RevisionManifest::openFile(const QModelIndex & index) { if (!index.isValid()) return; - - ManifestEntry * entry = static_cast(index.internalPointer()); - + + ManifestEntry * entry = static_cast(index.internalPointer()); + // return silently if (entry->is_directory) return; - - Monotone * mtn = MTN(this); - - int commandNumber; - QStringList cmd; - cmd << "get_file" << entry->hash; - if (!mtn->executeCommand(cmd, commandNumber) || - mtn->getReturnCode(commandNumber) > 0) + MonotoneTask out = MonotoneUtil::runSynchronousDatabaseTask( + databaseFile, + MonotoneTask(QStringList() << "get_file" << entry->hash) + ); + if (!out.isFinished()) F("task aborted"); + + if (out.getReturnCode() > 0) { - C("Cannot execute get_file"); + C(QString("Cannot execute get_file: %1").arg(out.getOutputUtf8())); return; } - + // // FIXME: temporary files are currently saved into /tmp/guitone-/.ext // on unices and somewhere in %WINDIR%\temp\guitone- or similar under Win32. @@ -111,54 +109,55 @@ void RevisionManifest::openFile(const QM return; } tempPath.append(QDir::separator()).append(entry->filename()); - + QFile file(tempPath); if (file.exists()) file.remove(); - + if (!file.open(QIODevice::WriteOnly)) { C("Can't open temporary file for writing"); return; } - - file.write(mtn->getRawData(commandNumber)); + + file.write(out.getOutput()); file.close(); - + if (!Platform::openFile(this, tempPath)) { QMessageBox::critical( this, tr("Error"), tr("Unable to open files on your platform - please contact the " - "author about this problem.") + "author about this problem.") ); - + file.remove(); return; } - + QMessageBox::information( this, tr("Information"), tr("Please close this message to remove the temporary file.") ); - + file.remove(); } -void RevisionManifest::contextMenuRequested(const QModelIndexList & indexList, const QPoint & pos) +void RevisionManifest::contextMenuRequested(const QModelIndexList & indexList, + const QPoint & pos) { if (indexList.size() == 0) return; - + QMenu menu(this); QFont activeFont; activeFont.setBold(true); - + QAction * actOpenFile = menu.addAction(tr("Open file")); QAction * actSaveSelected = menu.addAction(tr("Save selected")); QAction * actSaveAll = menu.addAction(tr("Save all")); - - if (indexList.size() == 1 && + + if (indexList.size() == 1 && !static_cast(indexList.at(0).internalPointer())->is_directory) { actOpenFile->setFont(activeFont); @@ -167,7 +166,7 @@ void RevisionManifest::contextMenuReques { actOpenFile->setVisible(false); } - + QAction * act = menu.exec(pos); if (act == actOpenFile) { @@ -183,7 +182,6 @@ void RevisionManifest::contextMenuReques } } - void RevisionManifest::saveAllFiles() { QModelIndexList list; @@ -194,13 +192,13 @@ void RevisionManifest::saveAllFiles() if (!index.isValid()) break; list.append(index); } - - QString exportDir = + + QString exportDir = QFileDialog::getExistingDirectory(0, tr("Select your export directory...")); if (!exportDir.isEmpty()) { - FileExporter exporter(this, revision, QDir(exportDir)); - + FileExporter exporter(databaseFile, revision, QDir(exportDir)); + FileEntryList entries = extractSelectedEntries(list); if (!exporter.run(entries)) { @@ -218,7 +216,7 @@ void RevisionManifest::saveSelectedFiles { QModelIndexList indexes = manifestView->selectionModel()->selectedIndexes(); FileEntryList entries = extractSelectedEntries(indexes); - + if (entries.size() == 0) { QMessageBox::information( @@ -228,12 +226,12 @@ void RevisionManifest::saveSelectedFiles ); return; } - - QString exportDir = + + QString exportDir = QFileDialog::getExistingDirectory(0, tr("Select your export directory...")); if (!exportDir.isEmpty()) { - FileExporter exporter(this, revision, QDir(exportDir)); + FileExporter exporter(databaseFile, revision, QDir(exportDir)); if (!exporter.run(entries)) { QMessageBox::critical( @@ -246,14 +244,18 @@ void RevisionManifest::saveSelectedFiles } } +//! \fixme this should be moved into the FileExporter class +/*! + \sa FileExporter +*/ FileEntryList RevisionManifest::extractSelectedEntries(const QModelIndexList & indexList) { FileEntryList entries; for (int i=0, j=indexList.size(); i(indexList.at(i).internalPointer()); - + if (entry->is_directory) { entries.append(FileEntry(entry->path, true)); @@ -264,10 +266,14 @@ FileEntryList RevisionManifest::extractS entries.append(FileEntry(entry->path, false)); } } - + return entries; } +//! \fixme this should be moved into the FileExporter class +/*! + \sa FileExporter +*/ FileEntryList RevisionManifest::addEntriesRecursive(ManifestEntry * entry) { FileEntryList entries; ============================================================ --- src/view/dialogs/RevisionManifest.h 55c5f87ddce26d91aa7b2331ceba4c6e665eb947 +++ src/view/dialogs/RevisionManifest.h f52de1b4ac11bb65b418ecdf8923f6760018e956 @@ -30,18 +30,20 @@ class RevisionManifest : public Dialog, class RevisionManifest : public Dialog, private Ui::ManifestDialog { - Q_OBJECT - + Q_OBJECT public: - RevisionManifest(QWidget *, QString); - ~RevisionManifest(); - + RevisionManifest(QWidget *, const DatabaseFile &); + ~RevisionManifest(); + + void readManifest(const QString &); + private: FileEntryList extractSelectedEntries(const QModelIndexList &); FileEntryList addEntriesRecursive(ManifestEntry *); Manifest * manifestModel; QString revision; + DatabaseFile databaseFile; private slots: void saveSelectedFiles();