Exemplo n.º 1
0
        public async Task ExifToolCmdHelper_TestForFakeExifToolInjection()
        {
            var folderPaths = new List <string> {
                "/"
            };
            var inputSubPaths = new List <string> {
                "/test.dng"
            };

            var storage =
                new FakeIStorage(folderPaths, inputSubPaths,
                                 new List <byte[]> {
                FakeCreateAn.CreateAnImage.Bytes
            });

            var readMeta     = new ReadMeta(storage);
            var fakeExifTool = new FakeExifTool(storage, _appSettings);

            await new ExifCopy(storage, storage, fakeExifTool, readMeta).XmpSync("/test.dng");

            Assert.AreEqual(true, storage.ExistFile("/test.xmp"));
            var xmpContentReadStream = storage.ReadStream("/test.xmp");
            var xmpContent           = await new PlainTextFileHelper().StreamToStringAsync(xmpContentReadStream);

            // Those values are injected by fakeExifTool
            Assert.AreEqual(true, xmpContent.Contains("<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 11.30'>"));
            Assert.AreEqual(true, xmpContent.Contains("<rdf:li>test</rdf:li>"));
        }
Exemplo n.º 2
0
 public MetaInfo(IQuery query, AppSettings appSettings, ISelectorStorage selectorStorage, IMemoryCache memoryCache)
 {
     _query            = query;
     _iStorage         = selectorStorage.Get(SelectorStorage.StorageServices.SubPath);
     _readMeta         = new ReadMeta(_iStorage, appSettings, memoryCache);
     _statusCodeHelper = new StatusCodesHelper(appSettings);
 }
Exemplo n.º 3
0
        public void ReadMetaTest_HalfCompleteFile()
        {
            const string xmpString = "<x:xmpmeta xmlns:x=\'adobe:ns:meta/\' x:xmptk=\'Image::ExifTool 11.11\'>" +
                                     "<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>" +
                                     " <rdf:Description rdf:about=\'\'  xmlns:dc=\'http://purl.org/dc/elements/1.1/\'> " +
                                     " <dc:subject>   <rdf:Bag>    <rdf:li>example</rdf:li>    <rdf:li>keyword</rdf:li>  " +
                                     "  <rdf:li>test</rdf:li>   </rdf:Bag>  </dc:subject> </rdf:Description> " +
                                     "<rdf:Description rdf:about=\'\'  xmlns:pdf=\'http://ns.adobe.com/pdf/1.3/\'>  " +
                                     "<pdf:Keywords>example, test</pdf:Keywords> </rdf:Description> <rdf:Description rdf:about=\'\' " +
                                     " xmlns:photomechanic=\'http://ns.camerabits.com/photomechanic/1.0/\'>  " +
                                     "<photomechanic:ColorClass>8</photomechanic:ColorClass>  " +
                                     "<photomechanic:PMVersion>PM5</photomechanic:PMVersion> " +
                                     " <photomechanic:Prefs>0:8:0:0</photomechanic:Prefs>  " +
                                     "<photomechanic:Tagged>False</photomechanic:Tagged>" +
                                     " </rdf:Description> <rdf:Description rdf:about=\'\' " +
                                     " xmlns:photoshop=\'http://ns.adobe.com/photoshop/1.0/\'> " +
                                     " <photoshop:DateCreated>2019-03-02T11:29:18+01:00</photoshop:DateCreated> " +
                                     "</rdf:Description> <rdf:Description rdf:about=\'\'  xmlns:xmp=\'http://ns.adobe.com/xap/1.0/\'> " +
                                     " <xmp:CreateDate>2019-03-02T11:29:18+01:00</xmp:CreateDate>  <xmp:Rating>0</xmp:Rating> " +
                                     "</rdf:Description></rdf:RDF></x:xmpmeta>";

            byte[] xmpByteArray = Encoding.UTF8.GetBytes(xmpString);


            var fakeIStorage = new FakeIStorage(new List <string> {
                "/"
            },
                                                new List <string> {
                "/test.arw", "/test.xmp"
            }, new List <byte[]> {
                CreateAnImage.Bytes, xmpByteArray
            });

            var data = new ReadMeta(fakeIStorage).ReadExifAndXmpFromFile("/test.arw");

            // Is in source file
            Assert.AreEqual(200, data.IsoSpeed);
            Assert.AreEqual("Diepenveen", data.LocationCity);
            Assert.AreEqual("caption", data.Description);

            // Words overwritten in xmp file
            Assert.AreEqual("example, keyword, test", data.Tags);

            DateTime.TryParseExact("2019-03-02T11:29:18+01:00",
                                   "yyyy-MM-dd\\THH:mm:sszzz",
                                   CultureInfo.InvariantCulture,
                                   DateTimeStyles.None,
                                   out var expectDateTime);

            Assert.AreEqual(expectDateTime, data.DateTime);
            Assert.AreEqual(ColorClassParser.Color.Trash, data.ColorClass);
        }
