digiKam
Loading...
Searching...
No Matches
exiftoolprocess_p.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2021-02-18
7 * Description : Qt5 and Qt6 interface for exiftool - private container.
8 * Based on ZExifTool Qt interface published at 18 Feb 2021
9 * https://github.com/philvl/ZExifTool
10 *
11 * SPDX-FileCopyrightText: 2021-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
12 * SPDX-FileCopyrightText: 2021 by Philippe Vianney Liaud <philvl dot dev at gmail dot com>
13 *
14 * SPDX-License-Identifier: GPL-2.0-or-later
15 *
16 * ============================================================ */
17
18#pragma once
19
20#include "exiftoolprocess.h"
21
22// Qt includes
23
24#include <QFile>
25#include <QList>
26#include <QMutex>
27#include <QFileInfo>
28#include <QByteArray>
29#include <QElapsedTimer>
30#include <QStandardPaths>
31#include <QWaitCondition>
32
33// KDE includes
34
35#include <klocalizedstring.h>
36
37// Local includes
38
39#include "digikam_debug.h"
40#include "digikam_config.h"
41#include "digikam_globals.h"
42#include "metaenginesettings.h"
43
44#define CMD_ID_MIN 1
45#define CMD_ID_MAX 2000000000
46
47namespace Digikam
48{
49
50class Q_DECL_HIDDEN ExifToolProcess::Private : public QObject
51{
52 Q_OBJECT
53
54public:
55
56 class Q_DECL_HIDDEN Command
57 {
58 public:
59
60 Command() = default;
61
62 int id = 0;
63 QByteArray argsStr;
64 ExifToolProcess::Action ac = ExifToolProcess::NO_ACTION;
65 };
66
67public:
68
69 explicit Private(ExifToolProcess* const q);
70
71 void readOutput(const QProcess::ProcessChannel channel);
72 void setProcessErrorAndEmit(QProcess::ProcessError error,
73 const QString& description);
74 void setCommandResult(int cmdStatus);
75
76public Q_SLOTS:
77
78 void slotExecNextCmd();
79
80public:
81
82 ExifToolProcess* pp = nullptr;
83 QString etExePath;
84 QString perlExePath;
85
86 QElapsedTimer execTimer;
87 QList<Command> cmdQueue;
88 int cmdNumber = 0;
89 ExifToolProcess::Action cmdAction = ExifToolProcess::NO_ACTION;
90 QMap<int, ExifToolProcess::Result> resultMap;
91
92 int outAwait[2];
93 bool outReady[2];
94 QByteArray outBuff[2];
95
96 bool writeChannelIsClosed = true;
97
98 QProcess::ProcessError processError = QProcess::UnknownError;
99 QString errorString;
100
101 int nextCmdId = CMD_ID_MIN;
102
103 QMutex cmdMutex;
104
105 QMutex mutex;
106 QWaitCondition condVar;
107};
108
109} // namespace Digikam
Definition exiftoolprocess_p.h:57
QByteArray argsStr
Definition exiftoolprocess_p.h:63
Definition exiftoolprocess_p.h:51
QElapsedTimer execTimer
Definition exiftoolprocess_p.h:86
QWaitCondition condVar
Definition exiftoolprocess_p.h:106
QMutex cmdMutex
Definition exiftoolprocess_p.h:103
QList< Command > cmdQueue
Definition exiftoolprocess_p.h:87
QMutex mutex
Definition exiftoolprocess_p.h:105
QMap< int, ExifToolProcess::Result > resultMap
Definition exiftoolprocess_p.h:90
QString perlExePath
Definition exiftoolprocess_p.h:84
QString errorString
Definition exiftoolprocess_p.h:99
QString etExePath
Definition exiftoolprocess_p.h:83
Definition exiftoolprocess.h:35
Action
Definition exiftoolprocess.h:44
#define CMD_ID_MIN
Definition exiftoolprocess_p.h:44
Definition datefolderview.cpp:34