Parcourir la source

grouping events now

logicp il y a 5 ans
Parent
commit
e1f7cb7a95
2 fichiers modifiés avec 48 ajouts et 0 suppressions
  1. 1 0
      include/mainwindow.h
  2. 47 0
      src/mainwindow.cpp

+ 1 - 0
include/mainwindow.h

@@ -72,6 +72,7 @@ private:
     QStandardItemModel* m_event_model;
     /** Misc */
     ConfigJson m_config;
+    uint16_t m_consecutive_events;
 
    private slots:
     /** Receivers */

+ 47 - 0
src/mainwindow.cpp

@@ -19,6 +19,35 @@ void infoMessageBox(QString text, QString title = "KYGUI") {
   box.exec();
 }
 
+bool isSameEvent(QString event1, QString event2) {
+  auto event_size =
+      event1.size() > event2.size() ? event2.size() : event1.size();
+  auto similarity_standard = event_size * 0.67;
+  auto similarity_index = 0;
+  for (auto i = 0; i < event_size; i++) {
+    if (event1[i] == event2[i]) {
+      similarity_index++;
+    }
+  }
+  return similarity_index > similarity_standard;
+}
+
+int getLikeEventNum(QString event, QList<QString> events) {
+  auto i = events.size() - 1;
+  auto hits = 0;
+  bool is_same_event = false;
+  auto incoming_event = event.remove(0, 11);
+  do {
+    auto existing_event = events[i];
+    if (is_same_event =
+            isSameEvent(incoming_event, existing_event.remove(0, 11))) {
+      i--;
+      hits++;
+    }
+  } while (is_same_event && i > -1);
+  return hits;
+}
+
 QString getTime() { return QDateTime::currentDateTime().toString("hh:mm:ss"); }
 
 /**
@@ -301,6 +330,24 @@ void MainWindow::updateMessages(int t, const QString& message, StringVec v) {
     } else {
       event_message += message;
     }
+    if (m_events.size() > 1) {
+      auto last_event = m_events[m_events.size() - 1];
+      if (isSameEvent(message, last_event.remove(0, 11))) {
+        m_consecutive_events++;
+        auto count = getLikeEventNum(event_message, m_events);
+        QString clean_event_message =
+            event_message + " (" + QString::number(count) + ")";
+        auto row_count2 = m_consecutive_events > 1
+                              ? m_event_model->rowCount() - 1
+                              : m_event_model->rowCount();
+        auto row_count = m_event_model->rowCount() - 1;
+        m_events.push_back(event_message);
+        m_event_model->setItem(row_count,
+                               createEventListItem(clean_event_message));
+        return;
+      }
+      m_consecutive_events = 0;
+    }
     m_events.push_back(event_message);
     m_event_model->setItem(m_event_model->rowCount(),
                            createEventListItem(event_message));