public Response.IResponse Execute(CommandArgs args)
        {
            var pa = args.As <tmbArgs>();

            if (pa.targets == null || pa.targets.Length == 0)
            {
                return(new Response.ErrorResponse("target(s) not specified"));
            }

            string thumbsDestPath = _config.LocalFSThumbsDirectoryPath;             //TODO: this directory CAN'T be set in CONFIG!

            if (string.IsNullOrWhiteSpace(thumbsDestPath))
            {
                return(new Response.ErrorResponse("thumbs target directory not specified in config"));
            }

            Dictionary <string, string> images = new Dictionary <string, string>();

            foreach (var fileHash in pa.targets)
            {
                // get volume for our target
                var vol = _volumeManager.GetByHash(fileHash);
                if (vol == null)
                {
                    return(new Response.ErrorResponse("invalid target"));
                }
                var fileToProcess = vol.GetFileByHash(fileHash);
                if (fileToProcess == null)
                {
                    return(new Response.ErrorResponse("invalid target"));
                }

                // check if we can generate thumbnail
                if (!_imageEditorService.CanGenerateThumbnail(fileToProcess.Name))
                {
                    continue;
                }

                string generatedFileName = _imageEditorService.CreateThumbnail(vol.DecodeHashToPath(fileHash), thumbsDestPath, fileHash,
                                                                               _config.ThumbsSize, false);
                if (generatedFileName != null)
                {
                    images.Add(fileHash, generatedFileName);
                }
            }

            return(new Response.TmbResponse(images));
        }