#!/bin/bash # Working network version with proper static file configuration GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color # Clean up existing test directory echo -e "${YELLOW}Removing existing test directory...${NC}" rm -rf "$HOME/transmission-rss-test" # Create and prepare test directory echo -e "${GREEN}Creating fresh test directory...${NC}" TEST_DIR="$HOME/transmission-rss-test" mkdir -p "$TEST_DIR" mkdir -p "$TEST_DIR/wwwroot/css" mkdir -p "$TEST_DIR/wwwroot/js" # Copy web static files directly to wwwroot cp -rv /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Web/wwwroot/* "$TEST_DIR/wwwroot/" # Create Program.cs with fixed static file configuration cat > "$TEST_DIR/Program.cs" << 'EOL' using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; using System; using System.IO; using TransmissionRssManager.Core; using TransmissionRssManager.Services; var builder = WebApplication.CreateBuilder(args); // Add services to the container builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Add custom services builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); // Add background services builder.Services.AddHostedService(); builder.Services.AddHostedService(); var app = builder.Build(); // Configure middleware if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } // Configure static files var wwwrootPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider(wwwrootPath), RequestPath = "" }); // Create default route to serve index.html app.MapGet("/", context => { context.Response.ContentType = "text/html"; context.Response.Redirect("/index.html"); return System.Threading.Tasks.Task.CompletedTask; }); app.UseRouting(); app.UseAuthorization(); app.MapControllers(); // Log where static files are being served from app.Logger.LogInformation($"Static files are served from: {wwwrootPath}"); app.Run(); EOL # Create project file with System.IO cat > "$TEST_DIR/TransmissionRssManager.csproj" << 'EOL' net7.0 TransmissionRssManager disable enable 1.0.0 TransmissionRssManager A C# application to manage RSS feeds and automatically download torrents via Transmission EOL # Create source directories mkdir -p "$TEST_DIR/src/Core" mkdir -p "$TEST_DIR/src/Services" mkdir -p "$TEST_DIR/src/Api/Controllers" # Copy core interfaces cp -v /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Core/Interfaces.cs "$TEST_DIR/src/Core/" # Copy service implementations cp -v /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Services/ConfigService.cs "$TEST_DIR/src/Services/" cp -v /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Services/TransmissionClient.cs "$TEST_DIR/src/Services/" cp -v /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Services/RssFeedManager.cs "$TEST_DIR/src/Services/" cp -v /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Services/PostProcessor.cs "$TEST_DIR/src/Services/" # Copy API controllers cp -v /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Api/Controllers/ConfigController.cs "$TEST_DIR/src/Api/Controllers/" cp -v /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Api/Controllers/FeedsController.cs "$TEST_DIR/src/Api/Controllers/" cp -v /opt/develop/transmission-rss-manager/TransmissionRssManager/src/Api/Controllers/TorrentsController.cs "$TEST_DIR/src/Api/Controllers/" # Fix namespaces for Services sed -i 's/using Microsoft.Extensions.Hosting;/using Microsoft.Extensions.Hosting;\nusing System.Linq;/g' "$TEST_DIR/src/Services/RssFeedManager.cs" sed -i 's/using Microsoft.Extensions.Hosting;/using Microsoft.Extensions.Hosting;\nusing System.Linq;/g' "$TEST_DIR/src/Services/PostProcessor.cs" # Get server IP SERVER_IP=$(hostname -I | awk '{print $1}') echo -e "${GREEN}Server IP: $SERVER_IP${NC}" # Build the application cd "$TEST_DIR" echo -e "${GREEN}Setting up NuGet packages...${NC}" dotnet restore if [ $? -ne 0 ]; then echo -e "${RED}Failed to restore NuGet packages.${NC}" exit 1 fi echo -e "${GREEN}Building application...${NC}" dotnet build if [ $? -ne 0 ]; then echo -e "${RED}Build failed.${NC}" exit 1 fi # Run with explicit host binding echo -e "${GREEN}Starting application on all interfaces with explicit binding...${NC}" echo -e "${GREEN}The web interface will be available at:${NC}" echo -e "${GREEN}- Local: http://localhost:5000${NC}" echo -e "${GREEN}- Network: http://${SERVER_IP}:5000${NC}" echo -e "${YELLOW}Press Ctrl+C to stop the application${NC}" cd "$TEST_DIR" dotnet run --urls="http://0.0.0.0:5000"