private async Task <string> ObtainLastImageCC()
        {
            string retStr = "";

            if (!Directory.Exists(ConcurrentDataXMLfilesBasePath))
            {
                throw new DirectoryNotFoundException("unable to locate directory: " + ConcurrentDataXMLfilesBasePath);
            }

            DirectoryInfo   dir           = new DirectoryInfo(ConcurrentDataXMLfilesBasePath);
            List <FileInfo> lXMLFilesInfo =
                dir.GetFiles(ConventionalTransitions.ImageProcessedAndPredictedDataFileNamesPattern(),
                             SearchOption.AllDirectories).ToList();

            if (lXMLFilesInfo.Count == 0)
            {
                return("No snapshots has been analyzed yet. Please wait for a couple of minutes.");
            }

            lXMLFilesInfo.Sort((finfo1, finfo2) => finfo1.CreationTimeUtc.CompareTo(finfo2.CreationTimeUtc));

            SkyImagesProcessedAndPredictedData data = null;

            try
            {
                data =
                    (SkyImagesProcessedAndPredictedData)
                    ServiceTools.ReadObjectFromXML(lXMLFilesInfo.Last().FullName,
                                                   typeof(SkyImagesProcessedAndPredictedData));
            }
            catch (Exception ex)
            {
                throw ex;
            }

            if (data != null)
            {
                retStr += "Please note that this finction is still in BETA version!" + Environment.NewLine +
                          "date of snapshot analyzed (UTC): " + data.imageShootingDateTimeUTC.ToString("u") +
                          Environment.NewLine +
                          "Sun disk condition: " + data.PredictedSDC.ToString() + Environment.NewLine +
                          "Total cloud cover: " + data.PredictedCC.CloudCoverTotal + " (of 8)";
            }


            return(retStr);
        }
        private async Task <string> ReadCurrentCCinfo()
        {
            string retStr = "";

            if (!Directory.Exists(DataStoreDirectory))
            {
                throw new DirectoryNotFoundException("unable to locate directory: " + DataStoreDirectory);
            }

            DirectoryInfo   dir           = new DirectoryInfo(DataStoreDirectory);
            List <FileInfo> lXMLFilesInfo =
                dir.GetFiles(ConventionalTransitions.ImageProcessedAndPredictedDataFileNamesPattern(),
                             SearchOption.AllDirectories).ToList();

            if (lXMLFilesInfo.Count == 0)
            {
                return("No snapshots has been analyzed yet. Please wait for a couple of minutes.");
            }

            lXMLFilesInfo.Sort((finfo1, finfo2) => finfo1.CreationTimeUtc.CompareTo(finfo2.CreationTimeUtc));

            SkyImagesProcessedAndPredictedData data = null;

            try
            {
                data =
                    (SkyImagesProcessedAndPredictedData)
                    ServiceTools.ReadObjectFromXML(lXMLFilesInfo.Last().FullName,
                                                   typeof(SkyImagesProcessedAndPredictedData));
            }
            catch (Exception ex)
            {
                throw ex;
            }

            if (data != null)
            {
                retStr += "Please note that this finction is still in BETA version!" + Environment.NewLine +
                          "date of snapshot analyzed (UTC): " + data.imageShootingDateTimeUTC.ToString("u") +
                          Environment.NewLine +
                          "Sun disk condition: " + data.PredictedSDC.ToString() + Environment.NewLine +
                          "Total cloud cover: " + data.PredictedCC.CloudCoverTotal + " (of 8)" + Environment.NewLine +
                          Environment.NewLine +
                          "SDC predictions probabilities:" + Environment.NewLine;

                string strToShowSDCs = Environment.NewLine +
                                       "|  NoSun  |  Sun0   |  Sun1   |  Sun2   |" + Environment.NewLine + "" +
                                       "|" +
                                       String.Format("{0,9}",
                                                     (data.sdcDecisionProbabilities.First(
                                                          prob => prob.sdc == SunDiskCondition.NoSun).sdcDecisionProbability * 100.0d)
                                                     .ToString("F2") + "%") + "|" +
                                       String.Format("{0,9}",
                                                     (data.sdcDecisionProbabilities.First(
                                                          prob => prob.sdc == SunDiskCondition.Sun0).sdcDecisionProbability * 100.0d)
                                                     .ToString("F2") + "%") + "|" +
                                       String.Format("{0,9}",
                                                     (data.sdcDecisionProbabilities.First(
                                                          prob => prob.sdc == SunDiskCondition.Sun1).sdcDecisionProbability * 100.0d)
                                                     .ToString("F2") + "%") + "|" +
                                       String.Format("{0,9}",
                                                     (data.sdcDecisionProbabilities.First(
                                                          prob => prob.sdc == SunDiskCondition.Sun2).sdcDecisionProbability * 100.0d)
                                                     .ToString("F2") + "%") + "|";
                retStr += strToShowSDCs;
            }


            return(retStr);
        }