示例#1
0
        public async Task RenameFsTest_FakeIStorage_File_To_ExistFolder_Json_SidecarFile()
        {
            CreateFoldersAndFilesInDatabase();

            var initFolderList = new List <string> {
                "/", "/test"
            };
            var initFileList = new List <string> {
                _fileInExist.FilePath, JsonSidecarLocation.JsonLocation(_fileInExist.FilePath)
            };

            var iStorage = new FakeIStorage(initFolderList, initFileList);

            // the input is still  FileName = "file.jpg", ParentDirectory = "/exist",
            var renameFs = await new RenameService(_query, iStorage)
                           .Rename(initFileList.FirstOrDefault(), "/test/", true);

            // to file: (in database)
            var all2 = await _query.GetAllRecursiveAsync();

            var selectFile3 = all2.FirstOrDefault(p => p.FileName == "file.jpg");

            Assert.AreEqual("file.jpg", selectFile3.FileName);
            Assert.AreEqual("/test", selectFile3.ParentDirectory);

            // check if sidecar json are moved (on fake Filesystem)
            var values = iStorage.GetAllFilesInDirectoryRecursive("/test").ToList();

            Assert.AreEqual("/test/.starsky.file.jpg.json",
                            values.FirstOrDefault(p => p == "/test/.starsky.file.jpg.json"));
            Assert.AreEqual(FileIndexItem.ExifStatus.NotFoundSourceMissing, renameFs.FirstOrDefault().Status);
            Assert.AreEqual(FileIndexItem.ExifStatus.Ok, renameFs[1].Status);

            RemoveFoldersAndFilesInDatabase();
        }
示例#2
0
        public async Task RenameFsTest_RenameOneFile_JsonSidecarFile()
        {
            CreateFoldersAndFilesInDatabase();

            var iStorage = new FakeIStorage(new List <string> {
                _folderExist.FilePath
            },
                                            new List <string> {
                _fileInExist.FilePath, JsonSidecarLocation.JsonLocation(_fileInExist.FilePath)
            });

            var renameFs = await new RenameService(_query, iStorage)
                           .Rename(_fileInExist.FilePath, _folderExist.FilePath + "/test2.jpg");

            // check if sidecar json are moved (on fake Filesystem)
            var values = iStorage.GetAllFilesInDirectoryRecursive("/").ToList();

            Assert.AreEqual("/exist/.starsky.test2.jpg.json",
                            values.FirstOrDefault(p => p == "/exist/.starsky.test2.jpg.json"));
            Assert.AreEqual(FileIndexItem.ExifStatus.Ok,
                            renameFs.FirstOrDefault(p => p.FilePath == "/exist/test2.jpg").Status);
            Assert.AreEqual(FileIndexItem.ExifStatus.NotFoundSourceMissing,
                            renameFs.FirstOrDefault(p => p.FilePath == "/exist/file.jpg").Status);

            RemoveFoldersAndFilesInDatabase();
        }
示例#3
0
        /// <summary>
        /// Move sidecar files when those exist
        /// </summary>
        /// <param name="inputFileSubPath">from path</param>
        /// <param name="toFileSubPath">to path</param>
        private void MoveSidecarFile(string inputFileSubPath, string toFileSubPath)
        {
            // json sidecar move
            var jsonInputFileSubPathSidecarFile = JsonSidecarLocation
                                                  .JsonLocation(inputFileSubPath);
            var jsonSidecarFile = JsonSidecarLocation.JsonLocation(toFileSubPath);

            if (_iStorage.ExistFile(jsonInputFileSubPathSidecarFile))
            {
                _iStorage.FileMove(jsonInputFileSubPathSidecarFile, jsonSidecarFile);
            }

            // xmp sidecar file move
            if (!ExtensionRolesHelper.IsExtensionForceXmp(inputFileSubPath))
            {
                return;
            }
            var xmpInputFileSubPathSidecarFile = ExtensionRolesHelper
                                                 .ReplaceExtensionWithXmp(inputFileSubPath);
            var xmpSidecarFile = ExtensionRolesHelper
                                 .ReplaceExtensionWithXmp(toFileSubPath);

            if (_iStorage.ExistFile(xmpInputFileSubPathSidecarFile))
            {
                _iStorage.FileMove(xmpInputFileSubPathSidecarFile, xmpSidecarFile);
            }
        }
示例#4
0
        private void RemoveJsonSideCarFile(DetailView detailViewItem)
        {
            // remove the json sidecar file (if exist)
            var jsonSubPath = JsonSidecarLocation.JsonLocation(detailViewItem
                                                               .FileIndexItem.ParentDirectory, detailViewItem
                                                               .FileIndexItem.FileName);

            _iStorage.FileDelete(jsonSubPath);
        }
示例#5
0
 /// <summary>
 /// Write FileIndexItem to IStorage
 /// </summary>
 /// <param name="fileIndexItem">data object</param>
 /// <returns>void</returns>
 public async Task WriteAsync(FileIndexItem fileIndexItem)
 {
     var jsonOutput = JsonSerializer.Serialize(fileIndexItem, new JsonSerializerOptions
     {
         WriteIndented = true,
     });
     var jsonSubPath = JsonSidecarLocation.JsonLocation(fileIndexItem.ParentDirectory, fileIndexItem.FileName);
     await _iStorage.WriteStreamAsync(
         new PlainTextFileHelper().StringToStream(jsonOutput), jsonSubPath);
 }
示例#6
0
        /// <summary>
        /// Read sidecar item
        /// </summary>
        /// <param name="fileIndexItem">data object</param>
        /// <returns>data</returns>
        public FileIndexItem Read(FileIndexItem fileIndexItem)
        {
            var jsonSubPath = JsonSidecarLocation.JsonLocation(fileIndexItem.ParentDirectory, fileIndexItem.FileName);

            // when sidecar file does not exist
            if (!_iStorage.ExistFile(jsonSubPath))
            {
                return(fileIndexItem);
            }

            var returnFileIndexItem = new DeserializeJson(_iStorage).Read <FileIndexItem>(jsonSubPath);

            returnFileIndexItem.Status = FileIndexItem.ExifStatus.ExifWriteNotSupported;
            return(returnFileIndexItem);
        }