Exemplo n.º 4
0
        public void ReadMetaTest_CheckIfCacheIsUpdated_SingleItem()
        {
            var provider = new ServiceCollection()
                           .AddMemoryCache()
                           .BuildServiceProvider();
            var memoryCache = provider.GetService <IMemoryCache>();
            var readMeta    = new ReadMeta(new FakeIStorage(), new AppSettings(), memoryCache);

            readMeta.UpdateReadMetaCache("/test.jpg",
                                         new FileIndexItem("/test.jpg")
            {
                Tags = "t2"
            }
                                         );

            Assert.AreEqual("t2", readMeta.ReadExifAndXmpFromFile("/test.jpg").Tags);
        }
        public void ReadMeta_ReadMetaBothTest_ReadBothWithFilePath()
        {
            var appsettings = new AppSettings {
                StorageFolder = new CreateAnImage().BasePath
            };
            var iStorage = new StorageSubPathFilesystem(appsettings, new FakeIWebLogger());

            var listofFiles = new List <string> {
                new CreateAnImage().DbPath
            };
            var fakeCache =
                new FakeMemoryCache(new Dictionary <string, object>());
            var listOfMetas = new ReadMeta(iStorage, appsettings, fakeCache)
                              .ReadExifAndXmpFromFileAddFilePathHash(listofFiles);

            Assert.AreEqual(new CreateAnImage().DbPath.Remove(0, 1),
                            listOfMetas.FirstOrDefault().FileName);
        }
Exemplo n.º 6
0
        public RenameServiceTest()
        {
            var provider = new ServiceCollection()
                           .AddMemoryCache()
                           .BuildServiceProvider();
            var memoryCache = provider.GetService <IMemoryCache>();

            var builder = new DbContextOptionsBuilder <ApplicationDbContext>();

            builder.UseInMemoryDatabase(nameof(RenameServiceTest));
            var options = builder.Options;
            var context = new ApplicationDbContext(options);

            _newImage = new CreateAnImage();

            _appSettings = new AppSettings
            {
                StorageFolder       = PathHelper.AddBackslash(_newImage.BasePath),
                ThumbnailTempFolder = _newImage.BasePath
            };
            _query = new Query(context, _appSettings, null,
                               new FakeIWebLogger(), memoryCache);

            if (_query.GetAllFiles("/").All(p => p.FileName != _newImage.FileName))
            {
                _query.AddItem(new FileIndexItem
                {
                    FileName        = _newImage.FileName,
                    ParentDirectory = "/",
                    AddToDatabase   = DateTime.UtcNow,
                });
            }

            var iStorage = new StorageSubPathFilesystem(_appSettings, new FakeIWebLogger());

            var readMeta = new ReadMeta(iStorage, _appSettings, memoryCache);

            _iStorageSubPath = new StorageSubPathFilesystem(_appSettings, new FakeIWebLogger());

            var services        = new ServiceCollection();
            var selectorStorage = new FakeSelectorStorage(iStorage);

            //_sync = new Synchronize(_appSettings, _query, selectorStorage, new FakeIWebLogger());
        }
Exemplo n.º 7
0
        public async Task ExifToolCmdHelper_XmpSync()
        {
            var folderPaths = new List <string> {
                "/"
            };
            var inputSubPaths = new List <string> {
                "/test.dng"
            };
            var storage =
                new FakeIStorage(folderPaths, inputSubPaths,
                                 new List <byte[]> {
                FakeCreateAn.CreateAnImage.Bytes
            });

            var fakeReadMeta = new ReadMeta(storage);
            var fakeExifTool = new FakeExifTool(storage, _appSettings);
            var helperResult = await new ExifCopy(storage, storage, fakeExifTool, fakeReadMeta).XmpSync("/test.dng");

            Assert.AreEqual("/test.xmp", helperResult);
        }
