Browse Source

Added FlightAwareAPI Query to NewFlightDialog

Added option to automatically retreive flight information given date and flight number
Felix 8 tháng trước cách đây
mục cha
commit
c6a1b31bb4

+ 57 - 0
src/gui/dialogues/newflightdialog.cpp

@@ -26,6 +26,7 @@
 #include "src/gui/verification/pilotinput.h"
 #include "src/gui/verification/tailinput.h"
 #include "src/gui/verification/timeinput.h"
+#include "src/network/flightawarequery.h"
 #include "ui_newflightdialog.h"
 #include "src/opl.h"
 #include "src/functions/datetime.h"
@@ -838,3 +839,59 @@ bool NewFlightDialog::deleteEntry(int rowID)
     return DB->remove(entry);
 }
 
+
+void NewFlightDialog::on_retreivePushButton_clicked()
+{
+    // verify requisites are met
+    if(Settings::getFlightAwareApiKey().length() < 1) {
+        WARN(tr("Using this feature requires a FlightAware API key to be set."));
+        return;
+    }
+
+    if(ui->flightNumberLineEdit->text().length() < 3 || !validationState.validAt(ValidationState::doft)) {
+        WARN(tr("Please enter a valid Flight Number and Date."));
+        return;
+    }
+
+    // Query the API
+    FlightAwareQuery query;
+    auto result = query.getFlightData(ui->flightNumberLineEdit->text(), QDate::fromString(ui->doftLineEdit->text(), Qt::ISODate));
+    LOG << "Querying API...";
+    if(result.isEmpty()) {
+        WARN("Flight not found.");
+        return;
+    }
+
+
+    for(const auto &flight : result) {
+        flight.print();
+    }
+
+    // Fill the form with the result
+    const auto flight = result.first();
+    LOG << "Filling flight data:";
+    flight.print();
+
+    // validation needed because the data may be incomplete or erroneous
+    const QHash<QString, QLineEdit*> data = {
+        {flight.departure,              ui->deptLocationLineEdit},
+        {flight.destination,            ui->destLocationLineEdit},
+        {flight.out.toString("hh:mm"),  ui->tofbTimeLineEdit},
+        {flight.in.toString("hh:mm"),   ui->tonbTimeLineEdit},
+        {flight.registration,           ui->acftLineEdit},
+    };
+
+    QString info = tr("The following data has been retreived:<br>");
+
+    for(auto it = data.constBegin(); it != data.constEnd(); ++it) {
+        if(it.key().isEmpty()) {
+            continue;
+        }
+        it.value()->setText(it.key());
+        emit it.value()->editingFinished();
+        info.append(it.value()->objectName().first(4) + ": " + it.key() + "<br>");
+    }
+
+    INFO(info);
+}
+

+ 1 - 1
src/gui/dialogues/newflightdialog.h

@@ -197,7 +197,7 @@ private slots:
     void on_pilotFlyingCheckBox_stateChanged(int arg1);
     void on_approachComboBox_currentTextChanged(const QString &arg1);
     void on_functionComboBox_currentIndexChanged(int index);
-
+    void on_retreivePushButton_clicked();
     void on_calendarPushButton_clicked();
 
     void calendarDateSelected();

+ 18 - 8
src/gui/dialogues/newflightdialog.ui

@@ -61,7 +61,7 @@
       <string>PIC</string>
      </property>
      <property name="alignment">
-      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+      <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
      </property>
     </widget>
    </item>
@@ -87,7 +87,7 @@
       <string>Aircraft</string>
      </property>
      <property name="alignment">
-      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+      <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
      </property>
     </widget>
    </item>
@@ -104,7 +104,7 @@
       <string>Third Pilot</string>
      </property>
      <property name="alignment">
-      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+      <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
      </property>
     </widget>
    </item>
@@ -193,7 +193,7 @@
       <string>SIC</string>
      </property>
      <property name="alignment">
-      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+      <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
      </property>
     </widget>
    </item>
