|
1 | 1 | @page "/downloads" |
2 | 2 |
|
3 | 3 | @using TelegramDownloader.Data |
| 4 | +@using TelegramDownloader.Data.db |
4 | 5 | @using TelegramDownloader.Models |
5 | 6 | @using TelegramDownloader.Services |
6 | 7 | @using Microsoft.AspNetCore.WebUtilities |
7 | 8 |
|
8 | 9 | @inject TransactionInfoService tis |
9 | 10 | @inject NavigationManager NavigationManager |
| 11 | +@inject ITaskPersistenceService taskPersistence |
| 12 | +@inject IDbService dbService |
10 | 13 |
|
11 | 14 | <div class="downloads-header"> |
12 | 15 | <h2 class="downloads-title"> |
|
20 | 23 | </div> |
21 | 24 | <div class="stat-info"> |
22 | 25 | <h4>@tis.getTotalTasks()</h4> |
23 | | - <p>Pending Tasks</p> |
| 26 | + <p>Batch Tasks</p> |
24 | 27 | </div> |
25 | 28 | </div> |
26 | 29 | <div class="stat-card"> |
|
41 | 44 | <p>Uploads</p> |
42 | 45 | </div> |
43 | 46 | </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> |
44 | 56 | </div> |
45 | 57 | </div> |
46 | 58 |
|
|
128 | 140 | </Tabs> |
129 | 141 | </Content> |
130 | 142 | </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> |
131 | 157 | </Tabs> |
132 | 158 |
|
| 159 | +<ConfirmDialog @ref="confirmDialog" /> |
133 | 160 |
|
134 | 161 | @code { |
135 | 162 | private Tabs tabsRef = default!; |
136 | 163 | private string activeTab = "tasks"; |
137 | 164 | private bool tabInitialized = false; |
| 165 | + private int persistedTasksCount = 0; |
| 166 | + private TelegramDownloader.Pages.Partials.PersistedTasksTable persistedTasksTable; |
| 167 | + private ConfirmDialog confirmDialog = default!; |
138 | 168 |
|
139 | 169 | protected override void OnInitialized() |
140 | 170 | { |
|
143 | 173 | if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("tab", out var tabValue)) |
144 | 174 | { |
145 | 175 | var tab = tabValue.ToString().ToLower(); |
146 | | - if (tab == "uploads" || tab == "downloads" || tab == "tasks") |
| 176 | + if (tab == "uploads" || tab == "downloads" || tab == "tasks" || tab == "persisted") |
147 | 177 | { |
148 | 178 | activeTab = tab; |
149 | 179 | } |
150 | 180 | } |
151 | 181 | } |
152 | 182 |
|
| 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 | + |
153 | 201 | protected override async Task OnAfterRenderAsync(bool firstRender) |
154 | 202 | { |
155 | 203 | if (firstRender && !tabInitialized && activeTab != "tasks") |
|
180 | 228 | { |
181 | 229 | tis.clearTasksCompleted(); |
182 | 230 | } |
| 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 | + } |
183 | 253 | } |
0 commit comments