diff --git a/src/QGCApplication.cc b/src/QGCApplication.cc index f9bb471e20720ef334f536fd66240178c3eba9ed..9f576bea93503902a539f0b3f10b2786d106e486 100644 --- a/src/QGCApplication.cc +++ b/src/QGCApplication.cc @@ -97,14 +97,17 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) : // First thing we want to do is set up the qtlogging.ini file. If it doesn't already exist we copy // it to the correct location. This way default debug builds will have logging turned off. + static const char* qtProjectDir = "QtProject"; + static const char* qtLoggingFile = "qtlogging.ini"; bool loggingDirectoryOk = false; + QDir iniFileLocation(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation)); - if (!iniFileLocation.cd("QtProjects")) { - if (!iniFileLocation.mkdir("QtProjects")) { - qDebug() << "Unable to create qtlogging.ini directory" << iniFileLocation.filePath("QtProjects"); + if (!iniFileLocation.cd(qtProjectDir)) { + if (!iniFileLocation.mkdir(qtProjectDir)) { + qDebug() << "Unable to create qtlogging.ini directory" << iniFileLocation.filePath(qtProjectDir); } else { - if (!iniFileLocation.cd("QtProjects")) { - qDebug() << "Unable to access qtlogging.ini directory" << iniFileLocation.filePath("QtProjects");; + if (!iniFileLocation.cd(qtProjectDir)) { + qDebug() << "Unable to access qtlogging.ini directory" << iniFileLocation.filePath(qtProjectDir);; } loggingDirectoryOk = true; } @@ -114,9 +117,9 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) : if (loggingDirectoryOk) { qDebug () << iniFileLocation; - if (!iniFileLocation.exists("qtlogging.ini")) { - if (!QFile::copy(":QLoggingCategory/qtlogging.ini", iniFileLocation.filePath("qtlogging.ini"))) { - qDebug() << "Unable to copy qtlogging.ini to" << iniFileLocation; + if (!iniFileLocation.exists(qtLoggingFile)) { + if (!QFile::copy(":QLoggingCategory/qtlogging.ini", iniFileLocation.filePath(qtLoggingFile))) { + qDebug() << "Unable to copy" << QString(qtLoggingFile) << "to" << iniFileLocation; } } } diff --git a/src/comm/MAVLinkProtocol.cc b/src/comm/MAVLinkProtocol.cc index 3b583080c7f7c7f7e1f382d42dcd77ff7f36a159..71e3aa80adc31f2b4c3a146959788cfdc9d015d4 100644 --- a/src/comm/MAVLinkProtocol.cc +++ b/src/comm/MAVLinkProtocol.cc @@ -757,3 +757,15 @@ void MAVLinkProtocol::suspendLogForReplay(bool suspend) _logSuspendReplay = suspend; } + +void MAVLinkProtocol::deleteTempLogFiles(void) +{ + QDir tempDir(QStandardPaths::writableLocation(QStandardPaths::TempLocation)); + + QString filter(QString("*.%1").arg(_logFileExtension)); + QFileInfoList fileInfoList = tempDir.entryInfoList(QStringList(filter), QDir::Files); + + foreach(const QFileInfo fileInfo, fileInfoList) { + QFile::remove(fileInfo.filePath()); + } +} diff --git a/src/comm/MAVLinkProtocol.h b/src/comm/MAVLinkProtocol.h index 070902b7866c544987a47966f25c63d3235a539c..04da4a693bbce237f9a4393c7def3a0518742a70 100644 --- a/src/comm/MAVLinkProtocol.h +++ b/src/comm/MAVLinkProtocol.h @@ -199,6 +199,9 @@ public slots: /// and not called directly in order to synchronize with the bytesReady signal /// which may be ahead of it in the signal queue. void suspendLogForReplay(bool suspend); + + /// @brief Deletes any log files which are in the temp directory + static void deleteTempLogFiles(void); protected: // Override from QObject diff --git a/src/qgcunittest/MavlinkLogTest.cc b/src/qgcunittest/MavlinkLogTest.cc index 18cab63132ed3eb3feb185f979edfa853ab8f0d8..eac1c1512a61527309ba08a9bc512908833dc2e4 100644 --- a/src/qgcunittest/MavlinkLogTest.cc +++ b/src/qgcunittest/MavlinkLogTest.cc @@ -125,7 +125,7 @@ void MavlinkLogTest::_bootLogDetectionSave_test(void) void MavlinkLogTest::_bootLogDetectionZeroLength_test(void) { - // Create a fake eempty mavlink log + // Create a fake empty mavlink log _createTempLogFile(true); // Zero length log files should not generate any additional UI pop-ups. It should just be deleted silently. @@ -170,3 +170,13 @@ void MavlinkLogTest::_connectLog_test(void) QTest::qWait(1000); // Need to allow signals to move between threads to shutdown MainWindow } +void MavlinkLogTest::_deleteTempLogFiles_test(void) +{ + // Verify that the MAVLinkProtocol::deleteTempLogFiles api works correctly + + _createTempLogFile(false); + MAVLinkProtocol::deleteTempLogFiles(); + QDir tmpDir(QStandardPaths::writableLocation(QStandardPaths::TempLocation)); + QStringList logFiles(tmpDir.entryList(QStringList(QString("*.%1").arg(_logFileExtension)), QDir::Files)); + QCOMPARE(logFiles.count(), 0); +} diff --git a/src/qgcunittest/MavlinkLogTest.h b/src/qgcunittest/MavlinkLogTest.h index b2a53a416404765c9ffef1de6afced2d6f3accf4..320c7ba324ff4bf9cad46458a794601cbffb3e59 100644 --- a/src/qgcunittest/MavlinkLogTest.h +++ b/src/qgcunittest/MavlinkLogTest.h @@ -46,6 +46,7 @@ private slots: void _bootLogDetectionSave_test(void); void _bootLogDetectionZeroLength_test(void); void _connectLog_test(void); + void _deleteTempLogFiles_test(void); private: void _createTempLogFile(bool zeroLength); diff --git a/src/qgcunittest/UnitTest.cc b/src/qgcunittest/UnitTest.cc index 4c2869d25faa53af05e2a40e3ce02dcd6acbb8f5..6df2a069e4b7a95d2382e692e557d10e752b24ef 100644 --- a/src/qgcunittest/UnitTest.cc +++ b/src/qgcunittest/UnitTest.cc @@ -28,6 +28,7 @@ #include "UnitTest.h" #include "QGCApplication.h" +#include "MAVLinkProtocol.h" bool UnitTest::_messageBoxRespondedTo = false; bool UnitTest::_badResponseButton = false; @@ -115,6 +116,8 @@ void UnitTest::init(void) // Each test gets a clean global state qgcApp()->destroySingletonsForUnitTest(); qgcApp()->createSingletonsForUnitTest(); + + MAVLinkProtocol::deleteTempLogFiles(); } /// @brief Called after each test.