Skip to content

Commit

Permalink
1.3.0.0 & Новый урок
Browse files Browse the repository at this point in the history
  • Loading branch information
Ze2QvoQxxKeu committed Mar 7, 2021
1 parent 7527549 commit c5957ce
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 20 deletions.
3 changes: 2 additions & 1 deletion .[CONFIG]
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
Безопасность будущего|fs
Искусственный интеллект и машинное обучение|sber
Нейросети и коммуникации|ncom|43|37,38,39|https://xn--h1adlhdnlo2c.xn--p1ai/lessons/neural-networks-and-communications/certificate?session_id={user_id}
Приватность в цифровом мире|cyber|44|40,41,42|https://xn--h1adlhdnlo2c.xn--p1ai/lessons/cybersecurity/certificate?session_id={user_id}
Приватность в цифровом мире|cyber|44|40,41,42|https://xn--h1adlhdnlo2c.xn--p1ai/lessons/cybersecurity/certificate?session_id={user_id}
Беспилотный транспорт|self-driving|45|43,44,45|https://xn--h1adlhdnlo2c.xn--p1ai/lessons/self-driving/certificate?session_id={user_id}
9 changes: 5 additions & 4 deletions DatalessonMain.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,11 @@ await Task.Run(() =>
{
НазваниеУрока.Items.Clear();
Уроки.Clear();
MessageBox.Show($"Ошибка загрузки конфигурации.\n{error}\nПерезапустите программу, либо попробуйте сделать это поздже.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show($"Ошибка загрузки конфигурации.\n{error}\nПерезапустите программу, либо попробуйте сделать это позднее.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
НазваниеУрока.SelectedIndex = НазваниеУрока.Items.Count - 1;
CheckUpdate();
}
}

Expand All @@ -104,8 +105,8 @@ private async void ПолучитьСертификат_Click(object sender, Rou
//Константы
const string MissingData = "Запрошенная страница не содержит искомых данных.\nПроверьте обновление программы.";
const string GettingIdError = "Ошибка получения нового идентификатора пользователя.\nПопробуйте повторить попытку позднее.";
const string SiteUnavailable = "Сайт \"{0}\" недоступен.\nПроверьте подключение к интернет или попробуйте повторить попытку позднее.";
const string SiteTemporaryUnavailable = "Сайт \"{0}\" временно недоступен.\nПопробуйте повторить попытку позднее.";
const string SiteUnavailable = "\"{0}\" недоступен.\nПроверьте подключение к интернет или попробуйте повторить попытку позднее.";
const string SiteTemporaryUnavailable = "\"{0}\" временно недоступен.\nПопробуйте повторить попытку позднее.";

string user_id = string.Empty;
CookieContainer cookies = new CookieContainer();
Expand Down Expand Up @@ -290,7 +291,7 @@ private void ЗаголовокОкна_MouseLeftButtonDown(object sender, Syste
private void Инфо_Click(object sender, RoutedEventArgs e)
{
DatalessonAbout aboutForm = new DatalessonAbout
{
{
Owner = this
};
aboutForm.ShowDialog();
Expand Down
53 changes: 47 additions & 6 deletions DatalessonMainUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Net.Http;

#pragma warning disable IDE1006 // Стили именования
namespace DatalessonCertificate
Expand All @@ -25,6 +26,7 @@ public partial class DatalessonMain : Window
@"https://pastebin.com/raw/hKCZjndf"
};
public static readonly string СайтПрограммы = @"https://ze2qvoqxxkeu.github.io/DatalessonCertificate/";
public static readonly string ПоследняяВерсия = @"https://github.com/Ze2QvoQxxKeu/DatalessonCertificate/releases/latest";
public static readonly string УрокЦифры = @"https://урокцифры.рф/";
private static string UserAgent
{
Expand Down Expand Up @@ -167,8 +169,7 @@ private string GetExePath() => Path.GetDirectoryName(System.Reflection.Assembly.
private bool ParseList(string buffer, ref List<int> list)
{
list.Clear();
MatchCollection matches = new Regex(@"=(\d+)>").Matches(buffer);
foreach (Match match in matches)
foreach (Match match in new Regex(@"=(\d+)>").Matches(buffer))
{
int value = Convert.ToInt32(match.Groups[1].Value);
if (value != 0)
Expand All @@ -177,16 +178,16 @@ private bool ParseList(string buffer, ref List<int> list)
return list.Count > 0;
}

private int RandomListValue(List<int> list) => list.Count > 0 ? list[new Random().Next(list.Count)] : 0;
private int RandomListValue(List<int> list) => list.Count > 0 ? list[rand.Next(list.Count)] : 0;

private int RandomGradeByAgeId(int age_id) => age_id == 1 ? rand.Next(5, 7) : age_id == 2 ? rand.Next(8, 11) : rand.Next(1, 4);

public static ImageSource IconToImageSource(System.Drawing.Icon icon)
{
return Imaging.CreateBitmapSourceFromHIcon(
icon.Handle,
new Int32Rect(0, 0, icon.Width, icon.Height),
BitmapSizeOptions.FromEmptyOptions());
icon.Handle,
new Int32Rect(0, 0, icon.Width, icon.Height),
BitmapSizeOptions.FromEmptyOptions());
}

public class WaitCursor : IDisposable
Expand All @@ -204,6 +205,46 @@ public void Dispose()
}
#endregion
}

private async void CheckUpdate()
{
using (var handler = new HttpClientHandler() { AllowAutoRedirect = false })
using (var client = new HttpClient(handler))
{
var response = await client.GetAsync(ПоследняяВерсия);
if ((int)response.StatusCode != 302)
return;
var match = new Regex(@"/tag/v(\d+\.\d+\.\d+\.\d+)\x22>redirected").Match(await response.Content.ReadAsStringAsync());
if (match.Success)
{
if (CompareVersions(match.Groups[1].Value,
FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion) == 1)
{
if (MessageBox.Show($"Доступна новая версия {match.Groups[1].Value}\nПерейти на страницу обновления?",
"Доступно обновление", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
Process.Start(response.Headers.Location.ToString());
}
}
}
}
}

static int CompareVersions(string First, string Second)
{
var IntVersions = new List<int[]>
{
Array.ConvertAll(First.Split('.'), int.Parse),
Array.ConvertAll(Second.Split('.'), int.Parse)
};
var Cmp = IntVersions.First().Length.CompareTo(IntVersions.Last().Length);
if (Cmp == 0)
IntVersions = IntVersions.Select(v => { Array.Resize(ref v, IntVersions.Min(x => x.Length)); return v; }).ToList();
var StrVersions = IntVersions.ConvertAll(v => string.Join("", Array.ConvertAll(v,
i => { return i.ToString($"D{IntVersions.Max(x => x.Max().ToString().Length)}"); })));
var CmpVersions = StrVersions.OrderByDescending(i => i).ToList();
return CmpVersions.First().Equals(CmpVersions.Last()) ? Cmp : CmpVersions.First().Equals(StrVersions.First()) ? 1 : -1;
}
}
}
#pragma warning restore IDE1006 // Стили именования
4 changes: 2 additions & 2 deletions Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,6 @@
// Можно задать все значения или принять номера сборки и редакции по умолчанию
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0.0")]
[assembly: AssemblyFileVersion("1.2.0.0")]
[assembly: AssemblyVersion("1.3.0.0")]
[assembly: AssemblyFileVersion("1.3.0.0")]
[assembly: NeutralResourcesLanguage("ru-RU")]
17 changes: 10 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
# DatalessonCertificate

Программа для получения сертификатов о прохождении уроков с сайта [УрокЦифры.РФ](https://урокцифры.рф/ "УрокЦифры.РФ") без фактического их прохождения
Программа для получения сертификатов о прохождении уроков проекта «Урок цифры» с сайта [УрокЦифры.РФ](https://урокцифры.рф/ "УрокЦифры.РФ") без фактического их прохождения

![Внешний вид программы](https://user-images.githubusercontent.com/17485135/107755662-929a8e80-6d3c-11eb-8fc2-112d358294e6.png "Внешний вид программы")
![Внешний вид программы](https://user-images.githubusercontent.com/17485135/110251189-d3cb3a80-7f98-11eb-9618-23959c20483b.png "Внешний вид программы")

### Список доступных уроков (обновляется):
### Список доступных уроков (обновляется)
* [Большие данные](https://урокцифры.рф/lessons/bolshie-dannye "Открыть урок")
* [Сети и облачные технологии](https://урокцифры.рф/lessons/seti-i-oblachnye-tehnologii "Открыть урок")
* [Персональные помощники](https://урокцифры.рф/lessons/personalnye-pomoshhniki "Открыть урок")
* [Безопасность будущего](https://урокцифры.рф/lessons/bezopasnost-budushhego "Открыть урок")
* [Искусственный интеллект и машинное обучение](https://урокцифры.рф/lessons/ii-i-algoritmy-prinjatija-reshenij "Открыть урок")
* [Нейросети и коммуникации](https://урокцифры.рф/lessons/neural-networks-and-communications "Открыть урок")
* [Приватность в цифровом мире](https://урокцифры.рф/lessons/cybersecurity "Открыть урок")
* [Беспилотный транспорт](https://урокцифры.рф/lessons/self-driving "Открыть урок")

### Актуальную версию **[1.2.0.0](https://github.com/Ze2QvoQxxKeu/DatalessonCertificate/releases/tag/v1.2.0.0 "Актуальная версия")** можно скачать **[здесь](https://github.com/Ze2QvoQxxKeu/DatalessonCertificate/releases/download/v1.2.0.0/DatalessonCertificate.exe "Скачать последнюю версию программы")**.
## Актуальную версию **[1.3.0.0](https://github.com/Ze2QvoQxxKeu/DatalessonCertificate/releases/tag/v1.3.0.0 "Актуальная версия")** можно скачать **[здесь](https://github.com/Ze2QvoQxxKeu/DatalessonCertificate/releases/download/v1.3.0.0/DatalessonCertificate.exe "Скачать последнюю версию программы")**.

![Пример сертификата](https://user-images.githubusercontent.com/17485135/110252499-39bac080-7f9f-11eb-8116-8100ba950f34.PNG "Пример сертификата")

## Приступая к работе

Expand Down Expand Up @@ -43,9 +46,9 @@

![Выбор места сохранения сертификата](https://user-images.githubusercontent.com/17485135/107580990-e14b0a00-6c10-11eb-9843-2cc78055ed63.png "Выбор места сохранения сертификата")

В последующих уроках будет открыт браузер со страницей выдачи сертификата, где нужно нажать на кнопку `Скачать сертификат`, либо сделать несколько сертификатов на разные имена нажатием `Сделать для класса`, либо `Отправить на email` нажатием одноименной кнопки.
В последующих уроках будет открыт браузер со страницей выдачи сертификата, где нужно нажать на кнопку `Скачать сертификат`, либо `Отправить на email` нажатием одноимённой кнопки.

![Страница выдачи сертификата](https://user-images.githubusercontent.com/17485135/107580010-633a3380-6c0f-11eb-9a64-0b34724b8234.PNG "Страница выдачи сертификата")
![Страница выдачи сертификата](https://user-images.githubusercontent.com/17485135/110251067-2c4e0800-7f98-11eb-83eb-fb2a5759430e.png "Страница выдачи сертификата")

В случае появления ошибок недоступности того или иного сайта, либо ошибках загрузки конфигурации, может быть только одна рекомендация - **ждать, когда сайт станет доступен**. Чаще всего, в течении 1-10 минут сайт становится доступен и даёт ~~честным пользователям~~ программе возможность получить сертификат. По проблемам недоступности писать автору смысла нет - владельцем используемых интернет-ресурсов не являюсь.

Expand All @@ -55,6 +58,6 @@
В случае появления решения для того или иного урока, он появится в списке доступных уроков сразу после перезапуска программы.
Ускорить процесс можно уведомлением о начале нового урока по e-mail: **[[email protected]](mailto:[email protected] "Отправить сообщение по e-mail")**

В случае изменений, связанных с необходимостью изменения самой программы, регулярно проверяйте обновления программы.
В случае изменения самой программы, будет выведено уведомление о наличии обновления.

Удобнее всего будет **[зарегистрироваться на GitHub](https://github.com/join?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F&source=header-home "Регистрация")** и на **[этой странице](https://github.com/Ze2QvoQxxKeu/DatalessonCertificate "Перейти")** вверху справа выбрать `Watch` -> `Custom` -> `Releases` и нажать `Apply`. Для интересующихся исходным кодом можно дополнительно выбрать `Pull requests`. Теперь об обновлении вы будете уведомлены своевременно по электронной почте.

0 comments on commit c5957ce

Please sign in to comment.