From b10523ae0aa6eeb703f1256a32f50e3d8144bf47 Mon Sep 17 00:00:00 2001
From: amcmanu3 <mcdeweykp@gmail.com>
Date: Wed, 17 Aug 2022 19:07:56 -0400
Subject: [PATCH] Add import status to working bedrock

---
 app/classes/shared/import_helper.py   | 111 +++++++++++++++++++++++++-
 app/classes/shared/main_controller.py |  55 ++-----------
 app/classes/web/server_handler.py     |   4 -
 3 files changed, 115 insertions(+), 55 deletions(-)

diff --git a/app/classes/shared/import_helper.py b/app/classes/shared/import_helper.py
index 60ca0eed..446683c1 100644
--- a/app/classes/shared/import_helper.py
+++ b/app/classes/shared/import_helper.py
@@ -1,7 +1,6 @@
-from genericpath import isdir
-import shutil
 import os
 import time
+import shutil
 import logging
 import threading
 
@@ -71,7 +70,7 @@ class ImportHelpers:
             target=self.import_threaded_java_zip_server,
             daemon=True,
             args=(temp_dir, new_server_dir, port, new_id),
-            name=f"{new_id}_import",
+            name=f"{new_id}_java_zip_import",
         )
         import_thread.start()
 
@@ -109,3 +108,109 @@ class ImportHelpers:
         ServersController.finish_import(new_id)
         for user in server_users:
             self.helper.websocket_helper.broadcast_user(user, "send_start_reload", {})
+        # deletes temp dir
+        FileHelpers.del_dirs(temp_dir)
+
+    def import_bedrock_server(
+        self, server_path, new_server_dir, port, full_jar_path, new_id
+    ):
+        import_thread = threading.Thread(
+            target=self.import_threaded_java_zip_server,
+            daemon=True,
+            args=(server_path, new_server_dir, port, new_id),
+            name=f"{new_id}_bedrock_import",
+        )
+        import_thread.start()
+
+    def import_threaded_bedrock_server(
+        self, server_path, new_server_dir, port, full_jar_path, new_id
+    ):
+        for item in os.listdir(server_path):
+            if not item == "db_stats":
+                try:
+                    if os.path.isdir(os.path.join(server_path, item)):
+                        FileHelpers.copy_dir(
+                            os.path.join(server_path, item),
+                            os.path.join(new_server_dir, item),
+                        )
+                    else:
+                        FileHelpers.copy_file(
+                            os.path.join(server_path, item),
+                            os.path.join(new_server_dir, item),
+                        )
+                except shutil.Error as ex:
+                    logger.error(f"Server import failed with error: {ex}")
+
+        has_properties = False
+        for item in os.listdir(new_server_dir):
+            if str(item) == "server.properties":
+                has_properties = True
+        if not has_properties:
+            logger.info(
+                f"No server.properties found on zip file import. "
+                f"Creating one with port selection of {str(port)}"
+            )
+            with open(
+                os.path.join(new_server_dir, "server.properties"), "w", encoding="utf-8"
+            ) as file:
+                file.write(f"server-port={port}")
+                file.close()
+        if os.name != "nt":
+            if Helpers.check_file_exists(full_jar_path):
+                os.chmod(full_jar_path, 0o2760)
+        ServersController.finish_import(new_id)
+        server_users = PermissionsServers.get_server_user_list(new_id)
+        for user in server_users:
+            self.helper.websocket_helper.broadcast_user(user, "send_start_reload", {})
+
+    def import_bedrock_zip_server(
+        self, temp_dir, new_server_dir, full_jar_path, port, new_id
+    ):
+        import_thread = threading.Thread(
+            target=self.import_threaded_bedrock_zip_server,
+            daemon=True,
+            args=(temp_dir, new_server_dir, full_jar_path, port, new_id),
+            name=f"{new_id}_bedrock_import",
+        )
+        import_thread.start()
+
+    def import_threaded_bedrock_zip_server(
+        self, temp_dir, new_server_dir, full_jar_path, port, new_id
+    ):
+        has_properties = False
+        # extracts archive to temp directory
+        for item in os.listdir(temp_dir):
+            if str(item) == "server.properties":
+                has_properties = True
+            try:
+                if not os.path.isdir(os.path.join(temp_dir, item)):
+                    FileHelpers.move_file(
+                        os.path.join(temp_dir, item), os.path.join(new_server_dir, item)
+                    )
+                else:
+                    if item != "db_stats":
+                        FileHelpers.move_dir(
+                            os.path.join(temp_dir, item),
+                            os.path.join(new_server_dir, item),
+                        )
+            except Exception as ex:
+                logger.error(f"ERROR IN ZIP IMPORT: {ex}")
+        if not has_properties:
+            logger.info(
+                f"No server.properties found on zip file import. "
+                f"Creating one with port selection of {str(port)}"
+            )
+            with open(
+                os.path.join(new_server_dir, "server.properties"), "w", encoding="utf-8"
+            ) as file:
+                file.write(f"server-port={port}")
+                file.close()
+        ServersController.finish_import(new_id)
+        server_users = PermissionsServers.get_server_user_list(new_id)
+        for user in server_users:
+            self.helper.websocket_helper.broadcast_user(user, "send_start_reload", {})
+        if os.name != "nt":
+            if Helpers.check_file_exists(full_jar_path):
+                os.chmod(full_jar_path, 0o2760)
+        # deletes temp dir
+        FileHelpers.del_dirs(temp_dir)
diff --git a/app/classes/shared/main_controller.py b/app/classes/shared/main_controller.py
index 0f3e3c97..6aaf8cb1 100644
--- a/app/classes/shared/main_controller.py
+++ b/app/classes/shared/main_controller.py
@@ -652,25 +652,6 @@ class Controller:
         Helpers.ensure_dir_exists(new_server_dir)
         Helpers.ensure_dir_exists(backup_path)
         server_path = Helpers.get_os_understandable_path(server_path)
