Skip to content

Commit 5d02dc9

Browse files
authored
release: merge from Develop (#24)
* chore: add dropdown button to channel name * feat: deleting shared feat: refresh after import feat: remember tab * chore: improves * feat: improve import shared files and folders * fix: solve anonymous tab issue * chore: avoid check certificate * chore: avoid add bad files and folders to upload * chore: improve count files on upload * chore: avoid directories * chore: not contains no sincronized folders * feat: video first step * chore: web video player * feat: bump to dot net 8 * fix: fix docker port * Update README.md * Update buildrelease.yml Add .net library to compilation executable * feat: download pending * chore: update libraries * bugfix: fix get log path in native apps * Merge: Main into develop (#20) * Develop (#18) * chore: add dropdown button to channel name * feat: deleting shared feat: refresh after import feat: remember tab * chore: improves * feat: improve import shared files and folders * fix: solve anonymous tab issue * chore: avoid check certificate * chore: avoid add bad files and folders to upload * chore: improve count files on upload * chore: avoid directories * chore: not contains no sincronized folders * feat: video first step * chore: web video player * feat: bump to dot net 8 * fix: fix docker port * Update README.md * Update buildrelease.yml Add .net library to compilation executable * merge: Develop into main (#19) * chore: add dropdown button to channel name * feat: deleting shared feat: refresh after import feat: remember tab * chore: improves * feat: improve import shared files and folders * fix: solve anonymous tab issue * chore: avoid check certificate * chore: avoid add bad files and folders to upload * chore: improve count files on upload * chore: avoid directories * chore: not contains no sincronized folders * feat: video first step * chore: web video player * feat: bump to dot net 8 * fix: fix docker port * Update README.md * Update buildrelease.yml Add .net library to compilation executable * feat: download pending * chore: update libraries * bugfix: fix get log path in native apps * Overwrite only new files when upload * fix: fix date check * feat: add show all messages feat: change md5 to xxhash feat: add more info in upload table feat: allow disable hash calculator by config refactor: chatMessage * feat: add path for upload files in tooltip * feat: add spinner
1 parent 5769557 commit 5d02dc9

3 files changed

Lines changed: 75 additions & 25 deletions

File tree

TelegramDownloader/Pages/Partials/UploadsTable.razor

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Responsive="true">
1818
@context.id
1919
</GridColumn>
2020
<GridColumn TItem="UploadModel" HeaderText="File" PropertyName="name" SortString="name" SortKeySelector="item => item.name" FilterTextboxWidth="50" HeaderTextAlignment="Alignment.Center" TextAlignment="Alignment.Center">
21-
@context.name
21+
<Tooltip Class="me-4" Title="@context.path">@context.name</Tooltip>
2222
</GridColumn>
2323
<GridColumn TItem="UploadModel" HeaderText="State" PropertyName="state" SortString="state" SortKeySelector="item => item.state" FilterTextboxWidth="80">
2424
@context.state
@@ -35,26 +35,37 @@ Responsive="true">
3535
@context._transmittedString of @context._sizeString
3636
</GridColumn>
3737
<GridColumn TItem="UploadModel" HeaderText="Actions">
38-
@if (context.state == StateTask.Working)
39-
{
40-
<td>
41-
<div class="btn-group" role="group">
42-
<button class="btn btn-danger" @onclick="() => cancel(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="Cancel task"><i class="bi bi-x"></i></button>
43-
<button class="btn btn-info" @onclick="() => infoModal.ShowModal(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="Show Info"><i class="bi bi-info"></i></button>
44-
</div>
45-
</td>
38+
@{
39+
switch (context.state)
40+
{
41+
case StateTask.Working:
42+
<td>
43+
<div class="btn-group" role="group">
44+
<button class="btn btn-danger" @onclick="() => cancel(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="Cancel task"><i class="bi bi-x"></i></button>
45+
<button class="btn btn-info" @onclick="() => infoModal.ShowModal(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="Show Info"><i class="bi bi-info"></i></button>
46+
</div>
47+
</td>
48+
break;
49+
case StateTask.Canceled:
50+
case StateTask.Error:
51+
<td>
52+
<div class="btn-group" role="group">
53+
<button class="btn btn-info" @onclick="() => retry(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="retry task"><i class="bi bi-arrow-clockwise"></i></button>
54+
<button class="btn btn-danger" @onclick="() => deleteUpload(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="delete task"><i class="bi bi-trash"></i></button>
55+
<button class="btn btn-info" @onclick="() => infoModal.ShowModal(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="Show Info"><i class="bi bi-info"></i></button>
56+
</div>
57+
</td>
58+
break;
59+
default:
60+
<td>
61+
<div class="btn-group" role="group">
62+
<button class="btn btn-info" @onclick="() => infoModal.ShowModal(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="Show Info"><i class="bi bi-info"></i></button>
63+
</div>
64+
</td>
65+
break;
66+
}
4667
}
4768

48-
@if (context.state == StateTask.Canceled || context.state == StateTask.Error)
49-
{
50-
<td>
51-
<div class="btn-group" role="group">
52-
<button class="btn btn-info" @onclick="() => retry(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="retry task"><i class="bi bi-arrow-clockwise"></i></button>
53-
<button class="btn btn-danger" @onclick="() => deleteUpload(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="delete task"><i class="bi bi-trash"></i></button>
54-
<button class="btn btn-info" @onclick="() => infoModal.ShowModal(context)" data-bs-toggle="tooltip" data-bs-placement="top" title="Show Info"><i class="bi bi-info"></i></button>
55-
</div>
56-
</td>
57-
}
5869
</GridColumn>
5970

6071
</Grid>

TelegramDownloader/Services/TransactionInfoService.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class TransactionInfoService
88
{
99
public static bool isPauseDownloads = false;
1010
public static event EventHandler<EventArgs> EventChanged;
11+
public static event EventHandler TaskEventChanged;
1112
public static List<DownloadModel> downloadModels = new List<DownloadModel>();
1213
public static List<DownloadModel> pendingDownloadModels = new List<DownloadModel>();
1314
public static List<UploadModel> uploadModels = new List<UploadModel>();
@@ -16,12 +17,19 @@ public class TransactionInfoService
1617
private static Mutex PendingDownloadMutex = new Mutex();
1718
private static Mutex PendingUploadInfoTaskMutex = new Mutex();
1819

20+
public bool isWorking()
21+
{
22+
return downloadModels.Where(x => x.state == StateTask.Working).Count() > 0
23+
|| uploadModels.Where(x => x.state == StateTask.Working).Count() > 0;
24+
}
25+
1926
public void addToDownloadList(DownloadModel downloadModel)
2027
{
2128
PendingDownloadMutex.WaitOne(10000);
2229
downloadModels.Insert(0, downloadModel);
2330
PendingDownloadMutex.ReleaseMutex();
2431
EventChanged?.Invoke(this, new EventArgs());
32+
TaskEventChanged.Invoke(null, EventArgs.Empty);
2533
}
2634

2735
public void addToPendingDownloadList(DownloadModel downloadModel, bool atFirst = false, bool chekDownloads = true)
@@ -46,6 +54,7 @@ public void PauseDownloads()
4654
dm.Pause();
4755
}
4856
PendingDownloadMutex.ReleaseMutex();
57+
TaskEventChanged.Invoke(null, EventArgs.Empty);
4958
}
5059

5160
public void PlayDownloads()
@@ -66,6 +75,7 @@ public void StopDownloads()
6675
}
6776
pendingDownloadModels.Clear();
6877
PendingDownloadMutex.ReleaseMutex();
78+
TaskEventChanged.Invoke(null, EventArgs.Empty);
6979
}
7080

