summaryrefslogtreecommitdiffstats
path: root/ui/qt/recent_file_status.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ui/qt/recent_file_status.cpp')
-rw-r--r--ui/qt/recent_file_status.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/ui/qt/recent_file_status.cpp b/ui/qt/recent_file_status.cpp
new file mode 100644
index 00000000..c26cf488
--- /dev/null
+++ b/ui/qt/recent_file_status.cpp
@@ -0,0 +1,36 @@
+/* recent_file_status.cpp
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "recent_file_status.h"
+
+RecentFileStatus::RecentFileStatus(const QString filename, QObject *parent) :
+ QObject(parent),
+ // Force a deep copy.
+ filename_(QString::fromStdU16String(filename.toStdU16String()))
+{
+ // We're a QObject, which means that we emit a destroyed signal,
+ // which might happen at the wrong time when automatic deletion is
+ // enabled. This will trigger an assert in debug builds (bug 14279).
+ setAutoDelete(false);
+ // Qt::QueuedConnection creates a copy of our argument list. This
+ // squelches what appears to be a ThreadSanitizer false positive.
+ connect(this, SIGNAL(statusFound(QString, qint64, bool)),
+ parent, SLOT(itemStatusFinished(QString, qint64, bool)), Qt::QueuedConnection);
+}
+
+void RecentFileStatus::run() {
+ fileinfo_.setFile(filename_);
+
+ if (fileinfo_.isFile() && fileinfo_.isReadable()) {
+ emit statusFound(filename_, fileinfo_.size(), true);
+ } else {
+ emit statusFound(filename_, 0, false);
+ }
+ deleteLater();
+}