-        try:
-            FileHelpers.copy_dir(server_path, new_server_dir, True)
-        except shutil.Error as ex:
-            logger.error(f"Server import failed with error: {ex}")
-
-        has_properties = False
-        for item in os.listdir(new_server_dir):
-            if str(item) == "server.properties":
-                has_properties = True
-        if not has_properties:
-            logger.info(
-                f"No server.properties found on zip file import. "
-                f"Creating one with port selection of {str(port)}"
-            )
-            with open(
-                os.path.join(new_server_dir, "server.properties"), "w", encoding="utf-8"
-            ) as file:
-                file.write(f"server-port={port}")
-                file.close()
 
         full_jar_path = os.path.join(new_server_dir, server_exe)
 
@@ -694,9 +675,10 @@ class Controller:
             port,
             server_type="minecraft-bedrock",
         )
-        if os.name != "nt":
-            if Helpers.check_file_exists(full_jar_path):
-                os.chmod(full_jar_path, 0o2760)
+        ServersController.set_import(new_id)
+        self.import_helper.import_bedrock_server(
+            server_path, new_server_dir, port, full_jar_path, new_id
+        )
         return new_id
 
     def import_bedrock_zip_server(
@@ -714,32 +696,6 @@ class Controller:
         temp_dir = Helpers.get_os_understandable_path(zip_path)
         Helpers.ensure_dir_exists(new_server_dir)
         Helpers.ensure_dir_exists(backup_path)
-        has_properties = False
-        # extracts archive to temp directory
-        for item in os.listdir(temp_dir):
-            if str(item) == "server.properties":
-                has_properties = True
-            try:
-                if not os.path.isdir(os.path.join(temp_dir, item)):
-                    FileHelpers.move_file(
-                        os.path.join(temp_dir, item), os.path.join(new_server_dir, item)
-                    )
-                else:
-                    FileHelpers.move_dir(
-                        os.path.join(temp_dir, item), os.path.join(new_server_dir, item)
-                    )
-            except Exception as ex:
-                logger.error(f"ERROR IN ZIP IMPORT: {ex}")
-        if not has_properties:
-            logger.info(
-                f"No server.properties found on zip file import. "
-                f"Creating one with port selection of {str(port)}"
-            )
-            with open(
-                os.path.join(new_server_dir, "server.properties"), "w", encoding="utf-8"
-            ) as file:
-                file.write(f"server-port={port}")
-                file.close()
 
         full_jar_path = os.path.join(new_server_dir, server_exe)
 
@@ -763,6 +719,9 @@ class Controller:
             port,
             server_type="minecraft-bedrock",
         )
+        self.import_helper.import_bedrock_zip_server(
+            temp_dir, new_server_dir, full_jar_path, port, new_id
+        )
         if os.name != "nt":
             if Helpers.check_file_exists(full_jar_path):
                 os.chmod(full_jar_path, 0o2760)
diff --git a/app/classes/web/server_handler.py b/app/classes/web/server_handler.py
index df4ba684..7d605c2f 100644
--- a/app/classes/web/server_handler.py
+++ b/app/classes/web/server_handler.py
@@ -385,8 +385,6 @@ class ServerHandler(BaseHandler):
                     new_server_id,
                     self.get_remote_ip(),
                 )
-                # deletes temp dir
-                FileHelpers.del_dirs(zip_path)
             else:
                 if len(server_parts) != 3:
                     self.redirect("/panel/error?error=Invalid server data")
@@ -516,8 +514,6 @@ class ServerHandler(BaseHandler):
                     new_server_id,
                     self.get_remote_ip(),
                 )
-                # deletes temp dir
-                FileHelpers.del_dirs(zip_path)
             else:
                 if len(server_parts) != 2:
                     self.redirect("/panel/error?error=Invalid server data")