Пример #1
0
        PhotoChanges Update(Photo photo)
        {
            PhotoChanges changes = photo.Changes;

            // Update photo.
            if (changes.DescriptionChanged || changes.DefaultVersionIdChanged || changes.TimeChanged || changes.UriChanged || changes.RatingChanged || changes.MD5SumChanged)
            {
                Database.Execute(
                    new HyenaSqliteCommand(
                        "UPDATE photos " +
                        "SET description = ?, " +
                        "    default_version_id = ?, " +
                        "    time = ?, " +
                        "    base_uri = ?, " +
                        "    filename = ?, " +
                        "    rating = ? " +
                        "WHERE id = ? ",
                        photo.Description,
                        photo.DefaultVersionId,
                        DateTimeUtil.FromDateTime(photo.Time),
                        photo.VersionUri(Photo.OriginalVersionId).GetBaseUri().ToString(),
                        photo.VersionUri(Photo.OriginalVersionId).GetFilename(),
                        string.Format("{0}", photo.Rating),
                        photo.Id
                        )
                    );
            }

            // Update tags.
            if (changes.TagsRemoved != null)
            {
                foreach (Tag tag in changes.TagsRemoved)
                {
                    Database.Execute(new HyenaSqliteCommand(
                                         "DELETE FROM photo_tags WHERE photo_id = ? AND tag_id = ?",
                                         photo.Id,
                                         tag.Id));
                }
            }

            if (changes.TagsAdded != null)
            {
                foreach (Tag tag in changes.TagsAdded)
                {
                    Database.Execute(new HyenaSqliteCommand(
                                         "INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
                                         "VALUES (?, ?)",
                                         photo.Id,
                                         tag.Id));
                }
            }

            // Update versions.
            if (changes.VersionsRemoved != null)
            {
                foreach (uint version_id in changes.VersionsRemoved)
                {
                    Database.Execute(new HyenaSqliteCommand(
                                         "DELETE FROM photo_versions WHERE photo_id = ? AND version_id = ?",
                                         photo.Id,
                                         version_id));
                }
            }

            if (changes.VersionsAdded != null)
            {
                foreach (uint version_id in changes.VersionsAdded)
                {
                    PhotoVersion version = photo.GetVersion(version_id);
                    InsertVersion(photo, version);
                }
            }

            if (changes.VersionsModified != null)
            {
                foreach (uint version_id in changes.VersionsModified)
                {
                    PhotoVersion version = photo.GetVersion(version_id);
                    Database.Execute(new HyenaSqliteCommand(
                                         "UPDATE photo_versions SET name = ?, " +
                                         "base_uri = ?, filename = ?, protected = ?, import_md5 = ? " +
                                         "WHERE photo_id = ? AND version_id = ?",
                                         version.Name,
                                         version.BaseUri.ToString(),
                                         version.Filename,
                                         version.IsProtected,
                                         (version.ImportMD5 != string.Empty ? version.ImportMD5 : null),
                                         photo.Id,
                                         version_id));
                }
            }

            photo.Changes = null;
            return(changes);
        }
Пример #2
0
    private PhotoChanges Update(Photo photo)
    {
        PhotoChanges changes = photo.Changes;

        // Update photo.
        if (changes.DescriptionChanged || changes.DefaultVersionIdChanged || changes.TimeChanged || changes.UriChanged || changes.RatingChanged || changes.MD5SumChanged)
        {
            Database.ExecuteNonQuery(
                new DbCommand(
                    "UPDATE photos " +
                    "SET description = :description, " +
                    "    default_version_id = :default_version_id, " +
                    "    time = :time, " +
                    "    uri = :uri, " +
                    "    rating = :rating, " +
                    "    md5_sum = :md5_sum	" +
                    "WHERE id = :id ",
                    "description", photo.Description,
                    "default_version_id", photo.DefaultVersionId,
                    "time", DbUtils.UnixTimeFromDateTime(photo.Time),
                    "uri", photo.VersionUri(Photo.OriginalVersionId).OriginalString,
                    "rating", String.Format("{0}", photo.Rating),
                    "md5_sum", photo.MD5Sum,
                    "id", photo.Id
                    )
                );
        }

        // Update tags.
        if (changes.TagsRemoved != null)
        {
            foreach (Tag tag in changes.TagsRemoved)
            {
                Database.ExecuteNonQuery(new DbCommand(
                                             "DELETE FROM photo_tags WHERE photo_id = :photo_id AND tag_id = :tag_id",
                                             "photo_id", photo.Id,
                                             "tag_id", tag.Id));
            }
        }

        if (changes.TagsAdded != null)
        {
            foreach (Tag tag in changes.TagsAdded)
            {
                Database.ExecuteNonQuery(new DbCommand(
                                             "INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
                                             "VALUES (:photo_id, :tag_id)",
                                             "photo_id", photo.Id,
                                             "tag_id", tag.Id));
            }
        }

        // Update versions.
        if (changes.VersionsRemoved != null)
        {
            foreach (uint version_id in changes.VersionsRemoved)
            {
                Database.ExecuteNonQuery(new DbCommand(
                                             "DELETE FROM photo_versions WHERE photo_id = :photo_id AND version_id = :version_id",
                                             "photo_id", photo.Id,
                                             "version_id", version_id));
            }
        }

        if (changes.VersionsAdded != null)
        {
            foreach (uint version_id in changes.VersionsAdded)
            {
                PhotoVersion version = photo.GetVersion(version_id) as PhotoVersion;
                Database.ExecuteNonQuery(new DbCommand(
                                             "INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, uri, protected, md5_sum) " +
                                             "VALUES (:photo_id, :version_id, :name, :uri, :is_protected, :md5_sum)",
                                             "photo_id", photo.Id,
                                             "version_id", version_id,
                                             "name", version.Name,
                                             "uri", version.Uri.ToString(),
                                             "is_protected", version.IsProtected,
                                             "md5_sum", version.MD5Sum));
            }
        }
        if (changes.VersionsModified != null)
        {
            foreach (uint version_id in changes.VersionsModified)
            {
                PhotoVersion version = photo.GetVersion(version_id) as PhotoVersion;
                Database.ExecuteNonQuery(new DbCommand(
                                             "UPDATE photo_versions SET name = :name, " +
                                             "uri = :uri, protected = :protected, md5_sum = :md5_sum " +
                                             "WHERE photo_id = :photo_id AND version_id = :version_id",
                                             "name", version.Name,
                                             "uri", version.Uri.ToString(),
                                             "protected", version.IsProtected,
                                             "photo_id", photo.Id,
                                             "md5_sum", version.MD5Sum,
                                             "version_id", version_id));
            }
        }
        photo.Changes = null;
        return(changes);
    }