コード例 #1
0
ファイル: EncryptedBlobCache.cs プロジェクト: ErikEJ/Akavache
 protected EncryptedBlobCache(
     string cacheDirectory = null, 
     IFilesystemProvider filesystemProvider = null, 
     IScheduler scheduler = null,
     Action<AsyncSubject<byte[]>> invalidatedCallback = null)
     : base(cacheDirectory, filesystemProvider, scheduler, invalidatedCallback)
 {
 }
コード例 #2
0
        protected PersistentBlobCache(string cacheDirectory = null, IFilesystemProvider filesystemProvider = null, IScheduler scheduler = null)
        {
            this.CacheDirectory = cacheDirectory ?? GetDefaultRoamingCacheDirectory();
            this.Scheduler = scheduler ?? RxApp.TaskpoolScheduler;
            this.filesystem = filesystemProvider ?? new SimpleFilesystemProvider();

            // Here, we're not actually caching the requests directly (i.e. as
            // byte[]s), but as the "replayed result of the request", in the
            // AsyncSubject - this makes the code infinitely simpler because
            // we don't have to keep a separate list of "in-flight reads" vs
            // "already completed and cached reads"
            MemoizedRequests = new MemoizingMRUCache<string, AsyncSubject<byte[]>>(
                (x, c) => FetchOrWriteBlobFromDisk(x, c, false), 20);

            try
            {
                var dir = filesystem.CreateRecursive(CacheDirectory);
            #if WINRT
                // NB: I don't want to talk about it.
                dir.Wait();
            #endif
            }
            catch (Exception ex)
            {
                this.Log().FatalException("Couldn't create cache directory", ex);
            }

            var cacheIndex = FetchOrWriteBlobFromDisk(BlobCacheIndexKey, null, true)
                .Catch(Observable.Return(new byte[0]))
                .Select(x => Encoding.UTF8.GetString(x, 0, x.Length).Split('\n')
                    .SelectMany(ParseCacheIndexEntry)
                    .ToDictionary(y => y.Key, y => y.Value))
                .Select(x => new ConcurrentDictionary<string, CacheIndexEntry>(x));

            #if WINRT
            CacheIndex = cacheIndex.First();
            #else
            cacheIndex.Subscribe(x => CacheIndex = x);
            #endif

            flushThreadSubscription = Disposable.Empty;

            if (!RxApp.InUnitTestRunner())
            {
                flushThreadSubscription = actionTaken
                    .Where(_ => CacheIndex != null)
                    .Throttle(TimeSpan.FromSeconds(30), Scheduler)
                    .SelectMany(_ => FlushCacheIndex(true))
                    .Subscribe(_ =>
                    {
                        this.Log().Debug("Flushing cache");
                        lastFlushTime = Scheduler.Now;
                    });
            }

            this.Log().Info("{0} entries in blob cache index", CacheIndex.Count);
        }
コード例 #3
0
        public PersistentBlobCache(
            string cacheDirectory = null,
            IFilesystemProvider filesystemProvider = null,
            IScheduler scheduler = null,
            Action <AsyncSubject <byte[]> > invalidateCallback = null)
        {
            BlobCache.EnsureInitialized();

            this.filesystem = filesystemProvider ?? Locator.Current.GetService <IFilesystemProvider>();

            if (this.filesystem == null)
            {
                throw new Exception("No IFilesystemProvider available. This should never happen, your DependencyResolver is broken");
            }

            this.CacheDirectory = cacheDirectory ?? filesystem.GetDefaultRoamingCacheDirectory();
            this.Scheduler      = scheduler ?? BlobCache.TaskpoolScheduler;

            // Here, we're not actually caching the requests directly (i.e. as
            // byte[]s), but as the "replayed result of the request", in the
            // AsyncSubject - this makes the code infinitely simpler because
            // we don't have to keep a separate list of "in-flight reads" vs
            // "already completed and cached reads"
            memoizedRequests = new MemoizingMRUCache <string, AsyncSubject <byte[]> >(
                (x, c) => FetchOrWriteBlobFromDisk(x, c, false), 20, invalidateCallback);


            var cacheIndex = FetchOrWriteBlobFromDisk(BlobCacheIndexKey, null, true)
                             .Catch(Observable.Return(new byte[0]))
                             .Select(x => Encoding.UTF8.GetString(x, 0, x.Length).Split('\n')
                                     .SelectMany(ParseCacheIndexEntry)
                                     .ToDictionary(y => y.Key, y => y.Value))
                             .Select(x => new ConcurrentDictionary <string, CacheIndexEntry>(x));

            cacheIndex.Subscribe(x => CacheIndex = x);

            flushThreadSubscription = Disposable.Empty;

            if (!ModeDetector.InUnitTestRunner())
            {
                flushThreadSubscription = actionTaken
                                          .Where(_ => CacheIndex != null)
                                          .Throttle(TimeSpan.FromSeconds(30), Scheduler)
                                          .SelectMany(_ => FlushCacheIndex(true))
                                          .Subscribe(_ => this.Log().Debug("Flushing cache"));
            }

            this.Log().Info("{0} entries in blob cache index", CacheIndex.Count);
        }