7181
public async Task CheckPendingDownloads()
@@ -82,6 +92,7 @@ public async Task CheckPendingDownloads()
8292
}
8393
PendingDownloadMutex.ReleaseMutex();
8494
EventChanged?.Invoke(this, new EventArgs());
95+
TaskEventChanged.Invoke(null, EventArgs.Empty);
8596
}
8697

8798
public async Task CheckPendingUploadInfoTasks()
@@ -96,18 +107,21 @@ public async Task CheckPendingUploadInfoTasks()
96107
}
97108
PendingUploadInfoTaskMutex.ReleaseMutex();
98109
EventChanged?.Invoke(this, new EventArgs());
110+
TaskEventChanged.Invoke(null, EventArgs.Empty);
99111
}
100112

101113
public void addToUploadList(UploadModel uploadModel)
102114
{
103115
uploadModels.Insert(0, uploadModel);
104116
EventChanged?.Invoke(this, new EventArgs());
117+
TaskEventChanged.Invoke(null, EventArgs.Empty);
105118
}
106119

107120
public void deleteUploadInList(UploadModel uploadModel)
108121
{
109122
uploadModels.Remove(uploadModel);
110123
EventChanged?.Invoke(this, new EventArgs());
124+
TaskEventChanged.Invoke(null, EventArgs.Empty);
111125
}
112126

113127
public void addToInfoDownloadTaskList(InfoDownloadTaksModel infoDownloadModel)
@@ -155,6 +169,7 @@ public void deleteDownloadInList(DownloadModel downloadModel)
155169
downloadModels.Remove(downloadModel);
156170
PendingDownloadMutex.ReleaseMutex();
157171
EventChanged?.Invoke(this, new EventArgs());
172+
TaskEventChanged.Invoke(null, EventArgs.Empty);
158173
}
159174

160175
public void deletePendingDownloadInList(DownloadModel downloadModel)
@@ -163,6 +178,7 @@ public void deletePendingDownloadInList(DownloadModel downloadModel)
163178
pendingDownloadModels.Remove(downloadModel);
164179
PendingDownloadMutex.ReleaseMutex();
165180
EventChanged?.Invoke(this, new EventArgs());
181+
TaskEventChanged.Invoke(null, EventArgs.Empty);
166182
}
167183

