コード例 #1
0
        private static bool NewDatasetAvailable(DownloadHistory downloadHistory, DatasetFile datasetFromFeed, DirectoryInfo downloadDirectory)
        {
            Console.WriteLine(datasetFromFeed.DatasetUrl);
            if (string.IsNullOrEmpty(datasetFromFeed.LastUpdated))
            {
                return(true);
            }


            if (downloadHistory == null)
            {
                Console.WriteLine("Download history is null, NewDatasetAvailable");
                return(true);
            }
            if (!LocalFileExists(downloadHistory, downloadDirectory, datasetFromFeed))
            {
                Console.WriteLine("LocalFile does not exist, NewDatasetAvailable");
                return(true);
            }

            var originalDatasetLastUpdated = DateTime.Parse(downloadHistory.LastUpdated, System.Globalization.CultureInfo.InvariantCulture);
            var datasetFromFeedLastUpdated = DateTime.Parse(datasetFromFeed.LastUpdated, System.Globalization.CultureInfo.InvariantCulture);

            Console.WriteLine($"originalDatasetLastUpdated = {originalDatasetLastUpdated} , datasetFromFeedLastUpdated = {datasetFromFeedLastUpdated}");

            var updatedDatasetAvailable = originalDatasetLastUpdated < datasetFromFeedLastUpdated;

            if (updatedDatasetAvailable)
            {
                Console.WriteLine($"updatedDatasetAvailable = {updatedDatasetAvailable}");
            }

            return(updatedDatasetAvailable);
        }
コード例 #2
0
        public List <DatasetFile> ParseDatasetFiles(string xml, Dataset dataset)
        {
            var datasetFiles = new List <DatasetFile>();

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(xml);

            string xpath = "//a:feed/a:entry";

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);

            nsmgr.AddNamespace("a", "http://www.w3.org/2005/Atom");
            nsmgr.AddNamespace("inspire_dls", "http://inspire.ec.europa.eu/schemas/inspire_dls/1.0");
            nsmgr.AddNamespace("gn", "http://geonorge.no/Atom");

            var nodes = xmlDoc.SelectNodes(xpath, nsmgr);

            foreach (XmlNode childrenNode in nodes)
            {
                var datasetFile = new DatasetFile();
                datasetFile.Title        = childrenNode.SelectSingleNode("a:title", nsmgr).InnerXml;
                datasetFile.Description  = GetDescription(childrenNode, nsmgr);
                datasetFile.Url          = GetUrl(childrenNode, nsmgr);
                datasetFile.LastUpdated  = GetLastUpdated(childrenNode, nsmgr);
                datasetFile.Projection   = GetProjection(childrenNode.SelectNodes("a:category", nsmgr));
                datasetFile.Format       = GetFormat(childrenNode.SelectSingleNode("a:title", nsmgr), childrenNode.SelectNodes("a:category", nsmgr));
                datasetFile.AreaCode     = GetAreaCode(childrenNode.SelectNodes("a:category", nsmgr));
                datasetFile.AreaLabel    = GetAreaLabel(childrenNode.SelectNodes("a:category", nsmgr));
                datasetFile.Organization = GetOrganization(childrenNode, nsmgr, dataset);

                datasetFiles.Add(datasetFile);
            }
            return(datasetFiles);
        }
コード例 #3
0
        private static bool LocalFileExists(DirectoryInfo downloadDirectory, DatasetFile dataset)
        {
            if (!dataset.HasLocalFileName())
            {
                return(false);
            }

            var filePath = new FileInfo(Path.Combine(downloadDirectory.FullName, dataset.LocalFileName()));

            return(filePath.Exists);
        }
コード例 #4
0
        private static DirectoryInfo GetDownloadDirectory(AppSettings appSettings, DatasetFile dataset)
        {
            var downloadDirectory = new DirectoryInfo(Path.Combine(appSettings.DownloadDirectory, dataset.DatasetId));

            if (!downloadDirectory.Exists)
            {
                Console.WriteLine($"Creating directory: {downloadDirectory}");
                downloadDirectory.Create();
            }
            return(downloadDirectory);
        }
コード例 #5
0
        public static DatasetFile NewDatasetFile(string title = null)
        {
            var datasetFile = new DatasetFile();

            datasetFile.Title        = title ?? "GML-format,  3001, Halden";
            datasetFile.Description  = "Dataset description";
            datasetFile.Url          = "https://nedlasting.geonorge.no/geonorge/KystOgFiskeri/AkvakulturLokaliteter/GML/KystOgFiskeri_0101_Halden_25833_AkvakulturLokaliteter_GML.zip";
            datasetFile.LastUpdated  = "2018-10-31T01:43:35";
            datasetFile.Organization = "Kartverket";
            datasetFile.Projection   = "EPSG:25833";
            datasetFile.DatasetId    = "Akvakultur - lokaliteter GML-format";
            datasetFile.DatasetUrl   = "http://nedlasting.geonorge.no/geonorge/ATOM-feeds/AkvakulturLokaliteter_AtomFeedGML.xml";

            return(datasetFile);
        }
