void SaveSettingsFromInterface() { Properties.Settings.Default.Autorun = autorun.IsChecked.Value; WorkWithSystem.AutorunControl(Wallpapers_Everyday.Properties.Settings.Default.Autorun, Assembly.GetExecutingAssembly().Location, "Wallpapers Everyday", "-autorun"); Properties.Settings.Default.Debug = debug.IsChecked.Value; Properties.Settings.Default.AlwaysSet = alwaysSet.IsChecked.Value; Properties.Settings.Default.OnlyDownload = onlyDownload.IsChecked.Value; Properties.Settings.Default.Notify = bigFolderNotify.IsChecked.Value; Properties.Settings.Default.MaxFolderSize = bigFolderSize.Value; Properties.Settings.Default.RemoveOld = autoRemoveOldPictures.IsChecked.Value; Properties.Settings.Default.Win10Intresting = saveWin10Interesting.IsChecked.Value; Properties.Settings.Default.Win10IntrestingPath = saveWin10InterestingPath.DirectoryPath; Properties.Settings.Default.Save(); }
private void Application_Startup(object sender, StartupEventArgs e) { if (RunOnlyOne.ChekRunProgram("Wallpapers Everyday for you!")) { Window win = new Window(); Application.Current.MainWindow = win; Application.Current.Shutdown(); } if (e.Args.Length > 0) { TaskbarIcon icon = new TaskbarIcon(); icon.Icon = new Icon(Wallpapers_Everyday.Properties.Resources.trayIcon, 16, 16); icon.Visibility = Visibility.Visible; icon.ToolTipText = "Wallpapers Everyday"; // на случай, если прога была в автозапуске, но ее переместили и запустили в тихом режиме, нужно подправить запись WorkWithSystem.AutorunControl(Wallpapers_Everyday.Properties.Settings.Default.Autorun, Assembly.GetExecutingAssembly().Location, "Wallpapers Everyday", "-autorun"); // заглушка для успешного завершения программы, без окна и App.Cur.Shutdown() прога не закроется и будет висеть в озу Window win = new Window(); Application.Current.MainWindow = win; var state = Logic.Work(); switch (state.Item1) { case Logic.FinishCode.Good: break; case Logic.FinishCode.Warning: icon.ShowBalloonTip("Wallpapers Everyday", state.Item2, BalloonIcon.Info); break; case Logic.FinishCode.Error: icon.ShowBalloonTip("Wallpapers Everyday", state.Item2, BalloonIcon.Error); break; case Logic.FinishCode.Fail: MessageBox.Show(state.Item2, "Wallpapers Everyday", MessageBoxButton.OK, MessageBoxImage.Error); break; } Thread.Sleep(5000); icon.Visibility = Visibility.Hidden; Application.Current.Shutdown(); } else { MainWindow win = new MainWindow(); Application.Current.MainWindow = win; win.Show(); } }
/// <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, ""); }