This commit addresses multiple code consistency and reliability issues across the codebase: 1. Version consistency - use package.json version (2.0.9) throughout 2. Improved module loading with better error handling and consistent symlinks 3. Enhanced data directory handling with better error checking 4. Fixed redundant code in main-installer.sh 5. Improved error handling in transmission-client.js 6. Added extensive module symlink creation 7. Better file path handling and permission checks 8. Enhanced API response handling 💡 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
140 lines
4.5 KiB
Bash
Executable File
140 lines
4.5 KiB
Bash
Executable File
#!/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" |