// ================================================== // 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; } }
/// <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); }
/// <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); }
/// <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; } }
// ================================================== // 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; } }