|
|
|
@ -1,8 +1,14 @@ |
|
|
|
|
using System; |
|
|
|
|
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; |
|
|
|
@ -12,6 +18,7 @@ using System.Windows.Media; |
|
|
|
|
using System.Windows.Media.Imaging; |
|
|
|
|
using System.Windows.Navigation; |
|
|
|
|
using System.Windows.Shapes; |
|
|
|
|
using WeatherApp.Properties; |
|
|
|
|
|
|
|
|
|
namespace WeatherApp |
|
|
|
|
{ |
|
|
|
@ -20,9 +27,81 @@ namespace WeatherApp |
|
|
|
|
/// </summary> |
|
|
|
|
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<WeatherResponse>(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) |
|
|
|
@ -30,5 +109,58 @@ namespace WeatherApp |
|
|
|
|
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(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|