@@ -382,7 +382,7 @@
       <string>Flight Number</string>
      </property>
      <property name="alignment">
-      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+      <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
      </property>
     </widget>
    </item>
@@ -418,10 +418,10 @@
       <bool>true</bool>
      </property>
      <property name="orientation">
-      <enum>Qt::Horizontal</enum>
+      <enum>Qt::Orientation::Horizontal</enum>
      </property>
      <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+      <set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
      </property>
     </widget>
    </item>
@@ -453,7 +453,7 @@
       <string>Remarks</string>
      </property>
      <property name="alignment">
-      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+      <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
      </property>
     </widget>
    </item>
@@ -518,6 +518,16 @@
      </property>
     </widget>
    </item>
+   <item row="15" column="1">
+    <widget class="QPushButton" name="retreivePushButton">
+     <property name="toolTip">
+      <string>Use the FlightAware API to query flight data. Requires API key.</string>
+     </property>
+     <property name="text">
+      <string>Retreive Details</string>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <tabstops>

+ 7 - 0
src/gui/widgets/settingswidget.cpp

@@ -106,6 +106,7 @@ void SettingsWidget::readSettings()
     ui->approachComboBox->setCurrentText(Settings::getApproachType());
     ui->nightComboBox->setCurrentIndex(Settings::getNightLoggingEnabled());
     ui->prefixLineEdit->setText(Settings::getFlightNumberPrefix());
+    ui->apiKeyLineEdit->setText(Settings::getFlightAwareApiKey());
 
     ui->logbookViewComboBox->setCurrentIndex(static_cast<int>(Settings::getLogbookView()));
     ui->aliasComboBox->setCurrentIndex(Settings::getShowSelfAs());
@@ -477,3 +478,9 @@ void SettingsWidget::on_currencyWarningDaysSpinBox_valueChanged(int arg1)
     Settings::setCurrencyWarningThreshold(arg1);
 }
 
+
+void SettingsWidget::on_apiKeyLineEdit_editingFinished()
+{
+    Settings::setFlightAwareApiKey(ui->apiKeyLineEdit->text());
+}
+

+ 2 - 0
src/gui/widgets/settingswidget.h

@@ -79,6 +79,8 @@ private slots:
 
     void on_currencyWarningDaysSpinBox_valueChanged(int arg1);
 
+    void on_apiKeyLineEdit_editingFinished();
+
 private:
     Ui::SettingsWidget *ui;
 

+ 60 - 50
src/gui/widgets/settingswidget.ui

@@ -17,7 +17,7 @@
    <item row="0" column="0">
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
-      <number>0</number>
+      <number>2</number>
      </property>
      <widget class="QWidget" name="generalTab">
       <attribute name="title">
@@ -321,7 +321,7 @@
        <item row="2" column="2">
         <widget class="QLineEdit" name="companyLineEdit">
          <property name="focusPolicy">
-          <enum>Qt::StrongFocus</enum>
+          <enum>Qt::FocusPolicy::StrongFocus</enum>
          </property>
          <property name="text">
           <string/>
@@ -344,7 +344,7 @@
        <item row="3" column="2">
         <widget class="QLineEdit" name="employeeidLineEdit">
          <property name="focusPolicy">
-          <enum>Qt::StrongFocus</enum>
+          <enum>Qt::FocusPolicy::StrongFocus</enum>
          </property>
          <property name="text">
           <string/>
@@ -377,7 +377,7 @@
        <item row="5" column="0">
         <spacer name="horizontalSpacer_5">
          <property name="orientation">
-          <enum>Qt::Horizontal</enum>
+          <enum>Qt::Orientation::Horizontal</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
@@ -407,7 +407,7 @@
        <item row="5" column="3">
         <spacer name="horizontalSpacer_6">
          <property name="orientation">
-          <enum>Qt::Horizontal</enum>
+          <enum>Qt::Orientation::Horizontal</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
@@ -424,19 +424,6 @@
        <string>Flight Logging</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_5">
