コード例 #1
0
        // ==================================================
        // Methods

        /// <summary>
        /// Initializes repository with all local GPX files
        /// </summary>
        public void Init(string uri)
        {
            lock (_init)             // TODO: use internal init for basic cache
            {
                if (Convert.ToBoolean(_init))
                {
                    return;
                }

                _trails = new BasicCacheService <TopoTrailInfo>();
                var root = new DirectoryInfo(uri);
                _rootUri = root.FullName;
                foreach (var dir in root.EnumerateDirectories())
                {
                    var country = GeoCountryInfo.ByName(dir.Name);
                    if (country != null)
                    {
                        foreach (var file in dir.EnumerateFiles("*.gpx"))
                        {
                            var trail = LoadTrail(file);
                            _trails.Add(trail);
                        }
                    }
                }
                _init = true;
            }
        }
コード例 #2
0
        /// <summary>
        /// Creates a single track edit from a specific set of file data and adds it to the edit session
        /// </summary>
        public TrackEditData CreateTrack(TrackEditCreateRequest request)
        {
            var track = PreviewTrack(request.Uri);

            // update name and description if provided
            if (!String.IsNullOrWhiteSpace(request.Name))
            {
                track.Name = request.Name;
            }
            if (!String.IsNullOrWhiteSpace(request.Description))
            {
                track.Description = request.Description;
            }

            // apply points filters if provided
            track.Points = FilterPoints(track.DataPoints, request);

            // add to edit session
            _tracks.Add(track);

            // return new track edit
            return(track);
        }
コード例 #3
0
        /// <summary>
        /// Create the trail metadata, file and cache
        /// </summary>
        public string CreateTrail(TopoTrailInfo trail)
        {
            var response = new ValidationServiceResponse <TopoTrailInfo>(trail);

            // check file system
            if (!Directory.Exists(_rootUri))
            {
                throw new Exception($"Directory not initalized: {_rootUri}");
            }
            var folder = Path.Combine(_rootUri, trail.Country.Name);

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }

            // generate new and rename/remove existing files
            var filename = GetFilename(trail);

            // check if overwrite file
            if (File.Exists(filename))
            {
                throw new Exception($"{filename} already exists!");
            }

            // write new file
            var contents = BuildGpx(trail);

            File.WriteAllText(filename, contents);

            // add new file to cache
            trail.Key = Path.GetFileNameWithoutExtension(filename).ToUpperInvariant();
            _trails.Add(trail);

            // return new key
            return(trail.Key);
        }
コード例 #4
0
        /// <summary>
        /// Loads cached places from local storage
        /// </summary>
        public void Init(string uri)
        {
            lock (_cache)
            {
                if (_cached)
                {
                    return;
                }

                _uri = uri;
                var reader = new XlsFileReader(uri);
                var file   = reader.ReadFile();

                var sheet = new CartoPlaceSheetData(file.Sheets[0]);
                foreach (var row in sheet.Rows)
                {
                    var info = new CartoPlaceInfo(row);
                    _cache.Add(info);
                }

                _cached = true;
                _dirty  = false;
            }
        }
コード例 #5
0
        // ==================================================
        // Methods

        /// <summary>
        /// Initializes repository with all local GPX files
        /// </summary>
        public void Init(string uri)
        {
            lock (_init)             // TODO: use internal init for basic cache
            {
                if (Convert.ToBoolean(_init))
                {
                    return;
                }

                _polar = new BasicCacheService <PolarTrainingInfo>();
                var root = new DirectoryInfo(uri);
                _rootUri = root.FullName;
                foreach (var year in root.EnumerateDirectories())
                {
                    foreach (var file in year.EnumerateFiles("*.zip"))
                    {
                        var filename = Path.GetFileNameWithoutExtension(file.Name);

                        // cache file list for later
                        var training = new PolarTrainingInfo();
                        training.Uri = file.FullName;
                        training.Key = filename.ToUpperInvariant();

                        // parse out datetime
                        var index = filename.Length - 19;
                        var parts = filename.Substring(index).Split('_');
                        var time  = parts[1].Replace("-", ":");                        // + "Z";
                        training.Timestamp = DateTime.Parse(parts[0] + " " + time);

                        // add to partial cache
                        _polar.Add(training);
                    }
                }
                _init = true;
            }
        }