Skip to content

Commit f566faf

Browse files
authored
feat: improve main window (#41)
chore: add download and upload info
1 parent c7e1d61 commit f566faf

14 files changed

Lines changed: 553 additions & 50 deletions

TelegramDownloader/Controllers/FileController.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,21 @@ public async Task<IActionResult> GetFile(string id, string? idChannel, string? i
243243
TL.Message idM = await _ts.getMessageFile(idChannel, Convert.ToInt32(idFile));
244244
ChatMessages cm = new ChatMessages();
245245
cm.message = idM;
246-
file = new FileStream(System.IO.Path.Combine(FileService.TEMPDIR, "_temp", $"{idChannel}-{idFile}-{id}"), FileMode.Create, FileAccess.ReadWrite);
246+
string filePath = System.IO.Path.Combine(FileService.TEMPDIR, "_temp", $"{idChannel}-{idFile}-{id}");
247+
file = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite);
247248
DownloadModel dm = new DownloadModel();
248249
dm.tis = _tis;
250+
dm.startDate = DateTime.Now;
251+
dm.path = filePath;
252+
if (cm.message is Message msgBase)
253+
{
254+
if (msgBase.media is MessageMediaDocument mediaDoc &&
255+
mediaDoc.document is TL.Document doc)
256+
{
257+
dm._size = doc.size;
258+
dm.name = doc.Filename;
259+
}
260+
}
249261
dm.channelName = _ts.getChatName(Convert.ToInt64(idChannel));
250262
_tis.addToDownloadList(dm);
251263
await _ts.DownloadFileAndReturn(cm, file, model: dm);
@@ -278,9 +290,14 @@ public async Task<IActionResult> GetFileByTfmIdNow(string id, [FromQuery] string
278290
TL.Message idM = await _ts.getMessageFile(idChannel, Convert.ToInt32(dbFile.MessageId));
279291
ChatMessages cm = new ChatMessages();
280292
cm.message = idM;
281-
file = new FileStream(System.IO.Path.Combine(FileService.TEMPDIR, "_temp", $"{idChannel}-{idFile}-{id}"), FileMode.Create, FileAccess.ReadWrite);
293+
String filePath = System.IO.Path.Combine(FileService.TEMPDIR, "_temp", $"{idChannel}-{idFile}-{id}");
294+
file = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite);
282295
DownloadModel dm = new DownloadModel();
283296
dm.tis = _tis;
297+
dm.startDate = DateTime.Now;
298+
dm.path = filePath;
299+
dm.name = dbFile.Name;
300+
dm._size = dbFile.Size;
284301
dm.channelName = _ts.getChatName(Convert.ToInt64(idChannel));
285302
_tis.addToDownloadList(dm);
286303
await _ts.DownloadFileAndReturn(cm, file, model: dm);

TelegramDownloader/Data/FileServiceV2.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ public async Task DownloadFileNowV2(string dbName, int messageId, string destPat
158158
TL.Message m = await _ts.getMessageFile(dbName, messageId);
159159
ChatMessages cm = new ChatMessages();
160160
cm.message = m;
161+
model.startDate = DateTime.Now;
161162

162163
cm.user = null;
163164
cm.isDocument = false;

TelegramDownloader/Pages/FileManager.razor

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,18 @@
8080
NotificationModel nm = new NotificationModel();
8181

8282

83-
protected override async Task OnInitializedAsync()
83+
private string _previousId;
84+
85+
protected override async Task OnParametersSetAsync()
86+
{
87+
if (_previousId != id)
88+
{
89+
_previousId = id;
90+
await LoadDataAsync();
91+
}
92+
}
93+
94+
private async Task LoadDataAsync()
8495
{
8596
try
8697
{
@@ -93,7 +104,7 @@
93104
{
94105
Logger.LogError(ex, "Error on GetSharedInfoById");
95106
nm.sendMessage("Error", "Error on GetSharedInfoById", NotificationTypes.Error);
96-
}
107+
}
97108
}
98109

99110
public async Task openWebDavInfo()
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
@using TelegramDownloader.Models
2+
@using TelegramDownloader.Services
3+
4+
<Modal @ref="Modal" title="Download Info" Size="ModalSize.ExtraLarge">
5+
<BodyTemplate>
6+
@if (downloadModel != null)
7+
{
8+
<table class="table table-striped">
9+
<tbody>
10+
<tr>
11+
<th scope="row"><i class="bi bi-file-earmark"></i> File Name</th>
12+
<td>@downloadModel.name</td>
13+
</tr>
14+
<tr>
15+
<th scope="row"><i class="bi bi-folder"></i> Path</th>
16+
<td>@downloadModel.path</td>
17+
</tr>
18+
<tr>
19+
<th scope="row"><i class="bi bi-chat"></i> Channel</th>
20+
<td>@downloadModel.channelName</td>
21+
</tr>
22+
<tr>
23+
<th scope="row"><i class="bi bi-hdd"></i> Size</th>
24+
<td>@downloadModel._sizeString</td>
25+
</tr>
26+
<tr>
27+
<th scope="row"><i class="bi bi-cloud-download"></i> Transmitted</th>
28+
<td>@downloadModel._transmittedString</td>
29+
</tr>
30+
<tr>
31+
<th scope="row"><i class="bi bi-flag"></i> State</th>
32+
<td>
33+
<span class="badge @GetStateBadgeClass(downloadModel.state)">@downloadModel.state</span>
34+
</td>
35+
</tr>
36+
<tr>
37+
<th scope="row"><i class="bi bi-calendar-plus"></i> Creation Date</th>
38+
<td>@downloadModel.creationDate.ToString("yyyy-MM-dd HH:mm:ss")</td>
39+
</tr>
40+
<tr>
41+
<th scope="row"><i class="bi bi-play-circle"></i> Start Date</th>
42+
<td>@(downloadModel.startDate != default ? downloadModel.startDate.ToString("yyyy-MM-dd HH:mm:ss") : "-")</td>
43+
</tr>
44+
<tr>
45+
<th scope="row"><i class="bi bi-stop-circle"></i> End Date</th>
46+
<td>@(downloadModel.endnDate != default && downloadModel.state == StateTask.Completed ? downloadModel.endnDate.ToString("yyyy-MM-dd HH:mm:ss") : "-")</td>
47+
</tr>
48+
<tr>
49+
<th scope="row"><i class="bi bi-stopwatch"></i> Duration</th>
50+
<td>@GetDuration()</td>
51+
</tr>
52+
<tr>
53+
<th scope="row"><i class="bi bi-speedometer2"></i> Average Speed</th>
54+
<td>@GetAverageSpeed()</td>
55+
</tr>
56+
</tbody>
57+
</table>
58+
}
59+
</BodyTemplate>
60+
</Modal>
61+
62+
@code {
63+
[Parameter]
64+
public DownloadModel downloadModel { get; set; }
65+
private Modal Modal = default!;
66+
67+
public async Task ShowModal(DownloadModel downloadModel)
68+
{
69+
this.downloadModel = downloadModel;
70+
if (this.downloadModel != null)
71+
{
72+
await Modal.ShowAsync();
73+
}
74+
}
75+
76+
private string GetDuration()
77+
{
78+
if (downloadModel.startDate == default)
79+
return "-";
80+
81+
DateTime endTime = downloadModel.state == StateTask.Completed && downloadModel.endnDate != default
82+
? downloadModel.endnDate
83+
: DateTime.Now;
84+
85+
TimeSpan duration = endTime - downloadModel.startDate;
86+
87+
if (duration.TotalHours >= 1)
88+
return $"{(int)duration.TotalHours}h {duration.Minutes}m {duration.Seconds}s";
89+
if (duration.TotalMinutes >= 1)
90+
return $"{duration.Minutes}m {duration.Seconds}s";
91+
return $"{duration.Seconds}s";
92+
}
93+
94+
private string GetAverageSpeed()
95+
{
96+
if (downloadModel.startDate == default || downloadModel._transmitted == 0)
97+
return "-";
98+
99+
DateTime endTime = downloadModel.state == StateTask.Completed && downloadModel.endnDate != default
100+
? downloadModel.endnDate
101+
: DateTime.Now;
102+
103+
double seconds = (endTime - downloadModel.startDate).TotalSeconds;
104+
if (seconds <= 0)
105+
return "-";
106+
107+
double bytesPerSecond = downloadModel._transmitted / seconds;
108+
return $"{HelperService.SizeSuffix((long)bytesPerSecond)}/s";
109+
}
110+
111+
private string GetStateBadgeClass(StateTask state)
112+
{
113+
return state switch
114+
{
115+
StateTask.Completed => "bg-success",
116+
StateTask.Working => "bg-primary",
117+
StateTask.Error => "bg-danger",
118+
StateTask.Canceled => "bg-warning",
119+
StateTask.Pending => "bg-secondary",
120+
StateTask.Paused => "bg-info",
121+
_ => "bg-secondary"
122+
};
123+
}
124+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
@using TelegramDownloader.Models
2+
@using TelegramDownloader.Services
3+
4+
<Modal @ref="Modal" title="Task Info" Size="ModalSize.ExtraLarge">
5+
<BodyTemplate>
6+
@if (taskModel != null)
7+
{
8+
<table class="table table-striped">
9+
<tbody>
10+
<tr>
11+
<th scope="row"><i class="bi bi-hash"></i> Task ID</th>
12+
<td>@taskModel.id</td>
13+
</tr>
14+
<tr>
15+
<th scope="row"><i class="bi bi-folder"></i> From Path</th>
16+
<td>@taskModel.fromPath</td>
17+
</tr>
18+
<tr>
19+
<th scope="row"><i class="bi bi-folder-symlink"></i> To Path</th>
20+
<td>@taskModel.toPath</td>
21+
</tr>
22+
<tr>
23+
<th scope="row"><i class="bi bi-arrow-up-circle"></i> Type</th>
24+
<td>@(taskModel.isUpload ? "Upload" : "Download")</td>
25+
</tr>
26+
<tr>
27+
<th scope="row"><i class="bi bi-flag"></i> State</th>
28+
<td>
29+
<span class="badge @GetStateBadgeClass(taskModel.state)">@taskModel.state</span>
30+
</td>
31+
</tr>
32+
<tr>
33+
<th scope="row"><i class="bi bi-files"></i> Total Files</th>
34+
<td>@taskModel.total</td>
35+
</tr>
36+
<tr>
37+
<th scope="row"><i class="bi bi-check2-circle"></i> Completed Files</th>
38+
<td>@taskModel.executed</td>
39+
</tr>
40+
<tr>
41+
<th scope="row"><i class="bi bi-hdd"></i> Total Size</th>
42+
<td>@HelperService.SizeSuffix(taskModel.totalSize)</td>
43+
</tr>
44+
<tr>
45+
<th scope="row"><i class="bi bi-cloud-arrow-up"></i> Executed Size</th>
46+
<td>@HelperService.SizeSuffix(taskModel.executedSize)</td>
47+
</tr>
48+
<tr>
49+
<th scope="row"><i class="bi bi-calendar-plus"></i> Creation Date</th>
50+
<td>@taskModel.creationDate.ToString("yyyy-MM-dd HH:mm:ss")</td>
51+
</tr>
52+
<tr>
53+
<th scope="row"><i class="bi bi-stop-circle"></i> End Date</th>
54+
<td>@(taskModel.endnDate != default && taskModel.state == StateTask.Completed ? taskModel.endnDate.ToString("yyyy-MM-dd HH:mm:ss") : "-")</td>
55+
</tr>
56+
<tr>
57+
<th scope="row"><i class="bi bi-stopwatch"></i> Duration</th>
58+
<td>@GetDuration()</td>
59+
</tr>
60+
<tr>
61+
<th scope="row"><i class="bi bi-speedometer2"></i> Average Speed</th>
62+
<td>@GetAverageSpeed()</td>
63+
</tr>
64+
</tbody>
65+
</table>
66+
}
67+
</BodyTemplate>
68+
</Modal>
69+
70+
@code {
71+
[Parameter]
72+
public InfoDownloadTaksModel taskModel { get; set; }
73+
private Modal Modal = default!;
74+
75+
public async Task ShowModal(InfoDownloadTaksModel taskModel)
76+
{
77+
this.taskModel = taskModel;
78+
if (this.taskModel != null)
79+
{
80+
await Modal.ShowAsync();
81+
}
82+
}
83+
84+
private string GetDuration()
85+
{
86+
DateTime endTime = taskModel.state == StateTask.Completed && taskModel.endnDate != default
87+
? taskModel.endnDate
88+
: DateTime.Now;
89+
90+
TimeSpan duration = endTime - taskModel.creationDate;
91+
92+
if (duration.TotalHours >= 1)
93+
return $"{(int)duration.TotalHours}h {duration.Minutes}m {duration.Seconds}s";
94+
if (duration.TotalMinutes >= 1)
95+
return $"{duration.Minutes}m {duration.Seconds}s";
96+
return $"{duration.Seconds}s";
97+
}
98+
99+
private string GetAverageSpeed()
100+
{
101+
if (taskModel.executedSize == 0)
102+
return "-";
103+
104+
DateTime endTime = taskModel.state == StateTask.Completed && taskModel.endnDate != default
105+
? taskModel.endnDate
106+
: DateTime.Now;
107+
108+
double seconds = (endTime - taskModel.creationDate).TotalSeconds;
109+
if (seconds <= 0)
110+
return "-";
111+
112+
double bytesPerSecond = taskModel.executedSize / seconds;
113+
return $"{HelperService.SizeSuffix((long)bytesPerSecond)}/s";
114+
}
115+
116+
private string GetStateBadgeClass(StateTask state)
117+
{
118+
return state switch
119+
{
120+
StateTask.Completed => "bg-success",
121+
StateTask.Working => "bg-primary",
122+
StateTask.Error => "bg-danger",
123+
StateTask.Canceled => "bg-warning",
124+
StateTask.Pending => "bg-secondary",
125+
StateTask.Paused => "bg-info",
126+
_ => "bg-secondary"
127+
};
128+
}
129+
}

0 commit comments

Comments
 (0)