diff --git a/part/archivemodel.h b/part/archivemodel.h --- a/part/archivemodel.h +++ b/part/archivemodel.h @@ -63,7 +63,7 @@ QMimeData * mimeData(const QModelIndexList & indexes) const Q_DECL_OVERRIDE; bool dropMimeData(const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent) Q_DECL_OVERRIDE; - KJob* setArchive(Kerfuffle::Archive *archive); + KJob* setArchive(Kerfuffle::Archive *archive, bool existingArchive = false); Kerfuffle::Archive *archive() const; Kerfuffle::ArchiveEntry entryForIndex(const QModelIndex &index); diff --git a/part/archivemodel.cpp b/part/archivemodel.cpp --- a/part/archivemodel.cpp +++ b/part/archivemodel.cpp @@ -875,7 +875,7 @@ return m_archive.data(); } -KJob* ArchiveModel::setArchive(Kerfuffle::Archive *archive) +KJob* ArchiveModel::setArchive(Kerfuffle::Archive *archive, bool existingArchive) { m_archive.reset(archive); @@ -886,7 +886,7 @@ Kerfuffle::ListJob *job = Q_NULLPTR; m_newArchiveEntries.clear(); - if (m_archive) { + if (m_archive && existingArchive) { job = m_archive->list(); // TODO: call "open" or "create"? connect(job, &Kerfuffle::ListJob::newEntry, this, &ArchiveModel::slotNewEntryFromSetArchive); diff --git a/part/part.cpp b/part/part.cpp --- a/part/part.cpp +++ b/part/part.cpp @@ -505,9 +505,14 @@ Q_ASSERT(archive->isValid()); // Plugin loaded successfully. - KJob *job = m_model->setArchive(archive.take()); - registerJob(job); - job->start(); + KJob *job = m_model->setArchive(archive.take(), localFileInfo.exists()); + if (job) { + registerJob(job); + job->start(); + } else { + updateActions(); + } + m_infoPanel->setIndex(QModelIndex()); if (arguments().metaData()[QStringLiteral("showExtractDialog")] == QLatin1String("true")) {