public static void HandleWeatherData(string filename, XRITHeader header) { if (header.Filename.Contains("KWIN")) { // HRIT EMWIN wrongly has product id of weather data if (FileHandler.SkipEMWIN) { try { File.Delete(filename); } catch (Exception) { // Do nothing, file doesn't exists } return; } string fz = null; switch (header.Compression) { case CompressionType.ZIP: fz = DumpFile(filename, header, "zip"); break; case CompressionType.GIF: fz = DumpFile(filename, header, "gif"); break; case CompressionType.JPEG: fz = DumpFile(filename, header, "jpg"); break; case CompressionType.NO_COMPRESSION: fz = DumpFile(filename, header, "txt"); break; default: fz = DumpFile(filename, header, "bin"); break; } if (fz != null) { try { File.Delete(fz); } catch (Exception) { // Do nothing, file doesn't exists } } } else if (header.PrimaryHeader.FileType == FileTypeCode.IMAGE) { string basedir = FileHandler.FinalFileFolder; if (header.Product.ID == (int)NOAAProductID.OTHER_SATELLITES_1 || header.Product.ID == (int)NOAAProductID.OTHER_SATELLITES_2) { basedir = Path.Combine(basedir, OtherSatellitesFolder); } else { basedir = Path.Combine(basedir, WeatherDataFolder); } try { UIConsole.Log($"New {header.ToNameString()}"); //UIConsole.Log($"New Weather Data - {header.SubProduct.Name}"); if (!Directory.Exists(basedir)) { Directory.CreateDirectory(basedir); } ImageHandler.Handler.HandleFile(filename, basedir); File.Delete(filename); } catch (Exception e) { UIConsole.Warn($"Failed to parse Weather Data Image at {Path.GetFileName(filename)}: {e}"); } } else if (header.PrimaryHeader.FileType == FileTypeCode.TEXT) { string fz = DumpFile(filename, header, "txt"); if (fz != null) { try { File.Delete(fz); } catch (Exception) { // Do nothing, file doesn't exists } } } else { FileHandler.DefaultHandler(filename, header); } }
internal void SingleThreadRun() { organizer.Update(); var data = organizer.GroupData; var clist = data.ToList(); foreach (var z in clist) { var mData = z.Value; if (!running && !RunningSingleThread) { break; } var ImageName = $"{z.Key}-{mData.SatelliteName}-{mData.RegionName}"; if (mData.IsProcessed) { continue; } try { if (!GenerateVisible) { mData.Visible.OK = true; mData.IsVisibleProcessed = true; } if (!GenerateInfrared) { mData.Infrared.OK = true; mData.IsInfraredProcessed = true; } if (!GenerateWaterVapour) { mData.WaterVapour.OK = true; mData.IsWaterVapourProcessed = true; } if (!GenerateFalseColor) { mData.IsFalseColorProcessed = true; } if (!GenerateOtherImages) { mData.OtherData.Select(x => x.Value).ToList().ForEach(k => { k.OK = true; }); } if (GenerateVisible && mData.Visible.IsComplete && mData.Visible.MaxSegments != 0 && !mData.IsVisibleProcessed) { var ofilename = Path.Combine(folder, GenFilename(mData.SatelliteName, mData.RegionName, "VIS", z.Key, mData.Visible.Segments[mData.Visible.FirstSegment])); if (File.Exists(ofilename)) { UIConsole.Debug( $"Skipping generating Visible for {Path.GetFileName(ofilename)}. Image already exists."); mData.IsVisibleProcessed = true; } else { UIConsole.Debug( $"Starting Generation of Visible for {Path.GetFileName(ofilename)}."); var bmp = ImageTools.GenerateFullImage(mData.Visible, mData.CropImage); if (GenerateMapOverlays || GenerateLatLonOverlays || GenerateLabels) { if (SaveNonOverlay) { var orgFileName = Path.Combine(folder, $"{Path.GetFileNameWithoutExtension(ofilename)}-original.png"); bmp.Save(orgFileName, ImageFormat.Png); } UIConsole.Debug( $"Generating Overlays Visible for {Path.GetFileName(ofilename)}."); GenerateImageOverlay(ref bmp, mData, mData.Visible); } bmp.Save(ofilename, ImageFormat.Png); bmp.Dispose(); UIConsole.Log($"New Visible Image: {Path.GetFileName(ofilename)}"); EventMaster.Post("newFile", new NewFileReceivedEventData() { Name = Path.GetFileName(ofilename), Path = ofilename, Metadata = { { "channel", "visible" }, { "satelliteName", mData.SatelliteName },{ "regionName", mData.RegionName },{ "timestamp", z.Key.ToString() } } }); } mData.IsVisibleProcessed = true; mData.Visible.OK = true; } else if (mData.Visible.MaxSegments == 0) { mData.IsVisibleProcessed = true; mData.Visible.OK = true; } if (GenerateInfrared && mData.Infrared.IsComplete && mData.Infrared.MaxSegments != 0 && !mData.IsInfraredProcessed) { var ofilename = Path.Combine(folder, GenFilename(mData.SatelliteName, mData.RegionName, "IR", z.Key, mData.Infrared.Segments[mData.Infrared.FirstSegment])); if (File.Exists(ofilename)) { UIConsole.Debug( $"Skipping generating Infrared for {Path.GetFileName(ofilename)}. Image already exists."); } else { UIConsole.Debug($"Starting Generation of Infrared for {Path.GetFileName(ofilename)}."); var bmp = ImageTools.GenerateFullImage(mData.Infrared, mData.CropImage); if (GenerateMapOverlays || GenerateLatLonOverlays || GenerateLabels) { if (SaveNonOverlay) { var orgFileName = Path.Combine(folder, $"{Path.GetFileNameWithoutExtension(ofilename)}-original.png"); bmp.Save(orgFileName, ImageFormat.Png); } UIConsole.Debug( $"Generating Overlays Infrared for {Path.GetFileName(ofilename)}."); GenerateImageOverlay(ref bmp, mData, mData.Infrared); } bmp.Save(ofilename, ImageFormat.Png); bmp.Dispose(); UIConsole.Log($"New Infrared Image: {Path.GetFileName(ofilename)}"); EventMaster.Post("newFile", new NewFileReceivedEventData() { Name = Path.GetFileName(ofilename), Path = ofilename, Metadata = { { "channel", "infrared" }, { "satelliteName", mData.SatelliteName },{ "regionName", mData.RegionName },{ "timestamp", z.Key.ToString() } } }); } mData.IsInfraredProcessed = true; mData.Infrared.OK = true; } else if (mData.Infrared.MaxSegments == 0) { mData.IsInfraredProcessed = true; mData.Infrared.OK = true; } if (ImageManager.GenerateWaterVapour && mData.WaterVapour.IsComplete && mData.WaterVapour.MaxSegments != 0 && !mData.IsWaterVapourProcessed) { var ofilename = Path.Combine(folder, GenFilename(mData.SatelliteName, mData.RegionName, "WV", z.Key, mData.WaterVapour.Segments[mData.WaterVapour.FirstSegment])); if (File.Exists(ofilename)) { UIConsole.Debug( $"Skipping generating Water Vapour for {Path.GetFileName(ofilename)}. Image already exists."); } else { UIConsole.Debug($"Starting Generation of Water Vapour for {Path.GetFileName(ofilename)}."); var bmp = ImageTools.GenerateFullImage(mData.WaterVapour, mData.CropImage); if (GenerateMapOverlays || GenerateLatLonOverlays || GenerateLabels) { if (SaveNonOverlay) { var orgFileName = Path.Combine(folder, $"{Path.GetFileNameWithoutExtension(ofilename)}-original.png"); bmp.Save(orgFileName, ImageFormat.Png); } UIConsole.Debug( $"Generating Overlays WaterVapour for {Path.GetFileName(ofilename)}."); GenerateImageOverlay(ref bmp, mData, mData.WaterVapour); } bmp.Save(ofilename, ImageFormat.Png); bmp.Dispose(); UIConsole.Log($"New Water Vapour Image: {Path.GetFileName(ofilename)}"); EventMaster.Post("newFile", new NewFileReceivedEventData() { Name = Path.GetFileName(ofilename), Path = ofilename, Metadata = { { "channel", "watervapour" }, { "satelliteName", mData.SatelliteName },{ "regionName", mData.RegionName },{ "timestamp", z.Key.ToString() } } }); } mData.IsWaterVapourProcessed = true; mData.WaterVapour.OK = true; } if (GenerateFalseColor && !mData.IsFalseColorProcessed && ImageTools.CanGenerateFalseColor(mData)) { var filename = GenFilename( mData.SatelliteName, mData.RegionName, "FSCLR", z.Key, mData.Visible.Segments[mData.Visible.FirstSegment] .Replace("VS", "FC") .Replace("VIS", "FC") ); filename = Path.Combine(folder, filename); if (File.Exists(filename)) { UIConsole.Debug( $"Skipping generating FLSCLR for {Path.GetFileName(filename)}. Image already exists."); } else { UIConsole.Debug($"Starting Generation of FSLCR for {Path.GetFileName(filename)}."); var bmp = ImageTools.GenerateFalseColor(mData); if (GenerateMapOverlays || GenerateLatLonOverlays || GenerateLabels) { if (SaveNonOverlay) { var orgFileName = Path.Combine(folder, $"{Path.GetFileNameWithoutExtension(filename)}-original.png"); bmp.Save(orgFileName, ImageFormat.Png); } UIConsole.Debug( $"Generating Overlays False Colour for {Path.GetFileName(filename)}."); GenerateImageOverlay(ref bmp, mData, mData.Visible); // Using visible coordinates } bmp.Save(filename, ImageFormat.Png); bmp.Dispose(); UIConsole.Log($"New False Colour Image: {Path.GetFileName(filename)}"); EventMaster.Post("newFile", new NewFileReceivedEventData() { Name = Path.GetFileName(filename), Path = filename, Metadata = { { "channel", "filename" }, { "satelliteName", mData.SatelliteName },{ "regionName", mData.RegionName },{ "timestamp", z.Key.ToString() } } }); } mData.IsFalseColorProcessed = true; } if (GenerateOtherImages && !mData.IsOtherDataProcessed && mData.OtherData.Count > 0) { mData.OtherData.Keys.ToList().ForEach(k => { var gd = mData.OtherData[k]; if (!gd.IsComplete || gd.MaxSegments == 0 || gd.OK) { return; } var ofilename = GenFilename(mData.SatelliteName, mData.RegionName, gd.Code, gd.Timestamp, gd.Segments[0]); ofilename = Path.Combine(folder, ofilename); if (File.Exists(ofilename)) { UIConsole.Debug( $"Skipping generating {Path.GetFileName(ofilename)}. Image already exists."); } else { UIConsole.Debug($"Starting Generation of {Path.GetFileName(ofilename)}."); var bmp = ImageTools.GenerateFullImage(gd, false); if (GenerateMapOverlays || GenerateLatLonOverlays || GenerateLabels) { if (SaveNonOverlay) { var orgFileName = Path.Combine(folder, $"{Path.GetFileNameWithoutExtension(ofilename)}-original.png"); bmp.Save(orgFileName, ImageFormat.Png); } UIConsole.Debug( $"Generating Overlays for {Path.GetFileName(ofilename)}."); GenerateImageOverlay(ref bmp, mData, gd); } bmp.Save(ofilename, ImageFormat.Png); bmp.Dispose(); UIConsole.Log($"New Image: {Path.GetFileName(ofilename)}"); EventMaster.Post("newFile", new NewFileReceivedEventData() { Name = Path.GetFileName(ofilename), Path = ofilename, Metadata = { { "channel", "otherimages" },{ "satelliteName", mData.SatelliteName },{ "regionName", mData.RegionName },{ "timestamp", z.Key.ToString() } } }); } gd.OK = true; }); } else if (mData.OtherData.Count == 0) { if (mData.ReadyToMark) { mData.OtherData.Select(x => x.Value).ToList().ForEach(k => { k.OK = true; }); } } if (mData.ReadyToMark) { mData.IsProcessed = (!GenerateFalseColor || (GenerateFalseColor && mData.IsFalseColorProcessed)) && (!GenerateVisible || (GenerateVisible && mData.IsVisibleProcessed)) && (!GenerateInfrared || (GenerateInfrared && mData.IsInfraredProcessed)) && (!GenerateWaterVapour || (GenerateWaterVapour && mData.IsWaterVapourProcessed)) && (!GenerateOtherImages || (GenerateOtherImages && mData.IsOtherDataProcessed)); } if (mData.Timeout) { // Timeout completing, so let's erase the files. mData.ForceComplete(); } if (EraseFiles) { TryEraseGroupDataFiles(z.Key, mData); } } catch (SystemException e) { UIConsole.Error($"Error processing image (SysExcpt) {ImageName}: {e}"); mData.RetryCount++; if (mData.RetryCount == MaxRetryCount) { mData.IsProcessed = true; } } catch (Exception e) { UIConsole.Error($"Error processing image {ImageName}: {e}"); mData.RetryCount++; if (mData.RetryCount == MaxRetryCount) { mData.IsProcessed = true; } } } if (EnableArchive) { FileHandler.ArchieveHandler(folder, Path.GetFileName(folder)); } }