private void SaveWinLogon_Executed(object sender, ExecutedRoutedEventArgs e) { var b = sender as Button; if (b == null) { System.Windows.MessageBox.Show("Команда UpdateWallpaper: отправитель команды не распознан!", "Wallpapers Everyday"); return; } b.IsEnabled = false; b.Content = "Минутку..."; BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += (s, ee) => Wallpaper.SaveWin10Interesting(Properties.Settings.Default.Win10IntrestingPath); bw.RunWorkerCompleted += (s, ee) => { b.IsEnabled = true; b.Content = "Сохранить заставки \"Windows: Интересное\""; }; bw.RunWorkerAsync(); }
/// <summary> /// Логический метод установки обоев. Выполняет все требуемые шаги (получение кода, выделение ссылки и т.д.), требуемые для установки свежих обоев. /// </summary> /// <returns>Код завершения функции и сопровождающее сообщение.</returns> public static (FinishCode, string) Work() { if (Properties.Settings.Default.Debug) { Logs.WriteLogFile($"\n\n\n\n\n[{DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss")}]: запуск..."); } var size = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size; // исключаем старые маленькие разрешения и неподдерживаемое 5 : 4 if ((size.Width < 1280 && size.Height < 720) || (size.Width == 1280 && size.Height == 1024)) { return(FinishCode.Fail, "К сожалению, Ваше разрешение экрана слишком мало или не поддерживается!"); } string workDirectory = Directory.GetCurrentDirectory(); MessageBox.Show(Properties.Settings.Default.Name); // если папки для заставок нет, создаем ее Directory.CreateDirectory(workDirectory + @"\images"); int imagesSize; // =============================================================== // =============================================================== // =============================================================== // если инета нет if (!Web.CheckConnection()) { // но стоит галка на постоянном обновлении и нет "только загрузка" if ((Properties.Settings.Default.AlwaysSet) && (!Properties.Settings.Default.OnlyDownload)) { // то проверяем, первый ли запуск. и если не первый (т.е. уже есть какой-то скачанный файл) if (Properties.Settings.Default.Name != "no") { string notification; // то ставим последнюю обоину if (File.Exists(workDirectory + "\\images\\" + Properties.Settings.Default.Name)) { Wallpaper.SetWallpaper(workDirectory + "\\images\\" + Properties.Settings.Default.Name); notification = "Отсутствует соединение с интернетом! Были поставлены последние обои."; } else { notification = "Отсутствует соединение с интернетом! Не удалось поставить последние обои: файл не найден."; } if (Properties.Settings.Default.Debug) { Logs.WriteLogFile(notification); } imagesSize = WorkWithSystem.GetDirectorySize(workDirectory + "\\images"); if (Properties.Settings.Default.Notify && imagesSize > Properties.Settings.Default.MaxFolderSize) { notification += $"\nРазмер папки с обоями превышает рекомендуемый! ({imagesSize} MB)"; } return(FinishCode.Error, notification); } else // если же первый { return(FinishCode.Error, "Отсутствует соединение с интернетом!"); } } else // если же нет "постоянного обновления" или есть "только загрузка" { return(FinishCode.Error, "Отсутствует соединение с интернетом!"); } } if (Properties.Settings.Default.Debug) { Logs.WriteLogFile("Получение кода..."); } string temp = null; try { temp = Web.GetHtmlCode("https://www.bing.com/"); } catch (Exception e) { if (Properties.Settings.Default.Debug) { Logs.WriteLogFile($"Исключение: {e.Message}\nВнутреннее исключение: {e.InnerException.Message}"); } return(FinishCode.Error, "В ходе работы произошла ошибка!\nПодробности в логе."); } if (Properties.Settings.Default.Debug) { Logs.WriteLogFile($"Код получен:\n{temp}\nВыделение ссылки..."); } string url; try { url = temp = SelectUrlFromHtml(temp); } catch (Exception e) { if (Properties.Settings.Default.Debug) { Logs.WriteLogFile($"Исключение: {e.Message}\nВнутреннее исключение: {e.InnerException.Message}"); } return(FinishCode.Error, "В ходе работы произошла ошибка!\nПодробности в логе."); } if (Properties.Settings.Default.Debug) { Logs.WriteLogFile($"Ссылка выделена:\n{temp}"); } temp = SelectNameFromUrl(temp); if (Properties.Settings.Default.Name == temp) { string notification = "Новых обоев пока нет!"; if (Properties.Settings.Default.AlwaysSet) { if (File.Exists(workDirectory + "\\images\\" + Properties.Settings.Default.Name)) { Wallpaper.SetWallpaper($@"{workDirectory}\images\{temp}"); notification += " Были поставлены последние обои."; } else { notification = " Не удалось поставить последние обои: файл не найден."; } } if (Properties.Settings.Default.Debug) { Logs.WriteLogFile(notification); } return(FinishCode.Warning, notification); } if (Properties.Settings.Default.Debug) { Logs.WriteLogFile("Загрузка обоев..."); } try { Web.Download("https://www.bing.com" + url, $@"{workDirectory}\images\{Properties.Settings.Default.Name = temp}"); if (Properties.Settings.Default.Debug) { Logs.WriteLogFile($"Обои загружены: {Properties.Settings.Default.Name}"); } } catch (Exception e) { if (Properties.Settings.Default.Debug) { if (e.InnerException != null) { Logs.WriteLogFile($"Исключение: {e.Message}\nВнутреннее исключение: {e.InnerException.Message}"); } else { Logs.WriteLogFile($"Исключение: {e.Message}"); } } return(FinishCode.Error, "В ходе работы произошла ошибка!\nПодробности в логе."); } Properties.Settings.Default.InstalledWallpaperIndex++; // новые обои попадают в начало - сдвигаем индекс, чтобы он оставался на том же файле в массиве при переключении // если нужно, ставим обои if (!Properties.Settings.Default.OnlyDownload) { Wallpaper.SetWallpaper($@"{workDirectory}\images\{Properties.Settings.Default.Name}"); Properties.Settings.Default.InstalledWallpaperIndex = 0; } // сохраняем новые параметры Properties.Settings.Default.Save(); if (Properties.Settings.Default.Win10Intresting) { Wallpaper.SaveWin10Interesting(Properties.Settings.Default.Win10IntrestingPath); GC.Collect(); // после сохранения WE жрет ОЧЕНЬ много памяти из-за хэширования, но теперь ему столько памяти не нужно } // если нужно, удаляем старые обои, пока не войдем в указанный предел imagesSize = WorkWithSystem.GetDirectorySize(workDirectory + "\\images"); if (imagesSize > Properties.Settings.Default.MaxFolderSize && Properties.Settings.Default.RemoveOld) { FileInfo[] files = new DirectoryInfo(workDirectory + "\\images").GetFiles().OrderBy(f => f.LastWriteTime).ToArray(); MessageBox.Show($"1 - {files[0].CreationTime}; -1 - {files[files.Length-1].CreationTime}"); while (imagesSize > Properties.Settings.Default.MaxFolderSize) { int i = 0; imagesSize -= (int)(files[i].Length / 1048576); // переводим в MB files[i].Delete(); i++; } return(FinishCode.Warning, $"Старые обои были удалены! ({imagesSize} MB)"); } // если нужно, уведомляем if (Properties.Settings.Default.Notify) { if (Properties.Settings.Default.Debug) { Logs.WriteLogFile($"Вес папки с обоями: {imagesSize} Mb"); } if (imagesSize > Properties.Settings.Default.MaxFolderSize) { return(FinishCode.Warning, $"Размер папки с обоями превышает установленную границу! ({imagesSize} MB)"); } } return(FinishCode.Good, ""); }