Skip to content

Commit 9334e1e

Browse files
committed
feat: add pending upload tab
1 parent 0ad71b1 commit 9334e1e

3 files changed

Lines changed: 65 additions & 19 deletions

File tree

TelegramDownloader/Pages/Downloads.razor

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,18 @@
114114
</button>
115115
</div>
116116
</div>
117-
<TelegramDownloader.Pages.Partials.UploadsTable></TelegramDownloader.Pages.Partials.UploadsTable>
117+
<Tabs EnableFadeEffect="true">
118+
<Tab Title="Active" IsActive="true">
119+
<Content>
120+
<TelegramDownloader.Pages.Partials.UploadsTable isPending="false"></TelegramDownloader.Pages.Partials.UploadsTable>
121+
</Content>
122+
</Tab>
123+
<Tab Title="Queue">
124+
<Content>
125+
<TelegramDownloader.Pages.Partials.UploadsTable isPending="true"></TelegramDownloader.Pages.Partials.UploadsTable>
126+
</Content>
127+
</Tab>
128+
</Tabs>
118129
</Content>
119130
</Tab>
120131
</Tabs>

TelegramDownloader/Pages/Partials/UploadsTable.razor

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,26 +52,30 @@
5252
</GridColumn>
5353

5454
<GridColumn TItem="UploadModel" HeaderText="Status">
55-
<span class="status-badge @GetStatusClass(context)">
56-
<i class="bi @GetStatusIcon(context)"></i>
57-
@GetStatusText(context)
55+
<span class="status-badge @GetStatusClass(context, isPending)">
56+
<i class="bi @GetStatusIcon(context, isPending)"></i>
57+
@GetStatusText(context, isPending)
5858
</span>
5959
</GridColumn>
6060

6161
<GridColumn TItem="UploadModel" HeaderText="Actions">
6262
<div class="action-buttons">
63-
@if (context.state == StateTask.Working)
63+
@if (context.state == StateTask.Working && !isPending)
6464
{
6565
<button class="action-btn cancel" @onclick="() => cancel(context)" title="Cancel">
6666
<i class="bi bi-x-lg"></i>
6767
</button>
6868
}
6969