-       <item row="0" column="1">
-        <widget class="QLabel" name="functionLabel">
-         <property name="toolTip">
-          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Default function for auto-logging&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-         </property>
-         <property name="text">
-          <string>Function</string>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="2">
-        <widget class="QComboBox" name="functionComboBox"/>
-       </item>
        <item row="1" column="1">
         <widget class="QLabel" name="rulesLabel">
          <property name="toolTip">
@@ -461,19 +448,35 @@
          </item>
         </widget>
        </item>
-       <item row="2" column="0">
-        <spacer name="horizontalSpacer_3">
+       <item row="0" column="2">
+        <widget class="QComboBox" name="functionComboBox"/>
+       </item>
+       <item row="2" column="3">
+        <spacer name="horizontalSpacer_4">
          <property name="orientation">
-          <enum>Qt::Horizontal</enum>
+          <enum>Qt::Orientation::Horizontal</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
-           <width>176</width>
+           <width>175</width>
            <height>20</height>
           </size>
          </property>
         </spacer>
        </item>
+       <item row="3" column="1">
+        <widget class="QLabel" name="nightLabel">
+         <property name="toolTip">
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how (if) night time is automatically calculated. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+         <property name="whatsThis">
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+         <property name="text">
+          <string>Night Time</string>
+         </property>
+        </widget>
+       </item>
        <item row="2" column="1">
         <widget class="QLabel" name="approachLabel">
          <property name="toolTip">
@@ -484,32 +487,26 @@
          </property>
         </widget>
        </item>
-       <item row="2" column="2">
-        <widget class="QComboBox" name="approachComboBox"/>
-       </item>
-       <item row="2" column="3">
-        <spacer name="horizontalSpacer_4">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
+       <item row="4" column="2">
+        <widget class="QLineEdit" name="prefixLineEdit">
+         <property name="maxLength">
+          <number>10</number>
          </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>175</width>
-           <height>20</height>
-          </size>
+         <property name="placeholderText">
+          <string>optional</string>
          </property>
-        </spacer>
+        </widget>
        </item>
-       <item row="3" column="1">
-        <widget class="QLabel" name="nightLabel">
+       <item row="2" column="2">
+        <widget class="QComboBox" name="approachComboBox"/>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLabel" name="functionLabel">
          <property name="toolTip">
-          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how (if) night time is automatically calculated. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-         </property>
-         <property name="whatsThis">
-          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Default function for auto-logging&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
          </property>
          <property name="text">
-          <string>Night Time</string>
+          <string>Function</string>
          </property>
         </widget>
        </item>
@@ -548,13 +545,26 @@
          </property>
         </widget>
        </item>
-       <item row="4" column="2">
-        <widget class="QLineEdit" name="prefixLineEdit">
-         <property name="maxLength">
-          <number>10</number>
+       <item row="2" column="0">
+        <spacer name="horizontalSpacer_3">
+         <property name="orientation">
+          <enum>Qt::Orientation::Horizontal</enum>
          </property>
-         <property name="placeholderText">
-          <string>optional</string>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>176</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="5" column="2">
+        <widget class="QLineEdit" name="apiKeyLineEdit"/>
+       </item>
+       <item row="5" column="1">
+        <widget class="QLabel" name="apiKeyLabel">
+         <property name="text">
+          <string>API key</string>
          </property>
         </widget>
        </item>
@@ -598,7 +608,7 @@
        <item row="0" column="2">
         <spacer name="horizontalSpacer_8">
          <property name="orientation">
-          <enum>Qt::Horizontal</enum>
+          <enum>Qt::Orientation::Horizontal</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
@@ -618,7 +628,7 @@
        <item row="0" column="0">
         <spacer name="horizontalSpacer_7">
          <property name="orientation">
-          <enum>Qt::Horizontal</enum>
+          <enum>Qt::Orientation::Horizontal</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>