コード例 #4
0
        public PersistentBlobCache(
            string cacheDirectory = null, 
            IFilesystemProvider filesystemProvider = null, 
            IScheduler scheduler = null,
            Action<AsyncSubject<byte[]>> invalidateCallback = null)
        {
            BlobCache.EnsureInitialized();

            this.filesystem = filesystemProvider ?? Locator.Current.GetService<IFilesystemProvider>();

            if (this.filesystem == null)
            {
                throw new Exception("No IFilesystemProvider available. This should never happen, your DependencyResolver is broken");
            }

            this.CacheDirectory = cacheDirectory ?? filesystem.GetDefaultRoamingCacheDirectory();
            this.Scheduler = scheduler ?? BlobCache.TaskpoolScheduler;

            // Here, we're not actually caching the requests directly (i.e. as
            // byte[]s), but as the "replayed result of the request", in the
            // AsyncSubject - this makes the code infinitely simpler because
            // we don't have to keep a separate list of "in-flight reads" vs
            // "already completed and cached reads"
            memoizedRequests = new MemoizingMRUCache<string, AsyncSubject<byte[]>>(
                (x, c) => FetchOrWriteBlobFromDisk(x, c, false), 20, invalidateCallback);

            
            var cacheIndex = FetchOrWriteBlobFromDisk(BlobCacheIndexKey, null, true)
                .Catch(Observable.Return(new byte[0]))
                .Select(x => Encoding.UTF8.GetString(x, 0, x.Length).Split('\n')
                     .SelectMany(ParseCacheIndexEntry)
                     .ToDictionary(y => y.Key, y => y.Value))
                .Select(x => new ConcurrentDictionary<string, CacheIndexEntry>(x));

            cacheIndex.Subscribe(x => CacheIndex = x);

            flushThreadSubscription = Disposable.Empty;

            if (!ModeDetector.InUnitTestRunner())
            {
                flushThreadSubscription = actionTaken
                    .Where(_ => CacheIndex != null)
                    .Throttle(TimeSpan.FromSeconds(30), Scheduler)
                    .SelectMany(_ => FlushCacheIndex(true))
                    .Subscribe(_ => this.Log().Debug("Flushing cache"));
            }

            this.Log().Info("{0} entries in blob cache index", CacheIndex.Count);
        }
コード例 #5
0
 public PortableUpdateVariantHandler(
     IUpdateDownloader updateDownloader,
     IProcessStartProvider processStartProvider,
     IFilesystemProvider filesystem,
     IApplicationPathsProvider pathsProvider,
     IAssemblyProvider assemblyProvider,
     IApplicationState applicationState)
 {
     this.updateDownloader     = updateDownloader;
     this.processStartProvider = processStartProvider;
     this.filesystem           = filesystem;
     this.pathsProvider        = pathsProvider;
     this.assemblyProvider     = assemblyProvider;
     this.applicationState     = applicationState;
 }
コード例 #6
0
        public ConfigurationProvider(IApplicationPathsProvider paths, IFilesystemProvider filesystemProvider)
        {
            this.paths           = paths;
            this.filesystem      = filesystemProvider;
            this.eventDispatcher = new SynchronizedEventDispatcher(this);

            this.migrations = new Func <XDocument, XDocument>[]
            {
                this.MigrateV1ToV2,
                this.MigrateV2ToV3,
                this.MigrateV3ToV4,
                this.MigrateV4ToV5,
                this.MigrateV5ToV6
            };
        }
