示例#1
0
        public async Task Run(string fileName, int?chapterNo, bool localLinking)
        {
            try
            {
                var inputDoc = await _inputDocParser.ExtractMetadata(fileName);

                _ui.PrintInputInfo(inputDoc);
                var chapter = GetOrAskForChapter(inputDoc, chapterNo);

                var photos = _inputDocParser.GetPhotosUsedInContent(chapter.Content);
                inputDoc.PhotoFilePaths = _fileSvc.GatherPhotoPaths(inputDoc, photos).ToArray();

                var validationErrors = _validator.CheckGatheredFiles(photos, inputDoc.PhotoFilePaths).ToList();
                if (localLinking)
                {
                    validationErrors.ForEach(x => _ui.Danger(x));
                }
                else if (validationErrors.Any())
                {
                    throw new InvalidOperationException(string.Join("\r\n", validationErrors));
                }

                var photosOnServer = Enumerable.Empty <PhotoInfo>();
                if (!localLinking)
                {
                    photosOnServer = await _flickr.GetPhotosAsync(inputDoc);

                    var photosToUpload = photos.Except(photosOnServer.Select(x => x.Title.ToLower())).ToList();

                    await _flickr.UploadPhotosAsync(inputDoc.AlbumName, inputDoc.PhotoFilePaths.Where(x => photosToUpload.Contains(x.Name)), true);

                    photosOnServer = await _flickr.GetPhotosAsync(inputDoc, true);
                }
                else
                {
                    photosOnServer = inputDoc.PhotoFilePaths.Select(_photoProcessor.CreatePhotoInfoFromFile);
                }

                var output = _formatter.FormatPost(chapter, photosOnServer, localLinking);
                await _fileSvc.SaveOutputAsync(inputDoc, chapter, output);

                _ui.WriteLine("Done!");
            }
            catch (Exception ex)
            {
                _ui.Danger(ex.Message);
                _ui.Danger("Application stopped.");
            }

            Console.ReadKey();
        }