Skip to content

Commit 6be482f

Browse files
committed
feat: add persist task table
1 parent 4ba6867 commit 6be482f

6 files changed

Lines changed: 886 additions & 5 deletions

File tree

TelegramDownloader/Pages/Downloads.razor

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
@page "/downloads"
22

33
@using TelegramDownloader.Data
4+
@using TelegramDownloader.Data.db
45
@using TelegramDownloader.Models
56
@using TelegramDownloader.Services
67
@using Microsoft.AspNetCore.WebUtilities
78

89
@inject TransactionInfoService tis
910
@inject NavigationManager NavigationManager
11+
@inject ITaskPersistenceService taskPersistence
12+
@inject IDbService dbService
1013

1114
<div class="downloads-header">
1215
<h2 class="downloads-title">
@@ -20,7 +23,7 @@
2023
</div>
2124
<div class="stat-info">
2225
<h4>@tis.getTotalTasks()</h4>
23-
<p>Pending Tasks</p>
26+
<p>Batch Tasks</p>
2427
</div>
2528
</div>
2629
<div class="stat-card">
@@ -41,6 +44,15 @@
4144
<p>Uploads</p>
4245
</div>
4346
</div>
47+
<div class="stat-card">
48+
<div class="stat-icon persisted">
49+
<i class="bi bi-database"></i>
50+
</div>
51+
<div class="stat-info">
52+
<h4>@persistedTasksCount</h4>
53+
<p>Saved Tasks</p>
54+
</div>
55+
</div>
4456
</div>
4557
</div>
4658

@@ -128,13 +140,31 @@
128140
</Tabs>
129141
</Content>
130142
</Tab>
143+
<Tab Title="Saved Tasks" Name="persisted">
144+
<Content>
145+
<div class="tab-actions">
146+
<span class="tab-actions-title">Persisted Tasks</span>
147+
<div class="action-btn-group">
148+
<button class="action-btn clear" @onclick="ClearAllPersistedTasks" title="Clear all persisted tasks">
149+
<i class="bi bi-trash3"></i>
150+
<span>Clear All</span>
151+
</button>
152+
</div>
153+
</div>
154+
<TelegramDownloader.Pages.Partials.PersistedTasksTable @ref="persistedTasksTable"></TelegramDownloader.Pages.Partials.PersistedTasksTable>
155+
</Content>
156+
</Tab>
131157
</Tabs>
132158

159+
<ConfirmDialog @ref="confirmDialog" />
133160

134161
@code {
135162
private Tabs tabsRef = default!;
136163
private string activeTab = "tasks";
137164
private bool tabInitialized = false;
165+
private int persistedTasksCount = 0;
166+
private TelegramDownloader.Pages.Partials.PersistedTasksTable persistedTasksTable;
167+
private ConfirmDialog confirmDialog = default!;
138168

139169
protected override void OnInitialized()
140170
{
@@ -143,13 +173,31 @@
143173
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("tab", out var tabValue))
144174
{
145175
var tab = tabValue.ToString().ToLower();
146-
if (tab == "uploads" || tab == "downloads" || tab == "tasks")
176+
if (tab == "uploads" || tab == "downloads" || tab == "tasks" || tab == "persisted")
147177
{
148178
activeTab = tab;
149179
}
150180
}
151181
}
152182

183+
protected override async Task OnInitializedAsync()
184+
{
185+
await LoadPersistedTasksCount();
186+
}
187+
188+
private async Task LoadPersistedTasksCount()
189+
{
190+
try
191+
{
192+
var tasks = await taskPersistence.LoadPendingTasks();
193+
persistedTasksCount = tasks?.Count ?? 0;
194+
}
195+
catch
196+
{
197+
persistedTasksCount = 0;
198+
}
199+
}
200+
153201
protected override async Task OnAfterRenderAsync(bool firstRender)
154202
{
155203
if (firstRender && !tabInitialized && activeTab != "tasks")
@@ -180,4 +228,26 @@
180228
{
181229
tis.clearTasksCompleted();
182230
}
231+
232+
async Task ClearAllPersistedTasks()
233+
{
234+
var confirmed = await confirmDialog.ShowAsync(
235+
title: "Clear All Saved Tasks",
236+
message1: "Are you sure you want to delete all saved tasks from the database?",
237+
message2: "This action cannot be undone.");
238+
239+
if (confirmed)
240+
{
241+
try
242+
{
243+
await dbService.ClearAllTasks();
244+
persistedTasksCount = 0;
245+
StateHasChanged();
246+
}
247+
catch (Exception ex)
248+
{
249+
// Log error
250+
}
251+
}
252+
}
183253
}

TelegramDownloader/Pages/Downloads.razor.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,11 @@
311311
color: #5dd879;
312312
}
313313

314+
.stat-icon.persisted {
315+
background: rgba(168, 85, 247, 0.15);
316+
color: #a855f7;
317+
}
318+
314319
.stat-icon.pending {
315320
background: rgba(255, 193, 7, 0.15);
316321
color: #ffc107;

0 commit comments

Comments
 (0)