70-
@if (context.state == StateTask.Canceled || context.state == StateTask.Error)
70+
@if ((context.state == StateTask.Canceled || context.state == StateTask.Error) && !isPending)
7171
{
7272
<button class="action-btn retry" @onclick="() => retry(context)" title="Retry">
7373
<i class="bi bi-arrow-clockwise"></i>
7474
</button>
75+
}
76+
77+
@if (context.state == StateTask.Canceled || context.state == StateTask.Error || isPending)
78+
{
7579
<button class="action-btn delete" @onclick="() => deleteUpload(context)" title="Delete">
7680
<i class="bi bi-trash3"></i>
7781
</button>
@@ -88,6 +92,9 @@
8892
<TelegramDownloader.Pages.Modals.InfoModals.UploadFileInfoModal @ref="infoModal" OnClose="OnModalClose"></TelegramDownloader.Pages.Modals.InfoModals.UploadFileInfoModal>
8993

9094
@code {
95+
[Parameter]
96+
public bool isPending { get; set; } = false;
97+
9198
[Parameter]
9299
public EventCallback OnUploadModalClose { get; set; }
93100

@@ -121,8 +128,9 @@
121128
return "";
122129
}
123130

124-
private string GetStatusClass(UploadModel um)
131+
private string GetStatusClass(UploadModel um, bool isPending)
125132
{
133+
if (isPending) return "pending";
126134
return um.state switch
127135
{
128136
StateTask.Working => "working",
@@ -133,8 +141,9 @@
133141
};
134142
}
135143

136-
private string GetStatusIcon(UploadModel um)
144+
private string GetStatusIcon(UploadModel um, bool isPending)
137145
{
146+
if (isPending) return "bi-clock";
138147
return um.state switch
139148
{
140149
StateTask.Working => "bi-arrow-up-circle",
@@ -145,8 +154,9 @@
145154
};
146155
}
147156

148-
private string GetStatusText(UploadModel um)
157+
private string GetStatusText(UploadModel um, bool isPending)
149158
{
159+
if (isPending) return "In Queue";
150160
return um.state switch
151161
{
152162
StateTask.Working => "Uploading",
@@ -188,22 +198,26 @@
188198

189199
private async Task deleteUpload(UploadModel um)
190200
{
201+
if (isPending)
202+
{
203+
tis.deletePendingUploadInList(um);
204+
return;
205+
}
191206
tis.deleteUploadInList(um);
192207
}
193208

194209
private async Task<GridDataProviderResult<UploadModel>> UploadsDataProvider(GridDataProviderRequest<UploadModel> request)
195210
{
196211
await getUploadModels(request.PageNumber - 1, request.PageSize, lum.Count() == 0);
197-
int totalUploads = tis.getTotalUploads();
198-
return await Task.FromResult(new GridDataProviderResult<UploadModel> { Data = lum ?? new List<UploadModel>(), TotalCount = totalUploads });//request.ApplyTo(uploads));
212+
int totalUploads = tis.getTotalUploads(isPending);
213+
return await Task.FromResult(new GridDataProviderResult<UploadModel> { Data = lum ?? new List<UploadModel>(), TotalCount = totalUploads });
199214
}
200215

201216
private async Task getUploadModels(int pageNumber, int pageSize, bool mustCallEnventHandler = false)
202217
{
203-
lum = tis.GetUploadModels(pageNumber, pageSize);
218+
lum = tis.GetUploadModels(pageNumber, pageSize, isPending);
204219
if (mustCallEnventHandler)
205220
checkNewEventsHandler();
206-
// await InvokeAsync(StateHasChanged);
207221
}
208222

209223
private void checkNewEventsHandler()

TelegramDownloader/Services/TransactionInfoService.cs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class TransactionInfoService
1919
public List<DownloadModel> downloadModels = new List<DownloadModel>();
2020
public List<DownloadModel> pendingDownloadModels = new List<DownloadModel>();
2121
public List<UploadModel> uploadModels = new List<UploadModel>();
22+
public List<UploadModel> pendingUploadModels = new List<UploadModel>();
2223
public List<InfoDownloadTaksModel> infoDownloadTaksModel = new List<InfoDownloadTaksModel>();
2324
public String downloadSpeed = "0 KB/s";
2425
public String uploadSpeed = "0 KB/s";
@@ -30,6 +31,7 @@ public class TransactionInfoService
3031
private int speedHistoryCount = 0;
3132

3233
private static Mutex PendingDownloadMutex = new Mutex();
34+
private static Mutex PendingUploadMutex = new Mutex();
3335
private static Mutex PendingUploadInfoTaskMutex = new Mutex();
3436
private static Mutex DownloadBytesMutex = new Mutex();
3537
private static Mutex UploadBytesMutex = new Mutex();
@@ -357,16 +359,35 @@ public int getTotalDownloads(bool isPending = false)
357359
return isPending ? pendingDownloadModels.Count() : downloadModels.Count();
358360
}
359361

360-
public List<UploadModel> GetUploadModels(int pageNumber, int pageSize)
362+
public List<UploadModel> GetUploadModels(int pageNumber, int pageSize, bool isPending = false)
361363
{
362-
if (uploadModels.Count() == 0 || uploadModels.Count() < (pageNumber) * pageSize)
363-
return uploadModels;
364-
return uploadModels.Skip(pageNumber * pageSize).Take(pageSize).ToList(); //.GetRange(pageNumber * pageSize, pageSize);
364+
var sourceList = isPending ? pendingUploadModels : uploadModels;
365+
if (sourceList.Count() == 0 || sourceList.Count() < (pageNumber) * pageSize)
366+
return sourceList;
367+
return sourceList.Skip(pageNumber * pageSize).Take(pageSize).ToList();
365368
}
366369

367-
public int getTotalUploads()
370+
public int getTotalUploads(bool isPending = false)
368371
{
369-
return uploadModels.Count();
372+
return isPending ? pendingUploadModels.Count() : uploadModels.Count();
373+
}
374+
375+
public void addToPendingUploadList(UploadModel uploadModel)
376+
{
377+
PendingUploadMutex.WaitOne();
378+
pendingUploadModels.Add(uploadModel);
379+
PendingUploadMutex.ReleaseMutex();
380+
EventChanged?.Invoke(this, new EventArgs());
381+
TaskEventChanged?.Invoke(null, EventArgs.Empty);
382+
}
383+
384+
public void deletePendingUploadInList(UploadModel uploadModel)
385+
{
386+
PendingUploadMutex.WaitOne();
387+
pendingUploadModels.Remove(uploadModel);
388+
PendingUploadMutex.ReleaseMutex();
389+
EventChanged?.Invoke(this, new EventArgs());
390+
TaskEventChanged?.Invoke(null, EventArgs.Empty);
370391
}
371392

372393
public void deleteDownloadInList(DownloadModel downloadModel)

0 commit comments

Comments
 (0)