using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.Linq; using System.Net; using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; using System.Timers; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using WeatherApp.Properties; namespace WeatherApp { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private Timer _refreshTimer; private Timer _timeTimer; private string _location = "koyo"; public MainWindow() { InitializeComponent(); InitInstance(); } private void InitInstance() { if (Settings.Default["Location"] != null && !string.IsNullOrEmpty(Settings.Default["Location"].ToString())) _location = Settings.Default["Location"].ToString(); tbxLocation.Text = _location; GetWeatherInfo(); _refreshTimer = new Timer(); _refreshTimer.Interval = 60 * 1000; _refreshTimer.Elapsed += _refreshTimer_Elapsed; _refreshTimer.Start(); _timeTimer = new Timer(); _timeTimer.Interval = 1000; _timeTimer.Elapsed += _timeTimer_Elapsed; _timeTimer.Start(); } private void _timeTimer_Elapsed(object? sender, ElapsedEventArgs e) { Application.Current.Dispatcher.Invoke(() => { tbTime.Text = DateTime.Now.ToString("yyyy-MM-dd tt hh:mm:ss"); }); } private void _refreshTimer_Elapsed(object? sender, ElapsedEventArgs e) { GetWeatherInfo(); } private void SetFontColor(Brush brush) { tbLocation.Foreground = brush; tbTime.Foreground = brush; } private void GetWeatherInfo() { using (WebClient client = new WebClient()) { try { string res = client.DownloadString(@$"https://api.openweathermap.org/data/2.5/weather?q={_location}&APPID="); WeatherResponse weatherResponse = JsonConvert.DeserializeObject(res); Application.Current.Dispatcher.Invoke(() => { BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new Uri(@$"https://openweathermap.org/img/wn/{weatherResponse.Weather[0].Icon}.png"); image.EndInit(); imgWeather.Source = image; tbLocation.Text = _location.ToUpper(); tbTime.Text = DateTime.Now.ToString("yyyy-MM-dd tt hh:mm:ss"); }); } catch (Exception ex) { Debug.WriteLine(ex.Message); } } } private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) DragMove(); } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { Settings.Default["WindowLeft"] = this.Left; Settings.Default["WindowTop"] = this.Top; Settings.Default.Save(); } private void Window_Loaded(object sender, RoutedEventArgs e) { this.Left = (double)Settings.Default["WindowLeft"]; this.Top = (double)Settings.Default["WindowTop"]; if (Settings.Default["FontColor"] == null || Settings.Default["FontColor"].ToString() == "Black") SetFontColor(Brushes.Black); else SetFontColor(Brushes.White); } private void Exit_MenuItem_Click(object sender, RoutedEventArgs e) { Application.Current.Shutdown(); } private void ColorReverse_MenuItem_Click(object sender, RoutedEventArgs e) { if (tbLocation.Foreground == Brushes.Black) { SetFontColor(Brushes.White); Settings.Default["FontColor"] = "White"; } else { SetFontColor(Brushes.Black); Settings.Default["FontColor"] = "Black"; } Settings.Default.Save(); } private void tbxLocation_KeyDown(object sender, KeyEventArgs e) { if (e.Key != Key.Enter) return; if (tbxLocation == null || string.IsNullOrEmpty(tbxLocation.Text)) return; _location = tbxLocation.Text; Settings.Default["Location"] = tbxLocation.Text; GetWeatherInfo(); } } }