コード例 #7
0
 public PortableUpdateVariantHandler(
     IUpdateDownloader updateDownloader,
     IProcessStartProvider processStartProvider,
     IFilesystemProvider filesystem,
     IApplicationPathsProvider pathsProvider,
     IAssemblyProvider assemblyProvider,
     IApplicationState applicationState)
 {
     this.updateDownloader = updateDownloader;
     this.processStartProvider = processStartProvider;
     this.filesystem = filesystem;
     this.pathsProvider = pathsProvider;
     this.assemblyProvider = assemblyProvider;
     this.applicationState = applicationState;
 }
コード例 #8
0
        public EncryptedBlobCache(
            string cacheDirectory = null,
            IEncryptionProvider encryptionProvider = null,
            IFilesystemProvider filesystemProvider = null, 
            IScheduler scheduler = null,
            Action<AsyncSubject<byte[]>> invalidatedCallback = null) 
            : base(cacheDirectory, filesystemProvider, scheduler, invalidatedCallback)
        {
            this.encryption = encryptionProvider ?? Locator.Current.GetService<IEncryptionProvider>();

            if (this.encryption == null)
            {
                throw new Exception("No IEncryptionProvider available. This should never happen, your DependencyResolver is broken");
            }
        }
コード例 #9
0
ファイル: Scheduler.cs プロジェクト: schultyy/Testflight
 public Scheduler(IMongoSession session,
                 IBuilderCapability builderCapability,
                 IFilesystemProvider filesystemProvider,
                 BuildPublisher publisher,
                 Builder builder,
                 ILogger logger)
 {
     Session = session;
     BuilderCapability = builderCapability;
     FilesystemProvider = filesystemProvider;
     Publisher = publisher;
     Builder = builder;
     Logger = logger;
     taskHandles = new Dictionary<ObjectId, Task>();
 }
コード例 #10
0
        public EncryptedBlobCache(
            string cacheDirectory = null,
            IEncryptionProvider encryptionProvider = null,
            IFilesystemProvider filesystemProvider = null,
            IScheduler scheduler = null,
            Action <AsyncSubject <byte[]> > invalidatedCallback = null)
            : base(cacheDirectory, filesystemProvider, scheduler, invalidatedCallback)
        {
            this.encryption = encryptionProvider ?? Locator.Current.GetService <IEncryptionProvider>();

            if (this.encryption == null)
            {
                throw new Exception("No IEncryptionProvider available. This should never happen, your DependencyResolver is broken");
            }
        }
コード例 #11
0
        public FileWatcher(IFilesystemProvider filesystem, FileWatcherMode mode, string directory, TimeSpan existenceCheckingInterval, string filter = "*.*")
        {
            this.filesystem = filesystem;
            this.mode       = mode;
            this.filter     = filter;
            this.Directory  = directory.TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar;

            this.watcher = this.TryToCreateWatcher(this.Directory);

            this.existenceCheckingTimer = new Timer()
            {
                AutoReset = true,
                Interval  = existenceCheckingInterval.TotalMilliseconds,
                Enabled   = true,
            };
            this.existenceCheckingTimer.Elapsed += (o, e) => this.CheckExistence();
        }
コード例 #12
0
ファイル: FileWatcher.cs プロジェクト: johnhk/SyncTrayzor
        public FileWatcher(IFilesystemProvider filesystem, FileWatcherMode mode, string directory, TimeSpan existenceCheckingInterval, string filter = "*.*")
        {
            this.filesystem = filesystem;
            this.mode = mode;
            this.filter = filter;
            this.Directory = directory.TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar;

            this.watcher = this.TryToCreateWatcher(this.Directory);

            this.existenceCheckingTimer = new Timer()
            {
                AutoReset = true,
                Interval = existenceCheckingInterval.TotalMilliseconds,
                Enabled = true,
            };
            this.existenceCheckingTimer.Elapsed += (o, e) => this.CheckExistence();
        }
