private async Task <IEnumerable <string> > RetrieveTagsFromApi(HFileState file) { var hash = _imageHasher.GetHash(file).DataHash; var response = await _fetchHandler.FetchAsync <CureNinjaResponse>($"{_url}{hash}"); return(response.Success ? ResolveResults(response.Results) : Enumerable.Empty <string>()); }
public async Task <IEnumerable <Tag> > FetchTagValues(HFileState file) { var tagResult = await Task.WhenAll(_tagSources.Select(source => source.RetrieveTags(file))); return(tagResult .Flatten() .DistinctBy(tag => tag.Id)); }
public FileHash HashImage(HFileState file) { using var stream = _physicalImageProvider.LoadFileStream(file); var hash = _hasher.Hash(stream); _database.ExecuteQuery( new SetFileHashQuery(file, new FileHash(hash, null)) ); return(new FileHash(hash, null)); }
public HFile(IDatabase database, IFileHasher hasher, ITagFactory tagFactory, HFileState state) { _state = state; _database = database; _hasher = hasher; _tagFactory = tagFactory; _hash = new Lazy <FileHash>(() => _hasher.GetHash(_state)); _stream = new Lazy <Stream>(() => File.OpenRead(Location)); }
public HFile Create(HFileState state) => new(_database, _hasher, _tagFactory, state);
public SetFileHashQuery(HFileState file, FileHash hash) { _file = file; _hash = hash; }
public async Task <IEnumerable <Tag> > RetrieveTags(HFileState file) { var tags = await RetrieveTagsFromApi(file); return(tags.Select(_tagMaterialiser.GetOrCreateTag)); }
public DeleteFileQuery(HFileState file) { _file = file; }
static public void DeleteFile(this IDatabase database, HFileState file) { database.ExecuteQuery(new DeleteFileQuery(file)); }
public FileStream LoadFileStream(HFileState file) { return(File.OpenRead(file.Location)); }
public GetFileHashQuery(HFileState file) { _file = file; }
public RemoveFileTagQuery(HFileState file, TagState tag) { _file = file; _tag = tag; }
public FileHash GetHash(HFileState file) => _database.ExecuteQuery(new GetFileHashQuery(file)) ?? HashImage(file);
public static void RemoveTagFromFile(this IDatabase database, HFileState file, TagState tag) { database.ExecuteQuery(new RemoveFileTagQuery(file, tag)); }
public static bool AddTagToFile(this IDatabase database, HFileState file, TagState tag) { return(database.ExecuteQuery(new AddFileTagQuery(file, tag))); }
// TODO: Add FileTagRepository public static IEnumerable <TagState> GetTagsForFile(this IDatabase database, HFileState file) { return(database.ExecuteQuery(new FetchTagsForFileQuery(file))); }
public SaveFileQuery(HFileState file) { _file = file; }
public byte[] LoadFile(HFileState file) { return(File.ReadAllBytes(file.Location)); }
public AddFileTagQuery(HFileState file, TagState tag) { _file = file; _tag = tag; }
public FetchTagsForFileQuery(HFileState file) { _file = file; }