Exemplo n.º 8
0
        public async Task ExifToolCmdHelper_CopyExifPublish()
        {
            var folderPaths = new List <string> {
                "/"
            };
            var inputSubPaths = new List <string> {
                "/test.jpg"
            };
            var storage =
                new FakeIStorage(folderPaths, inputSubPaths,
                                 new List <byte[]> {
                FakeCreateAn.CreateAnImage.Bytes
            });

            var fakeReadMeta = new ReadMeta(storage);
            var fakeExifTool = new FakeExifTool(storage, _appSettings);
            var helperResult = await new ExifCopy(storage, storage, fakeExifTool,
                                                  fakeReadMeta).CopyExifPublish("/test.jpg", "/test2");

            Assert.AreEqual(true, helperResult.Contains("HistorySoftwareAgent"));
        }
Exemplo n.º 9
0
        public GeoIndexGpxTest()
        {
            var createAnGpx = new CreateAnGpx();

            _appSettings = new AppSettings
            {
                StorageFolder  = createAnGpx.BasePath,
                CameraTimeZone = "Europe/Minsk"
            };
            var fakeIStorage = new FakeIStorage();

            _readMeta = new ReadMeta(fakeIStorage, _appSettings);

            _metaFilesDirectory = new List <FileIndexItem>
            {
                new FileIndexItem
                {
                    FileName    = createAnGpx.FileName,
                    ImageFormat = ExtensionRolesHelper.ImageFormat.gpx
                }
            };
        }
Exemplo n.º 10
0
        public void ExifToolCmdHelper_XmpCreate()
        {
            var folderPaths = new List <string> {
                "/"
            };
            var inputSubPaths = new List <string> {
                "/test.dng"
            };
            var storage =
                new FakeIStorage(folderPaths, inputSubPaths,
                                 new List <byte[]> {
                FakeCreateAn.CreateAnImage.Bytes
            });

            var fakeReadMeta = new ReadMeta(storage);
            var fakeExifTool = new FakeExifTool(storage, _appSettings);

            new ExifCopy(storage, storage, fakeExifTool, fakeReadMeta).XmpCreate("/test.xmp");
            var result = new PlainTextFileHelper().StreamToString(storage.ReadStream("/test.xmp"));

            Assert.AreEqual("<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Starsky'>\n" +
                            "<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>\n</rdf:RDF>\n</x:xmpmeta>", result);
        }
