Ejemplo n.º 1
0
        public static async Task <TypeStoreInfo> GetOrAddTypeStoreAsync(IMd dbInfoMd, string dbId)
        {
            IMd typeStoreHead;
            var typeStoreResult = await dbInfoMd.GetValueAsync(TYPE_STORE_HEAD_KEY).ConfigureAwait(false);

            if (!typeStoreResult.HasValue)
            {
                typeStoreHead = await MdAccess.CreateAsync(0)
                                .ConfigureAwait(false);

                await dbInfoMd.AddAsync(TYPE_STORE_HEAD_KEY, new StoredValue(typeStoreHead.MdLocator))
                .ConfigureAwait(false);
            }
            else
            {
                var typeStoreHeadLocation = typeStoreResult.Value.Payload.Parse <MdLocator>();
                typeStoreHead = (await MdAccess.LocateAsync(typeStoreHeadLocation)
                                 .ConfigureAwait(false)).Value;
            }

            Task onHeadChange(MdLocator newLocation) => dbInfoMd.SetAsync(TYPE_STORE_HEAD_KEY, new StoredValue(newLocation));

            var dataTree = new DataTree(typeStoreHead, onHeadChange);

            return(new TypeStoreInfo(dataTree));
        }
Ejemplo n.º 2
0
        // Returns existing or creates new
        public async Task <Result <MdFileStream> > CreateFile(FileSystemPath path)
        {
            if (!_path.IsParentOf(path))
            {
                return(new InvalidOperation <MdFileStream>("Incorrect path"));
            }
            if (!path.IsFile)
            {
                return(new InvalidOperation <MdFileStream>("Path is not a file"));
            }

            var fileResult = await FindFileAsync(path);

            if (fileResult.HasValue)
            {
                return(Result.OK(fileResult.Value));
            }

            await AddOrLoad(FILE_INFO_KEY);

            var md = await MdAccess.CreateAsync(0);

            var info    = SetupFileInfo(path, md);
            var value   = new StoredValue(info);
            var pointer = await _dataTreeCache[FILE_INFO_KEY].AddAsync(path.Path, value);

            if (!pointer.HasValue)
            {
                return(Result.Fail <MdFileStream>(pointer.ErrorCode.Value, pointer.ErrorMsg));
            }
            await _indexer.IndexAsync(path.Path, pointer.Value);

            //ScheduleIndexing(path, pointer.Value);
            return(Result.OK(new MdFileStream(info)));
        }
        public static async Task <DataTree> CreateAsync(Func <MdLocator, Task> onHeadAddressChange)
        {
            var head = await MdAccess.CreateAsync(level : 0);

            var dataTree = new DataTree(head, onHeadAddressChange);

            return(dataTree);
        }
Ejemplo n.º 4
0
        public static async Task <Result <IIndexer> > GetOrAddAsync(string directoryPath)
        {
            var indexLocation = new MdLocator(Encoding.UTF8.GetBytes($"{directoryPath}_indexer"), DataProtocol.DEFAULT_PROTOCOL);
            var indexMd       = await MdAccess.LocateAsync(indexLocation).ConfigureAwait(false);

            if (!indexMd.HasValue)
            {
                indexMd = Result.OK(await MdAccess.CreateAsync(0));
            }
            var indexHead = new MdHead(indexMd.Value, directoryPath);
            var indexer   = await Indexer.GetOrAddAsync(indexHead);

            return(Result.OK((IIndexer)indexer));
        }
Ejemplo n.º 5
0
        public static async Task <Result <Directory> > GetOrAddAsync(string directoryPath)
        {
            var indexer = await IndexerFactory.GetOrAddAsync(directoryPath);

            if (!indexer.HasValue)
            {
                return(Result.Fail <Directory>(indexer.ErrorCode.Value, indexer.ErrorMsg));
            }

            var dirLocation = new MdLocator(Encoding.UTF8.GetBytes(directoryPath), DataProtocol.DEFAULT_PROTOCOL);
            var dirMd       = await MdAccess.LocateAsync(dirLocation).ConfigureAwait(false);

            if (!dirMd.HasValue)
            {
                dirMd = Result.OK(await MdAccess.CreateAsync(0));
            }
            var dirHead   = new MdHead(dirMd.Value, directoryPath);
            var dirResult = await Directory.GetOrAddAsync(dirHead, indexer.Value);

            return(dirResult);
        }