コード例 #6
0
        private static bool NewDatasetAvailable(DownloadHistory downloadHistory, DatasetFile datasetFromFeed, DirectoryInfo downloadDirectory)
        {
            if (downloadHistory == null)
            {
                return(true);
            }
            if (!LocalFileExists(downloadHistory, downloadDirectory, datasetFromFeed))
            {
                return(true);
            }

            var originalDatasetLastUpdated = DateTime.Parse(downloadHistory.Downloaded);
            var datasetFromFeedLastUpdated = DateTime.Parse(datasetFromFeed.LastUpdated);

            var updatedDatasetAvailable = originalDatasetLastUpdated < datasetFromFeedLastUpdated;

            return(updatedDatasetAvailable);
        }
コード例 #7
0
 private static DirectoryInfo GetDownloadDirectory(ConfigFile configFile, DatasetFile dataset)
 {
     try
     {
         var downloadDirectory = new DirectoryInfo(Path.Combine(configFile.DownloadDirectory, dataset.DatasetId));
         if (!downloadDirectory.Exists)
         {
             Console.WriteLine($"Creating directory: {downloadDirectory}");
             downloadDirectory.Create();
         }
         return(downloadDirectory);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         throw;
     }
 }
コード例 #8
0
        private static async Task StartDownloadAsync()
        {
            DatasetService datasetService;

            if (userpath.Length > 1)
            {
                datasetService = new DatasetService(userpath);
            }
            else
            {
                datasetService = new DatasetService();
            }

            List <DatasetFile> datasetToDownload = datasetService.GetSelectedFiles();

            List <DatasetFile> updatedDatasetToDownload = new List <DatasetFile>();
            DownloadLog        downloadLog = new DownloadLog();

            downloadLog.TotalDatasetsToDownload = datasetToDownload.Count;
            var  appSettings           = applicationService.GetAppSettings();
            long totalSizeUpdatedFiles = 0;

            var downloader = new FileDownloader();

            foreach (var localDataset in datasetToDownload)
            {
                var fileLog = new DatasetFileLog(localDataset);

                try
                {
                    Console.WriteLine(localDataset.DatasetId + " - " + localDataset.Title);

                    DirectoryInfo downloadDirectory = GetDownloadDirectory(appSettings, localDataset);

                    DatasetFile datasetFromFeed = datasetService.GetDatasetFile(localDataset);

                    DownloadHistory downloadHistory = datasetService.GetFileDownloaHistory(datasetFromFeed.Url);

                    bool newDatasetAvailable = NewDatasetAvailable(downloadHistory, datasetFromFeed, downloadDirectory);
                    if (newDatasetAvailable)
                    {
                        Console.WriteLine("Updated version of dataset is available.");
                    }

                    if (newDatasetAvailable)
                    {
                        Console.WriteLine("Starting download process.");
                        downloader.ProgressChanged += (totalFileSize, totalBytesDownloaded, progressPercentage) =>
                        {
                            fileLog.HumanReadableSize = HumanReadableBytes(totalFileSize.Value);
                            totalSizeUpdatedFiles    += totalFileSize.Value;
                            Console.CursorLeft        = 0;
                            Console.Write($"{progressPercentage}% ({HumanReadableBytes(totalBytesDownloaded)}/{HumanReadableBytes(totalFileSize.Value)})                "); // add som extra whitespace to blank out previous updates
                        };
                        var downloadRequest = new DownloadRequest(localDataset.Url, downloadDirectory, localDataset.IsRestricted());
                        localDataset.FilePath = await downloader.StartDownload(downloadRequest, appSettings);

                        Console.WriteLine();

                        downloadLog.Updated.Add(fileLog);
                        updatedDatasetToDownload.Add(localDataset);
                    }
                    else
                    {
                        fileLog.Message = "Not necessary to download dataset.";
                        downloadLog.NotUpdated.Add(fileLog);
                        Console.WriteLine("Not necessary to download dataset.");
                        localDataset.FilePath = downloadHistory.FilePath;
                        updatedDatasetToDownload.Add(localDataset);
                    }
                }
                catch (Exception e)
                {
                    updatedDatasetToDownload.Add(localDataset);
                    fileLog.Message = "Error while downloading dataset: " + e.Message;
                    downloadLog.Faild.Add(fileLog);
                    Console.WriteLine("Error while downloading dataset: " + e.Message);
                }
                Console.WriteLine("-------------");
            }

            downloadLog.TotalSizeOfDownloadedFiles = HumanReadableBytes(totalSizeUpdatedFiles);
            datasetService.WriteToDownloadLogFile(downloadLog);
            datasetService.WriteToDownloadFile(updatedDatasetToDownload);
            datasetService.WriteToDownloadHistoryFile(updatedDatasetToDownload);
        }
コード例 #9
0
 private static bool LocalFileExists(DownloadHistory downloadHistory, DirectoryInfo downloadDirectory, DatasetFile dataset)
 {
     if (downloadHistory.FilePath != null)
     {
         var filePath = new FileInfo(Path.Combine(downloadDirectory.FullName, downloadHistory.FilePath));
         return(filePath.Exists);
     }
     else
     {
         return(LocalFileExists(downloadDirectory, dataset));
     }
 }
