GetVersion() public method

public GetVersion ( uint version_id ) : FSpot.PhotoVersion
version_id uint
return FSpot.PhotoVersion
		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);
		}
示例#2
0
        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);
        }
示例#3
0
        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);
                }
        }
示例#4
0
 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] );
 }
示例#6
0
文件: MergeDb.cs 项目: cizma/f-spot
		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);
		}