private async static Task <bool> DownloadWeather(FileSet set, string path) { using (var client = new WebClient()) { try { await client.DownloadFileTaskAsync(new Uri($"http://www.meteo.pl/um/metco/mgram_pict.php?ntype=0u&fdate={set.Date.ToString("yyyyMMddHH", IC)}&row={set.Location.Y.ToString(IC)}&col={set.Location.X.ToString(IC)}&lang=pl"), path); return(true); } catch (System.Net.WebException Ex) { Logging.Log(Ex.ToString()); return(false); } } }
/// <summary> /// Sets image backing WeatherImage to image backed by provided FileSet /// </summary> /// <param name="set">Image source</param> private void SetWeatherSource(FileSet set) { lock (SyncObject2) { if ((set != null && set.Status == FileSet.DownloadStatus.Downloaded) && ((Displayed == null) || (Displayed != null && ((Displayed.Location == SelectedLocation && set.Date > Displayed.Date) || (Displayed.Location != SelectedLocation))))) { if (Displayed != null) { Displayed.Status = FileSet.DownloadStatus.Downloaded; } set.Status = FileSet.DownloadStatus.IsDisplayed; Displayed = set; var uriWeather = new Uri(FileSet.GetFilename(set)); var uriWeatherLocal = new Uri(uriWeather.LocalPath); var Bitmap = new BitmapImage(uriWeatherLocal); Bitmap.Freeze(); WeatherImage.Dispatcher.BeginInvoke(new Action(() => WeatherImage.Source = Bitmap)); SetTimeline(set.Date); } } }
/// <summary> /// Removes outdated and damaged files /// </summary> /// <param name="path">Path to folder</param> public static void RemoveOutdatedFiles(string path) { foreach (var file in GetOutdatedAndDamagedFiles(path)) { var set = FileHandler.FileList.Where(x => x == file); if (set.Count() != 0) { set.Single().Status = FileSet.DownloadStatus.ToBeDeleted; } else { try { File.Delete(FileSet.GetFilename(file)); } catch (IOException Ex) { Logging.Log(Ex.ToString()); } } } }
private void OnChange(object sender, ListChangedEventArgs e) { lock (SyncObject) { if (e.CollectionChangedEventArgs != null && e.PropertyChangedEventArgs == null) { NotifyCollectionChangedEventArgs args = e.CollectionChangedEventArgs; if (args.Action == NotifyCollectionChangedAction.Add) { foreach (FileSet set in args.NewItems) { if (set.Status == FileSet.DownloadStatus.ToBeDownloaded) { var task = new Task <bool>(() => { return(WeatherDownloader.DownloadAndVerify(set).Result); }); task.Start(); return; } else if (set.Status == FileSet.DownloadStatus.Downloaded) { return; } else { throw new ArgumentException(); } } } else if (args.Action == NotifyCollectionChangedAction.Replace) { throw new NotImplementedException(); } else if (args.Action == NotifyCollectionChangedAction.Remove) { foreach (FileSet set in args.OldItems) { try { File.Delete(FileSet.GetFilename(set)); }catch (IOException Ex) { Logging.Log(Ex.ToString()); } } } else { throw new ArgumentException(); } } else if (e.PropertyChangedEventArgs != null && e.CollectionChangedEventArgs == null) { if (!Enum.TryParse(e.PropertyChangedEventArgs.PropertyName, out FileSet.DownloadStatus previousStatus)) { throw new InvalidOperationException(); } FileSet set = (FileSet)sender; if (set.Status == FileSet.DownloadStatus.Downloaded && previousStatus == FileSet.DownloadStatus.ToBeDownloaded) { WeatherFileDownloaded(set, EventArgs.Empty); InternetConnection(set, EventArgs.Empty); return; } else if (set.Status == FileSet.DownloadStatus.ToBeDeleted) { FileList.Remove(set); return; } else if (set.Status == FileSet.DownloadStatus.IsDisplayed && previousStatus == FileSet.DownloadStatus.Downloaded) { return; } else if (set.Status == FileSet.DownloadStatus.Downloaded && previousStatus == FileSet.DownloadStatus.IsDisplayed) { return; } else if (set.Status == FileSet.DownloadStatus.DownloadFailed && previousStatus == FileSet.DownloadStatus.ToBeDownloaded) { WeatherFileDownloaded(set, EventArgs.Empty); NoInternetConnection(set, EventArgs.Empty); return; } else if (set.Status == FileSet.DownloadStatus.NoWeatherFile && previousStatus == FileSet.DownloadStatus.ToBeDownloaded) { WeatherFileDownloaded(set, EventArgs.Empty); InternetConnection(set, EventArgs.Empty); set.Status = FileSet.DownloadStatus.ToBeDeleted; return; } else if (set.Status == FileSet.DownloadStatus.ToBeDownloaded && previousStatus == FileSet.DownloadStatus.DownloadFailed) { var task = new Task <bool>(() => { return(WeatherDownloader.DownloadAndVerify(set).Result); }); task.Start(); return; } else { throw new InvalidOperationException(); } } else { throw new ArgumentException(); } } }
public static string GetName(FileSet set) => GetName(set.Location, set.Date);
public bool CompareLocationAndDate(FileSet other) { return(this.Location == other.Location && this.Date == other.Date); }
public bool Equals(FileSet other) { return(this == other); }