11#include " ControlRecordBagWidget.hpp"
22
3+ #include " UtilsGeneral.hpp"
4+
35#include < QHBoxLayout>
6+ #include < QLabel>
47#include < QListWidget>
8+ #include < QTimer>
9+
10+ #include < filesystem>
511
612ControlRecordBagWidget::ControlRecordBagWidget (Parameters::RecordBagParameters& parameters, QWidget* parent)
7- : ControlBagWidget(parameters, " Started recording Bag File\n " , " :/icons/tools/record_bag_" , true , parent)
13+ : ControlBagWidget(parameters, " Started recording Bag File\n " , " :/icons/tools/record_bag_" , true , parent), m_parameters(parameters)
814{
915 m_controlsLayout->addWidget (m_playPauseButton);
1016 m_controlsLayout->addStretch ();
1117
12- m_bagRecorder = std::make_unique<BagRecorder>(parameters);
18+ m_bagSizeLabel = new QLabel (" " );
19+ m_availableDiskSpaceLabel = new QLabel (" " );
20+
21+ auto font = m_bagSizeLabel->font ();
22+ font.setBold (true );
23+ m_bagSizeLabel->setFont (font);
24+ m_availableDiskSpaceLabel->setFont (font);
25+
26+ m_upperLayout->insertSpacing (7 , 20 );
27+ m_upperLayout->insertWidget (8 , m_bagSizeLabel);
28+ m_upperLayout->insertWidget (9 , m_availableDiskSpaceLabel);
29+ m_upperLayout->setAlignment (m_bagSizeLabel, Qt::AlignHCenter);
30+ m_upperLayout->setAlignment (m_availableDiskSpaceLabel, Qt::AlignHCenter);
31+
32+ m_bagRecorder = std::make_unique<BagRecorder>(m_parameters);
1333 // Simulate the first few terminal info messages displayed when calling ros2 bag play
1434 addRecordBagLoggerEntry (" Press SPACE for pausing/resuming" );
1535 addRecordBagLoggerEntry (" Listening for topics..." );
@@ -26,4 +46,34 @@ ControlRecordBagWidget::ControlRecordBagWidget(Parameters::RecordBagParameters&
2646 connect (m_bagRecorder.get (), &BagRecorder::allTopicsSubscribed, this , [this ] {
2747 addRecordBagLoggerEntry (" All requested topics are subscribed. Stopping discovery..." );
2848 });
49+
50+ m_loggerListWidget->setFocus ();
51+
52+ auto * const timer = new QTimer (this );
53+ connect (timer, &QTimer::timeout, this , &ControlRecordBagWidget::updateSpaceInfoLabel);
54+ timer->start (1000 );
55+ }
56+
57+
58+ void
59+ ControlRecordBagWidget::updateSpaceInfoLabel ()
60+ {
61+ float bagFileSpace = 0 ;
62+
63+ std::error_code errorCode;
64+ for (const auto & entry : std::filesystem::recursive_directory_iterator (m_parameters.sourceDirectory .toStdString (),
65+ std::filesystem::directory_options::skip_permission_denied, errorCode)) {
66+ if (!std::filesystem::is_regular_file (entry, errorCode)) {
67+ continue ;
68+ }
69+ bagFileSpace += static_cast <float >(std::filesystem::file_size (entry, errorCode));
70+ }
71+
72+ const auto sizeIndicator = bagFileSpace < Utils::General::GIGABYTE_IN_BYTES? " MB" : " GB" ;
73+ bagFileSpace /= bagFileSpace < Utils::General::GIGABYTE_IN_BYTES ? static_cast <float >(MEGABYTE_IN_BYTES)
74+ : static_cast <float >(Utils::General::GIGABYTE_IN_BYTES);
75+ m_bagSizeLabel->setText (" Recorded Bag File Size: " + QString::number (bagFileSpace) + sizeIndicator);
76+
77+ const auto remainingSpace = Utils::General::getAvailableDriveSpace (m_parameters.sourceDirectory );
78+ m_availableDiskSpaceLabel->setText (" Available Disk Space: " + QString::number (remainingSpace) + " GB" );
2979}
0 commit comments