From 3a8158d6243bb774d4f73ca0214de0c88f6f7575 Mon Sep 17 00:00:00 2001
From: Marko Mecina <marko.mecina@univie.ac.at>
Date: Tue, 28 Jan 2025 14:36:05 +0100
Subject: [PATCH] add report format option for viewer packet drag-and-drop

---
 Ccs/ccs_main_config.cfg |  3 +++
 Ccs/poolview_sql.py     | 19 +++++++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/Ccs/ccs_main_config.cfg b/Ccs/ccs_main_config.cfg
index 704709b..3d287a6 100644
--- a/Ccs/ccs_main_config.cfg
+++ b/Ccs/ccs_main_config.cfg
@@ -22,6 +22,9 @@ log-dir = ${paths:base}/logs
 level = WARNING
 max_logs = 30
 
+[ccs-viewer]
+drag_report_fmt = False
+
 [ccs-monitor]
 interval = 1
 max_age = 20
diff --git a/Ccs/poolview_sql.py b/Ccs/poolview_sql.py
index 1b3481b..c647a5a 100644
--- a/Ccs/poolview_sql.py
+++ b/Ccs/poolview_sql.py
@@ -46,6 +46,8 @@ TM_HEADER_LEN, TC_HEADER_LEN, PEC_LEN = [packet_config.TM_HEADER_LEN, packet_con
 
 Telemetry = {'PUS': DbTelemetry, 'RMAP': RMapTelemetry, 'FEE': FEEDataTelemetry}
 
+REPORTFORMAT = cfg.get('ccs-viewer', 'drag_report_fmt').lower() == 'true'  # format drag-action data for test report
+
 
 class TMPoolView(Gtk.Window):
     # (label, data column alignment)
@@ -699,7 +701,15 @@ class TMPoolView(Gtk.Window):
             ).filter(
                 Telemetry[self.decoding_type].idx == model[my_iter][0]
             )
-            selection_data.set_text(str(row.first().raw), -1)
+
+            rawpkt = row.first().raw
+
+            if REPORTFORMAT:
+                data = cfl.pktinfo_report(rawpkt)
+            else:
+                data = str(rawpkt)
+
+            selection_data.set_text(data, -1)
             new_session.close()
 
     def fetch_lines_from_db(self, offset=0, limit=None, sort=None, order='asc', buffer=10, rows=None, scrolled=False,
@@ -1856,7 +1866,12 @@ class TMPoolView(Gtk.Window):
     def on_drag_tmdata_get(self, treeview, drag_context, selection_data, info, time, *args):
         treeselection = treeview.get_selection()
         model, my_iter = treeselection.get_selected()
-        selection_data.set_text('{} = {}'.format(*model[my_iter][:2]), -1)
+        txt = '{} = {}'.format(*model[my_iter][:2])
+
+        if REPORTFORMAT:
+            txt = txt.replace('_', '\\_')
+
+        selection_data.set_text(txt, -1)
 
     def create_decoder_bar(self):
         box = Gtk.VBox()
-- 
GitLab