コード例 #13
0
        protected PersistentBlobCache(string cacheDirectory = null, IFilesystemProvider filesystemProvider = null, IScheduler scheduler = null)
        {
            this.CacheDirectory = cacheDirectory ?? GetDefaultRoamingCacheDirectory();
            this.Scheduler      = scheduler ?? RxApp.TaskpoolScheduler;
            this.filesystem     = filesystemProvider ?? new SimpleFilesystemProvider();

            // Here, we're not actually caching the requests directly (i.e. as
            // byte[]s), but as the "replayed result of the request", in the
            // AsyncSubject - this makes the code infinitely simpler because
            // we don't have to keep a separate list of "in-flight reads" vs
            // "already completed and cached reads"
            MemoizedRequests = new MemoizingMRUCache <string, AsyncSubject <byte[]> >(
                (x, c) => FetchOrWriteBlobFromDisk(x, c, false), 20);

            filesystem.CreateRecursive(CacheDirectory);

            FetchOrWriteBlobFromDisk(BlobCacheIndexKey, null, true)
            .Catch(Observable.Return(new byte[0]))
            .Select(x => Encoding.UTF8.GetString(x, 0, x.Length).Split('\n')
                    .SelectMany(ParseCacheIndexEntry)
                    .ToDictionary(y => y.Key, y => y.Value))
            .Select(x => new ConcurrentDictionary <string, CacheIndexEntry>(x))
            .Subscribe(x => CacheIndex = x);

            flushThreadSubscription = Disposable.Empty;

            if (!RxApp.InUnitTestRunner())
            {
                flushThreadSubscription = actionTaken
                                          .Where(_ => CacheIndex != null)
                                          .Throttle(TimeSpan.FromSeconds(30), Scheduler)
                                          .SelectMany(_ => FlushCacheIndex(true))
                                          .Subscribe(_ =>
                {
                    log.Debug("Flushing cache");
                    lastFlushTime = Scheduler.Now;
                });
            }

            log.Info("{0} entries in blob cache index", CacheIndex.Count);
        }
コード例 #14
0
        public DirectoryWatcher(IFilesystemProvider filesystem, string directory, TimeSpan backoffInterval, TimeSpan existenceCheckingInterval)
            : base(filesystem, FileWatcherMode.All, directory, existenceCheckingInterval)
        {
            if (backoffInterval.Ticks < 0)
                throw new ArgumentException("backoffInterval must be >= 0");

            this.backoffTimer = new Timer()
            {
                AutoReset = false,
                Interval = backoffInterval.TotalMilliseconds,
            };
            this.backoffTimer.Elapsed += (o, e) =>
            {
                string currentNotifyingSubPath;
                lock (this.currentNotifyingSubPathLock)
                {
                    currentNotifyingSubPath = this.currentNotifyingSubPath;
                    this.currentNotifyingSubPath = null;
                }
                this.OnDirectoryChanged(currentNotifyingSubPath);
            };
        }
コード例 #15
0
        public DirectoryWatcher(IFilesystemProvider filesystem, string directory, TimeSpan backoffInterval, TimeSpan existenceCheckingInterval)
            : base(filesystem, FileWatcherMode.All, directory, existenceCheckingInterval)
        {
            if (backoffInterval.Ticks < 0)
            {
                throw new ArgumentException("backoffInterval must be >= 0");
            }

            this.backoffTimer = new Timer()
            {
                AutoReset = false,
                Interval  = backoffInterval.TotalMilliseconds,
            };
            this.backoffTimer.Elapsed += (o, e) =>
            {
                string currentNotifyingSubPath;
                lock (this.currentNotifyingSubPathLock)
                {
                    currentNotifyingSubPath      = this.currentNotifyingSubPath;
                    this.currentNotifyingSubPath = null;
                }
                this.OnDirectoryChanged(currentNotifyingSubPath);
            };
        }
コード例 #16
0
 public ConfigFolderCleaner(IApplicationPathsProvider applicationPathsProvider, IFilesystemProvider filesystemProvider)
 {
     this.applicationPathsProvider = applicationPathsProvider;
     this.filesystemProvider = filesystemProvider;
 }
コード例 #17
0
 public InstallerCertificateVerifier(IAssemblyProvider assemblyProvider, IFilesystemProvider filesystemProvider)
 {
     this.assemblyProvider   = assemblyProvider;
     this.filesystemProvider = filesystemProvider;
 }
