Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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));
            }
        }