public async Task Thumbnail_HappyFlowFileStreamResult_API_Test() { // Arrange var storage = ArrangeStorage(); var createAnImage = InsertSearchData(); // Act // Create thumbnail in fake storage await new Thumbnail(storage, storage, new FakeIWebLogger() ).CreateThumb(createAnImage.FilePath, createAnImage.FileHash); // Check if exist var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.Thumbnail(createAnImage.FileHash, true) as FileStreamResult; // Thumbnail exist Assert.AreNotEqual(actionResult, null); var thumbnailAnswer = actionResult.ContentType; controller.Response.Headers.TryGetValue("x-filename", out var value); Assert.AreEqual(createAnImage.FileHash + ".jpg", value.ToString()); Assert.AreEqual("image/jpeg", thumbnailAnswer); actionResult.FileStream.Dispose(); // for windows }
public void ListSizesByHash_IgnoreRaw() { var item = _query.AddItem(new FileIndexItem("/test123.arw") { FileHash = "91234567890123456789123451" }); // Arrange var storage = new FakeIStorage(new List <string>(), new List <string> { "91234567890123456789123451" }); // Check if exist var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.ListSizesByHash("91234567890123456789123451") as JsonResult; // Thumbnail exist Assert.AreNotEqual(actionResult, null); Assert.AreEqual(210, controller.Response.StatusCode); _query.RemoveItem(item); }
public void ListSizesByHash_ExpectLarge() { var item = _query.AddItem(new FileIndexItem("/test123.jpg") { FileHash = "01234567890123456789123456" }); // Arrange var storage = new FakeIStorage(new List <string>(), new List <string> { "01234567890123456789123456" }); // Check if exist var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.ListSizesByHash("01234567890123456789123456") as JsonResult; // Thumbnail exist Assert.AreNotEqual(actionResult, null); var thumbnailAnswer = actionResult.Value as ThumbnailSizesExistStatusModel; Assert.AreEqual(202, controller.Response.StatusCode); Assert.AreEqual(true, thumbnailAnswer.Large); Assert.AreEqual(false, thumbnailAnswer.ExtraLarge); Assert.AreEqual(false, thumbnailAnswer.TinyMeta); _query.RemoveItem(item); }
void OnProjectOpenButtonClick(Project project) { var projectData = UIStateManager.current.projectStateData; if (projectData.activeProject == project) { UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.OpenDialog, DialogType.None)); //if the project already opened, just close landing screen return; } projectData.activeProject = project; projectData.activeProjectThumbnail = ThumbnailController.LoadThumbnailForProject(project); if (UIStateManager.current.projectStateData.activeProject != Project.Empty) { // first close current Project if open UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetStatus, "Closing {UIStateManager.current.projectStateData.activeProject.name}...")); UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.CloseProject, UIStateManager.current.projectStateData.activeProject)); } UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetStatus, $"Opening {projectData.activeProject.name}...")); UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.CloseAllDialogs, null)); UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.OpenProject, projectData)); }
void InstantiateProjectItems(Project[] projects) { ClearProjectListItem(); m_ScrollRect.verticalNormalizedPosition = 1; if (m_FetchingProjectsPanel.activeSelf) { m_FetchingProjectsPanel.SetActive(false); } Array.Sort(projects, (project1, project2) => project2.lastPublished.CompareTo(project1.lastPublished)); foreach (var project in projects) { var listItem = Instantiate(m_ProjectListItemPrefab, m_ScrollViewContent.transform); listItem.gameObject.SetActive(true); listItem.InitProjectItem(project, ThumbnailController.LoadThumbnailForProject(project)); listItem.projectItemClicked += OnProjectOpenButtonClick; listItem.optionButtonClicked += OnProjectOptionButtonClick; m_ProjectListItems.Add(listItem); } m_ProjectListItemPrefab.gameObject.SetActive(false); FilterProjectList(m_CurrentFilterData); }
void OnProjectOpenButtonClick(Project project) { var projectData = UIStateManager.current.projectStateData; if (projectData.activeProject == project) { Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.OpenDialog, DialogType.None)); //if the project already opened, just close landing screen return; } var navigationState = UIStateManager.current.stateData.navigationState; if (navigationState.navigationMode == NavigationMode.Walk) { UIStateManager.current.walkStateData.instruction.Cancel(); } projectData.activeProject = project; projectData.activeProjectThumbnail = ThumbnailController.LoadThumbnailForProject(project); if (UIStateManager.current.projectStateData.activeProject != Project.Empty) { // first close current Project if open Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetStatusMessage, "Closing {UIStateManager.current.projectStateData.activeProject.name}...")); Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.CloseProject, UIStateManager.current.projectStateData.activeProject)); } Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetStatusMessage, $"Opening {projectData.activeProject.name}...")); Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.CloseAllDialogs, null)); Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.OpenProject, projectData)); Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetMeasureToolOptions, MeasureToolStateData.defaultData)); }
public async Task ByZoomFactor_InputBadRequest() { var storageSelector = new FakeSelectorStorage(ArrangeStorage()); var controller = new ThumbnailController(_query, storageSelector);; var actionResult = await controller.ByZoomFactor("../") as BadRequestResult; Assert.AreEqual(400, actionResult.StatusCode); }
public void Thumbnail_InputBadRequest() { var storageSelector = new FakeSelectorStorage(ArrangeStorage()); var controller = new ThumbnailController(_query, storageSelector);; var actionResult = controller.Thumbnail("../") as BadRequestResult; Assert.AreEqual(400, actionResult.StatusCode); }
public void Thumbnail_NonExistingFile_API_Test() { var controller = new ThumbnailController(_query, new FakeSelectorStorage()); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.Thumbnail("404filehash", false, true) as NotFoundObjectResult; var thumbnailAnswer = actionResult.StatusCode; Assert.AreEqual(404, thumbnailAnswer); }
public async Task ByZoomFactor_NonExistingFile_API_Test() { var controller = new ThumbnailController(_query, new FakeSelectorStorage()); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = await controller.ByZoomFactor("404filehash", 1) as NotFoundObjectResult; var thumbnailAnswer = actionResult.StatusCode; Assert.AreEqual(404, thumbnailAnswer); }
public void ThumbnailSmallOrTinyMeta_NotFound() { var storage = new FakeIStorage(); var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.ThumbnailSmallOrTinyMeta("404filehash") as NotFoundObjectResult; var thumbnailAnswer = actionResult.StatusCode; Assert.AreEqual(404, thumbnailAnswer); }
void InstantiateButtons(Project[] projects) { Array.Sort(projects, (project1, project2) => project2.lastPublished.CompareTo(project1.lastPublished)); foreach (var project in projects) { var listItem = Instantiate(m_ProjectListItemPrefab, m_ScrollViewContent.transform); listItem.gameObject.SetActive(true); listItem.InitProjectItem(project, ThumbnailController.LoadThumbnailForProject(project)); listItem.projectItemClicked += OnProjectSelectButtonClick; listItem.optionButtonClicked += OnProjectOptionButtonClick; } }
public SoftNetImageViewer() { InitializeComponent(); //m_ImageDialog = new ImageDialog(new Size(0, 0)); m_AddImageDelegate = new DelegateAddImage(this.AddImage); m_Controller = new ThumbnailController(); m_Controller.OnStart += new ThumbnailControllerEventHandler(m_Controller_OnStart); m_Controller.OnAdd += new ThumbnailControllerEventHandler(m_Controller_OnAdd); m_Controller.OnEnd += new ThumbnailControllerEventHandler(m_Controller_OnEnd); }
public VisorPrincipal() { InitializeComponent(); this.buttonCancel.Enabled = false; m_ImageDialog = new ImageDialog(); m_AddImageDelegate = new DelegateAddImage(this.AddImage); m_Controller = new ThumbnailController(); m_Controller.OnStart += new ThumbnailControllerEventHandler(m_Controller_OnStart); m_Controller.OnAdd += new ThumbnailControllerEventHandler(m_Controller_OnAdd); m_Controller.OnEnd += new ThumbnailControllerEventHandler(m_Controller_OnEnd); }
public void Thumbnail_IsMissing_ButOriginalExist_butNoIsSingleItemFlag_API_Test() { // Photo exist in database but " + "isSingleItem flag is Missing var createAnImage = InsertSearchData(); var storage = ArrangeStorage(); var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.Thumbnail(createAnImage.FileHash, false, true) as JsonResult; var thumbnailAnswer = actionResult.StatusCode; // always null for some reason ?! Assert.AreEqual("Thumbnail is not ready yet", actionResult.Value); }
public void Thumbnail_GetExtraLargeSecondChoiceResult() { var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { ThumbnailNameHelper.Combine("test", ThumbnailSize.ExtraLarge) }); var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); controller.Thumbnail("test", true, false, false); controller.Response.Headers.TryGetValue("x-image-size", out var value); Assert.AreEqual(ThumbnailSize.ExtraLarge.ToString(), value.ToString()); }
public void ThumbnailSmallOrTinyMeta_GetLargeResultWhenAllAreMissing() { var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { ThumbnailNameHelper.Combine("test", ThumbnailSize.Large) }); var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); controller.ThumbnailSmallOrTinyMeta("test"); controller.Response.Headers.TryGetValue("x-image-size", out var value); Assert.AreEqual(ThumbnailSize.Large.ToString(), value.ToString()); }
public void ListSizesByHash_NotFound() { // Arrange var storage = new FakeIStorage(new List <string>(), new List <string> { "01234567890123456789123456" }); // Check if exist var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.ListSizesByHash("01234567890123456789123456") as NotFoundObjectResult; Assert.AreNotEqual(actionResult, null); Assert.AreEqual(404, actionResult.StatusCode); }
public void ByZoomFactor_IgnoreRawFile() { var storageSelector = new FakeSelectorStorage(ArrangeStorage()); var controller = new ThumbnailController(new FakeIQuery( new List <FileIndexItem> { new FileIndexItem("/test.dng") { FileHash = "hash1" } }), storageSelector); controller.ControllerContext.HttpContext = new DefaultHttpContext(); controller.ByZoomFactor("hash1"); Assert.AreEqual(210, controller.Response.StatusCode); }
public void Thumbnail_ShowOriginalImage_API_Test() { var createAnImage = InsertSearchData(); var storage = ArrangeStorage(); var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.Thumbnail(createAnImage.FileHash, true) as FileStreamResult; var thumbnailAnswer = actionResult.ContentType; controller.Response.Headers.TryGetValue("x-filename", out var value); Assert.AreEqual("test.jpg", value.ToString()); Assert.AreEqual("image/jpeg", thumbnailAnswer); actionResult.FileStream.Dispose(); // for windows }
public async Task ByZoomFactor_ShowOriginalImage_NoFileHash_API_Test() { InsertSearchData(); var storage = ArrangeStorage(); var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = await controller.ByZoomFactor("____", 1, "/test.jpg") as FileStreamResult; var thumbnailAnswer = actionResult.ContentType; controller.Response.Headers.TryGetValue("x-filename", out var value); Assert.AreEqual("test.jpg", value.ToString()); Assert.AreEqual("image/jpeg", thumbnailAnswer); await actionResult.FileStream.DisposeAsync(); // for windows }
public async Task ApiController_FloatingDatabaseFileTest_API_Test() { var item = await _query.AddItemAsync(new FileIndexItem { ParentDirectory = "/fakeImage/", FileName = "fake.jpg", FileHash = "0986524678765456786543", Id = 788, }); var storage = ArrangeStorage(); var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.Thumbnail(item.FileHash, false, true) as NotFoundObjectResult; var thumbnailAnswer = actionResult.StatusCode; Assert.AreEqual(404, thumbnailAnswer); await _query.RemoveItemAsync(item); }
public async Task Thumbnail_CorruptImage_NoContentResult_Test() { // Arrange var storage = ArrangeStorage(); var plainTextStream = new PlainTextFileHelper().StringToStream("CorruptImage"); await storage.WriteStreamAsync(plainTextStream, ThumbnailNameHelper.Combine( "hash-corrupt-image", ThumbnailSize.ExtraLarge)); await _query.AddItemAsync(new FileIndexItem("/test2.jpg"){ FileHash = "hash-corrupt-image" }); // Act var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.Thumbnail("hash-corrupt-image", false, true) as NoContentResult; Assert.AreEqual(204, actionResult.StatusCode); // remove files + database item await _query.RemoveItemAsync(await _query.GetObjectByFilePathAsync("/test2.jpg")); }
private static async Task GenerateThumbnails() { if (!Program.Args.CreateResizedThumbnails) { Console.WriteLine("Could not [GenerateThumbnails] in cron - Resized thumbnails are disabled"); return; } if (Program.Args.CacheDir == null) { Console.WriteLine("Could not [GenerateThumbnails] in cron - No cache directory specified"); return; } LastCronGenerateThumbnails = DateTime.Now; var dirs = (await Task.WhenAll(Program.Args.DataDirs.Select(async(_, i) => await Program.GetData(i)))).ToList(); var videos = dirs.SelectMany(p => p.Videos.Values).ToList(); foreach (var vid in videos) { if (vid.PathVideo == null) { continue; } if (vid.PathThumbnail == null) { continue; } var pathCache = ThumbnailController.GetThumbnailCachePath(vid.PathVideo); if (File.Exists(pathCache)) { continue; } JobRegistry.ThumbGenJobs.StartOrQueue((man) => new ThumbnailGenJob(man, vid, pathCache), false); } }
public void ListSizesByHash_AllExist_exceptTinyMeta() { var hash = "01234567890123456789123456"; var item = _query.AddItem(new FileIndexItem("/test123.jpg") { FileHash = hash }); // Arrange var storage = new FakeIStorage(new List <string>(), new List <string> { ThumbnailNameHelper.Combine(hash, ThumbnailSize.Large), ThumbnailNameHelper.Combine(hash, ThumbnailSize.Small), ThumbnailNameHelper.Combine(hash, ThumbnailSize.ExtraLarge), }); // Check if exist var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.ListSizesByHash(hash) as JsonResult; // Thumbnail exist Assert.AreNotEqual(actionResult, null); var thumbnailAnswer = actionResult.Value as ThumbnailSizesExistStatusModel; Assert.AreEqual(200, controller.Response.StatusCode); Assert.AreEqual(true, thumbnailAnswer.Large); Assert.AreEqual(true, thumbnailAnswer.ExtraLarge); Assert.AreEqual(true, thumbnailAnswer.Small); // > TinyMeta is optional and not needed Assert.AreEqual(false, thumbnailAnswer.TinyMeta); _query.RemoveItem(item); }
public async Task Thumbnail_HappyFlowDisplayJson_API_Test() { // Arrange var storage = ArrangeStorage(); var createAnImage = InsertSearchData(); // Act // Create thumbnail in fake storage await new Thumbnail(storage, storage, new FakeIWebLogger()).CreateThumb(createAnImage.FilePath, createAnImage.FileHash); // Check if exist var controller = new ThumbnailController(_query, new FakeSelectorStorage(storage)); controller.ControllerContext.HttpContext = new DefaultHttpContext(); var actionResult = controller.Thumbnail(createAnImage.FileHash, true, true) as JsonResult; // Thumbnail exist Assert.AreNotEqual(actionResult, null); var thumbnailAnswer = actionResult.Value as string; Assert.AreEqual("OK", thumbnailAnswer); }
private (JObject, string, string) ReadVideoDataRaw(string pathVideo) { var uid = "SHA256" + pathVideo.Sha256().Substring(0, 18); var dir = Path.GetDirectoryName(pathVideo); if (dir == null) { return(null, null, null); } var filenameVideo = Path.GetFileName(pathVideo); var filenameBase = Path.GetFileNameWithoutExtension(filenameVideo); var pathDesc = Path.Combine(dir, filenameBase + ".description"); if (!_datafiles.Contains(pathDesc)) { pathDesc = null; } var pathThumb = Program.ExtThumbnail.Select(ext => Path.Combine(dir, filenameBase + "." + ext)).FirstOrDefault(p => _datafiles.Contains(p)); var pathSubs = _filesSubs .Where(p => dir == Path.GetDirectoryName(p)) .Where(p => Path.GetFileName(p).EndsWith(".vtt")) .Where(p => Path.GetFileName(p).StartsWith(filenameBase + ".")) .ToList(); var vtitle = _spec.UseFilenameAsTitle ? Path.GetFileNameWithoutExtension(pathVideo) : Path.GetFileName(pathVideo); var vidData = new JObject ( new JProperty("meta", new JObject ( new JProperty("uid", uid), new JProperty("datadirindex", _index), new JProperty("directory", dir), new JProperty("filename_base", filenameBase), new JProperty("path_json", (object)null), new JProperty("path_toml", (object)null), new JProperty("path_description", pathDesc), new JProperty("path_video", pathVideo), new JProperty("path_video_abs", Path.GetFullPath(pathVideo)), new JProperty("path_thumbnail", pathThumb), new JProperty("paths_subtitle", new JObject(pathSubs.Select(p => new JProperty(Path.GetFileNameWithoutExtension(p).Substring(filenameBase.Length + 1), p)))), new JProperty("cache_file", VideoController.GetStreamCachePath(pathVideo)), new JProperty("cached", _cacheFiles.Contains(Path.GetFileName(VideoController.GetStreamCachePath(pathVideo)))), new JProperty("cached_video_fsize", _cacheFiles.Contains(Path.GetFileName(VideoController.GetStreamCachePath(pathVideo))) ? new FileInfo(VideoController.GetStreamCachePath(pathVideo)).Length : 0), new JProperty("previewscache_file", PreviewController.GetPreviewCachePath(pathVideo)), new JProperty("cached_previews", _cacheFiles.Contains(Path.GetFileName(PreviewController.GetPreviewCachePath(pathVideo)))), new JProperty("cached_preview_fsize", _cacheFiles.Contains(Path.GetFileName(PreviewController.GetPreviewCachePath(pathVideo))) ? new FileInfo(PreviewController.GetPreviewCachePath(pathVideo)).Length : 0), new JProperty("thumbnailcache_file", ThumbnailController.GetThumbnailCachePath(pathVideo)), new JProperty("cached_thumbnail", _cacheFiles.Contains(Path.GetFileName(ThumbnailController.GetThumbnailCachePath(pathVideo)))), new JProperty("cached_thumbnail_fsize", _cacheFiles.Contains(Path.GetFileName(ThumbnailController.GetThumbnailCachePath(pathVideo))) ? new FileInfo(ThumbnailController.GetThumbnailCachePath(pathVideo)).Length : 0), new JProperty("filesize", new FileInfo(pathVideo).Length) )), new JProperty("data", new JObject ( new JProperty("title", vtitle), new JProperty("description", (pathDesc != null) ? File.ReadAllText(pathDesc) : null), new JProperty("info", new JObject()) )) ); return(vidData, dir, filenameBase); }