Compare commits

..

No commits in common. 'ubuntu/plucky' and 'ubuntu/focal' have entirely different histories.

99
debian/changelog vendored

@ -1,98 +1,5 @@
lxqt-archiver (1.1.0-0ubuntu1) plucky; urgency=medium
lxqt-archiver (0.0.96-0ubuntu1) cosmic; urgency=medium
* New upstream release.
- Bump build dependencies.
* Initial release.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 15 Nov 2024 15:32:25 -0600
lxqt-archiver (1.0.0-0ubuntu1) oracular; urgency=medium
* New upstream release.
* Bump Standards-Version to 4.7.0, no changes necessary.
* Adjust dependencies.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 15 Aug 2024 16:49:03 -0500
lxqt-archiver (0.9.1-0ubuntu1) noble; urgency=medium
* New upstream release.
* Update copyright file.
* Remove 0001-Support-use-of-7zip.patch, now included in upstream code
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 23 Feb 2024 14:34:49 -0600
lxqt-archiver (0.9.0-0ubuntu2) noble; urgency=medium
* Fix invalid argument use of 7z. (LP: #2052880)
-- Sudip Mukherjee <sudipm.mukherjee@gmail.com> Sun, 11 Feb 2024 21:59:12 +0000
lxqt-archiver (0.9.0-0ubuntu1) noble; urgency=medium
* New upstream release.
* Bump build dependencies.
* Bump Standards-version to 4.6.2, no changes needed.
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 12 Nov 2023 18:08:55 -0600
lxqt-archiver (0.8.0-0ubuntu1) mantic; urgency=medium
* New upstream release.
* Bump build dependencies.
* Bump Standards-version to 4.6.2, no changes needed.
* Update copyright years.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 11 Aug 2023 09:49:36 -0500
lxqt-archiver (0.7.0-0ubuntu2) lunar; urgency=medium
* No-change rebuild against libfm-qt 1.2.1.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 27 Jan 2023 15:49:34 -0600
lxqt-archiver (0.7.0-0ubuntu1) lunar; urgency=medium
* New upstream version.
* Fix the watch file, for real this time.
* Lubuntuify the package slightly, to make debhelper happy.
* Bump build dependencies in debian/control.
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 17 Nov 2022 22:12:24 -0600
lxqt-archiver (0.6.0-1) experimental; urgency=medium
* New upstream release.
* Upstreamed compatible changes from Ubuntu, modifying the following files:
- control
- copyright
- lintian-overrides
- rules
- upstream/*
- lxqt-archiver.install
-- Aaron Rainbolt <arraybolt3@gmail.com> Tue, 12 Jul 2022 17:15:16 -0500
lxqt-archiver (0.3.0-2) unstable; urgency=medium
* Source only upload for migration to testing
-- Yao Wei (魏銘廷) <mwei@debian.org> Mon, 01 Feb 2021 19:36:32 +0800
lxqt-archiver (0.3.0-1) unstable; urgency=medium
[ Andrew Lee (李健秋) ]
* Add myself as uploaders
* Correct source/format file
* debian/lxqt-archiver.install: ship correct files
[ Yao Wei (魏銘廷) ]
* debian/copyright: Update copyright file
* debian/control: Add mwei@debian.org as Uploader
-- Yao Wei (魏銘廷) <mwei@debian.org> Thu, 07 Jan 2021 21:41:59 +0800
lxqt-archiver (0.0.0.96-1) experimental; urgency=medium
* Initial release (Closes: #902808)
-- Alf Gaida <agaida@siduction.org> Mon, 25 Jun 2018 22:15:30 +0200
-- Simon Quigley <tsimonq2@ubuntu.com> Mon, 09 Jul 2018 19:16:31 -0500

1
debian/compat vendored

@ -0,0 +1 @@
11

110
debian/control vendored

@ -1,74 +1,29 @@
Source: lxqt-archiver
Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
Original-Maintainer: LXQt Packaging Team <pkg-lxqt-devel@lists.alioth.debian.org>
Uploaders: Alf Gaida <agaida@siduction.org>,
Andrew Lee (李健秋) <ajqlee@debian.org>,
Yao Wei (魏銘廷) <mwei@debian.org>,
Simon Quigley <tsimonq2@debian.org>,
Aaron Rainbolt <arraybolt3@gmail.com>
Section: x11
Priority: optional
Build-Depends: cmake (>= 3.18),
debhelper-compat (= 13),
libfm-qt6-dev (>= 2.1.0),
Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
Uploaders: Simon Quigley <tsimonq2@ubuntu.com>
Build-Depends: cmake,
debhelper (>= 11),
libjson-glib-dev,
libmagic-dev,
libxcb-composite0-dev,
libxcb-cursor-dev,
libxcb-damage0-dev,
libxcb-dpms0-dev,
libxcb-dri2-0-dev,
libxcb-dri3-dev,
libxcb-ewmh-dev,
libxcb-glx0-dev,
libxcb-icccm4-dev,
libxcb-keysyms1-dev,
libxcb-present-dev,
libxcb-record0-dev,
libxcb-render0-dev,
libxcb-res0-dev,
libxcb-screensaver0-dev,
libxcb-shape0-dev,
libxcb-shm0-dev,
libxcb-util-dev,
libxcb-xf86dri0-dev,
libxcb-xfixes0-dev,
libxcb-xinerama0-dev,
libxcb-xinput-dev,
libxcb-xkb-dev,
libxcb-xtest0-dev,
libxcb-xv0-dev,
libxcb-xvmc0-dev,
libxkbcommon-dev (>= 0.5.0),
lxqt-build-tools (>= 2.1.0)
Standards-Version: 4.7.0
Vcs-Browser: https://git.lubuntu.me/Lubuntu/lxqt-archiver-packaging
Vcs-Git: https://git.lubuntu.me/Lubuntu/lxqt-archiver-packaging.git
Debian-Vcs-Browser: https://salsa.debian.org/lxqt-team/lxqt-archiver
Debian-Vcs-Git: https://salsa.debian.org/lxqt-team/lxqt-archiver.git
lxqt-build-tools
Standards-Version: 4.1.5
Homepage: https://github.com/lxqt/lxqt-archiver
Rules-Requires-Root: no
Vcs-Browser: https://phab.lubuntu.me/source/lxqt-archiver/
Vcs-Git: https://phab.lubuntu.me/source/lxqt-archiver.git
Package: lxqt-archiver
Architecture: any
Depends: bzip2, p7zip-full, ${misc:Depends}, ${shlibs:Depends}
Recommends: gvfs, lxqt-archiver-l10n, unzip, xz-utils, zip
Suggests: arj,
binutils,
cpio,
lha,
lzip,
lzma,
lzop,
ncompress,
rar,
rpm2cpio,
rzip,
sharutils,
unace,
unalz,
unrar-free | unar | unrar | p7zip-rar,
zoo
Depends: bzip2,
p7zip-full,
unzip,
xz-utils,
zip,
${misc:Depends},
${shlibs:Depends}
Recommends: lxqt-archiver-l10n
Suggests: gvfs
Description: Archive Manager for LXQt
LXQt Archiver is an archive manager for the LXQt environment.
It allows you to:
@ -91,37 +46,14 @@ Description: Archive Manager for LXQt
compress (.Z), lzip (.lz), lzop (.lzo), lzma (.lzma) and xz (.xz)
.
LXQt Archiver doesn't perform archive operations by itself, but relies on
standard tools for this.
standard backend tools to accomplish this.
.
This package contain the LXQt archiver.
This package contains LXQt Archiver.
Package: lxqt-archiver-l10n
Architecture: all
Multi-Arch: foreign
Section: localization
Depends: qt6-translations-l10n, ${misc:Depends}
Depends: qttranslations5-l10n, ${misc:Depends}
Description: Language package for lxqt-archiver
LXQt Archiver is an archive manager for the LXQt environment.
It allows you to:
* Create and modify archives.
* View the content of an archive.
* View a file contained in an archive.
* Extract files from the archive.
.
LXQt Archiver supports the following formats:
* Tar (.tar) archives, including those compressed with
gzip (.tar.gz, .tgz), bzip (.tar.bz, .tbz), bzip2 (.tar.bz2, .tbz2),
compress (.tar.Z, .taz), lzip (.tar.lz, .tlz), lzop (.tar.lzo, .tzo),
lzma (.tar.lzma) and xz (.tar.xz)
* Zip archives (.zip)
* Jar archives (.jar, .ear, .war)
* 7z archives (.7z)
* iso9660 CD images (.iso)
* Lha archives (.lzh)
* Single files compressed with gzip (.gz), bzip (.bz), bzip2 (.bz2),
compress (.Z), lzip (.lz), lzop (.lzo), lzma (.lzma) and xz (.xz)
.
LXQt Archiver doesn't perform archive operations by itself, but relies on
standard tools for this.
.
This package contains the l10n files needed by lxqt-archiver.
This package contains the l10n files needed by LXQt Archiver.

76
debian/copyright vendored

@ -3,73 +3,27 @@ Upstream-Name: lxqt-archiver
Source: https://github.com/lxqt/lxqt-archiver
Files: *
Copyright: 2018-2024 LXQt team
License: GPL-2+
Comment: Some of the source code is derived from Engrampa and File
Roller
Files: src/passworddialog.cpp
src/passworddialog.h
Copyright: Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
License: GPL-2+
Files: src/main.cpp
src/core/*
Copyright: 2018-2022 LXQt team
2001-2012 Free Software Foundation, Inc.
License: GPL-2+
Files: src/core/CMakeLists.txt
src/core/config.h
src/core/tr-wrapper.c
src/core/tr-wrapper.h
src/core/sh/isoinfo.sh
Copyright: 2018-2022 LXQt team
License: GPL-2+
Files: src/core/fr-command-lrzip.c
src/core/fr-command-lrzip.h
Copyright: 2010 Alexander Saprykin
License: GPL-2+
Files: src/core/fr-enum-types.c
src/core/fr-enum-types.h
src/core/fr-marshal.c
src/core/fr-marshal.h
Copyright: Unknown, possibly Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
Copyright: 2001-2012 The Free Software Foundation, Inc.
2018 The LXQt team
License: GPL-2+
Files: debian/*
Copyright: 2021-2024, Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
2018, Alf Gaida <agaida@siduction.org>
License: LGPL-2.1+
Copyright: 2018 Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
License: GPL-2+
License: GPL-2+
This program or library is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.
This program is distributed in the hope that it will be useful,
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
On Debian systems, the complete text of the GNU General Public
License version 2 can be found in
"/usr/share/common-licenses/GPL-2".
License: LGPL-2.1+
This program or library is free software; you can redistribute it
and/or modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>
.
On Debian systems, the complete text of the GNU Lesser General
Public License version 2.1 can be found in
"/usr/share/common-licenses/LGPL-2.1".
On Debian systems, the complete text of the GNU General
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".

1
debian/docs/docs vendored

@ -1 +0,0 @@
README.md

6
debian/gbp.conf vendored

@ -1,6 +0,0 @@
[DEFAULT]
debian-branch = debian/sid
upstream-branch = upstream/latest
pristine-tar = True
compression = xz

@ -1 +0,0 @@
lxqt-archiver: no-manual-page [usr/bin/lxqt-archiver]

@ -1,3 +1,4 @@
usr/bin/lxqt-archiver
usr/libexec/lxqt-archiver/isoinfo.sh
usr/libexec/lxqt-archiver/rpm2cpio
usr/share/applications/lxqt-archiver.desktop
usr/share/icons/hicolor/scalable/apps/lxqt-archiver.svg

@ -0,0 +1 @@
support-viewing-current-item.patch

@ -0,0 +1,480 @@
Description: Support viewing (launching) current item
By double-clicking it or through its context menu item if it's a file.
.
Also, remember the last dir on opening files in each session.
.
Also, set `Qt::AA_UseHighDpiPixmaps`.
.
Also, commented out `QDebug` messages to be able to see temporary ones ;)
Author: Tsu Jan <tsujan2000@gmail.com>
Origin: upstream
Bug: https://github.com/lxqt/lxqt-archiver/pull/10
Last-Update: 2018-07-09
--- a/src/archiver.cpp
+++ b/src/archiver.cpp
@@ -338,7 +338,7 @@ void Archiver::rebuildDirTree() {
std::string dirName = stripTrailingSlash(item->fullPath());
dirMap_[dirName] = item;
}
-
+
if(fileData->encrypted) {
isEncrypted_ = true;
}
@@ -385,8 +385,8 @@ void Archiver::rebuildDirTree() {
g_free(tmp);
}
- qDebug("op: %s, %s", fileData->original_path, item->originalPath());
- qDebug("fp: %s, %s", fileData->full_path, item->fullPath());
+ //qDebug("op: %s, %s", fileData->original_path, item->originalPath());
+ //qDebug("fp: %s, %s", fileData->full_path, item->fullPath());
fileData->name = g_path_get_basename(dirName.c_str());
fileData->dir = 1;
file_data_update_content_type(fileData);
@@ -419,9 +419,9 @@ void Archiver::rebuildDirTree() {
}
rootItem_ = dirMap_["/"];
- for(auto& kv: dirMap_) {
+ /*for(auto& kv: dirMap_) {
qDebug("dir: %s: %d", kv.first.c_str(), kv.second->children().size());
- }
+ }*/
}
void Archiver::stopCurrentAction() {
@@ -519,14 +519,14 @@ const FileData* Archiver::fileDataByOrig
// We use the workaround provided here: https://bugreports.qt.io/browse/QTBUG-18434
void Archiver::onStart(FrArchive*, FrAction action, Archiver* _this) {
- qDebug("start");
+ //qDebug("start");
_this->busy_ = true;
QMetaObject::invokeMethod(_this, "start", Qt::QueuedConnection, QGenericReturnArgument(), Q_ARG(FrAction, action));
}
void Archiver::onDone(FrArchive*, FrAction action, FrProcError* error, Archiver* _this) {
- qDebug("done: %s", error && error->gerror ? error->gerror->message : "");
+ //qDebug("done: %s", error && error->gerror ? error->gerror->message : "");
// FIXME: error might become dangling pointer for queued connections. :-(
switch(action) {
@@ -546,11 +546,11 @@ void Archiver::onDone(FrArchive*, FrActi
void Archiver::onProgress(FrArchive*, double fraction, Archiver* _this) {
QMetaObject::invokeMethod(_this, "progress", Qt::QueuedConnection, QGenericReturnArgument(), Q_ARG(double, fraction));
- qDebug("progress: %lf", fraction);
+ //qDebug("progress: %lf", fraction);
}
void Archiver::onMessage(FrArchive*, const char* msg, Archiver* _this) {
- qDebug("message: %s", msg);
+ //qDebug("message: %s", msg);
QMetaObject::invokeMethod(_this, "message", Qt::QueuedConnection, QGenericReturnArgument(), Q_ARG(QString, QString::fromUtf8(msg)));
}
@@ -560,6 +560,6 @@ void Archiver::onStoppable(FrArchive*, g
void Archiver::onWorkingArchive(FrCommand* comm, const char* filename, Archiver* _this) {
// FIXME: why the first param is comm?
- qDebug("working: %s", filename);
+ //qDebug("working: %s", filename);
Q_EMIT _this->workingArchive(filename);
}
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -334,6 +334,7 @@ int main(int argc, char** argv) {
QApplication app(argc, argv);
app.setApplicationVersion(LXQT_ARCHIVER_VERSION);
app.setQuitOnLastWindowClosed(true);
+ app.setAttribute(Qt::AA_UseHighDpiPixmaps);
// load translations
// install the translations built-into Qt itself
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -31,6 +31,7 @@
#include <QBoxLayout>
#include <QCheckBox>
#include <QSpinBox>
+#include <QStandardPaths>
#include <QDebug>
@@ -41,6 +42,7 @@
#include <libfm-qt/utilities.h>
#include <libfm-qt/filepropsdialog.h>
#include <libfm-qt/filedialog.h>
+#include <libfm-qt/filelauncher.h>
// #include <libfm-qt/pathbar.h>
#include <map>
@@ -82,6 +84,8 @@ MainWindow::MainWindow(QWidget* parent):
popupMenu_ = new QMenu{this};
popupMenu_->addAction(ui_->actionExtract);
popupMenu_->addAction(ui_->actionDelete);
+ popupMenu_->addSeparator();
+ popupMenu_->addAction(ui_->actionView);
// proxy model used to filter and sort the items
proxyModel_ = new ArchiverProxyModel{this};
@@ -98,6 +102,7 @@ MainWindow::MainWindow(QWidget* parent):
// show context menu
ui_->fileListView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui_->fileListView, &QAbstractItemView::customContextMenuRequested, this, &MainWindow::onFileListContextMenu);
+ connect(ui_->fileListView, &QAbstractItemView::doubleClicked, this, &MainWindow::onFileListDoubleClicked);
connect(archiver_.get(), &Archiver::invalidateContent, this, &MainWindow::onInvalidateContent);
connect(archiver_.get(), &Archiver::start, this, &MainWindow::onActionStarted);
@@ -115,9 +120,16 @@ MainWindow::MainWindow(QWidget* parent):
ui_->actionPaste->deleteLater();
ui_->actionRename->deleteLater();
ui_->actionFind->deleteLater();
+
+ lasrDir_ = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
+
+ setAttribute(Qt::WA_DeleteOnClose, true);
}
MainWindow::~MainWindow() {
+ if(!tempDir_.isEmpty()) { // remove the temp dir if any
+ QDir(tempDir_).removeRecursively();
+ }
}
void MainWindow::loadFile(const Fm::FilePath &file) {
@@ -127,6 +139,18 @@ void MainWindow::loadFile(const Fm::File
splitVolumes_ = false;
volumeSize_ = 0;
+ // find the name of temporary extraction directory (used for viewing files)
+ if(!tempDir_.isEmpty()) { // remove the last temp dir
+ QDir(tempDir_).removeRecursively();
+ }
+ QString tmp = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
+ if(!tmp.isEmpty()) {
+ if(QDir(tmp).exists()) {
+ tempDir_ = tmp + "/" + "lxqt-archiver-"
+ + QDateTime::currentDateTime().toString("yyyyMMddhhmmss");
+ }
+ }
+
archiver_->openArchive(file.uri().get(), nullptr);
}
@@ -155,15 +179,17 @@ void MainWindow::on_actionCreateNew_trig
}
void MainWindow::on_actionOpen_triggered(bool /*checked*/) {
- qDebug("open");
+ //qDebug("open");
Fm::FileDialog dlg{this};
dlg.setFileMode(QFileDialog::ExistingFile);
dlg.setNameFilters(Archiver::supportedOpenNameFilters() << tr("All files (*)"));
- qDebug() << Archiver::supportedOpenMimeTypes();
+ //qDebug() << Archiver::supportedOpenMimeTypes();
dlg.setAcceptMode(QFileDialog::AcceptOpen);
+ dlg.setDirectory(lasrDir_);
if(dlg.exec() == QDialog::Accepted) {
auto url = dlg.selectedFiles()[0];
if(!url.isEmpty()) {
+ lasrDir_ = dlg.directory();
loadFile(Fm::FilePath::fromUri(url.toEncoded()));
}
}
@@ -187,6 +213,7 @@ void MainWindow::on_actionAddFiles_trigg
dlg.setFileMode(QFileDialog::ExistingFiles);
dlg.setNameFilters(QStringList{} << tr("All files (*)"));
dlg.setAcceptMode(QFileDialog::AcceptOpen);
+ dlg.setDirectory(lasrDir_);
// only add the files if they are newer
auto onlyIfNewerCheckbox = new QCheckBox{tr("Add only if &newer"), &dlg};
@@ -199,8 +226,9 @@ void MainWindow::on_actionAddFiles_trigg
return;
auto fileUrls = dlg.selectedFiles();
- qDebug() << "selected:" << fileUrls;
+ //qDebug() << "selected:" << fileUrls;
if(!fileUrls.isEmpty()) {
+ lasrDir_ = dlg.directory();
auto srcPaths = Fm::pathListFromQUrls(fileUrls);
archiver_->addFiles(srcPaths,
currentDirPath_.c_str(),
@@ -218,6 +246,7 @@ void MainWindow::on_actionAddFolder_trig
dlg.setFileMode(QFileDialog::Directory);
dlg.setNameFilters(QStringList{} << tr("All files (*)"));
dlg.setAcceptMode(QFileDialog::AcceptOpen);
+ dlg.setDirectory(lasrDir_);
// only add the files if they are newer
auto onlyIfNewerCheckbox = new QCheckBox{tr("Add only if &newer"), &dlg};
@@ -232,6 +261,7 @@ void MainWindow::on_actionAddFolder_trig
QUrl dirUrl = dlg.selectedFiles()[0];
if(!dirUrl.isEmpty()) {
+ lasrDir_ = dlg.directory();
auto path = Fm::FilePath::fromUri(dirUrl.toEncoded().constData());
archiver_->addDirectory(path,
currentDirPath_.c_str(),
@@ -247,7 +277,7 @@ void MainWindow::on_actionDelete_trigger
if(QMessageBox::question(this, tr("Confirm"), tr("Are you sure you want to delete selected files?"), QMessageBox::Yes|QMessageBox::No) != QMessageBox::Yes) {
return;
}
- qDebug("delete");
+ //qDebug("delete");
auto files = selectedFiles(true);
if(!files.empty()) {
archiver_->removeFiles(files, FR_COMPRESSION_NORMAL);
@@ -259,7 +289,7 @@ void MainWindow::on_actionSelectAll_trig
}
void MainWindow::on_actionExtract_triggered(bool /*checked*/) {
- qDebug("extract");
+ //qDebug("extract");
ExtractFileDialog dlg{this};
auto files = selectedFiles(true);
@@ -312,6 +342,62 @@ void MainWindow::on_actionExtract_trigge
}
}
+void MainWindow::tempExtractCurFile(bool launch) {
+ launchPath_.clear();
+ if(tempDir_.isEmpty()) {
+ return;
+ }
+ if(auto selModel = ui_->fileListView->selectionModel()) {
+ QModelIndex idx = selModel->currentIndex();
+ auto item = itemFromIndex(idx);
+ if(item && !item->isDir()) {
+ const QString fileName = tempDir_ + item->fullPath();
+ if(QFile::exists(fileName)) { // already extracted under tmp
+ if(launch) {
+ Fm::FilePathList paths;
+ paths.push_back(Fm::FilePath::fromLocalPath(fileName.toLocal8Bit().constData()));
+ Fm::FileLauncher().launchPaths(nullptr, std::move(paths));
+ }
+ return;
+ }
+
+ if (launch) {
+ launchPath_ = fileName;
+ }
+
+ QString dest = tempDir_;
+ QDir dir(tempDir_);
+ const QString curDirPath = QString::fromStdString(currentDirPath_);
+ if(curDirPath.contains("/")) {
+ dest = tempDir_ + "/" + curDirPath.section("/", 0, -2);
+ dir.mkpath(dest); // also creates "dir" if needed
+ }
+ else if(!dir.exists()) {
+ dir.mkpath(tempDir_);
+ }
+
+ if(archiver_->isEncrypted() && password_.empty()) {
+ password_ = PasswordDialog::askPassword(this).toStdString();
+ }
+ auto destDir = Fm::FilePath::fromLocalPath(dest.toLocal8Bit().constData());
+ std::vector<const FileData*> files;
+ files.emplace_back(item->data());
+ archiver_->extractFiles(files,
+ destDir,
+ currentDirPath_.c_str(),
+ false,
+ false,
+ false,
+ password_.empty() ? nullptr : password_.c_str()
+ );
+ }
+ }
+}
+
+void MainWindow::on_actionView_triggered(bool /*checked*/) {
+ tempExtractCurFile(true);
+}
+
void MainWindow::on_actionTest_triggered(bool /*checked*/) {
if(archiver_->isLoaded()) {
archiver_->testArchiveIntegrity(nullptr);
@@ -379,11 +465,20 @@ void MainWindow::onFileListSelectionChan
}
void MainWindow::onFileListContextMenu(const QPoint &pos) {
+ if(auto selModel = ui_->fileListView->selectionModel()) {
+ QModelIndex idx = selModel->currentIndex();
+ auto item = itemFromIndex(idx);
+ ui_->actionView->setVisible(item && !item->isDir());
+ }
// QAbstractScrollArea and its subclasses map the context menu event to coordinates of the viewport().
auto globalPos = ui_->fileListView->viewport()->mapToGlobal(pos);
popupMenu_->popup(globalPos);
}
+void MainWindow::onFileListDoubleClicked(const QModelIndex & /*index*/) {
+ tempExtractCurFile(true);
+}
+
void MainWindow::onFileListActivated(const QModelIndex &index) {
auto item = itemFromIndex(index);
if(item && item->isDir()) {
@@ -408,11 +503,11 @@ void MainWindow::onActionStarted(FrActio
progressBar_->show();
progressBar_->setFormat(tr("%p %"));
- qDebug("action start: %d", action);
+ //qDebug("action start: %d", action);
switch(action) {
case FR_ACTION_CREATING_NEW_ARCHIVE:
- qDebug("new archive");
+ //qDebug("new archive");
setFileName(archiver_->archiveDisplayName());
break;
case FR_ACTION_LOADING_ARCHIVE: /* loading the archive from a remote location */
@@ -463,16 +558,16 @@ void MainWindow::onActionFinished(FrActi
setBusyState(false);
progressBar_->hide();
- qDebug("action finished: %d", action);
+ //qDebug("action finished: %d", action);
switch(action) {
case FR_ACTION_LOADING_ARCHIVE: /* loading the archive from a remote location */
- qDebug("finish! %d", action);
+ //qDebug("finish! %d", action);
break;
case FR_ACTION_CREATING_NEW_ARCHIVE: // same as listing empty content
case FR_ACTION_CREATING_ARCHIVE: /* creating a local archive */
case FR_ACTION_LISTING_CONTENT: /* listing the content of the archive */
- qDebug("content listed");
+ //qDebug("content listed");
// content dir list of the archive is fully loaded
updateDirTree();
@@ -504,6 +599,14 @@ void MainWindow::onActionFinished(FrActi
archiver_->reloadArchive(nullptr);
break;
case FR_ACTION_EXTRACTING_FILES: /* extracting files */
+ if(!launchPath_.isEmpty()) {
+ if(!err.hasError() && QFile::exists(launchPath_)) {
+ Fm::FilePathList paths;
+ paths.push_back(Fm::FilePath::fromLocalPath(launchPath_.toLocal8Bit().constData()));
+ Fm::FileLauncher().launchPaths(this, std::move(paths));
+ }
+ launchPath_.clear();
+ }
break;
case FR_ACTION_COPYING_FILES_TO_REMOTE: /* copying extracted files to a remote location */
break;
@@ -613,7 +716,7 @@ void MainWindow::showFileList(const std:
if(currentDirItem_) {
auto parent = archiver_->parentDir(currentDirItem_);
if(parent) {
- qDebug("parent: %s", parent ? parent->fullPath() : "null");
+ //qDebug("parent: %s", parent ? parent->fullPath() : "null");
auto parentRow = createFileListRow(parent);
parentRow[0]->setText("..");
model->appendRow(parentRow);
@@ -711,7 +814,7 @@ std::vector<const FileData*> MainWindow:
// FIXME: the old code uses FileData here. Later we should all use ArchiveItem instead.
for(auto& item: items) {
if(item->data()) {
- qDebug("SEL: %s", item->fullPath());
+ //qDebug("SEL: %s", item->fullPath());
results.emplace_back(item->data());
}
}
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -72,10 +72,12 @@ private Q_SLOTS:
void on_actionExtract_triggered(bool checked);
+ void on_actionView_triggered(bool checked);
+
void on_actionTest_triggered(bool checked);
void on_actionPassword_triggered(bool checked);
-
+
void on_actionDirTree_toggled(bool checked);
void on_actionDirTreeMode_toggled(bool checked);
@@ -94,6 +96,8 @@ private Q_SLOTS:
void onFileListContextMenu(const QPoint &pos);
+ void onFileListDoubleClicked(const QModelIndex &index);
+
void onFileListActivated(const QModelIndex &index);
private Q_SLOTS:
@@ -137,7 +141,9 @@ private:
const ArchiverItem* itemFromIndex(const QModelIndex& index);
QModelIndex indexFromItem(const QModelIndex& parent, const ArchiverItem* item);
-
+
+ void tempExtractCurFile(bool launch);
+
private:
std::unique_ptr<Ui::MainWindow> ui_;
std::shared_ptr<Archiver> archiver_;
@@ -153,6 +159,10 @@ private:
bool encryptHeader_;
bool splitVolumes_;
unsigned int volumeSize_;
+
+ QString tempDir_;
+ QString launchPath_;
+ QUrl lasrDir_;
};
#endif // MAINWINDOW_H
--- a/src/mainwindow.ui
+++ b/src/mainwindow.ui
@@ -410,6 +410,11 @@
<string>Filename &amp;Encoding</string>
</property>
</action>
+ <action name="actionView">
+ <property name="text">
+ <string>&amp;View Current Item</string>
+ </property>
+ </action>
</widget>
<resources/>
<connections>
--- a/src/progressdialog.cpp
+++ b/src/progressdialog.cpp
@@ -45,7 +45,7 @@ void ProgressDialog::reject() {
}
void ProgressDialog::onProgress(double fraction) {
- qDebug("progress: %lf", fraction);
+ //qDebug("progress: %lf", fraction);
if(fraction < 0.0) {
// negative progress indicates that progress is unknown
ui_->progressBar->setRange(0, 0); // set it to undertermined state
@@ -60,7 +60,7 @@ void ProgressDialog::onFinished(FrAction
}
void ProgressDialog::onMessage(QString msg) {
- qDebug("progress: %s", msg.toUtf8().constData());
+ //qDebug("progress: %s", msg.toUtf8().constData());
ui_->message->setText(msg);
}
@@ -69,7 +69,7 @@ void ProgressDialog::onStoppableChanged(
}
void ProgressDialog::onWorkingArchive(QString filename) {
- qDebug("progress: %s", filename.toUtf8().constData());
+ //qDebug("progress: %s", filename.toUtf8().constData());
ui_->currentFile->setText(filename);
}

10
debian/rules vendored

@ -1,11 +1,12 @@
#!/usr/bin/make -f
# export DH_VERBOSE=1
export LC_ALL=C.UTF-8
export DH_VERBOSE = 1
export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-format
export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
%:
dh ${@} --buildsystem cmake
dh $@
override_dh_missing:
dh_missing --fail-missing
@ -13,5 +14,4 @@ override_dh_missing:
override_dh_auto_configure:
dh_auto_configure -- \
-DUPDATE_TRANSLATIONS=OFF \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DUSE_7Z=ON
-DCMAKE_BUILD_TYPE=RelWithDebInfo

@ -1,12 +0,0 @@
# For more information on what jobs are run see:
# https://salsa.debian.org/salsa-ci-team/pipeline
#
# To enable the jobs, go to your repository (at salsa.debian.org)
# and click over Settings > CI/CD > Expand (in General pipelines).
# In "Custom CI config path" write debian/salsa-ci.yml and click
# in "Save Changes". The CI tests will run after the next commit.
---
include:
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml

@ -1,2 +0,0 @@
# This is expected
lxqt-archiver source: very-long-line-length-in-source-file * > 512 [src/lxqt-archiver.desktop.in:*]

@ -1 +0,0 @@
tar-ignore=.gitignore

@ -1,5 +0,0 @@
Name: lxqt-archiver
Bug-Database: https://github.com/lxqt/lxqt-archiver/issues
Bug-Submit: https://github.com/lxqt/lxqt-archiver/issues/new
Changelog: https://github.com/lxqt/lxqt-archiver/blob/master/CHANGELOG
Repository: https://github.com/lxqt/lxqt-archiver

@ -1,52 +1,50 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
sw==
=gSIv
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
=h7ww
-----END PGP PUBLIC KEY BLOCK-----

6
debian/watch vendored

@ -1,5 +1,3 @@
version=4
opts="searchmode=plain, \
pgpsigurlmangle=s/$/.asc/, \
uversionmangle=s/(\d+\.\d+\.\d+).*/$1/" \
https://api.github.com/repos/lxqt/@PACKAGE@/releases https:\/\/github.com\/lxqt\/@PACKAGE@\/releases\/download\/@ANY_VERSION@\/@PACKAGE@-@ANY_VERSION@.tar.xz
opts="pgpsigurlmangle=s/$/.asc/" \
https://github.com/lxqt/lxqt-archiver/releases .*/lxqt-archiver-([\d\.]+).tar.xz

Loading…
Cancel
Save