168184
public void deleteInfoDownloadTaskFromList(InfoDownloadTaksModel idt)
@@ -171,6 +187,7 @@ public void deleteInfoDownloadTaskFromList(InfoDownloadTaksModel idt)
171187
infoDownloadTaksModel.Remove(idt);
172188
PendingUploadInfoTaskMutex.ReleaseMutex();
173189
EventChanged?.Invoke(this, new EventArgs());
190+
TaskEventChanged.Invoke(null, EventArgs.Empty);
174191
}
175192

176193
public List<InfoDownloadTaksModel> getInfoDownloadTaksModel(int pageNumber, int pageSize)

TelegramDownloader/Shared/MainLayout.razor

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,25 @@
22
@using TelegramDownloader.Data
33
@using TelegramDownloader.Models
44
@using TelegramDownloader.Models.GitHub
5+
@using TelegramDownloader.Services
56
@using TelegramDownloader.Services.GitHub
67
@using TelegramDownloader.Shared
78
@inject ITelegramService ts
89
@inject NavigationManager NavManager
910
@inject IJSRuntime JS
1011
@inject ModalService ModalService
1112
@inject GHService ghService;
13+
@inject TransactionInfoService tis;
1214

1315
<PageTitle>TelegramFileManager</PageTitle>
1416

1517
<style>
1618
.modalshow {
17-
display: block
19+
display: block
1820
}
1921
2022
.modalhide {
21-
display: none
23+
display: none
2224
}
2325
</style>
2426

@@ -32,13 +34,18 @@
3234

3335
<main>
3436
<div class="top-row px-4">
37+
@if(active) {
38+
<Button Color="ButtonColor.None" Size="ButtonSize.Small" @onclick='() => Navigateto("/downloads")'>
39+
<Spinner Type="SpinnerType.Border" />
40+
</Button>
41+
}
3542
<Button Color="ButtonColor.None" Size="ButtonSize.Small" @onclick="() => ShowModalVersion(ModalType.Info)">
3643
<Icon Name="IconName.InfoCircleFill" Size="IconSize.x2" Color="IconColor.Info" />
3744
</Button>
3845
<button class="btn" type="button" @onclick="openOffCanvasMenu"><i class="bi bi-three-dots"></i></button>
3946
</div>
4047
<TelegramDownloader.Pages.Modals.ToastNotify></TelegramDownloader.Pages.Modals.ToastNotify>
41-
48+
4249
<article class="content px-4">
4350
<div id="modalFileUploadVue">
4451
<TelegramDownloader.Pages.Modals.FileUploadModalTemplate></TelegramDownloader.Pages.Modals.FileUploadModalTemplate>
@@ -48,7 +55,7 @@
4855
</article>
4956

5057
<Offcanvas @ref="offcanvas"
51-
title="Menu">
58+
title="Menu">
5259
<BodyTemplate>
5360
<div class="list-group list-group-flush">
5461
<button @onclick=' () => Navigateto("/config")' class="list-group-item list-group-item-action"><i class="bi bi-gear"></i> Configuration</button>
@@ -59,7 +66,7 @@
5966
</BodyTemplate>
6067
</Offcanvas>
6168
<TelegramDownloader.Pages.Modals.ImportDataModal isShared=true @ref="ImportModal" OnCloseCallback="reloadMenu"></TelegramDownloader.Pages.Modals.ImportDataModal>
62-
69+
6370
<Modal IsServiceModal="true" />
6471
<Toasts class="p-3" AutoHide="true" Delay="4000" Placement="ToastsPlacement.TopRight" />
6572
</main>
@@ -72,6 +79,7 @@
7279
private Pages.Modals.ImportDataModal ImportModal { get; set; }
7380
private GithubVersionModel LastVersion { get; set; }
7481
private NavMenu menu { get; set; }
82+
private bool active { get; set; } = true;
7583

7684
protected override async Task OnAfterRenderAsync(bool firstRender)
7785
{
@@ -86,9 +94,13 @@
8694
{
8795
Console.WriteLine(e);
8896
}
89-
9097
}
98+
}
9199

100+
protected override async Task OnInitializedAsync()
101+
{
102+
checkWorkingTasks();
103+
TransactionInfoService.TaskEventChanged += eventChangedWorkingTasks;
92104
}
93105

94106
private async Task reloadMenu()
@@ -145,4 +157,14 @@
145157
NavManager.NavigateTo("/");
146158
StateHasChanged();
147159
}
160+
161+
private async Task checkWorkingTasks() {
162+
active = tis.isWorking();
163+
await InvokeAsync(StateHasChanged);
164+
}
165+
166+
private void eventChangedWorkingTasks(object sender, System.EventArgs e)
167+
{
168+
checkWorkingTasks();
169+
}
148170
}

0 commit comments

Comments
 (0)