@@ -418,6 +418,117 @@ void OscapScannerBase::readStdOut(QProcess& process)
418
418
while (tryToReadStdOutChar (process));
419
419
}
420
420
421
+
422
+ void OscapScannerBase::emitMessage (MessageType kind, QString& message)
423
+ {
424
+ QString rawMessage = QObject::tr (message.toUtf8 ().constData ());
425
+ switch (kind)
426
+ {
427
+ case MSG_INFO:
428
+ {
429
+ emit infoMessage (message);
430
+ break ;
431
+ }
432
+ case MSG_WARNING:
433
+ {
434
+ emit warningMessage (message);
435
+ break ;
436
+ }
437
+ default :
438
+ emit errorMessage (message);
439
+ }
440
+ }
441
+
442
+
443
+ void OscapScannerBase::selectWarning (MessageType& kind, const QString& message)
444
+ {
445
+ if (message.contains (" WARNING: " ))
446
+ {
447
+ kind = MSG_WARNING;
448
+ }
449
+ if (message.contains (QRegExp (" ^W:\\ s" )))
450
+ {
451
+ kind = MSG_WARNING;
452
+ }
453
+ }
454
+
455
+
456
+ void OscapScannerBase::processWarning (QString& message)
457
+ {
458
+ message = guiFriendlyMessage (message);
459
+ }
460
+
461
+
462
+ void OscapScannerBase::selectInfo (MessageType& kind, const QString& message)
463
+ {
464
+ if (message.contains (QRegExp (" ^Downloading: .+ \\ .{3} \\ w+\\ n" )))
465
+ {
466
+ kind = MSG_INFO;
467
+ }
468
+ }
469
+
470
+
471
+ void OscapScannerBase::processInfo (QString& message)
472
+ {
473
+ (void )message; // suppress the unused arg warning
474
+ }
475
+
476
+
477
+ void OscapScannerBase::selectError (MessageType& kind, const QString& message)
478
+ {
479
+ if (message.contains (QRegExp (" ^E:\\ s" )))
480
+ {
481
+ kind = MSG_ERROR;
482
+ }
483
+ }
484
+
485
+
486
+ void OscapScannerBase::processError (QString& message)
487
+ {
488
+ message.remove (QRegExp (" Error:\\ s*" ));
489
+ message.remove (QRegExp (" ^E:\\ s*" ));
490
+ message.remove (QRegExp (" \\ n" ));
491
+ }
492
+
493
+
494
+ void OscapScannerBase::processUnknown (QString& message)
495
+ {
496
+ message = QString (" The 'oscap' process has written the following content to stderr:\n %1" ).arg (message);
497
+ }
498
+
499
+
500
+ void OscapScannerBase::filterStdErr (QString& errorText)
501
+ {
502
+ MessageType type = MSG_UNKNOWN;
503
+ // let detection of a more severe type of message (error) overrule a benign one (info)
504
+ selectInfo (type, errorText);
505
+ selectWarning (type, errorText);
506
+ selectError (type, errorText);
507
+ switch (type)
508
+ {
509
+ case MSG_INFO:
510
+ {
511
+ processInfo (errorText);
512
+ break ;
513
+ }
514
+ case MSG_WARNING:
515
+ {
516
+ processWarning (errorText);
517
+ break ;
518
+ }
519
+ case MSG_ERROR:
520
+ {
521
+ processError (errorText);
522
+ break ;
523
+ }
524
+ default :
525
+ {
526
+ processUnknown (errorText);
527
+ }
528
+ }
529
+ emitMessage (type, errorText);
530
+ }
531
+
421
532
void OscapScannerBase::watchStdErr (QProcess& process)
422
533
{
423
534
process.setReadChannel (QProcess::StandardError);
@@ -433,21 +544,7 @@ void OscapScannerBase::watchStdErr(QProcess& process)
433
544
434
545
if (!stdErrOutput.isEmpty ())
435
546
{
436
- if (stdErrOutput.contains (" WARNING: " ))
437
- {
438
- QString guiMessage = guiFriendlyMessage (stdErrOutput);
439
- emit warningMessage (QObject::tr (guiMessage.toUtf8 ().constData ()));
440
- }
441
- // Openscap >= 1.2.11 (60fb9f0c98eee) sends this message through stderr
442
- else if (stdErrOutput.contains (QRegExp (" ^Downloading: .+ \\ .{3} \\ w+\\ n" )))
443
- {
444
- emit infoMessage (stdErrOutput);
445
- }
446
- else
447
- {
448
- emit errorMessage (QObject::tr (" The 'oscap' process has written the following content to stderr:\n "
449
- " %1" ).arg (stdErrOutput));
450
- }
547
+ filterStdErr (stdErrOutput);
451
548
}
452
549
453
550
}
@@ -458,8 +555,9 @@ QString OscapScannerBase::guiFriendlyMessage(const QString& cliMessage)
458
555
{
459
556
QString guiMessage = cliMessage;
460
557
461
- // Remove "WARNING:" prefix and trailing \n
462
- guiMessage.remove (QRegExp (" (WARNING: )|\n " ));
558
+ guiMessage.remove (QRegExp (" WARNING:\\ s*" ));
559
+ guiMessage.remove (QRegExp (" ^W:\\ s*" ));
560
+ guiMessage.remove (QRegExp (" \\ n" ));
463
561
464
562
if (cliMessage.contains (" --fetch-remote-resources" ))
465
563
guiMessage = QString (" Remote resources might be necessary for this profile to work properly. Please select \" Fetch remote resources\" for complete scan" );
0 commit comments