コード例 #18
0
 public UpdateDownloader(IApplicationPathsProvider pathsProvider, IFilesystemProvider filesystemProvider, IInstallerCertificateVerifier installerVerifier)
 {
     this.downloadsDir       = pathsProvider.UpdatesDownloadPath;
     this.filesystemProvider = filesystemProvider;
     this.installerVerifier  = installerVerifier;
 }
コード例 #19
0
 public void Init()
 {
     _filesystemProvider = Locator.Current.GetService <IFilesystemProvider>();
     GetLocalMachineCache();
     GetSecretLocalMachineCache();
 }
コード例 #20
0
 public CPersistentBlobCache(string cacheDirectory, IFilesystemProvider fs) : base(cacheDirectory, fs, RxApp.TaskpoolScheduler) { }
コード例 #21
0
 public ConflictFileManager(IFilesystemProvider filesystemProvider, ISyncthingManager syncthingManager)
 {
     this.filesystemProvider = filesystemProvider;
     this.syncthingManager   = syncthingManager;
 }
コード例 #22
0
 public CPersistentBlobCache(string cacheDirectory, IFilesystemProvider fs) : base(cacheDirectory, fs, RxApp.TaskpoolScheduler)
 {
 }
コード例 #23
0
ファイル: EncryptedBlobCache.cs プロジェクト: ErikEJ/Akavache
 public CEncryptedBlobCache(string cacheDirectory, IFilesystemProvider fsProvider)
     : base(cacheDirectory, fsProvider, RxApp.TaskpoolScheduler)
 {
 }
コード例 #24
0
 public ConflictFileManager(IFilesystemProvider filesystemProvider)
 {
     this.filesystemProvider = filesystemProvider;
 }
コード例 #25
0
 public ConflictFileManager(IFilesystemProvider filesystemProvider)
 {
     this.filesystemProvider = filesystemProvider;
 }
コード例 #26
0
 protected EncryptedBlobCache(string cacheDirectory = null, IFilesystemProvider filesystemProvider = null, IScheduler scheduler = null)
     : base(cacheDirectory, filesystemProvider, scheduler)
 {
 }
コード例 #27
0
 public ReadonlyFileSystemProvider(IFilesystemProvider inner = null)
 {
     _inner = inner ?? new SimpleFilesystemProvider();
 }
コード例 #28
0
 public DirectoryWatcherFactory(IFilesystemProvider filesystem)
 {
     this.filesystem = filesystem;
 }
コード例 #29
0
 public ConfigFolderCleaner(IApplicationPathsProvider applicationPathsProvider, IFilesystemProvider filesystemProvider)
 {
     this.applicationPathsProvider = applicationPathsProvider;
     this.filesystemProvider       = filesystemProvider;
 }
コード例 #30
0
 public DefaultMicrosoftBuildProviderEndpoint(IFilesystemProvider provider, IMicrosoftProjectResolver resolver)
 {
     _provider = provider;
     _resolver = resolver;
 }
コード例 #31
0
 public CEncryptedBlobCache(string cacheDirectory, IFilesystemProvider fsProvider) : base(cacheDirectory, fsProvider, RxApp.TaskpoolScheduler)
 {
 }
コード例 #32
0
 public DirectoryWatcherFactory(IFilesystemProvider filesystem)
 {
     this.filesystem = filesystem;
 }
コード例 #33
0
 protected EncryptedBlobCache(string cacheDirectory = null, IFilesystemProvider filesystemProvider = null, IScheduler scheduler = null)
     : base(cacheDirectory, filesystemProvider, scheduler)
 {
 }
コード例 #34
0
 public InstallerCertificateVerifier(IAssemblyProvider assemblyProvider, IFilesystemProvider filesystemProvider)
 {
     this.assemblyProvider = assemblyProvider;
     this.filesystemProvider = filesystemProvider;
 }
コード例 #35
0
ファイル: BuildPublisher.cs プロジェクト: schultyy/Testflight
 public BuildPublisher(IFilesystemProvider filesystemProvider)
 {
     this.FilesystemProvider = filesystemProvider;
 }