Gentoo Archives: gentoo-commits

From: Andreas Sturmlechner <asturm@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: x11-libs/libfm-qt/files/
Date: Tue, 25 Jun 2019 17:57:55
Message-Id: 1561485459.d9cb09425875beeba0f0a771290674d36fb89b8a.asturm@gentoo
1 commit: d9cb09425875beeba0f0a771290674d36fb89b8a
2 Author: Michael Mair-Keimberger <m.mairkeimberger <AT> gmail <DOT> com>
3 AuthorDate: Sun Jun 23 20:50:49 2019 +0000
4 Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
5 CommitDate: Tue Jun 25 17:57:39 2019 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d9cb0942
7
8 x11-libs/libfm-qt: remove unused patches
9
10 Signed-off-by: Michael Mair-Keimberger <m.mairkeimberger <AT> gmail.com>
11 Closes: https://github.com/gentoo/gentoo/pull/12315
12 Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
13
14 ...0.13.1-check-if-app-exists-before-opening.patch | 45 ----
15 ...t-0.13.1-correctly-handle-mountable-types.patch | 80 ------
16 .../files/libfm-qt-0.13.1-fix-smb-error.patch | 279 ---------------------
17 3 files changed, 404 deletions(-)
18
19 diff --git a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-check-if-app-exists-before-opening.patch b/x11-libs/libfm-qt/files/libfm-qt-0.13.1-check-if-app-exists-before-opening.patch
20 deleted file mode 100644
21 index 92b45be432f..00000000000
22 --- a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-check-if-app-exists-before-opening.patch
23 +++ /dev/null
24 @@ -1,45 +0,0 @@
25 -From 4923f860094787d14052e9dc416c9388ff1bb53b Mon Sep 17 00:00:00 2001
26 -From: Tsu Jan <tsujan2000@×××××.com>
27 -Date: Thu, 7 Jun 2018 06:10:37 +0430
28 -Subject: [PATCH] Check if the opening app exists before using it
29 -
30 -Also, show an error message if there's no app.
31 ----
32 - src/core/basicfilelauncher.cpp | 17 ++++++++++++-----
33 - 1 file changed, 12 insertions(+), 5 deletions(-)
34 -
35 -diff --git a/src/core/basicfilelauncher.cpp b/src/core/basicfilelauncher.cpp
36 -index 8390531..2c7f00e 100644
37 ---- a/src/core/basicfilelauncher.cpp
38 -+++ b/src/core/basicfilelauncher.cpp
39 -@@ -256,18 +256,25 @@ FilePath BasicFileLauncher::handleShortcut(const FileInfoPtr& fileInfo, GAppLaun
40 - || strcmp(scheme.get(), "trash") == 0
41 - || strcmp(scheme.get(), "network") == 0
42 - || strcmp(scheme.get(), "computer") == 0) {
43 -- return FilePath::fromUri(fileInfo->target().c_str());
44 -+ return FilePath::fromUri(target.c_str());
45 - }
46 - else {
47 - // ask gio to launch the default handler for the uri scheme
48 -- GAppInfoPtr app{g_app_info_get_default_for_uri_scheme(scheme.get()), false};
49 -- FilePathList uris{FilePath::fromUri(fileInfo->target().c_str())};
50 -- launchWithApp(app.get(), uris, ctx);
51 -+ if(GAppInfoPtr app{g_app_info_get_default_for_uri_scheme(scheme.get()), false}) {
52 -+ FilePathList uris{FilePath::fromUri(target.c_str())};
53 -+ launchWithApp(app.get(), uris, ctx);
54 -+ }
55 -+ else {
56 -+ GErrorPtr err{G_IO_ERROR, G_IO_ERROR_FAILED,
57 -+ QObject::tr("No default application is set to launch '%1'")
58 -+ .arg(target.c_str())};
59 -+ showError(nullptr, err);
60 -+ }
61 - }
62 - }
63 - else {
64 - // see it as a local path
65 -- return FilePath::fromLocalPath(fileInfo->target().c_str());
66 -+ return FilePath::fromLocalPath(target.c_str());
67 - }
68 - return FilePath();
69 - }
70
71 diff --git a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-correctly-handle-mountable-types.patch b/x11-libs/libfm-qt/files/libfm-qt-0.13.1-correctly-handle-mountable-types.patch
72 deleted file mode 100644
73 index adaed387e27..00000000000
74 --- a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-correctly-handle-mountable-types.patch
75 +++ /dev/null
76 @@ -1,80 +0,0 @@
77 -From dc7a5753b934e323d4d8d13f3253cbe7ae55a111 Mon Sep 17 00:00:00 2001
78 -From: "Hong Jen Yee (PCMan)" <pcman.tw@×××××.com>
79 -Date: Sun, 10 Jun 2018 00:07:31 +0800
80 -Subject: [PATCH] Correctly handle mountable types.
81 -
82 ----
83 - src/core/basicfilelauncher.cpp | 6 +++---
84 - src/core/fileinfo.cpp | 4 ++--
85 - src/core/fileinfo.h | 3 ++-
86 - 3 files changed, 7 insertions(+), 6 deletions(-)
87 -
88 -diff --git a/src/core/basicfilelauncher.cpp b/src/core/basicfilelauncher.cpp
89 -index 0dc8208..0ae1177 100644
90 ---- a/src/core/basicfilelauncher.cpp
91 -+++ b/src/core/basicfilelauncher.cpp
92 -@@ -30,11 +30,10 @@ bool BasicFileLauncher::launchFiles(const FileInfoList& fileInfos, GAppLaunchCon
93 - // classify files according to different mimetypes
94 - for(auto& fileInfo : fileInfos) {
95 - /*
96 -- qDebug("path: %s, type: %s, target: %s, isDir: %i, isDesktopEntry: %i",
97 -+ qDebug("path: %s, type: %s, target: %s, isDir: %i, isShortcut: %i, isMountable: %i, isDesktopEntry: %i",
98 - fileInfo->path().toString().get(), fileInfo->mimeType()->name(), fileInfo->target().c_str(),
99 -- fileInfo->isDir(), fileInfo->isDesktopEntry());
100 -+ fileInfo->isDir(), fileInfo->isShortcut(), fileInfo->isMountable(), fileInfo->isDesktopEntry());
101 - */
102 --
103 - if(fileInfo->isMountable()) {
104 - if(fileInfo->target().empty()) {
105 - // the mountable is not yet mounted so we have no target URI.
106 -@@ -269,6 +268,7 @@ FilePath BasicFileLauncher::handleShortcut(const FileInfoPtr& fileInfo, GAppLaun
107 - // if we know the target is a dir, we are not going to open it using other apps
108 - // for example: `network:///smb-root' is a shortcut targeting `smb:///' and it's also a dir
109 - if(fileInfo->isDir()) {
110 -+ qDebug("shortcut is dir: %s", target.c_str());
111 - return FilePath::fromPathStr(target.c_str());
112 - }
113 -
114 -diff --git a/src/core/fileinfo.cpp b/src/core/fileinfo.cpp
115 -index b19a751..5838fe5 100644
116 ---- a/src/core/fileinfo.cpp
117 -+++ b/src/core/fileinfo.cpp
118 -@@ -118,7 +118,8 @@ void FileInfo::setFromGFileInfo(const GObjectPtr<GFileInfo>& inf, const FilePath
119 - isDeletable_ = true;
120 - }
121 -
122 -- isShortcut_ = false;
123 -+ isShortcut_ = (type == G_FILE_TYPE_SHORTCUT);
124 -+ isMountable_ = (type == G_FILE_TYPE_MOUNTABLE);
125 -
126 - /* special handling for symlinks */
127 - if(g_file_info_get_is_symlink(inf.get())) {
128 -@@ -129,7 +130,6 @@ void FileInfo::setFromGFileInfo(const GObjectPtr<GFileInfo>& inf, const FilePath
129 -
130 - switch(type) {
131 - case G_FILE_TYPE_SHORTCUT:
132 -- isShortcut_ = true;
133 - /* Falls through. */
134 - case G_FILE_TYPE_MOUNTABLE:
135 - uri = g_file_info_get_attribute_string(inf.get(), G_FILE_ATTRIBUTE_STANDARD_TARGET_URI);
136 -diff --git a/src/core/fileinfo.h b/src/core/fileinfo.h
137 -index 8437d92..27f7508 100644
138 ---- a/src/core/fileinfo.h
139 -+++ b/src/core/fileinfo.h
140 -@@ -150,7 +150,7 @@ class LIBFM_QT_API FileInfo {
141 - }
142 -
143 - bool isMountable() const {
144 -- return mimeType_->isMountable();
145 -+ return isMountable_;
146 - }
147 -
148 - bool isShortcut() const {
149 -@@ -238,6 +238,7 @@ class LIBFM_QT_API FileInfo {
150 - std::string target_; /* target of shortcut or mountable. */
151 -
152 - bool isShortcut_ : 1; /* TRUE if file is shortcut type */
153 -+ bool isMountable_ : 1; /* TRUE if file is mountable type */
154 - bool isAccessible_ : 1; /* TRUE if can be read by user */
155 - bool isWritable_ : 1; /* TRUE if can be written to by user */
156 - bool isDeletable_ : 1; /* TRUE if can be deleted by user */
157
158 diff --git a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-fix-smb-error.patch b/x11-libs/libfm-qt/files/libfm-qt-0.13.1-fix-smb-error.patch
159 deleted file mode 100644
160 index 12611650a76..00000000000
161 --- a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-fix-smb-error.patch
162 +++ /dev/null
163 @@ -1,279 +0,0 @@
164 -From 1a6fa2632388ffcc57ce723501a588c90b940f93 Mon Sep 17 00:00:00 2001
165 -From: "Hong Jen Yee (PCMan)" <pcman.tw@×××××.com>
166 -Date: Sat, 9 Jun 2018 21:04:19 +0800
167 -Subject: [PATCH] Fix failure to open smb:// caused by incorrect file info
168 - handling.
169 -
170 ----
171 - src/core/basicfilelauncher.cpp | 40 ++++++++++++++++++++++++-------
172 - src/core/basicfilelauncher.h | 2 +-
173 - src/core/fileinfo.cpp | 9 ++++---
174 - src/core/fileinfojob.cpp | 44 +++++++++++++++++++++-------------
175 - src/core/fileinfojob.h | 5 ++++
176 - src/core/gioptrs.h | 4 ++++
177 - src/filelauncher.cpp | 2 +-
178 - src/filelauncher.h | 2 +-
179 - 8 files changed, 77 insertions(+), 31 deletions(-)
180 -
181 -diff --git a/src/core/basicfilelauncher.cpp b/src/core/basicfilelauncher.cpp
182 -index 2c7f00e..0dc8208 100644
183 ---- a/src/core/basicfilelauncher.cpp
184 -+++ b/src/core/basicfilelauncher.cpp
185 -@@ -29,11 +29,13 @@ bool BasicFileLauncher::launchFiles(const FileInfoList& fileInfos, GAppLaunchCon
186 - FilePathList pathsToLaunch;
187 - // classify files according to different mimetypes
188 - for(auto& fileInfo : fileInfos) {
189 -- // qDebug("path: %s, target: %s", fileInfo->path().toString().get(), fileInfo->target().c_str());
190 -- if(fileInfo->isDir()) {
191 -- folderInfos.emplace_back(fileInfo);
192 -- }
193 -- else if(fileInfo->isMountable()) {
194 -+ /*
195 -+ qDebug("path: %s, type: %s, target: %s, isDir: %i, isDesktopEntry: %i",
196 -+ fileInfo->path().toString().get(), fileInfo->mimeType()->name(), fileInfo->target().c_str(),
197 -+ fileInfo->isDir(), fileInfo->isDesktopEntry());
198 -+ */
199 -+
200 -+ if(fileInfo->isMountable()) {
201 - if(fileInfo->target().empty()) {
202 - // the mountable is not yet mounted so we have no target URI.
203 - GErrorPtr err{G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED,
204 -@@ -67,6 +69,9 @@ bool BasicFileLauncher::launchFiles(const FileInfoList& fileInfos, GAppLaunchCon
205 - pathsToLaunch.emplace_back(path);
206 - }
207 - }
208 -+ else if(fileInfo->isDir()) {
209 -+ folderInfos.emplace_back(fileInfo);
210 -+ }
211 - else {
212 - auto& mimeType = fileInfo->mimeType();
213 - mimeTypeToFiles[mimeType->name()].emplace_back(fileInfo);
214 -@@ -103,16 +108,27 @@ bool BasicFileLauncher::launchFiles(const FileInfoList& fileInfos, GAppLaunchCon
215 - bool BasicFileLauncher::launchPaths(FilePathList paths, GAppLaunchContext* ctx) {
216 - // FIXME: blocking with an event loop is not a good design :-(
217 - QEventLoop eventLoop;
218 --
219 - auto job = new FileInfoJob{paths};
220 - job->setAutoDelete(false); // do not automatically delete the job since we want its results later.
221 -
222 - GObjectPtr<GAppLaunchContext> ctxPtr{ctx};
223 -+
224 -+ // error handling (for example: handle path not mounted error)
225 -+ QObject::connect(job, &FileInfoJob::error,
226 -+ &eventLoop, [this, job, ctx](const GErrorPtr & err, Job::ErrorSeverity /* severity */ , Job::ErrorAction &act) {
227 -+ auto path = job->currentPath();
228 -+ if(showError(ctx, err, path, nullptr)) {
229 -+ // the user handled the error and ask for retry
230 -+ act = Job::ErrorAction::RETRY;
231 -+ }
232 -+ }, Qt::BlockingQueuedConnection); // BlockingQueuedConnection is required here to pause the job and wait for user response
233 -+
234 - QObject::connect(job, &FileInfoJob::finished,
235 - [&eventLoop]() {
236 - // exit the event loop when the job is done
237 - eventLoop.exit();
238 - });
239 -+
240 - // run the job in another thread to not block the UI
241 - job->runAsync();
242 -
243 -@@ -145,7 +161,7 @@ BasicFileLauncher::ExecAction BasicFileLauncher::askExecFile(const FileInfoPtr &
244 - return ExecAction::DIRECT_EXEC;
245 - }
246 -
247 --bool BasicFileLauncher::showError(GAppLaunchContext* /* ctx */, GErrorPtr& /* err */, const FilePath& /* path */, const FileInfoPtr& /* info */) {
248 -+bool BasicFileLauncher::showError(GAppLaunchContext* /* ctx */, const GErrorPtr & /* err */, const FilePath& /* path */, const FileInfoPtr& /* info */) {
249 - return false;
250 - }
251 -
252 -@@ -249,13 +265,21 @@ bool BasicFileLauncher::launchDesktopEntry(const char *desktopEntryName, const F
253 -
254 - FilePath BasicFileLauncher::handleShortcut(const FileInfoPtr& fileInfo, GAppLaunchContext* ctx) {
255 - auto target = fileInfo->target();
256 -+
257 -+ // if we know the target is a dir, we are not going to open it using other apps
258 -+ // for example: `network:///smb-root' is a shortcut targeting `smb:///' and it's also a dir
259 -+ if(fileInfo->isDir()) {
260 -+ return FilePath::fromPathStr(target.c_str());
261 -+ }
262 -+
263 - auto scheme = CStrPtr{g_uri_parse_scheme(target.c_str())};
264 - if(scheme) {
265 - // collect the uri schemes we support
266 - if(strcmp(scheme.get(), "file") == 0
267 - || strcmp(scheme.get(), "trash") == 0
268 - || strcmp(scheme.get(), "network") == 0
269 -- || strcmp(scheme.get(), "computer") == 0) {
270 -+ || strcmp(scheme.get(), "computer") == 0
271 -+ || strcmp(scheme.get(), "menu") == 0) {
272 - return FilePath::fromUri(target.c_str());
273 - }
274 - else {
275 -diff --git a/src/core/basicfilelauncher.h b/src/core/basicfilelauncher.h
276 -index a28aa75..3b1545d 100644
277 ---- a/src/core/basicfilelauncher.h
278 -+++ b/src/core/basicfilelauncher.h
279 -@@ -53,7 +53,7 @@ class LIBFM_QT_API BasicFileLauncher {
280 -
281 - virtual bool openFolder(GAppLaunchContext* ctx, const FileInfoList& folderInfos, GErrorPtr& err);
282 -
283 -- virtual bool showError(GAppLaunchContext* ctx, GErrorPtr& err, const FilePath& path = FilePath{}, const FileInfoPtr& info = FileInfoPtr{});
284 -+ virtual bool showError(GAppLaunchContext* ctx, const GErrorPtr& err, const FilePath& path = FilePath{}, const FileInfoPtr& info = FileInfoPtr{});
285 -
286 - virtual ExecAction askExecFile(const FileInfoPtr& file);
287 -
288 -diff --git a/src/core/fileinfo.cpp b/src/core/fileinfo.cpp
289 -index 8e86f8d..b19a751 100644
290 ---- a/src/core/fileinfo.cpp
291 -+++ b/src/core/fileinfo.cpp
292 -@@ -36,10 +36,9 @@ void FileInfo::setFromGFileInfo(const GObjectPtr<GFileInfo>& inf, const FilePath
293 - size_ = g_file_info_get_size(inf.get());
294 -
295 - tmp = g_file_info_get_content_type(inf.get());
296 -- if(!tmp) {
297 -- tmp = "application/octet-stream";
298 -+ if(tmp) {
299 -+ mimeType_ = MimeType::fromName(tmp);
300 - }
301 -- mimeType_ = MimeType::fromName(tmp);
302 -
303 - mode_ = g_file_info_get_attribute_uint32(inf.get(), G_FILE_ATTRIBUTE_UNIX_MODE);
304 -
305 -@@ -196,6 +195,10 @@ void FileInfo::setFromGFileInfo(const GObjectPtr<GFileInfo>& inf, const FilePath
306 - }
307 - }
308 -
309 -+ if(!mimeType_) {
310 -+ mimeType_ = MimeType::fromName("application/octet-stream");
311 -+ }
312 -+
313 - /* if there is a custom folder icon, use it */
314 - if(isNative() && type == G_FILE_TYPE_DIRECTORY) {
315 - auto local_path = path().localPath();
316 -diff --git a/src/core/fileinfojob.cpp b/src/core/fileinfojob.cpp
317 -index 3c222af..7bf8bb3 100644
318 ---- a/src/core/fileinfojob.cpp
319 -+++ b/src/core/fileinfojob.cpp
320 -@@ -13,31 +13,41 @@ FileInfoJob::FileInfoJob(FilePathList paths, FilePathList deletionPaths, FilePat
321 -
322 - void FileInfoJob::exec() {
323 - for(const auto& path: paths_) {
324 -- if(!isCancelled()) {
325 -+ if(isCancelled()) {
326 -+ break;
327 -+ }
328 -+ currentPath_ = path;
329 -+
330 -+ bool retry;
331 -+ do {
332 -+ retry = false;
333 - GErrorPtr err;
334 - GFileInfoPtr inf{
335 - g_file_query_info(path.gfile().get(), defaultGFileInfoQueryAttribs,
336 - G_FILE_QUERY_INFO_NONE, cancellable().get(), &err),
337 - false
338 - };
339 -- if(!inf) {
340 -- continue;
341 -+ if(inf) {
342 -+ // Reuse the same dirPath object when the path remains the same (optimize for files in the same dir)
343 -+ auto dirPath = commonDirPath_.isValid() ? commonDirPath_ : path.parent();
344 -+ auto fileInfoPtr = std::make_shared<FileInfo>(inf, dirPath);
345 -+
346 -+ // FIXME: this is not elegant
347 -+ if(cutFilesHashSet_
348 -+ && cutFilesHashSet_->count(path.hash())) {
349 -+ fileInfoPtr->bindCutFiles(cutFilesHashSet_);
350 -+ }
351 -+
352 -+ results_.push_back(fileInfoPtr);
353 -+ Q_EMIT gotInfo(path, results_.back());
354 - }
355 --
356 -- // Reuse the same dirPath object when the path remains the same (optimize for files in the same dir)
357 -- auto dirPath = commonDirPath_.isValid() ? commonDirPath_ : path.parent();
358 -- FileInfo fileInfo(inf, dirPath);
359 --
360 -- if(cutFilesHashSet_
361 -- && cutFilesHashSet_->count(fileInfo.path().hash())) {
362 -- fileInfo.bindCutFiles(cutFilesHashSet_);
363 -+ else {
364 -+ auto act = emitError(err);
365 -+ if(act == Job::ErrorAction::RETRY) {
366 -+ retry = true;
367 -+ }
368 - }
369 --
370 -- auto fileInfoPtr = std::make_shared<const FileInfo>(fileInfo);
371 --
372 -- results_.push_back(fileInfoPtr);
373 -- Q_EMIT gotInfo(path, fileInfoPtr);
374 -- }
375 -+ } while(retry && !isCancelled());
376 - }
377 - }
378 -
379 -diff --git a/src/core/fileinfojob.h b/src/core/fileinfojob.h
380 -index 53a03c5..d75e88f 100644
381 ---- a/src/core/fileinfojob.h
382 -+++ b/src/core/fileinfojob.h
383 -@@ -27,6 +27,10 @@ class LIBFM_QT_API FileInfoJob : public Job {
384 - return results_;
385 - }
386 -
387 -+ const FilePath& currentPath() const {
388 -+ return currentPath_;
389 -+ }
390 -+
391 - Q_SIGNALS:
392 - void gotInfo(const FilePath& path, std::shared_ptr<const FileInfo>& info);
393 -
394 -@@ -39,6 +43,7 @@ class LIBFM_QT_API FileInfoJob : public Job {
395 - FileInfoList results_;
396 - FilePath commonDirPath_;
397 - const std::shared_ptr<const HashSet> cutFilesHashSet_;
398 -+ FilePath currentPath_;
399 - };
400 -
401 - } // namespace Fm
402 -diff --git a/src/core/gioptrs.h b/src/core/gioptrs.h
403 -index 401424b..ae22602 100644
404 ---- a/src/core/gioptrs.h
405 -+++ b/src/core/gioptrs.h
406 -@@ -112,6 +112,10 @@ class GErrorPtr {
407 - return err_;
408 - }
409 -
410 -+ const GError* operator->() const {
411 -+ return err_;
412 -+ }
413 -+
414 - bool operator == (const GErrorPtr& other) const {
415 - return err_ == other.err_;
416 - }
417 -diff --git a/src/filelauncher.cpp b/src/filelauncher.cpp
418 -index 5f667fc..ff14533 100644
419 ---- a/src/filelauncher.cpp
420 -+++ b/src/filelauncher.cpp
421 -@@ -76,7 +76,7 @@ bool FileLauncher::openFolder(GAppLaunchContext *ctx, const FileInfoList &folder
422 - return BasicFileLauncher::openFolder(ctx, folderInfos, err);
423 - }
424 -
425 --bool FileLauncher::showError(GAppLaunchContext* /*ctx*/, GErrorPtr &err, const FilePath &path, const FileInfoPtr &info) {
426 -+bool FileLauncher::showError(GAppLaunchContext* /*ctx*/, const GErrorPtr &err, const FilePath &path, const FileInfoPtr &info) {
427 - /* ask for mount if trying to launch unmounted path */
428 - if(err->domain == G_IO_ERROR) {
429 - if(path && err->code == G_IO_ERROR_NOT_MOUNTED) {
430 -diff --git a/src/filelauncher.h b/src/filelauncher.h
431 -index be5be5a..991a00a 100644
432 ---- a/src/filelauncher.h
433 -+++ b/src/filelauncher.h
434 -@@ -43,7 +43,7 @@ class LIBFM_QT_API FileLauncher: public BasicFileLauncher {
435 -
436 - bool openFolder(GAppLaunchContext* ctx, const FileInfoList& folderInfos, GErrorPtr& err) override;
437 -
438 -- bool showError(GAppLaunchContext* ctx, GErrorPtr& err, const FilePath& path = FilePath{}, const FileInfoPtr& info = FileInfoPtr{}) override;
439 -+ bool showError(GAppLaunchContext* ctx, const GErrorPtr &err, const FilePath& path = FilePath{}, const FileInfoPtr& info = FileInfoPtr{}) override;
440 -
441 - ExecAction askExecFile(const FileInfoPtr& file) override;
442 -