|
4 | 4 | @using TelegramDownloader.Services |
5 | 5 | @using TelegramDownloader.Shared |
6 | 6 |
|
7 | | - |
8 | 7 | @inject ITelegramService ts |
9 | 8 | @inject IFileService fs |
10 | 9 |
|
11 | 10 | <div class="modal @ModalClass" tabindex="-1" role="dialog" style="display:@ModalDisplay"> |
12 | | - <div class="modal-dialog" role="document"> |
13 | | - <div class="modal-content"> |
14 | | - <div class="modal-header"> |
15 | | - <h5 class="modal-title">Select Folder</h5> |
16 | | - <button type="button" class="close" data-dismiss="modal" @onclick="() => Close()" aria-label="Close" style="border-color: transparent;background-color: transparent;"> |
17 | | - <span aria-hidden="true">×</span> |
| 11 | + <div class="modal-dialog modal-dialog-centered" role="document"> |
| 12 | + <div class="modal-content download-modal"> |
| 13 | + <!-- Header --> |
| 14 | + <div class="modal-header download-modal-header"> |
| 15 | + <div class="modal-title-wrapper"> |
| 16 | + <div class="modal-icon"> |
| 17 | + <i class="bi bi-download"></i> |
| 18 | + </div> |
| 19 | + <div> |
| 20 | + <h5 class="modal-title">Download File</h5> |
| 21 | + <p class="modal-subtitle">Choose destination folder and file name</p> |
| 22 | + </div> |
| 23 | + </div> |
| 24 | + <button type="button" class="btn-close-modal" @onclick="() => Close()" aria-label="Close"> |
| 25 | + <i class="bi bi-x-lg"></i> |
18 | 26 | </button> |
19 | 27 | </div> |
20 | | - <div class="modal-body"> |
| 28 | + |
| 29 | + <!-- Body --> |
| 30 | + <div class="modal-body download-modal-body"> |
21 | 31 | @if (ShowBackdrop) |
22 | 32 | { |
23 | | - <EditForm class="form-signin mb-4" Model="model" OnSubmit="Submit" FormName="downloadModelForm"> |
24 | | - <div class="form-floating mb-3"> |
25 | | - <input class="form-control" type="text" id="filename" value="@filename" aria-label="file name" disabled readonly> |
26 | | - <label for="filename">File Name</label> |
| 33 | + <EditForm class="download-form" Model="model" OnSubmit="Submit" FormName="downloadModelForm"> |
| 34 | + <!-- File Info Card --> |
| 35 | + <div class="file-info-card"> |
| 36 | + <div class="file-icon-wrapper"> |
| 37 | + <i class="bi @GetFileIcon()"></i> |
| 38 | + </div> |
| 39 | + <div class="file-info-details"> |
| 40 | + <div class="file-info-name" title="@filename">@filename</div> |
| 41 | + <div class="file-info-size"> |
| 42 | + <i class="bi bi-hdd"></i> |
| 43 | + @size |
| 44 | + </div> |
| 45 | + </div> |
27 | 46 | </div> |
28 | 47 |
|
29 | | - <div class="form-floating mb-3"> |
30 | | - <input class="form-control" type="text" id="filename" value="@size" aria-label="size" disabled readonly> |
31 | | - <label for="filename">Size</label> |
32 | | - </div> |
33 | | - <div> |
34 | | - <TelegramDownloader.Shared.Ddtree idTree="dmtree" |
35 | | - @ref="ddtree"></TelegramDownloader.Shared.Ddtree> |
| 48 | + <!-- New Name --> |
| 49 | + <div class="form-section"> |
| 50 | + <label class="section-label" for="newFileName"> |
| 51 | + <i class="bi bi-pencil"></i> |
| 52 | + File Name |
| 53 | + </label> |
| 54 | + <div class="input-wrapper"> |
| 55 | + <InputText type="text" class="form-control custom-input" id="newFileName" @bind-Value="model!.newName" placeholder="Enter new file name..." /> |
| 56 | + </div> |
36 | 57 | </div> |
37 | 58 |
|
38 | | - |
39 | | - |
40 | | - <div class="form-floating mb-3"> |
41 | | - <InputText type="text" class="form-control" id="floatingInput" @bind-Value="model!.newName" /> |
42 | | - <label for="floatingInput">New Name</label> |
| 59 | + <!-- Destination Folder (at the end so dropdown has room to expand) --> |
| 60 | + <div class="form-section folder-section"> |
| 61 | + <TelegramDownloader.Shared.Ddtree idTree="dmtree" @ref="ddtree" /> |
43 | 62 | </div> |
44 | 63 | </EditForm> |
45 | 64 | } |
46 | 65 | </div> |
47 | | - <div class="modal-footer"> |
48 | | - <button type="button" class="btn btn-primary" @onclick="() => Submit()">Save</button> |
49 | | - <button type="button" class="btn btn-secondary" data-dismiss="modal" @onclick="() => Close()">Close</button> |
| 66 | + |
| 67 | + <!-- Footer --> |
| 68 | + <div class="modal-footer download-modal-footer"> |
| 69 | + <button type="button" class="btn btn-cancel" @onclick="() => Close()"> |
| 70 | + <i class="bi bi-x"></i> |
| 71 | + Cancel |
| 72 | + </button> |
| 73 | + <button type="button" class="btn btn-download" @onclick="() => Submit()"> |
| 74 | + <i class="bi bi-download"></i> |
| 75 | + Download |
| 76 | + </button> |
50 | 77 | </div> |
51 | 78 | </div> |
52 | 79 | </div> |
|
104 | 131 | fs.DownloadFileFromChat(mc, model?.newName == "" ? null : model.newName, ddtree.selectedNode == null ? null : ddtree.selectedNode.FirstOrDefault()); |
105 | 132 | Close(); |
106 | 133 | } |
| 134 | + |
| 135 | + private string GetFileIcon() |
| 136 | + { |
| 137 | + if (string.IsNullOrWhiteSpace(filename)) return "bi-file-earmark"; |
| 138 | + var ext = System.IO.Path.GetExtension(filename)?.ToLower(); |
| 139 | + return ext switch |
| 140 | + { |
| 141 | + ".mp4" or ".mkv" or ".avi" or ".mov" or ".webm" or ".wmv" => "bi-film", |
| 142 | + ".mp3" or ".flac" or ".wav" or ".ogg" or ".m4a" or ".aac" => "bi-music-note-beamed", |
| 143 | + ".jpg" or ".jpeg" or ".png" or ".gif" or ".webp" or ".bmp" => "bi-image", |
| 144 | + ".zip" or ".rar" or ".7z" or ".tar" or ".gz" => "bi-file-zip", |
| 145 | + ".pdf" => "bi-file-pdf", |
| 146 | + ".doc" or ".docx" => "bi-file-word", |
| 147 | + ".xls" or ".xlsx" => "bi-file-excel", |
| 148 | + ".txt" => "bi-file-text", |
| 149 | + _ => "bi-file-earmark" |
| 150 | + }; |
| 151 | + } |
107 | 152 | } |
108 | 153 |
|
109 | 154 | @if (ShowBackdrop) |
|
0 commit comments