コード例 #10
0
 public DatasetFileLog(DatasetFile localDataset)
 {
     DatasetId  = localDataset.DatasetId;
     Name       = localDataset.Title;
     Projection = localDataset.Projection;
 }
コード例 #11
0
        private static async Task StartDownloadAsync(ConfigFile config)
        {
            var appSettings              = ApplicationService.GetAppSettings();
            var datasetService           = new DatasetService(config);
            var updatedDatasetToDownload = new List <Download>();
            var downloadLog              = new DownloadLog();
            var downloader        = new FileDownloader();
            var datasetToDownload = datasetService.GetSelectedFilesToDownload();
            var downloadUsage     = config.DownloadUsage;

            downloadLog.TotalDatasetsToDownload = datasetToDownload.Count;

            foreach (var localDataset in datasetToDownload)
            {
                var updatedDatasetFileToDownload = new List <DatasetFile>();

                if (localDataset.Subscribe)
                {
                    Log.Information("Subscribe to Dataset files");
                    var datasetFilesFromFeed = datasetService.GetDatasetFiles(localDataset);

                    var filterDatasetFromFeed = datasetFilesFromFeed.Where(p => localDataset.Projections.Where(s => s.Selected == false).All(p2 => p2.Epsg != p.Projection)).ToList();

                    if (localDataset.AutoDeleteFiles)
                    {
                        Log.Debug("Delete files");
                        localDataset.Files = RemoveFiles(filterDatasetFromFeed, localDataset.Files, config);
                    }

                    if (localDataset.AutoAddFiles)
                    {
                        Log.Debug("Add new files");
                        localDataset.Files = AddFiles(filterDatasetFromFeed, localDataset.Files);
                    }
                }

                foreach (var datasetFile in localDataset.Files)
                {
                    var fileLog = new DatasetFileLog(datasetFile);

                    try
                    {
                        Console.WriteLine(datasetFile.DatasetId + " - " + datasetFile.Title);

                        DirectoryInfo   downloadDirectory   = GetDownloadDirectory(config, datasetFile);
                        DatasetFile     datasetFromFeed     = datasetService.GetDatasetFile(datasetFile);
                        DownloadHistory downloadHistory     = datasetService.GetFileDownloaHistory(datasetFile.Url);
                        bool            newDatasetAvailable = NewDatasetAvailable(downloadHistory, datasetFromFeed, downloadDirectory);

                        if (newDatasetAvailable)
                        {
                            Console.WriteLine("Updated version of dataset is available.");
                            Console.WriteLine("Starting download process.");
                            downloader.ProgressChanged += (totalFileSize, totalBytesDownloaded, progressPercentage) =>
                            {
                                Console.CursorLeft = 0;
                                Console.Write($"{progressPercentage}% ({HumanReadableBytes(totalBytesDownloaded)}/{HumanReadableBytes(totalFileSize.Value)})                "); // add som extra whitespace to blank out previous updates
                            };

                            var downloadRequest = new DownloadRequest(datasetFile.Url, downloadDirectory, datasetFile.IsRestricted());
                            datasetFile.FilePath = await downloader.StartDownload(downloadRequest, appSettings);

                            downloadLog.Updated.Add(fileLog);

                            Console.WriteLine();

                            downloadUsage?.Entries.Add(new DownloadUsageEntries(datasetFile));
                            updatedDatasetFileToDownload.Add(datasetFile);
                        }
                        else
                        {
                            fileLog.Message = "Not necessary to download dataset." + datasetFromFeed.LastUpdated;
                            downloadLog.NotUpdated.Add(fileLog);
                            Console.WriteLine("Not necessary to download dataset.");
                            datasetFile.FilePath = downloadHistory.FilePath;
                            updatedDatasetFileToDownload.Add(datasetFile);
                        }
                        datasetFile.DownloadSuccess = true;
                    }

                    catch (Exception e)
                    {
                        Log.Error(e, "Error while downloading file " + datasetFile.Title);
                        updatedDatasetFileToDownload.Add(datasetFile);
                        fileLog.Message = "Error while downloading dataset: " + e.Message;
                        downloadLog.Faild.Add(fileLog);
                        Console.WriteLine("Error while downloading dataset: " + e.Message);
                        datasetFile.DownloadSuccess = true;
                    }

                    Console.WriteLine("-------------");
                }
                updatedDatasetToDownload.Add(localDataset);
            }

            Log.Information("Send download usage");
            datasetService.SendDownloadUsage(downloadUsage);
            Log.Information("Write to config file");
            datasetService.WriteToConfigFile(updatedDatasetToDownload);
            Log.Information("Write to download history file");
            datasetService.WriteToDownloadHistoryFile(updatedDatasetToDownload);
            Log.Information("Write to download log file");
            datasetService.WriteToDownloadLogFile(downloadLog);
        }