|
1 | 1 | @layout EmptyLayout |
2 | 2 | @page "/" |
| 3 | +@implements IDisposable |
3 | 4 |
|
| 5 | +@using QRCoder |
4 | 6 | @using TelegramDownloader.Data |
5 | 7 | @using TelegramDownloader.Models |
6 | 8 | @inject ITelegramService ts |
7 | 9 | @inject NavigationManager NavManager |
8 | 10 | @inject IJSRuntime JSRuntime; |
| 11 | +@inject PreloadService preloadService |
9 | 12 |
|
10 | 13 | <style> |
11 | 14 | .form-signin { |
|
19 | 22 | padding-top: inherit; |
20 | 23 | } |
21 | 24 | </style> |
| 25 | +<Preload LoadingText="Loading..." /> |
22 | 26 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/intl-tel-input@23.0.12/build/css/intlTelInput.css"> |
23 | 27 |
|
24 | 28 | <PageTitle>Login</PageTitle> |
25 | 29 |
|
26 | | -@if(Model.type != null) { |
| 30 | +@if (Model != null && Model.type != null) |
| 31 | +{ |
27 | 32 | <div class="container form-signin"> |
28 | 33 | <div class="text-center"> |
29 | 34 | <img src="https://static.vecteezy.com/system/resources/previews/023/986/534/large_2x/telegram-logo-telegram-logo-transparent-telegram-icon-transparent-free-free-png.png" alt="Telegram logo" style="max-width: -webkit-fill-available;" /> |
30 | | - <EditForm class="form-signin mb-4" Model="Model" OnSubmit="Submit" FormName="LoginModel"> |
31 | | - @switch (Model.type) |
32 | | - { |
33 | | - case "phone": |
34 | | - <div class="form-group"> |
35 | | - <label for="phone">Teléfono</label> |
36 | | - <InputText class="form-control" id="phone" type="text" @bind-Value="Model!.value" aria-describedby="phone" maxlength="12" data-mask="+00.000.00.00.00" placeholder="Teléfono" /> |
37 | | - </div> |
38 | | - break; |
39 | | - case "vc": |
40 | | - <div class="form-group"> |
41 | | - <label for="code">Código</label> |
42 | | - <InputText class="form-control" id="code" maxlength="5" type="text" @bind-Value="Model!.value" /> |
43 | | - </div> |
44 | | - break; |
45 | | - case "pass": |
46 | | - <div class="form-group"> |
47 | | - <label for="pass">Contraseña</label> |
48 | | - <InputText class="form-control" id="pass" type="password" @bind-Value="Model!.value" /> |
49 | | - </div> |
50 | | - break; |
51 | | - case "ok": |
52 | | - <span> Authenticado </span> |
53 | | - break; |
54 | | - } |
55 | | - <div class="form-group buttons"> |
56 | 35 |
|
57 | | - @if (Model.type == "ok") |
| 36 | + <EditForm class="form-signin mb-4" Model="Model" OnSubmit="Submit" FormName="LoginModel"> |
| 37 | + @switch (Model.type) |
58 | 38 | { |
59 | | - <button class="btn btn-info" @onclick="Salir" type="button">Desconectar</button> |
| 39 | + case "phone": |
| 40 | + <div class="form-group"> |
| 41 | + <label for="phone">Teléfono</label> |
| 42 | + <InputText class="form-control" id="phone" type="text" @bind-Value="Model!.value" aria-describedby="phone" maxlength="12" data-mask="+00.000.00.00.00" placeholder="Teléfono" /> |
| 43 | + </div> |
| 44 | + break; |
| 45 | + case "vc": |
| 46 | + <div class="form-group"> |
| 47 | + <label for="code">Código</label> |
| 48 | + <InputText class="form-control" id="code" maxlength="5" type="text" @bind-Value="Model!.value" /> |
| 49 | + </div> |
| 50 | + break; |
| 51 | + case "pass": |
| 52 | + <div class="form-group"> |
| 53 | + <label for="pass">Contraseña</label> |
| 54 | + <InputText class="form-control" id="pass" type="password" @bind-Value="Model!.value" /> |
| 55 | + </div> |
| 56 | + break; |
| 57 | + case "ok": |
| 58 | + <span> Authenticado </span> |
| 59 | + break; |
60 | 60 | } |
61 | | - else |
62 | | - { |
63 | | - <button class="btn btn-info" type="submit">Send</button> |
64 | | - @if(Model.type != null && Model.type != "phone") |
| 61 | + <div class="form-group buttons"> |
| 62 | + |
| 63 | + @if (Model.type == "ok") |
| 64 | + { |
| 65 | + <button class="btn btn-info" @onclick="Salir" type="button">Desconectar</button> |
| 66 | + } |
| 67 | + else |
| 68 | + { |
| 69 | + <button class="btn btn-info" type="submit">Send</button> |
| 70 | + @if (Model.type != null && Model.type != "phone") |
65 | 71 | { |
66 | 72 | <button class="btn btn-warning" @onclick="Cancel">Cancel</button> |
67 | 73 | } |
| 74 | + } |
| 75 | + </div> |
| 76 | + @if (!string.IsNullOrEmpty(imageString)) |
| 77 | + { |
| 78 | + <img src="data:image;base64, @imageString" /> |
68 | 79 | } |
69 | | - </div> |
70 | | - </EditForm> |
| 80 | + |
| 81 | + </EditForm> |
| 82 | + |
| 83 | + |
| 84 | + |
71 | 85 | </div> |
72 | 86 | </div> |
73 | 87 | } else |
|
88 | 102 | @code { |
89 | 103 | // [SupplyParameterFromForm] |
90 | 104 | public LoginModel? Model { get; set; } = null; |
| 105 | + private CancellationToken cTokenQr { get; set; } |
| 106 | + CancellationTokenSource source { get; set; } |
| 107 | + private string imageString { get; set; } |
91 | 108 |
|
92 | 109 | protected override async Task OnInitializedAsync() |
93 | 110 | { |
94 | 111 | Model ??= new(); |
95 | 112 | Model.type = await ts.checkAuth(Model.value); |
96 | 113 | StateHasChanged(); |
97 | | - isLogin(); |
| 114 | + await isLogin(); |
| 115 | + |
98 | 116 |
|
99 | 117 | } |
100 | 118 |
|
|
121 | 139 |
|
122 | 140 | Model.value = ""; |
123 | 141 | StateHasChanged(); |
124 | | - isLogin(); |
| 142 | + await isLogin(); |
125 | 143 | // Logger.LogInformation("Id = {Id}", Model?.Id); |
126 | 144 | } |
127 | 145 |
|
128 | | - private void isLogin() |
| 146 | + private async Task isLogin() |
| 147 | + { |
| 148 | + if (Model.type == "ok") |
| 149 | + { |
| 150 | + if (source != null) |
| 151 | + { |
| 152 | + if (source.Token.CanBeCanceled) |
| 153 | + { |
| 154 | + source.Cancel(); |
| 155 | + } |
| 156 | + } |
| 157 | + NavManager.NavigateTo("/fetchdata"); |
| 158 | + } else |
| 159 | + { |
| 160 | + // source = new CancellationTokenSource(); |
| 161 | + // cTokenQr = source.Token; |
| 162 | + // var user = await ts.CallQrGenerator(GenerateQR, cTokenQr, true); |
| 163 | + // if (user != null) |
| 164 | + // { |
| 165 | + // NavManager.NavigateTo("/fetchdata"); |
| 166 | + // } |
| 167 | + } |
| 168 | + } |
| 169 | + |
| 170 | + private void GenerateQR(string data) |
129 | 171 | { |
130 | | - if (Model.type == "ok") NavManager.NavigateTo("/fetchdata"); |
| 172 | + using (QRCodeGenerator qrGenerator = new QRCodeGenerator()) |
| 173 | + using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(data, QRCodeGenerator.ECCLevel.Q)) |
| 174 | + using (PngByteQRCode qrCode = new PngByteQRCode(qrCodeData)) |
| 175 | + { |
| 176 | + byte[] qrCodeImage = qrCode.GetGraphic(20); |
| 177 | + imageString = Convert.ToBase64String(qrCodeImage); |
| 178 | + StateHasChanged(); |
| 179 | + } |
131 | 180 | } |
132 | 181 |
|
133 | 182 | private async void Salir() |
|
144 | 193 | await ts.logOff(); |
145 | 194 | NavManager.NavigateTo("/", true); |
146 | 195 | } |
| 196 | + |
| 197 | + public void Dispose() |
| 198 | + { |
| 199 | + if (source != null) |
| 200 | + { |
| 201 | + if (source.Token.CanBeCanceled) |
| 202 | + { |
| 203 | + source.Cancel(); |
| 204 | + } |
| 205 | + } |
| 206 | + } |
147 | 207 | } |
0 commit comments