private async static Task<string> MaybeRunTimeShiftAsync(string scrapeOutput, int? timeShift)
        {
            if (timeShift == null)
            {
                return scrapeOutput;
            }

            using (var shift = new GeneralProcess(SHIFT, timeShift.ToString()))
            {
                return await shift.ExecuteAsync(scrapeOutput.ToMaybe());
            }
        }
        private async static Task<string> ProcessImageJobAsync(ImageJob imageJob, string folderOfMediaFiles)
        {
            var newImageJobs = new ImageJobs
            {
                Images = new[] { imageJob },
            };

            var serializedNewImageJobs = JsonConvert.SerializeObject(newImageJobs);

            using (var rip = new GeneralProcess(RIP, string.Format("\"{0}\"", folderOfMediaFiles)))
            {
                using (var dedup = new GeneralProcess(DEDUP))
                {
                    using (var match = new GeneralProcess(MATCH))
                    {
                        string ripOutput = await rip.ExecuteAsync(serializedNewImageJobs.ToMaybe());
                        string dedupOutput = await dedup.ExecuteAsync(ripOutput.ToMaybe());
                        string matchOutput = await match.ExecuteAsync(dedupOutput.ToMaybe());
                        MoveCompletedPhotos(matchOutput);
                        return matchOutput;
                    }
                }
            }
        }
 private async static Task<DispatcherResults> FireProcessesAsync(
     string folderOfMediaFiles,
     int? timeShift,
     string sliceProgramArgs
 )
 {
     using (var slice = new GeneralProcess(SLICE, sliceProgramArgs))
     {
         using (var scrape = new GeneralProcess(SCRAPE))
         {
             string sliceOutput = await slice.ExecuteAsync(Maybe<string>.Nothing);
             string scrapeOutput = await scrape.ExecuteAsync(sliceOutput.ToMaybe());
             string shiftOutput = await MaybeRunTimeShiftAsync(scrapeOutput, timeShift);
             return await RunImageRippers(shiftOutput, folderOfMediaFiles);
         }
     }
 }