Exemple #1
0
        private async Task <IActionResult> StoreBookmark(IFormFileCollection formFileCollection, string bookmarkPath, DateTime lastWriteDate,
                                                         FileWriteMode writeMode)
        {
            FormatPath(ref bookmarkPath);
            lastWriteDate = new DateTime(lastWriteDate.Year, lastWriteDate.Month, lastWriteDate.Day, lastWriteDate.Hour, lastWriteDate.Minute, lastWriteDate.Second, lastWriteDate.Kind); // truncate milliseconds off

            var dataDictionary = new Dictionary <BookmarkFileType, Stream>();

            foreach (var formFile in formFileCollection)
            {
                var formFileHeader = formFile.Headers["Extension"];
                dataDictionary.Add(EnumsHelper.ParseType(formFileHeader), formFile.OpenReadStream());
            }

            var fileTypes = formFileCollection.Select(formFile => formFile.Headers["Extension"].ToString()).Select(EnumsHelper.ParseType).ToArray();

            if (EnumsHelper.RecognizeFilesGroupType(fileTypes) == null)
            {
                return(BadRequest("bookmark type isn't recognized"));
            }
            var fakeFilesGroup = _storageService.MakeFake(bookmarkPath);
            var filesGroup     = new ProxyFilesGroup(fakeFilesGroup, dataDictionary, lastWriteDate);
            var result         = await _storageService.Save(filesGroup, writeMode);

            return(result ? (IActionResult)Ok() : BadRequest());
        }
Exemple #2
0
        public override async Task <bool> Move(BookmarkHierarchyElement element, string newPath)
        {
            if (element is FakeFilesGroup)
            {
                throw new Exception("can't move thing that doesn't exist!");
            }
            if (element is FilesGroup filesGroup)
            {
                if (await Find(newPath).ConfigureAwait(false) != null)
                {
                    return(false);
                }
                var fake           = MakeFake(newPath);
                var newFilesGroup  = new ProxyFilesGroup(fake, filesGroup);
                var saveSuccessful = await Save(newFilesGroup, FileWriteMode.CreateNew).ConfigureAwait(false);

                if (!saveSuccessful)
                {
                    return(false);
                }
                return(await DeleteBookmark(filesGroup).ConfigureAwait(false));
            }
            if (element is Folder folder)
            {
                if (await FindFolder(newPath).ConfigureAwait(false) != null)
                {
                    return(false); // it exists
                }
                var oldFolderFullPath = GetFullPath(folder);
                var newFolderFullPath = GetFullPath(newPath);
                var directoryInfo     = new DirectoryInfo(oldFolderFullPath);
                try
                {
                    // adding and deleting file for invoking event (needed for FolderChangeWatcher)
                    var touchFileInfo = new FileInfo($"{oldFolderFullPath}\\{Guid.NewGuid()}.touch");
                    touchFileInfo.Create().Dispose();
                    touchFileInfo.Delete();

                    directoryInfo.Attributes = FileAttributes.Normal;
                    directoryInfo.MoveTo(newFolderFullPath);
                    return(true);
                }
                catch
                {
                    return(false);
                }
            }
            throw new ArgumentException("derived type isn't recognized!");
        }