void ImportPhoto (Photo photo, bool copy) { Log.WarningFormat ("Importing {0}", photo.Name); PhotoStore from_store = from_db.Photos; PhotoStore to_store = to_db.Photos; string photo_path = photo.VersionUri (Photo.OriginalVersionId).AbsolutePath; while (!System.IO.File.Exists (photo_path)) { Log.Debug ("Not found, trying the mappings..."); foreach (string key in PathMap.Keys) { string path = photo_path; path = path.Replace (key, PathMap [key]); Log.DebugFormat ("Replaced path {0}", path); if (System.IO.File.Exists (path)) { photo_path = path; break;; } } if (System.IO.File.Exists (photo_path)) { Log.Debug ("Exists!!!"); continue; } string [] parts = photo_path.Split (new char[] {'/'}); if (parts.Length > 6) { string folder = String.Join ("/", parts, 0, parts.Length - 4); PickFolderDialog pfd = new PickFolderDialog (mdd.Dialog, folder); string new_folder = pfd.Run (); pfd.Dialog.Destroy (); if (new_folder == null) //Skip return; Log.DebugFormat ("{0} maps to {1}", folder, new_folder); PathMap[folder] = new_folder; } else Console.WriteLine ("point me to the file"); Console.WriteLine ("FNF: {0}", photo_path); } string destination; Gdk.Pixbuf pixbuf; Photo newp; if (copy) destination = FileImportBackend.ChooseLocation (photo_path, null); else destination = photo_path; // Don't copy if we are already home if (photo_path == destination) newp = to_store.Create (destination, roll_map [photo.RollId], out pixbuf); else { System.IO.File.Copy (photo_path, destination); newp = to_store.Create (destination, photo_path, roll_map [photo.RollId], out pixbuf); try { File.SetAttributes (destination, File.GetAttributes (destination) & ~FileAttributes.ReadOnly); DateTime create = File.GetCreationTime (photo_path); File.SetCreationTime (destination, create); DateTime mod = File.GetLastWriteTime (photo_path); File.SetLastWriteTime (destination, mod); } catch (IOException) { // we don't want an exception here to be fatal. } } if (newp == null) return; foreach (Tag t in photo.Tags) { Log.WarningFormat ("Tagging with {0}", t.Name); newp.AddTag (tag_map [t.Id]); } foreach (uint version_id in photo.VersionIds) if (version_id != Photo.OriginalVersionId) { PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion; uint newv = newp.AddVersion (version.Uri, version.Name, version.IsProtected); if (version_id == photo.DefaultVersionId) newp.DefaultVersionId = newv; } //FIXME Import extra info (time, description, rating) newp.Time = photo.Time; newp.Description = photo.Description; newp.Rating = photo.Rating; to_store.Commit (newp); }
protected void DevelopPhoto(Photo p) { LoadPreference (UFRAW_JPEG_QUALITY_KEY); LoadPreference (UFRAW_ARGUMENTS_KEY); LoadPreference (UFRAW_BATCH_ARGUMENTS_KEY); PhotoVersion raw = p.GetVersion (Photo.OriginalVersionId) as PhotoVersion; if (!ImageFile.IsRaw (raw.Uri)) { Log.Warning ("The original version of this image is not a (supported) RAW file"); return; } string name = GetNextVersionFileName (p); System.Uri developed = GetUriForVersionFileName (p, name); string idfile = ""; if (ufraw_jpeg_quality < 1 || ufraw_jpeg_quality > 100) { Log.Debug ("Invalid JPEG quality specified, defaulting to quality 98"); ufraw_jpeg_quality = 98; } string args = ""; switch (executable) { case "ufraw": args += ufraw_args; if (GLib.FileFactory.NewForUri (Path.ChangeExtension (raw.Uri.ToString (), ".ufraw")).Exists) { // We found an ID file, use that instead of the raw file idfile = "--conf=" + GLib.Shell.Quote (Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw")); } break; case "ufraw-batch": args += ufraw_batch_args; if (GLib.FileFactory.NewForUri (Path.Combine (FSpot.Core.Global.BaseDirectory, "batch.ufraw")).Exists) { // We found an ID file, use that instead of the raw file idfile = "--conf=" + GLib.Shell.Quote (Path.Combine (FSpot.Core.Global.BaseDirectory, "batch.ufraw")); } break; } args += String.Format(" --exif --overwrite --create-id=also --compression={0} --out-type=jpeg {1} --output={2} {3}", ufraw_jpeg_quality, idfile, GLib.Shell.Quote (developed.LocalPath), GLib.Shell.Quote (raw.Uri.LocalPath)); Log.Debug (executable + " " + args); System.Diagnostics.Process ufraw = System.Diagnostics.Process.Start (executable, args); ufraw.WaitForExit (); if (!(GLib.FileFactory.NewForUri (developed.ToString ())).Exists) { Log.Warning ("UFRaw quit with an error. Check that you have UFRaw 0.13 or newer. Or did you simply clicked on Cancel?"); return; } if (GLib.FileFactory.NewForUri (Path.ChangeExtension (developed.ToString (), ".ufraw")).Exists) { // We save our own copy of the last ufraw settings, as ufraw can overwrite it's own last used settings outside f-spot File.Delete (Path.Combine (FSpot.Core.Global.BaseDirectory, "batch.ufraw")); File.Copy (Path.ChangeExtension (developed.LocalPath, ".ufraw"), Path.Combine (FSpot.Core.Global.BaseDirectory, "batch.ufraw")); // Rename the ufraw file to match the original RAW filename, instead of the (Developed In UFRaw) filename if (!(Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw") == Path.ChangeExtension (developed.LocalPath, ".ufraw"))){ File.Delete (Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw")); File.Move (Path.ChangeExtension (developed.LocalPath, ".ufraw"), Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw")); } } p.DefaultVersionId = p.AddVersion (new SafeUri (developed).GetBaseUri (),new SafeUri (developed).GetFilename (), name, true); p.Changes.DataChanged = true; App.Instance.Database.Photos.Commit (p); }
private void SearchVersionUriToChange(Photo photo, string old_base, string new_base) { foreach (uint version_id in photo.VersionIds) { PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion; if ( ChangeThisVersionUri (version, old_base, new_base) ) AddVersionToArrays ( photo.Id, version_id, version.Uri.AbsolutePath, CreateNewPath (old_base, new_base, version)); // else // System.Console.WriteLine ("L : {0}", version.Uri.AbsolutePath); } }
public void UpdateThisUri(int index, string path, ref Photo photo) { if (photo == null) photo = photo_store.Get (photo_id_array[index]); PhotoVersion version = photo.GetVersion ( (uint) version_id_array[index]) as PhotoVersion; version.BaseUri = new SafeUri ( path ).GetBaseUri (); version.Filename = new SafeUri ( path ).GetFilename (); photo.Changes.UriChanged = true; photo.Changes.ChangeVersion ( (uint) version_id_array[index] ); }
public void UpdateThisUri(int index, string path, ref Photo photo) { if (photo == null) photo = photo_store.Get ( (uint) photo_id_array[index]) as Photo; PhotoVersion version = photo.GetVersion ( (uint) version_id_array[index]) as PhotoVersion; version.Uri = new System.Uri ( path ); photo.Changes.UriChanged = true; photo.Changes.ChangeVersion ( (uint) version_id_array[index] ); }
void ImportPhoto (Photo photo, bool copy) { Log.WarningFormat ("Importing {0}", photo.Name); PhotoStore to_store = to_db.Photos; string photo_path = photo.VersionUri (Photo.OriginalVersionId).AbsolutePath; while (!System.IO.File.Exists (photo_path)) { Log.Debug ("Not found, trying the mappings..."); foreach (string key in PathMap.Keys) { string path = photo_path; path = path.Replace (key, PathMap [key]); Log.DebugFormat ("Replaced path {0}", path); if (System.IO.File.Exists (path)) { photo_path = path; break;; } } if (System.IO.File.Exists (photo_path)) { Log.Debug ("Exists!!!"); continue; } string [] parts = photo_path.Split (new char[] {'/'}); if (parts.Length > 6) { string folder = String.Join ("/", parts, 0, parts.Length - 4); PickFolderDialog pfd = new PickFolderDialog (mdd.Dialog, folder); string new_folder = pfd.Run (); pfd.Dialog.Destroy (); if (new_folder == null) //Skip return; Log.DebugFormat ("{0} maps to {1}", folder, new_folder); PathMap[folder] = new_folder; } else Log.Debug ("point me to the file"); Log.DebugFormat ("FNF: {0}", photo_path); } string destination; Photo newp; if (copy) destination = FindImportDestination (new Hyena.SafeUri (photo_path), photo.Time).AbsolutePath; else destination = photo_path; var dest_uri = new SafeUri (photo_path); photo.DefaultVersionId = 1; photo.DefaultVersion.Uri = dest_uri; if (photo.DefaultVersion.ImportMD5 == String.Empty) { (photo.DefaultVersion as PhotoVersion).ImportMD5 = HashUtils.GenerateMD5 (photo.DefaultVersion.Uri); } if (photo_path != destination) { System.IO.File.Copy (photo_path, destination); try { File.SetAttributes (destination, File.GetAttributes (destination) & ~FileAttributes.ReadOnly); DateTime create = File.GetCreationTime (photo_path); File.SetCreationTime (destination, create); DateTime mod = File.GetLastWriteTime (photo_path); File.SetLastWriteTime (destination, mod); } catch (IOException) { // we don't want an exception here to be fatal. } } //FIXME simplify the following code by letting CreateFrom import all versions // instead of looping over all versions here newp = to_store.CreateFrom (photo, true, roll_map [photo.RollId]); if (newp == null) return; foreach (Tag t in photo.Tags) { Log.WarningFormat ("Tagging with {0}", t.Name); newp.AddTag (tag_map [t.Id]); } foreach (uint version_id in photo.VersionIds) if (version_id != Photo.OriginalVersionId) { PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion; uint newv = newp.AddVersion (version.BaseUri, version.Filename, version.Name, version.IsProtected); if (version_id == photo.DefaultVersionId) newp.DefaultVersionId = newv; } //FIXME Import extra info (time, description, rating) newp.Time = photo.Time; newp.Description = photo.Description; newp.Rating = photo.Rating; to_store.Commit (newp); }