RSS fix
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Elias Jansson
2026-01-23 20:00:16 +01:00
parent a2e14c73df
commit 2bbd67e37d
6 changed files with 116 additions and 12 deletions

View File

@@ -18,6 +18,7 @@
<PackageReference Include="BencodeNET" Version="5.0.0" /> <PackageReference Include="BencodeNET" Version="5.0.0" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.67" /> <PackageReference Include="HtmlAgilityPack" Version="1.11.67" />
<PackageReference Include="Lib.Net.Http.WebPush" Version="3.3.1" /> <PackageReference Include="Lib.Net.Http.WebPush" Version="3.3.1" />
<PackageReference Include="MessagePack" Version="3.1.4" />
<!-- Entity Framework Core 6 --> <!-- Entity Framework Core 6 -->
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.36" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.36" />
@@ -43,7 +44,10 @@
<!-- Övrigt --> <!-- Övrigt -->
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.15.1" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.15.1" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.18" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.18" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.9" /> <PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" />
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="System.Text.Json" Version="10.0.2" />
<PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
<PackageReference Include="WebPush" Version="1.0.12" /> <PackageReference Include="WebPush" Version="1.0.12" />
</ItemGroup> </ItemGroup>

View File

@@ -71,6 +71,7 @@ public class RssController : Controller
Leechers = t.Leechers, Leechers = t.Leechers,
TorrentUrl = t.TorrentUrl, TorrentUrl = t.TorrentUrl,
Metadata = t.Metadata, Metadata = t.Metadata,
IsDownloaded = t.IsDownloaded,
IsNew = t.InfoHash != null && !seenHashes.Contains(t.InfoHash), IsNew = t.InfoHash != null && !seenHashes.Contains(t.InfoHash),
AvailableOn = !string.IsNullOrEmpty(t.Metadata?.Providers) AvailableOn = !string.IsNullOrEmpty(t.Metadata?.Providers)
? t.Metadata.Providers.Split(',').ToList() ? t.Metadata.Providers.Split(',').ToList()
@@ -144,7 +145,7 @@ public class RssController : Controller
} }
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
_logger.LogInformation("SavedChanges to torrents");
return Json(new return Json(new
{ {
success = true, success = true,

View File

@@ -56,7 +56,16 @@ namespace Aberwyn.Data
var payload = new var payload = new
{ {
method = "core.add_torrent_url", method = "core.add_torrent_url",
@params = new object[] { torrentUrl, new { } }, @params = new object[]
{
torrentUrl,
new
{
download_location = "/download/incomplete",
move_completed = true,
move_completed_path = "/media/Movies",
}
},
id = 3 id = 3
}; };

View File

@@ -108,6 +108,7 @@ public class TorrentListItemViewModel
public MovieMetadata? Metadata { get; set; } public MovieMetadata? Metadata { get; set; }
public bool IsNew { get; set; } = false; public bool IsNew { get; set; } = false;
public List<string> AvailableOn { get; set; } = new(); public List<string> AvailableOn { get; set; } = new();
public bool IsDownloaded { get; set; }
} }
public class JustWatchResponse public class JustWatchResponse
{ {

View File

@@ -92,10 +92,18 @@
<div class="col-center @(main.Seeders > 40 ? "highlight-green" : "")">@main.Seeders</div> <div class="col-center @(main.Seeders > 40 ? "highlight-green" : "")">@main.Seeders</div>
<div class="col-center highlight-red">@main.Leechers</div> <div class="col-center highlight-red">@main.Leechers</div>
<div class="col-action"> <div class="col-action">
<form asp-controller="RSS" asp-action="Add" method="post" onsubmit="return confirmDownload('@main.Title')"> @if (main.IsDownloaded)
<input type="hidden" name="torrentUrl" value="@main.TorrentUrl" /> {
<button type="submit" class="btn-add btn-small"> Ladda ner</button> <span class="downloaded">✔ Nedladdad</span>
</form> }
else
{
<form class="download-form"
data-url="@Url.Action("Add", "Rss")"
data-torrent="@main.TorrentUrl">
<button type="submit" class="btn-add btn-small"> Ladda ner</button>
</form>
}
</div> </div>
</div> </div>
@@ -155,7 +163,67 @@
url.searchParams.set('sort', field); url.searchParams.set('sort', field);
window.location = url; window.location = url;
} }
function confirmDownload(title) {
return confirm(`Vill du ladda ner "${title}"?`);
}
</script> </script>
<script>
document.addEventListener("DOMContentLoaded", () => {
document.querySelectorAll(".download-form").forEach(form => {
form.addEventListener("submit", async (e) => {
e.preventDefault(); // 🔥 STOPPAR ALL REFRESH ALLTID
console.log("form:", form);
const button = form.querySelector("button");
console.log("button:", button);
const torrentUrl = form.dataset.torrent;
const postUrl = form.dataset.url;
if (!torrentUrl || !postUrl) {
console.error("Saknar data-attribut");
return;
}
if (!confirm("Vill du ladda ner denna torrent?"))
return;
if (button) {
button.disabled = true;
button.innerText = "⏳ Laddar...";
}
try {
const response = await fetch(postUrl, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
body: new URLSearchParams({ torrentUrl })
});
const text = await response.text();
console.log("Raw response:", text);
const result = JSON.parse(text);
if (result.success) {
form.innerHTML = `<span class="downloaded">✔ Tillagd</span>`;
} else {
throw new Error(result.message || "Misslyckades");
}
}
catch (err) {
console.error("JS error:", err);
if (button) {
button.disabled = false;
button.innerText = " Ladda ner";
}
alert("Ett fel uppstod");
}
});
});
});
</script>

View File

@@ -3,7 +3,7 @@ const urlsToCache = [
'/', '/',
'/css/site.css', '/css/site.css',
'/images/lewel-icon.png', '/images/lewel-icon.png',
'/manifest.json' '/manifest-v2.json'
]; ];
self.addEventListener('install', event => { self.addEventListener('install', event => {
@@ -14,7 +14,7 @@ self.addEventListener('install', event => {
); );
}); });
self.addEventListener("fetch", function (event) { /*self.addEventListener("fetch", function (event) {
const url = new URL(event.request.url); const url = new URL(event.request.url);
// Hoppa över root / om du inte vill cachea den // Hoppa över root / om du inte vill cachea den
@@ -28,8 +28,29 @@ self.addEventListener("fetch", function (event) {
return response || fetch(event.request); return response || fetch(event.request);
}) })
); );
});*/
self.addEventListener("fetch", event => {
// 🔴 Ignorera allt som inte är GET (POST, PUT, DELETE etc)
if (event.request.method !== "GET") {
return;
}
const url = new URL(event.request.url);
// Hoppa över root om du vill
if (url.pathname === "/") {
return;
}
event.respondWith(
caches.match(event.request).then(response => {
return response || fetch(event.request);
})
);
}); });
self.addEventListener('push', function (event) { self.addEventListener('push', function (event) {
console.log("📨 Push event mottagen!", event); console.log("📨 Push event mottagen!", event);