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>());
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
 public HFile Create(HFileState state)
 => new(_database, _hasher, _tagFactory, state);
Beispiel #6
0
 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));
        }
Beispiel #8
0
 public DeleteFileQuery(HFileState file)
 {
     _file = file;
 }
Beispiel #9
0
 static public void DeleteFile(this IDatabase database, HFileState file)
 {
     database.ExecuteQuery(new DeleteFileQuery(file));
 }
Beispiel #10
0
 public FileStream LoadFileStream(HFileState file)
 {
     return(File.OpenRead(file.Location));
 }
Beispiel #11
0
 public GetFileHashQuery(HFileState file)
 {
     _file = file;
 }
Beispiel #12
0
 public RemoveFileTagQuery(HFileState file, TagState tag)
 {
     _file = file;
     _tag  = tag;
 }
Beispiel #13
0
 public FileHash GetHash(HFileState file)
 => _database.ExecuteQuery(new GetFileHashQuery(file)) ?? HashImage(file);
Beispiel #14
0
 public static void RemoveTagFromFile(this IDatabase database, HFileState file, TagState tag)
 {
     database.ExecuteQuery(new RemoveFileTagQuery(file, tag));
 }
Beispiel #15
0
 public static bool AddTagToFile(this IDatabase database, HFileState file, TagState tag)
 {
     return(database.ExecuteQuery(new AddFileTagQuery(file, tag)));
 }
Beispiel #16
0
 // TODO: Add FileTagRepository
 public static IEnumerable <TagState> GetTagsForFile(this IDatabase database, HFileState file)
 {
     return(database.ExecuteQuery(new FetchTagsForFileQuery(file)));
 }
Beispiel #17
0
 public SaveFileQuery(HFileState file)
 {
     _file = file;
 }
Beispiel #18
0
 public byte[] LoadFile(HFileState file)
 {
     return(File.ReadAllBytes(file.Location));
 }
Beispiel #19
0
 public AddFileTagQuery(HFileState file, TagState tag)
 {
     _file = file;
     _tag  = tag;
 }
Beispiel #20
0
 public FetchTagsForFileQuery(HFileState file)
 {
     _file = file;
 }