/// <summary> /// Dodatecne zarazeni Photo instanci (j*z existujicich na Flickru) do Photosetu /// </summary> private void UpdateUnassignedPhotos(FlickrExtender flickr, List <PathWithFlickrFiles> filesWithoutSet, List <Photo> photosWithoutSet) { if (filesWithoutSet.Any()) { var flickrPhotoSets = flickr.ParallelPhotosetsGetList(ParallelPhotosetsGetListProgressEvent).Result; var photosWithoutSetCrc = photosWithoutSet // TODO predelat na extension metodu Photo classu? .SelectMany(photo => photo.Tags.Where(tag => !string.IsNullOrEmpty(tag) && tag.StartsWith(File4Flickr.FLUPCRC_TAG, StringComparison.InvariantCultureIgnoreCase)) .Select(crcTag => { var crcFromTag = crcTag.Remove(0, File4Flickr.FLUPCRC_TAG.Length); long crc; long.TryParse(crcFromTag, out crc); return(new { photo, crc }); })) .ToList(); foreach (var pathWithFiles in filesWithoutSet) { // zpetne dohledam pres CRC instanci Photo na serveru var crcInPath = pathWithFiles.Photos.Select(p => p.Crc).ToList(); // seznam unassigned PhotoId pro tento adresar (photoset) var photoIdsForPath = photosWithoutSetCrc.Where(p => crcInPath.Contains(p.crc)).Select(p => p.photo.PhotoId).ToList(); // TODO nasledne by se tu mel nejak resit orderby? nejspis by mel pribyt dalsi FLUP tag s poradim? zatim na to kaslu, pro potreby zalohovani to nema smysl AddFilesToPhotoset(flickr, flickrPhotoSets, pathWithFiles.PhotosetName, photoIdsForPath); } } }
/// <summary> /// provede nahrani novych souboru z lokalu na Flickr /// </summary> private void SynchronizePhotos(FlickrExtender flickr, List <PathWithFlickrFiles> newDirs) { if (newDirs.Any()) { var flickrPhotoSets = flickr.ParallelPhotosetsGetList(ParallelPhotosetsGetListProgressEvent).Result; var totalCount = newDirs.SelectMany(p => p.Photos).Count(); var totalLength = newDirs.SelectMany(p => p.Photos).Sum(p => p.Length); var uploadedLength = 0L; var uploadedCount = 0; var totalStart = DateTime.Now; // pripadne prazdne adresare vyhodim - nemeli by tu vsak uz byt ;-) newDirs = newDirs.Where(p => p.Photos.Any()).ToList(); foreach (var dir in newDirs) { _logger.Write(string.Format("Processing folder:'{0}'-'{1}' files:{2}", dir.DirectoryInfo.FullName, dir.PhotosetName, dir.Photos.Count)); // pridat soubory var uploadFileResults = flickr.ParallelUploadFiles(dir.Photos, p => ParallelUploadFilesReportAction(p)).Result; // ty pak zaradit do photosetu AddFilesToPhotoset(flickr, flickrPhotoSets, dir.PhotosetName, uploadFileResults); // jen hlaseni o prubehu ReportTotalProgress(totalCount, totalLength, ref uploadedLength, ref uploadedCount, totalStart, uploadFileResults); } } }
/// <summary> /// Resi problem s Photo soubory, ktere byly uspesne preneseny na Flickr, ale j*z nedoslo k zarazeni do Photosetu (preruseni prenosu atd), /// tj ted visi na serveru nezarazene. Bohuzel Flickr API nenabizi zadnou fci na dohledani techto souboru, je tedy jedina moznost vzit vsechny /// Flup fotky + Photosety a po stav porovnat :-/ /// </summary> /// <param name="flupFlickrPhotos">seznam vsech Photo instanci na flickru</param> /// <returns>seznam Photo instanci na flickeru, ktere nejsou zarazeny v Photosetu</returns> private List <Photo> CheckPhotosWithoutPhotoset(FlickrExtender flickr, List <Photo> flupFlickrPhotos) { //1. seznam photosetu var photosets = flickr.ParallelPhotosetsGetList(ParallelPhotosetsGetListProgressEvent).Result; //2. seznam Photo od vsech Photoset - API nic takoveho neumoznuje, takze je nutne projit Photosety rucne var photosetsGetPhotosAllResultSet = flickr.ParallelGetPhotosFromPhotosets(photosets, ParallelGetPhotosFromPhotosetsProgressEvent, 10).Result; //3. vybrat z flupFlickrPhotos fotky bez photosetu var allPhotoIdWithPhotosetSet = photosetsGetPhotosAllResultSet.SelectMany(x => x.PhotoIdSet).ToList(); var photosWithoutPhotoset = flupFlickrPhotos.Where(p => !allPhotoIdWithPhotosetSet.Contains(p.PhotoId)).ToList(); return(photosWithoutPhotoset); }