#!/bin/bash # Script to ensure data directory exists and start the application # Define paths APP_DIR="$(dirname "$(dirname "$(readlink -f "$0")")")" DATA_DIR="$APP_DIR/data" echo "Starting Transmission RSS Manager..." echo "Application directory: $APP_DIR" echo "Data directory: $DATA_DIR" # Ensure the data directory exists if [ ! -d "$DATA_DIR" ]; then echo "Creating data directory: $DATA_DIR" mkdir -p "$DATA_DIR" if [ $? -ne 0 ]; then echo "Failed to create data directory. Trying alternative method..." # Try alternative method if standard mkdir fails cd "$APP_DIR" && mkdir -p data if [ $? -ne 0 ]; then echo "ERROR: Both methods to create data directory failed. Please check permissions." exit 1 fi fi fi # Set permissions chmod -R 755 "$DATA_DIR" || { echo "Warning: Failed to set permissions on data directory" } # Check for RSS files if [ ! -f "$DATA_DIR/rss-feeds.json" ]; then echo "Creating initial empty rss-feeds.json file" echo "[]" > "$DATA_DIR/rss-feeds.json" || { echo "ERROR: Failed to create rss-feeds.json file" exit 1 } fi if [ ! -f "$DATA_DIR/rss-items.json" ]; then echo "Creating initial empty rss-items.json file" echo "[]" > "$DATA_DIR/rss-items.json" || { echo "ERROR: Failed to create rss-items.json file" exit 1 } fi # Find the node executable path NODE_PATH=$(which node 2>/dev/null) if [ -z "$NODE_PATH" ]; then # If node is not in PATH, try common locations for path in /usr/bin/node /usr/local/bin/node /opt/node/bin/node /usr/lib/node; do if [ -x "$path" ]; then NODE_PATH="$path" break fi done # If we still can't find node, use the default path if [ -z "$NODE_PATH" ]; then NODE_PATH="/usr/bin/node" echo "Warning: Node.js not found in PATH, using default path: $NODE_PATH" fi fi # Create module symlinks to ensure compatibility echo "Creating module symlinks for compatibility..." MODULE_DIR="$APP_DIR/modules" # Create a function to make bidirectional symlinks create_module_symlinks() { if [ -d "$MODULE_DIR" ]; then # 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" ]; then ln -sf "$BASE_NAME" "$MODULE_DIR/$CAMEL_NAME" echo "Created symlink: $CAMEL_NAME -> $BASE_NAME" fi # Create extension-less symlink for both versions NO_EXT_BASE="${BASE_NAME%.js}" if [ ! -f "$MODULE_DIR/$NO_EXT_BASE" ]; then ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_BASE" echo "Created symlink: $NO_EXT_BASE -> $BASE_NAME" fi NO_EXT_CAMEL="${CAMEL_NAME%.js}" if [ ! -f "$MODULE_DIR/$NO_EXT_CAMEL" ]; then ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_CAMEL" echo "Created symlink: $NO_EXT_CAMEL -> $BASE_NAME" fi fi done # Create symlinks for camelCase modules for module in "$MODULE_DIR"/[a-z]*[A-Z]*.js; do if [ -f "$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" ]; then ln -sf "$BASE_NAME" "$MODULE_DIR/$HYPHEN_NAME" echo "Created symlink: $HYPHEN_NAME -> $BASE_NAME" fi # Create extension-less symlink for both versions NO_EXT_BASE="${BASE_NAME%.js}" if [ ! -f "$MODULE_DIR/$NO_EXT_BASE" ]; then ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_BASE" echo "Created symlink: $NO_EXT_BASE -> $BASE_NAME" fi NO_EXT_HYPHEN="${HYPHEN_NAME%.js}" if [ ! -f "$MODULE_DIR/$NO_EXT_HYPHEN" ]; then ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_HYPHEN" echo "Created symlink: $NO_EXT_HYPHEN -> $BASE_NAME" fi fi done else echo "Warning: Module directory not found at $MODULE_DIR" fi } # Execute the symlink creation function create_module_symlinks # Start the application cd "$APP_DIR" || { echo "Failed to change to application directory"; exit 1; } echo "Starting node.js application with: $NODE_PATH $APP_DIR/server.js" exec "$NODE_PATH" "$APP_DIR/server.js"