From 80129361fe0c569d7093f0c7fd3137fe36c271fe Mon Sep 17 00:00:00 2001
From: Athanasius <github@miggy.org>
Date: Thu, 29 Sep 2022 16:30:09 +0100
Subject: [PATCH] EDDN: Refactor queue db open/creation to own function

---
 plugins/eddn.py | 45 +++++++++++++++++++++++++++++++++------------
 1 file changed, 33 insertions(+), 12 deletions(-)

diff --git a/plugins/eddn.py b/plugins/eddn.py
index 9a0a3324..dfda017e 100644
--- a/plugins/eddn.py
+++ b/plugins/eddn.py
@@ -126,22 +126,37 @@ HORIZONS_SKU = 'ELITE_HORIZONS_V_PLANETARY_LANDINGS'
 
 
 class EDDNSender:
-    """Store and retry sending of EDDN messages."""
+    """Handle sending of EDDN messages to the Gateway."""
 
-    SQLITE_DB_FILENAME = 'eddn_queue-v1.db'
+    SQLITE_DB_FILENAME_V1 = 'eddn_queue-v1.db'
 
-    def __init__(self) -> None:
+    def __init__(self, eddn_endpoint) -> None:
         """
         Prepare the system for processing messages.
 
         - Ensure the sqlite3 database for EDDN replays exists and has schema.
         - Convert any legacy file into the database.
         """
-        self.db_conn = sqlite3.connect(config.app_dir_path / self.SQLITE_DB_FILENAME)
+        self.db_conn = self.sqlite_queue_v1()
         self.db = self.db_conn.cursor()
 
+        #######################################################################
+        # Queue database migration
+        #######################################################################
+        self.convert_legacy_file()
+        #######################################################################
+
+    def sqlite_queue_v1(self):
+        """
+        Initialise a v1 EDDN queue database.
+
+        :return: sqlite3 connection
+        """
+        db_conn = sqlite3.connect(config.app_dir_path / self.SQLITE_DB_FILENAME_V1)
+        db = db_conn.cursor()
+
         try:
-            self.db.execute(
+            db.execute(
                 """
                 CREATE TABLE messages
                 (
@@ -156,7 +171,7 @@ class EDDNSender:
                 """
             )
 
-            self.db.execute(
+            db.execute(
                 """
                 CREATE INDEX messages_created ON messages
                 (
@@ -165,7 +180,7 @@ class EDDNSender:
                 """
             )
 
-            self.db.execute(
+            db.execute(
                 """
                 CREATE INDEX messages_cmdr ON messages
                 (
@@ -176,9 +191,15 @@ class EDDNSender:
 
         except sqlite3.OperationalError as e:
             if str(e) != "table messages already exists":
+                # Cleanup, as schema creation failed
+                db.close()
+                db_conn.close()
                 raise e
 
-        self.convert_legacy_file()
+        # We return only the connection, so tidy up
+        db.close()
+
+        return db_conn
 
     def add_message(self, cmdr, msg):
         """
@@ -269,16 +290,16 @@ class EDDN:
         self.session = requests.Session()
         self.session.headers['User-Agent'] = user_agent
 
-        self.sender = EDDNSender()
-
-        self.fss_signals: List[Mapping[str, Any]] = []
-
         if config.eddn_url is not None:
             self.eddn_url = config.eddn_url
 
         else:
             self.eddn_url = self.DEFAULT_URL
 
+        self.sender = EDDNSender(self.eddn_url)
+
+        self.fss_signals: List[Mapping[str, Any]] = []
+
     def flush(self):
         """Flush the replay file, clearing any data currently there that is not in the replaylog list."""
         if self.replayfile is None: