public void WidthTest() { PicasaEntry entry = new PhotoEntry(); PhotoAccessor target = new PhotoAccessor(entry); int expected = 5; // TODO: Initialize to an appropriate value int actual; target.Width = expected; actual = target.Width; Assert.AreEqual(expected, actual); }
public PicasaWebPhoto(PicasaEntry photo, string albumName) { PhotoAccessor pa = new PhotoAccessor(photo); this.m_accessId = pa.Id; this.m_media = photo.Media; this.m_id = photo.Id.Uri.ToString(); this.m_title = photo.Title.Text; this.m_albumName = albumName; this.m_height = pa.Height; this.m_width = pa.Width; this.m_uploaded = photo.Updated.ToShortDateString() + " " + photo.Updated.ToShortTimeString(); this.m_location = (string)photo.Media.Content.Attributes["url"]; pa = null; }
///////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// /// <summary>runs an authentication test, iterates all entries</summary> ////////////////////////////////////////////////////////////////////// [Test] public void QueryPhotosTest() { Tracing.TraceMsg("Entering PhotosQueryPhotosTest"); PhotoQuery query = new PhotoQuery(); PicasaService service = new PicasaService("unittests"); if (this.defaultPhotosUri != null) { if (this.userName != null) { service.Credentials = new GDataCredentials(this.userName, this.passWord); } GDataLoggingRequestFactory factory = (GDataLoggingRequestFactory) this.factory; factory.MethodOverride = true; service.RequestFactory = this.factory; query.Uri = new Uri(this.defaultPhotosUri); PicasaFeed feed = service.Query(query); ObjectModelHelper.DumpAtomObject(feed,CreateDumpFileName("PhotoAuthTest")); if (feed != null && feed.Entries.Count > 0) { Tracing.TraceMsg("Found a Feed " + feed.ToString()); DisplayExtensions(feed); foreach (PicasaEntry entry in feed.Entries) { Tracing.TraceMsg("Found an entry " + entry.ToString()); DisplayExtensions(entry); GeoRssWhere w = entry.Location; if (w != null) { Tracing.TraceMsg("Found an location " + w.Latitude + w.Longitude); } ExifTags tags = entry.Exif; if (tags != null) { Tracing.TraceMsg("Found an exif block "); } MediaGroup group = entry.Media; if (group != null) { Tracing.TraceMsg("Found a media Group"); if (group.Title != null) { Tracing.TraceMsg(group.Title.Value); } if (group.Keywords != null) { Tracing.TraceMsg(group.Keywords.Value); } if (group.Credit != null) { Tracing.TraceMsg(group.Credit.Value); } if (group.Description != null) { Tracing.TraceMsg(group.Description.Value); } } PhotoAccessor photo = new PhotoAccessor(entry); Assert.IsTrue(entry.IsPhoto, "this is a photo entry, it should have the kind set"); Assert.IsTrue(photo != null, "this is a photo entry, it should convert to PhotoEntry"); Assert.IsTrue(photo.AlbumId != null); Assert.IsTrue(photo.Height > 0); Assert.IsTrue(photo.Width > 0); } } factory.MethodOverride = false; } }
public void TimestampTest() { PicasaEntry entry = new PhotoEntry(); PhotoAccessor target = new PhotoAccessor(entry); ulong expected = 122; // TODO: Initialize to an appropriate value ulong actual; target.Timestamp = expected; actual = target.Timestamp; Assert.AreEqual(expected, actual); }
public void VersionTest() { PicasaEntry entry = new PhotoEntry(); PhotoAccessor target = new PhotoAccessor(entry); string expected = "TestValue"; string actual; target.Version = expected; actual = target.Version; Assert.AreEqual(expected, actual); }
public void CommentCountTest() { PicasaEntry entry = new PhotoEntry(); PhotoAccessor target = new PhotoAccessor(entry); uint expected = 12; // TODO: Initialize to an appropriate value uint actual; target.CommentCount = expected; actual = target.CommentCount; Assert.AreEqual(expected, actual); }
public void CommentingEnabledTest() { PicasaEntry entry = new PhotoEntry(); PhotoAccessor target = new PhotoAccessor(entry); bool expected = true; bool actual; target.CommentingEnabled = expected; actual = target.CommentingEnabled; Assert.AreEqual(expected, actual); }
public void LatitudeTest() { PicasaEntry entry = new PhotoEntry(); PhotoAccessor target = new PhotoAccessor(entry); double expected = 12.5F; // TODO: Initialize to an appropriate value double actual; target.Latitude = expected; actual = target.Latitude; Assert.AreEqual(expected, actual); }
public void SizeTest() { PicasaEntry entry = new PhotoEntry(); PhotoAccessor target = new PhotoAccessor(entry); long expected = 12; // TODO: Initialize to an appropriate value long actual; target.Size = expected; actual = target.Size; Assert.AreEqual(expected, actual); }
public static object GetMinDateKey(PicasaEntry picasaEntry, Dictionary<object, List<object>> driveKeys) { var photo = new PhotoAccessor(picasaEntry); /* var value = photo.Timestamp; var time = DateTime.FromFileTimeUtc((long)value); var tmp = new DateTime(1970, 1, 1, 0, 0, 0); tmp = tmp.AddMilliseconds(value); return time;*/ //Picasa API do not have video metadata. //Try to match video by size (size on google drive are the same as on picasa) //Make dictionary Size -> Keys from driveKeys var sizeToKeys = new Dictionary<string, List<object>>(); foreach (var pair in driveKeys) { foreach (object googleObject in pair.Value) { var googleFile = (File)googleObject; long size = googleFile.FileSize.HasValue ? googleFile.FileSize.Value : 0; var sizeKey = size.ToString() + "&&" + googleFile.OriginalFilename; if (!sizeToKeys.ContainsKey(sizeKey)) sizeToKeys.Add(sizeKey, new List<object>()); sizeToKeys[sizeKey].Add(pair.Key); } } //Get key by size var photoKey = photo.Size.ToString() + "&&" + photo.PhotoTitle; if (sizeToKeys.ContainsKey(photoKey) && sizeToKeys[photoKey].Count == 1) return sizeToKeys[photoKey][0]; return null; }
public static object GetPicasaKeyByDriveKey(PicasaEntry picasaEntry, Dictionary<object, List<object>> driveKeys) { //Make dictionary Size -> Keys from driveKeys var sizeToKeys = new Dictionary<string, List<object>>(); foreach (var pair in driveKeys) { foreach (object googleObject in pair.Value) { var googleFile = (File)googleObject; long size = googleFile.FileSize.HasValue ? googleFile.FileSize.Value : 0; var sizeKey = size.ToString() + "&&" + googleFile.OriginalFilename; if (!sizeToKeys.ContainsKey(sizeKey)) sizeToKeys.Add(sizeKey, new List<object>()); sizeToKeys[sizeKey].Add(pair.Key); } } //Get key by size PhotoAccessor photo = new PhotoAccessor(picasaEntry); var photoKey = photo.Size.ToString() + "&&" + photo.PhotoTitle; if (sizeToKeys.ContainsKey(photoKey) && sizeToKeys[photoKey].Count == 1) return sizeToKeys[photoKey][0]; return null; }
public static PicasaInfo RetrievePicasaInfo(PicasaEntry picasaEntry) { PhotoAccessor photoAccessor = new PhotoAccessor(picasaEntry); LOG.InfoFormat("Retrieving Picasa info for {0}", photoAccessor.Id); PicasaInfo picasaInfo = new PicasaInfo(); picasaInfo.ID = photoAccessor.Id; picasaInfo.Title = picasaEntry.Title.Text; picasaInfo.Timestamp = picasaEntry.Updated; picasaInfo.Description = picasaEntry.Summary.Text; picasaInfo.SquareThumbnailUrl = picasaEntry.Media.Thumbnails[0].Url; picasaInfo.OriginalUrl = picasaEntry.Media.Content.Url; List<AtomLink> links = picasaEntry.Links.Where(r => r.Type.Equals("text/html", StringComparison.OrdinalIgnoreCase)).ToList(); picasaInfo.WebUrl = string.Empty; if (links.Count > 0) { picasaInfo.WebUrl = links.First().HRef.ToString(); } return picasaInfo; }
public void MovePhotoToAlbum(PicasaEntry photo, string newAlbumId) { PhotoAccessor ac = new PhotoAccessor(photo); ac.AlbumId = newAlbumId; try { PicasaEntry updatedEntry = (PicasaEntry)photo.Update(); } catch { var service = GetPicasaService(true); photo.Service = service; PicasaEntry updatedEntry = (PicasaEntry)photo.Update(); } }
private void button1_Click(object sender, EventArgs e) { PicasaClient picasa = new PicasaClient(); var alreadyFoundExt = new HashSet<string>(); //picasa.Test(); var foundAlbums = new HashSet<string>(); var picasaFoundFiles = picasa.GetPhotos(null, ".avi"); PicasaEntry pe = null; foreach (var file in picasaFoundFiles) { var ph = new PhotoAccessor(file); if (ph.PhotoTitle.ToLower()== "2005-12-16Mafia.avi".ToLower()) { pe = file; var value = ph.Timestamp; var tmp = new DateTime(1970, 1, 1, 0, 0, 0); tmp = tmp.AddMilliseconds(value); break; } } picasa.SetPhotoCreationDate(pe, DateTime.Now); MessageBox.Show(pe.Title.ToString()); }
private void MoveFile(string fileName, string drivePhotoDirId) { //Try get picasa file by google file name if (googleFiles.ContainsKey(fileName)) { foreach (var googleFile in googleFiles[fileName]) { //Add by var googleFileName = ((File)googleFile).OriginalFilename; lock (picasaFiles) { if (!picasaFiles.ContainsKey(googleFileName)) { var foundAlbums = new HashSet<string>(); var picasaFoundFiles = picasa.GetPhotos(null, googleFileName); foreach (var file in picasaFoundFiles) { AddPicasaFile(file, picasaFiles, picasaFilesId); var picasaFoto = new PhotoAccessor(file); foundAlbums.Add(picasaFoto.AlbumId); } //Also try to add any files from album of found files foreach (var albumId in foundAlbums) AddPicasaFiles(picasa, picasaFiles, picasaFilesId, albumId); } } } } if (!localFiles.ContainsKey(fileName)) return; List<File> googleFilesSelect; if (googleFiles.ContainsKey(fileName)) googleFilesSelect = googleFiles[fileName]; else googleFilesSelect = new List<File>(); List<PicasaEntry> picasaFilesSelect; if (picasaFiles.ContainsKey(fileName)) picasaFilesSelect = picasaFiles[fileName]; else picasaFilesSelect = new List<PicasaEntry>(); //Match file by Data var matchedFiles = MediaKeyMatcher.MatchFilesWithTheSameName(localFiles[fileName], googleFilesSelect, picasaFilesSelect); foreach (var matched in matchedFiles) { //No such files on google storage if (matched.googleFiles.Count == 0 && matched.picasaFiles.Count == 0) continue; //No such file on local storage if (matched.localFiles.Count == 0) continue; //***************************************** //Select local file to get folder structure FileDesc localFile; if (matched.localFiles.Count > 1) { var localFilesSizes = new HashSet<long>(); //Get local files size foreach (var file in matched.localFiles) localFilesSizes.Add(MediaKeyMatcher.GetFileSize(file.path)); if (localFilesSizes.Count > 1) { //Can't distinguish this files LogText("Different local files with the same name. Skipping tham:"); foreach (FileDesc file in matched.localFiles) LogText(" " + file.path); continue; } //Files are really the same //Many folders exists var key = MakePrefDirKey(matched.localFiles); lock (preferableDirs) { if (preferableDirs.ContainsKey(key)) { var sel = preferableDirs[key]; localFile = null; //Select pref dir if (sel != null) { foreach (var fileDesc in matched.localFiles) { if (fileDesc.relPath == sel.Item1 && fileDesc.album == sel.Item2) { localFile = fileDesc; break; } } } if (localFile == null) { LogText("The same files in different folders. Skipping tham:"); foreach (FileDesc file in matched.localFiles) LogText(" " + file.path); continue; } } else { //Ask user for choose DialogResult dialogResult = DialogResult.Cancel; int index = -1; bool chooseAlways = false; var folders = new List<string>(); for (int i = 0; i < matched.localFiles.Count; i++) folders.Add(matched.localFiles[i].path); Action act = () => { dialogResult = FolderSelectorForm.SelectTheFolder(fileName, folders, out index, out chooseAlways); }; _progressBar.Invoke(act); if (dialogResult == DialogResult.OK && index >= 0) { localFile = matched.localFiles[index]; if (chooseAlways) preferableDirs.Add(key, new Tuple<string, string>(localFile.relPath, localFile.album)); } else { if (chooseAlways) preferableDirs.Add(key, null); LogText("The same files in different folders. Skipping tham:"); foreach (FileDesc file in matched.localFiles) LogText(" " + file.path); continue; } } } } else { //One file localFile = matched.localFiles[0]; } //***************************************** //Move files to picasa album if (matched.picasaFiles.Count > 0) { AlbumAccessor picasaAlbum; lock (picasaAlbumsByName) { if (picasaAlbumsByName.ContainsKey(localFile.album)) picasaAlbum = picasaAlbumsByName[localFile.album]; else { picasaAlbum = picasa.CreateAlbum(localFile.album, localFile.relPath); picasaAlbumsByName.Add(localFile.album, picasaAlbum); } } if (matched.picasaFiles.Count > 1) { var photo = new PhotoAccessor(matched.picasaFiles[0]); LogText("Has " + matched.picasaFiles.Count + " dublicates with name '" + photo.PhotoTitle + "' among the Google Photo files. All of them will move to album '" + localFile.album + "'"); } foreach (PicasaEntry picasaFile in matched.picasaFiles) { var photo = new PhotoAccessor(picasaFile); if (photo.AlbumId != picasaAlbum.Id) //Not in that album yet picasa.MovePhotoToAlbum(picasaFile, picasaAlbum.Id); } } //Move files to google dirs if (matched.googleFiles.Count != 0) { string googleDirId; lock (googleDirs) { if (googleDirs.ContainsKey(localFile.relPath)) googleDirId = googleDirs[localFile.relPath]; else { googleDirId = drive.CreateCascadeDirectory(localFile.relPath, drivePhotoDirId).Id; googleDirs.Add(localFile.relPath, googleDirId); } } if (matched.googleFiles.Count > 1) LogText("Has " + matched.googleFiles.Count + " dublicates with name '" + matched.googleFiles[0].OriginalFilename + "' among the google files. All of them will move to '" + localFile.relPath + "'"); foreach (File googleFile in matched.googleFiles) { bool hasSameParent = false; foreach (var parent in googleFile.Parents) { if (parent.Id == googleDirId) { hasSameParent = true; break; } } if (!hasSameParent) //If not already in this folder drive.MoveFileToDirectory(googleFile.Id, googleDirId); /* if (googleFile.ImageMediaMetadata == null || String.IsNullOrWhiteSpace(googleFile.ImageMediaMetadata.Date)) { //No Exif date for file. //Will change google CreationDate if its bigger then fileDate var creationDate = System.IO.File.GetCreationTime(localFile.path); var fi = new System.IO.FileInfo(localFile.path); if (creationDate > fi.LastWriteTime) //Get min among creation and modified date creationDate = fi.LastWriteTime; if (googleFile.CreatedDate > creationDate) drive.SetCreationDate(googleFile.Id, creationDate); }*/ } } } }
void AddPicasaFile(PicasaEntry newFile, Dictionary<string, List<PicasaEntry>> picasaFiles, HashSet<string> picasaFilesId) { var photo = new PhotoAccessor(newFile); if (picasaFilesId.Contains(photo.Id)) return; //This file already in picasa files picasaFilesId.Add(photo.Id); if (!picasaFiles.ContainsKey(photo.PhotoTitle)) picasaFiles.Add(photo.PhotoTitle, new List<PicasaEntry>()); picasaFiles[photo.PhotoTitle].Add(newFile); }