private uint CreateVersion(string name, string extension, uint base_version_id, bool create, bool is_protected) { extension = extension ?? VersionUri(base_version_id).GetExtension(); SafeUri new_base_uri = DefaultVersion.BaseUri; string filename = GetFilenameForVersionName(name, extension); SafeUri original_uri = VersionUri(base_version_id); SafeUri new_uri = new_base_uri.Append(filename); string import_md5 = DefaultVersion.ImportMD5; if (VersionNameExists(name)) { throw new Exception("This version name already exists"); } if (create) { GLib.File destination = GLib.FileFactory.NewForUri(new_uri); if (destination.Exists) { throw new Exception(string.Format("An object at this uri {0} already exists", new_uri)); } //FIXME. or better, fix the copy api ! GLib.File source = GLib.FileFactory.NewForUri(original_uri); source.Copy(destination, GLib.FileCopyFlags.None, null, null); } highest_version_id++; versions [highest_version_id] = new PhotoVersion(this, highest_version_id, new_base_uri, filename, import_md5, name, is_protected); changes.AddVersion(highest_version_id); return(highest_version_id); }
protected void RenameNewVersion() { try { System.Uri original_uri = GetUriForVersionFileName(this.currentphoto, this.currentphoto.DefaultVersion.Uri.LocalPath); System.Uri new_uri = GetUriForVersionFileName(this.currentphoto, new_filename); //Console.WriteLine ("ok pressed: old: " + this.currentphoto.DefaultVersionUri.LocalPath + "; " + original_uri.ToString() + " new: " + new_filename + "; " + new_uri.ToString() + "to open with: " ); // check if new version exist and remove foreach (uint id in currentphoto.VersionIds) { if (currentphoto.GetVersion(id).Name == new_version_entry.Text) { this.currentphoto.DeleteVersion(id); } } GLib.File destination = GLib.FileFactory.NewForUri(new_uri); if (destination.Exists) { throw new Exception(String.Format("An object at this uri {0} already exists", new_uri)); } //FIXME. or better, fix the copy api ! GLib.File source = GLib.FileFactory.NewForUri(original_uri); source.Copy(destination, GLib.FileCopyFlags.None, null, null); this.currentphoto.DefaultVersionId = this.currentphoto.AddVersion(new SafeUri(new_uri).GetBaseUri(), new SafeUri(new_uri).GetFilename(), new_version_entry.Text, true); uint currentid = this.currentphoto.DefaultVersionId; foreach (uint id in currentphoto.VersionIds) { if (currentphoto.GetVersion(id).Uri.ToString() == original_uri.ToString()) { this.currentphoto.DeleteVersion(id, false, false); } } this.currentphoto.DefaultVersionId = currentid; App.Instance.Database.Photos.Commit(this.currentphoto); this.currentphoto.Changes.DataChanged = true; } finally { Gtk.Application.Invoke(delegate { dialog.Destroy(); }); } }