165 lines
5.9 KiB
Bash
Executable File
165 lines
5.9 KiB
Bash
Executable File
#!/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<IConfigService, ConfigService>();
|
|
builder.Services.AddSingleton<ITransmissionClient, TransmissionClient>();
|
|
builder.Services.AddSingleton<IRssFeedManager, RssFeedManager>();
|
|
builder.Services.AddSingleton<IPostProcessor, PostProcessor>();
|
|
|
|
// Add background services
|
|
builder.Services.AddHostedService<RssFeedBackgroundService>();
|
|
builder.Services.AddHostedService<PostProcessingBackgroundService>();
|
|
|
|
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'
|
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
|
|
|
<PropertyGroup>
|
|
<TargetFramework>net7.0</TargetFramework>
|
|
<RootNamespace>TransmissionRssManager</RootNamespace>
|
|
<ImplicitUsings>disable</ImplicitUsings>
|
|
<Nullable>enable</Nullable>
|
|
<Version>1.0.0</Version>
|
|
<Authors>TransmissionRssManager</Authors>
|
|
<Description>A C# application to manage RSS feeds and automatically download torrents via Transmission</Description>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.13" />
|
|
<PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="7.0.0" />
|
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
|
<PackageReference Include="System.ServiceModel.Syndication" Version="7.0.0" />
|
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.0" />
|
|
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0" />
|
|
</ItemGroup>
|
|
|
|
</Project>
|
|
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" |