示例#1
0
        public StorageEntity <TValue> Put(PackageKey key, TValue value)
        {
            var storageEntity = Save(key, value);

            _cache[key] = storageEntity;
            return(storageEntity);
        }
示例#2
0
        private StorageEntity <TValue> Load(PackageKey key)
        {
            var filePath          = ComposeFilePath(key);
            var json              = File.ReadAllText(filePath);
            var deserializeObject = JsonConvert.DeserializeObject <TValue>(json);
            var lastModified      = File.GetLastWriteTime(filePath);

            return(new StorageEntity <TValue>(lastModified, deserializeObject));
        }
示例#3
0
 public bool HasKey(PackageKey key)
 {
     if (_cache.ContainsKey(key))
     {
         return(true);
     }
     if (File.Exists(ComposeFilePath(key)))
     {
         _cache[key] = Load(key);
         return(true);
     }
     return(false);
 }
示例#4
0
        private PackageDto RetrieveAndSaveInternal(PackageKey key)
        {
            Debug.WriteLine($"FindPackage {key}");
            var package = _packageRepository.FindPackage(key.Id, new SemanticVersion(key.Version));

            if (package == null)
            {
                return(null);
            }
            var packageDto = new PackageDto(package);

            _storage.Put(key, packageDto);
            return(packageDto);
        }
示例#5
0
        private IEnumerable <PackageDto> GetPackageDto(PackageKey key)
        {
            if (string.IsNullOrEmpty(key.Version))
            {
                return(_nugetLibraryProxy.GetById(key.Id));
            }

            var package = _nugetLibraryProxy.GetByKey(key);

            if (package == null)
            {
                return(new PackageDto[0]);
            }
            return(new[] { package });
        }
示例#6
0
        public PackageDto GetByKey(PackageKey key)
        {
            if (!_storage.HasKey(key))
            {
                return(RetrieveAndSaveInternal(key));
            }

            var storageEntity = _storage.GetByKey(key);

            if (IsOutdated(storageEntity))
            {
                return(RetrieveAndSaveInternal(key));
            }

            return(storageEntity.Value);
        }
示例#7
0
        private StorageEntity <TValue> Save(PackageKey key, TValue value)
        {
            var filePath      = ComposeFilePath(key);
            var directoryPath = ComposeDirectoryPath(key);

            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(directoryPath);
            }
            var json = JsonConvert.SerializeObject(value);

            File.WriteAllText(filePath, json);
            var lastModifiedTime = File.GetLastWriteTime(filePath);

            UpdateLastWriteDateTimeMarkerFile(directoryPath);

            return(new StorageEntity <TValue>(lastModifiedTime, value));
        }
示例#8
0
 private string ComposeDirectoryPath(PackageKey key)
 {
     return(ComposeDirectoryPath(key.Id));
 }
示例#9
0
 private string ComposeFilePath(PackageKey key)
 {
     return(Path.Combine(_rootFolder, key.FullPath));
 }
示例#10
0
 public StorageEntity <TValue> GetByKey(PackageKey key)
 {
     return(HasKey(key) ? _cache[key] : default(StorageEntity <TValue>));
 }
示例#11
0
 protected bool Equals(PackageKey other)
 {
     return(string.Equals(FullPath, other.FullPath));
 }