From c77d2bddd8e420edaed291ac5ff771cbfff7cd9b Mon Sep 17 00:00:00 2001
From: Storm Dragon <stormdragon2976@gmail.com>
Date: Fri, 20 Dec 2024 11:22:09 -0500
Subject: [PATCH] Second attempt at placing files into correct directories.

---
 setup.py | 119 ++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 70 insertions(+), 49 deletions(-)

diff --git a/setup.py b/setup.py
index 381a3155..66df62d4 100755
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@
 import os
 import sys
 import glob
-from shutil import copyfile
+import shutil
 from setuptools import setup
 
 def get_data_files():
@@ -16,64 +16,85 @@ def get_data_files():
         dest_dir = f'/usr/share/locale/{lang}/LC_MESSAGES'
         data_files.append((dest_dir, [locale_file]))
 
-    # Handle configuration files
-    directories = glob.glob('config/*')
-    for directory in directories:
-        files = glob.glob(directory+'/*')
-        dest_dir = ''
-        if 'config/punctuation' in directory:
-            dest_dir = '/etc/fenrirscreenreader/punctuation'
-        elif 'config/keyboard' in directory:
-            dest_dir = '/etc/fenrirscreenreader/keyboard'
-        elif 'config/settings' in directory:
-            dest_dir = '/etc/fenrirscreenreader/settings'
-            if not force_settings:
-                try:
-                    files.remove('config/settings/settings.conf')
-                except ValueError:
-                    pass
-        elif 'config/scripts' in directory:
-            dest_dir = '/usr/share/fenrirscreenreader/scripts'
-        if dest_dir:
-            data_files.append((dest_dir, files))
+    # Handle /etc/fenrirscreenreader directories
+    etc_dirs = {
+        'keyboard': '/etc/fenrirscreenreader/keyboard',
+        'punctuation': '/etc/fenrirscreenreader/punctuation',
+        'settings': '/etc/fenrirscreenreader/settings'
+    }
+    
+    for src_dir, dest_dir in etc_dirs.items():
+        src_path = f'config/{src_dir}'
+        if os.path.exists(src_path):
+            files = glob.glob(f'{src_path}/*')
+            if src_dir == 'settings':
+                if not force_settings:
+                    # Remove settings.conf if it exists in the list
+                    files = [f for f in files if not f.endswith('settings.conf')]
+                # Ensure settings.conf.example is included
+                example_file = os.path.join(src_path, 'settings.conf.example')
+                if os.path.exists(example_file) and example_file not in files:
+                    files.append(example_file)
+            if files:  # Only add if there are files to copy
+                data_files.append((dest_dir, files))
 
-    # Handle sound files
-    files = glob.glob('config/sound/default/*')
-    data_files.append(('/usr/share/sounds/fenrirscreenreader/default', files))
-    files = glob.glob('config/sound/template/*')
-    data_files.append(('/usr/share/sounds/fenrirscreenreader/template', files))
+    # Handle /usr/share/fenrirscreenreader directories
+    share_dirs = {
+        'scripts': '/usr/share/fenrirscreenreader/scripts',
+    }
+    
+    for src_dir, dest_dir in share_dirs.items():
+        src_path = f'config/{src_dir}'
+        if os.path.exists(src_path):
+            files = glob.glob(f'{src_path}/*')
+            if files:  # Only add if there are files to copy
+                data_files.append((dest_dir, files))
+
+    # Handle sound directory separately since it has subdirectories
+    sound_src = 'config/sound'
+    if os.path.exists(sound_src):
+        # Handle default sounds
+        default_files = glob.glob(f'{sound_src}/default/*')
+        if default_files:
+            data_files.append(('/usr/share/sounds/fenrirscreenreader/default', default_files))
+        
+        # Handle template sounds
+        template_files = glob.glob(f'{sound_src}/template/*')
+        if template_files:
+            data_files.append(('/usr/share/sounds/fenrirscreenreader/template', template_files))
+
+    # Handle tools directory
+    tools_files = glob.glob('tools/*')
+    if tools_files:
+        data_files.append(('/usr/share/fenrirscreenreader/tools', tools_files))
+
+    # Add man page
+    if os.path.exists('docs/fenrir.1'):
+        data_files.append(('/usr/share/man/man1', ['docs/fenrir.1']))
 
     return data_files
 
-def post_install_actions():
-    force_settings = os.environ.get('FENRIR_FORCE_SETTINGS') == '1'
-    if not force_settings:
-        print('')
-        # create settings file from example if not exist
-        if not os.path.isfile('/etc/fenrirscreenreader/settings/settings.conf'):
+if __name__ == "__main__":
+    setup(data_files=get_data_files())
+    
+    # Post-install setup for settings.conf if needed
+    if not os.environ.get('FENRIR_FORCE_SETTINGS') == '1':
+        settings_path = '/etc/fenrirscreenreader/settings/settings.conf'
+        example_path = '/etc/fenrirscreenreader/settings/settings.conf.example'
+        if not os.path.exists(settings_path) and os.path.exists(example_path):
             try:
-                copyfile('/etc/fenrirscreenreader/settings/settings.conf.example',
-                        '/etc/fenrirscreenreader/settings/settings.conf')
-                print('create settings file in /etc/fenrirscreenreader/settings/settings.conf')
-            except:
-                pass
-        else:
-            print('settings.conf file found. It is not overwritten automatically')
-
-    print('')
+                shutil.copyfile(example_path, settings_path)
+                print(f'Created settings file: {settings_path}')
+            except Exception as e:
+                print(f'Note: Could not create {settings_path}: {e}')
+    
+    print('\nSetup complete!')
     print('To have Fenrir start at boot:')
     print('sudo systemctl enable fenrir')
     print('Pulseaudio users may want to run:')
     print('/usr/share/fenrirscreenreader/tools/configure_pulse.sh')
     print('once as their user account and once as root to configure Pulseaudio.')
-    print('Please install the following packages manually:')
+    print('\nPlease install the following packages manually:')
     print('- Speech-dispatcher: for the default speech driver')
     print('- Espeak: as basic TTS engine')
     print('- sox: is a player for the generic sound driver')
-
-if __name__ == "__main__":
-    setup(
-        data_files=get_data_files(),
-    )
-    
-    post_install_actions()