Exemplo n.º 11
0
        public MetaUpdateServiceTest()
        {
            var provider = new ServiceCollection()
                           .AddMemoryCache()
                           .BuildServiceProvider();

            _memoryCache = provider.GetService <IMemoryCache>();

            var builder = new DbContextOptionsBuilder <ApplicationDbContext>();

            builder.UseInMemoryDatabase(nameof(MetaUpdateService));
            var options   = builder.Options;
            var dbContext = new ApplicationDbContext(options);

            _query             = new Query(dbContext, new AppSettings(), null, null, _memoryCache);
            _queryWithoutCache = new Query(dbContext, new AppSettings {
                AddMemoryCache = false
            }, null, new FakeIWebLogger(), null);

            _appSettings = new AppSettings();

            _iStorageFake = new FakeIStorage(new List <string> {
                "/"
            }, new List <string> {
                "/test.jpg", _exampleHash,
                "/test_default.jpg"
            },
                                             new List <byte[]> {
                FakeCreateAn.CreateAnImageNoExif.Bytes
            });

            _exifTool = new FakeExifTool(_iStorageFake, _appSettings);

            _exampleHash = new FileHash(_iStorageFake).GetHashCode("/test.jpg").Key;
            _readMeta    = new ReadMeta(_iStorageFake, _appSettings, _memoryCache);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Command Line Helper to server WebHtml Content
        /// </summary>
        /// <param name="args">arguments to adjust settings, see starskywebhtml/readme.md for more details</param>
        /// <returns>void</returns>
        public async Task Publisher(string[] args)
        {
            _appSettings.Verbose = ArgsHelper.NeedVerbose(args);

            if (_argsHelper.NeedHelp(args))
            {
                _appSettings.ApplicationType = AppSettings.StarskyAppType.WebHtml;
                _argsHelper.NeedHelpShowDialog();
                return;
            }

            var inputFullPath = _argsHelper.GetPathFormArgs(args, false);

            if (string.IsNullOrWhiteSpace(inputFullPath))
            {
                _console.WriteLine("Please use the -p to add a path first");
                return;
            }

            if (_hostFileSystemStorage.IsFolderOrFile(inputFullPath) !=
                FolderOrFileModel.FolderOrFileTypeList.Folder)
            {
                _console.WriteLine("Please add a valid folder: " + inputFullPath + ". " +
                                   "This folder is not found");
                return;
            }

            var settingsFullFilePath = Path.Combine(inputFullPath, "_settings.json");

            if (_hostFileSystemStorage.ExistFile(settingsFullFilePath))
            {
                _console.WriteLine($"You have already run this program for this folder remove the " +
                                   $"_settings.json first and try it again");
                return;
            }

            var itemName = _publishPreflight.GetNameConsole(inputFullPath, args);

            if (_appSettings.IsVerbose())
            {
                _console.WriteLine("Name: " + itemName);
                _console.WriteLine("inputPath " + inputFullPath);
            }

            // used in this session to find the photos back
            // outside the webRoot of iStorage
            _appSettings.StorageFolder = inputFullPath;

            // use relative to StorageFolder
            var listOfFiles = _subPathStorage.GetAllFilesInDirectory("/")
                              .Where(ExtensionRolesHelper.IsExtensionExifToolSupported).ToList();

            var fileIndexList = new ReadMeta(_subPathStorage)
                                .ReadExifAndXmpFromFileAddFilePathHash(listOfFiles);

            // todo introduce selector
            var profileName = new PublishPreflight(_appSettings, _console)
                              .GetPublishProfileNameByIndex(0);

            await _publishService.RenderCopy(fileIndexList, profileName,
                                             itemName, inputFullPath, true);

            _console.WriteLine("publish done");
        }
Exemplo n.º 13
0
        public UploadControllerTest()
        {
            var provider = new ServiceCollection()
                           .AddMemoryCache()
                           .BuildServiceProvider();

            _memoryCache = provider.GetService <IMemoryCache>();

            var builderDb = new DbContextOptionsBuilder <ApplicationDbContext>();

            builderDb.UseInMemoryDatabase(nameof(ExportControllerTest));
            var options      = builderDb.Options;
            var context      = new ApplicationDbContext(options);
            var scopeFactory = provider.GetService <IServiceScopeFactory>();
            var services     = new ServiceCollection();

            // Fake the readMeta output
            services.AddSingleton <IReadMeta, FakeReadMeta>();

            // Inject Config helper
            services.AddSingleton <IConfiguration>(new ConfigurationBuilder().Build());
            // random config
            var createAnImage = new CreateAnImage();

            _appSettings = new AppSettings {
                TempFolder = createAnImage.BasePath
            };
            _query = new Query(context, _appSettings, scopeFactory, new FakeIWebLogger(), _memoryCache);

            _iStorage = new FakeIStorage(new List <string> {
                "/", "/test"
            },
                                         new List <string> {
                createAnImage.DbPath
            },
                                         new List <byte[]> {
                CreateAnImage.Bytes
            });

            var readMeta = new ReadMeta(_iStorage, _appSettings);

            var selectorStorage = new FakeSelectorStorage(_iStorage);

            _import = new Import(selectorStorage, _appSettings, new FakeIImportQuery(),
                                 new FakeExifTool(_iStorage, _appSettings), _query, new ConsoleWrapper(),
                                 new FakeIMetaExifThumbnailService(), new FakeIWebLogger(), _memoryCache);

            // Start using dependency injection
            var builder = new ConfigurationBuilder();
            // Add random config to dependency injection
            // build config
            var configuration = builder.Build();

            // inject config as object to a service

            // Add Background services
            services.AddSingleton <IHostedService, UpdateBackgroundQueuedHostedService>();
            services.AddSingleton <IUpdateBackgroundTaskQueue, UpdateBackgroundTaskQueue>();

            // build the service
            var serviceProvider = services.BuildServiceProvider();

            // get the service

            serviceProvider.GetRequiredService <IServiceScopeFactory>();
        }