#!/bin/bash # Script to create symlinks for all modules in different naming styles # This ensures compatibility with different module import styles APP_DIR="$(dirname "$(dirname "$(readlink -f "$0")")")" MODULE_DIR="$APP_DIR/modules" echo "Creating module symlinks for compatibility..." echo "Module directory: $MODULE_DIR" # Create a function to make bidirectional symlinks create_module_symlinks() { if [ ! -d "$MODULE_DIR" ]; then echo "Error: Module directory not found at $MODULE_DIR" mkdir -p "$MODULE_DIR" echo "Created module directory: $MODULE_DIR" fi # Check if any .js files exist in the module directory js_file_count=$(find "$MODULE_DIR" -maxdepth 1 -name "*.js" -type f | wc -l) if [ "$js_file_count" -eq 0 ]; then echo "Warning: No JavaScript module files found in $MODULE_DIR" echo "Skipping symlink creation as there are no modules to link" return 0 fi # Create symlinks for hyphenated modules for module in "$MODULE_DIR"/*-*.js; do if [ -f "$module" ]; then # Convert hyphenated to camelCase BASE_NAME=$(basename "$module") CAMEL_NAME=$(echo "$BASE_NAME" | sed -E 's/-([a-z])/\U\1/g') # Create camelCase symlink if needed if [ ! -f "$MODULE_DIR/$CAMEL_NAME" ] && [ ! -L "$MODULE_DIR/$CAMEL_NAME" ]; then if ln -sf "$BASE_NAME" "$MODULE_DIR/$CAMEL_NAME"; then echo "Created symlink: $CAMEL_NAME -> $BASE_NAME" else echo "Error: Failed to create symlink $CAMEL_NAME" fi fi # Create extension-less symlink for both versions NO_EXT_BASE="${BASE_NAME%.js}" if [ ! -f "$MODULE_DIR/$NO_EXT_BASE" ] && [ ! -L "$MODULE_DIR/$NO_EXT_BASE" ]; then if ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_BASE"; then echo "Created symlink: $NO_EXT_BASE -> $BASE_NAME" else echo "Error: Failed to create symlink $NO_EXT_BASE" fi fi NO_EXT_CAMEL="${CAMEL_NAME%.js}" if [ ! -f "$MODULE_DIR/$NO_EXT_CAMEL" ] && [ ! -L "$MODULE_DIR/$NO_EXT_CAMEL" ]; then if ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_CAMEL"; then echo "Created symlink: $NO_EXT_CAMEL -> $BASE_NAME" else echo "Error: Failed to create symlink $NO_EXT_CAMEL" fi fi fi done # Create symlinks for camelCase modules (only non-symlinked files) for module in "$MODULE_DIR"/[a-z]*[A-Z]*.js; do if [ -f "$module" ] && [ ! -L "$module" ]; then # Convert camelCase to hyphenated BASE_NAME=$(basename "$module") HYPHEN_NAME=$(echo "$BASE_NAME" | sed -E 's/([a-z])([A-Z])/\1-\L\2/g') # Create hyphenated symlink if needed if [ ! -f "$MODULE_DIR/$HYPHEN_NAME" ] && [ ! -L "$MODULE_DIR/$HYPHEN_NAME" ]; then if ln -sf "$BASE_NAME" "$MODULE_DIR/$HYPHEN_NAME"; then echo "Created symlink: $HYPHEN_NAME -> $BASE_NAME" else echo "Error: Failed to create symlink $HYPHEN_NAME" fi fi # Create extension-less symlink for both versions NO_EXT_BASE="${BASE_NAME%.js}" if [ ! -f "$MODULE_DIR/$NO_EXT_BASE" ] && [ ! -L "$MODULE_DIR/$NO_EXT_BASE" ]; then if ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_BASE"; then echo "Created symlink: $NO_EXT_BASE -> $BASE_NAME" else echo "Error: Failed to create symlink $NO_EXT_BASE" fi fi NO_EXT_HYPHEN="${HYPHEN_NAME%.js}" if [ ! -f "$MODULE_DIR/$NO_EXT_HYPHEN" ] && [ ! -L "$MODULE_DIR/$NO_EXT_HYPHEN" ]; then if ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_HYPHEN"; then echo "Created symlink: $NO_EXT_HYPHEN -> $BASE_NAME" else echo "Error: Failed to create symlink $NO_EXT_HYPHEN" fi fi fi done echo "Module symlinks created successfully" } # Setup production directory if needed setup_production_dir() { # Check if this is running in development environment DEV_DIR="/opt/develop/transmission-rss-manager" # Check systemd service file to determine the correct production directory PROD_DIR="/opt/transmission-rss-manager" SERVICE_FILE="/etc/systemd/system/transmission-rss-manager.service" if [ -f "$SERVICE_FILE" ]; then # Extract the WorkingDirectory from the service file WORKING_DIR=$(grep "WorkingDirectory=" "$SERVICE_FILE" | cut -d'=' -f2) if [ -n "$WORKING_DIR" ]; then PROD_DIR="$WORKING_DIR" echo "Found production directory from service file: $PROD_DIR" fi fi if [ "$APP_DIR" == "$DEV_DIR" ] && [ -d "$DEV_DIR" ]; then echo "Setting up production directory symlinks at $PROD_DIR..." # Create the production directory if it doesn't exist if [ ! -d "$PROD_DIR" ]; then if mkdir -p "$PROD_DIR"; then echo "Created production directory: $PROD_DIR" else echo "Error: Failed to create production directory $PROD_DIR" return 1 fi fi # Create the modules directory in production if it doesn't exist if [ ! -d "$PROD_DIR/modules" ]; then if mkdir -p "$PROD_DIR/modules"; then echo "Created production modules directory: $PROD_DIR/modules" else echo "Error: Failed to create production modules directory" return 1 fi fi # Check for JavaScript modules in dev directory js_file_count=$(find "$MODULE_DIR" -maxdepth 1 -name "*.js" -type f | wc -l) if [ "$js_file_count" -eq 0 ]; then echo "Warning: No JavaScript module files found in $MODULE_DIR" echo "Skipping production symlink creation" else # Create symlinks from development modules to production modules for module in "$MODULE_DIR"/*.js; do if [ -f "$module" ] && [ ! -L "$module" ]; then MODULE_NAME=$(basename "$module") # Create symlink in production directory if ln -sf "$module" "$PROD_DIR/modules/$MODULE_NAME"; then echo "Created production symlink: $PROD_DIR/modules/$MODULE_NAME -> $module" else echo "Error: Failed to create production symlink for $MODULE_NAME" fi fi done fi # Copy server.js to production if it doesn't exist or needs updating if [ -f "$DEV_DIR/server.js" ]; then if [ ! -f "$PROD_DIR/server.js" ] || [ "$DEV_DIR/server.js" -nt "$PROD_DIR/server.js" ]; then if cp "$DEV_DIR/server.js" "$PROD_DIR/server.js"; then echo "Copied server.js to production directory" else echo "Error: Failed to copy server.js to production" fi fi else echo "Warning: server.js not found in development directory" fi # Create data directory in production if it doesn't exist if mkdir -p "$PROD_DIR/data"; then echo "Ensured data directory exists in production" else echo "Error: Failed to create production data directory" fi # Make sure scripts directory exists in production if mkdir -p "$PROD_DIR/scripts"; then echo "Ensured scripts directory exists in production" else echo "Error: Failed to create production scripts directory" fi # Copy test-and-start.sh to production if [ -f "$DEV_DIR/scripts/test-and-start.sh" ]; then if cp "$DEV_DIR/scripts/test-and-start.sh" "$PROD_DIR/scripts/test-and-start.sh"; then chmod +x "$PROD_DIR/scripts/test-and-start.sh" echo "Copied test-and-start.sh script to production" else echo "Error: Failed to copy test-and-start.sh to production" fi else echo "Warning: test-and-start.sh not found in development scripts directory" fi echo "Production directory setup complete" fi } # Execute the symlink creation function create_module_symlinks # Setup production directory if needed setup_production_dir