Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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.
                }
            }

            newp = to_store.CreateFrom (photo, 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);
        }