Skip to content

Commit

Permalink
Add support for hold date
Browse files Browse the repository at this point in the history
  • Loading branch information
robert-ancell committed Mar 9, 2023
1 parent ba68fa1 commit ecb9c15
Show file tree
Hide file tree
Showing 9 changed files with 90 additions and 12 deletions.
2 changes: 2 additions & 0 deletions snapd-glib/requests/snapd-json.c
Expand Up @@ -753,6 +753,7 @@ _snapd_json_parse_snap (JsonNode *node, GError **error)
g_ptr_array_add (common_ids_array, NULL);

g_autoptr(GDateTime) install_date = _snapd_json_get_date_time (object, "install-date");
g_autoptr(GDateTime) hold = _snapd_json_get_date_time (object, "hold");

JsonObject *prices = _snapd_json_get_object (object, "prices");
g_autoptr(GPtrArray) prices_array = g_ptr_array_new_with_free_func (g_object_unref);
Expand Down Expand Up @@ -849,6 +850,7 @@ _snapd_json_parse_snap (JsonNode *node, GError **error)
"description", _snapd_json_get_string (object, "description", NULL),
"devmode", _snapd_json_get_bool (object, "devmode", FALSE),
"download-size", _snapd_json_get_int (object, "download-size", 0),
"hold", hold,
"icon", _snapd_json_get_string (object, "icon", NULL),
"id", _snapd_json_get_string (object, "id", NULL),
"install-date", install_date,
Expand Down
36 changes: 36 additions & 0 deletions snapd-glib/snapd-snap.c
Expand Up @@ -43,6 +43,7 @@ struct _SnapdSnap
gchar *description;
gboolean devmode;
gint64 download_size;
GDateTime *hold;
gchar *icon;
gchar *id;
GDateTime *install_date;
Expand Down Expand Up @@ -113,6 +114,7 @@ enum
PROP_MOUNTED_FROM,
PROP_MEDIA,
PROP_WEBSITE,
PROP_HOLD,
PROP_LAST
};

Expand Down Expand Up @@ -385,6 +387,24 @@ snapd_snap_get_download_size (SnapdSnap *self)
return self->download_size;
}

/**
* snapd_snap_get_hold:
* @snap: a #SnapdSnap.
*
* Get the date this snap will re-enable automatic refreshing or %NULL if no hold is present.
*
* Returns: (transfer none) (allow-none): a #GDateTime or %NULL.
*
* Since: 1.0
*/
GDateTime *
snapd_snap_get_hold (SnapdSnap *self)
{
g_return_val_if_fail (SNAPD_IS_SNAP (self), NULL);
return self->hold;
}


/**
* snapd_snap_get_icon:
* @snap: a #SnapdSnap.
Expand Down Expand Up @@ -896,6 +916,11 @@ snapd_snap_set_property (GObject *object, guint prop_id, const GValue *value, GP
case PROP_DOWNLOAD_SIZE:
self->download_size = g_value_get_int64 (value);
break;
case PROP_HOLD:
g_clear_pointer (&self->hold, g_date_time_unref);
if (g_value_get_boxed (value) != NULL)
self->hold = g_date_time_ref (g_value_get_boxed (value));
break;
case PROP_ICON:
g_free (self->icon);
self->icon = g_strdup (g_value_get_string (value));
Expand Down Expand Up @@ -1048,6 +1073,9 @@ snapd_snap_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
case PROP_DOWNLOAD_SIZE:
g_value_set_int64 (value, self->download_size);
break;
case PROP_HOLD:
g_value_set_boxed (value, self->hold);
break;
case PROP_ICON:
g_value_set_string (value, self->icon);
break;
Expand Down Expand Up @@ -1152,6 +1180,7 @@ snapd_snap_finalize (GObject *object)
g_clear_pointer (&self->common_ids, g_strfreev);
g_clear_pointer (&self->contact, g_free);
g_clear_pointer (&self->description, g_free);
g_clear_pointer (&self->hold, g_date_time_unref);
g_clear_pointer (&self->icon, g_free);
g_clear_pointer (&self->id, g_free);
g_clear_pointer (&self->install_date, g_date_time_unref);
Expand Down Expand Up @@ -1269,6 +1298,13 @@ snapd_snap_class_init (SnapdSnapClass *klass)
"Download size in bytes",
G_MININT64, G_MAXINT64, 0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (gobject_class,
PROP_HOLD,
g_param_spec_boxed ("hold",
"hold",
"Date this snap will re-enable automatic refreshing",
G_TYPE_DATE_TIME,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (gobject_class,
PROP_ICON,
g_param_spec_string ("icon",
Expand Down
2 changes: 2 additions & 0 deletions snapd-glib/snapd-snap.h
Expand Up @@ -118,6 +118,8 @@ gboolean snapd_snap_get_devmode (SnapdSnap *sna

gint64 snapd_snap_get_download_size (SnapdSnap *snap);

GDateTime *snapd_snap_get_hold (SnapdSnap *snap);

const gchar *snapd_snap_get_icon (SnapdSnap *snap);

const gchar *snapd_snap_get_id (SnapdSnap *snap);
Expand Down
2 changes: 2 additions & 0 deletions snapd-qt/Snapd/snap.h
Expand Up @@ -36,6 +36,7 @@ class Q_DECL_EXPORT QSnapdSnap : public QSnapdWrappedObject
Q_PROPERTY(QString developer READ developer)
Q_PROPERTY(bool devmode READ devmode)
Q_PROPERTY(qint64 downloadSize READ downloadSize)
Q_PROPERTY(QDateTime hold READ hold)
Q_PROPERTY(QString icon READ icon)
Q_PROPERTY(QString id READ id)
Q_PROPERTY(QDateTime installDate READ installDate)
Expand Down Expand Up @@ -80,6 +81,7 @@ class Q_DECL_EXPORT QSnapdSnap : public QSnapdWrappedObject
Q_DECL_DEPRECATED_X("Use publisherUsername()") QString developer () const;
bool devmode () const;
qint64 downloadSize () const;
QDateTime hold () const;
QString icon () const;
QString id () const;
QDateTime installDate () const;
Expand Down
25 changes: 15 additions & 10 deletions snapd-qt/snap.cpp
Expand Up @@ -124,16 +124,6 @@ qint64 QSnapdSnap::downloadSize () const
return snapd_snap_get_download_size (SNAPD_SNAP (wrapped_object));
}

QString QSnapdSnap::icon () const
{
return snapd_snap_get_icon (SNAPD_SNAP (wrapped_object));
}

QString QSnapdSnap::id () const
{
return snapd_snap_get_id (SNAPD_SNAP (wrapped_object));
}

static QDateTime convertDateTime (GDateTime *datetime)
{
if (datetime == NULL)
Expand All @@ -149,6 +139,21 @@ static QDateTime convertDateTime (GDateTime *datetime)
return QDateTime (date, time, Qt::OffsetFromUTC, g_date_time_get_utc_offset (datetime) / 1000000);
}

QDateTime QSnapdSnap::hold () const
{
return convertDateTime (snapd_snap_get_hold (SNAPD_SNAP (wrapped_object)));
}

QString QSnapdSnap::icon () const
{
return snapd_snap_get_icon (SNAPD_SNAP (wrapped_object));
}

QString QSnapdSnap::id () const
{
return snapd_snap_get_id (SNAPD_SNAP (wrapped_object));
}

QDateTime QSnapdSnap::installDate () const
{
return convertDateTime (snapd_snap_get_install_date (SNAPD_SNAP (wrapped_object)));
Expand Down
13 changes: 13 additions & 0 deletions tests/mock-snapd.c
Expand Up @@ -195,6 +195,7 @@ struct _MockSnap
gchar *description;
gboolean devmode;
int download_size;
gchar *hold;
gchar *icon;
gchar *icon_mime_type;
GBytes *icon_data;
Expand Down Expand Up @@ -362,6 +363,7 @@ mock_snap_free (MockSnap *snap)
g_free (snap->confinement);
g_free (snap->contact);
g_free (snap->description);
g_free (snap->hold);
g_free (snap->icon);
g_free (snap->icon_mime_type);
g_bytes_unref (snap->icon_data);
Expand Down Expand Up @@ -1346,6 +1348,13 @@ mock_snap_set_error (MockSnap *snap, const gchar *error)
snap->error = g_strdup (error);
}

void
mock_snap_set_hold (MockSnap *snap, const gchar *hold)
{
g_free (snap->hold);
snap->hold = g_strdup (hold);
}

void
mock_snap_set_icon (MockSnap *snap, const gchar *icon)
{
Expand Down Expand Up @@ -2468,6 +2477,10 @@ make_snap_node (MockSnap *snap)
json_builder_set_member_name (builder, "download-size");
json_builder_add_int_value (builder, snap->download_size);
}
if (snap->hold != NULL) {
json_builder_set_member_name (builder, "hold");
json_builder_add_string_value (builder, snap->hold);
}
json_builder_set_member_name (builder, "icon");
json_builder_add_string_value (builder, snap->icon);
json_builder_set_member_name (builder, "id");
Expand Down
3 changes: 3 additions & 0 deletions tests/mock-snapd.h
Expand Up @@ -306,6 +306,9 @@ void mock_snap_set_download_size (MockSnap *snap,
void mock_snap_set_error (MockSnap *snap,
const gchar *error);

void mock_snap_set_hold (MockSnap *snap,
const gchar *hold);

void mock_snap_set_icon (MockSnap *snap,
const gchar *icon);

Expand Down
7 changes: 7 additions & 0 deletions tests/test-glib.c
Expand Up @@ -1522,6 +1522,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
g_assert_cmpint (snapd_snap_get_publisher_validation (snap), ==, SNAPD_PUBLISHER_VALIDATION_UNKNOWN);
g_assert_false (snapd_snap_get_devmode (snap));
g_assert_cmpint (snapd_snap_get_download_size (snap), ==, 0);
g_assert_null (snapd_snap_get_hold (snap));
g_assert_cmpstr (snapd_snap_get_icon (snap), ==, "ICON");
g_assert_cmpstr (snapd_snap_get_id (snap), ==, "ID");
g_assert_null (snapd_snap_get_install_date (snap));
Expand Down Expand Up @@ -1570,6 +1571,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
g_assert_cmpint (snapd_snap_get_publisher_validation (snap), ==, SNAPD_PUBLISHER_VALIDATION_UNKNOWN);
g_assert_false (snapd_snap_get_devmode (snap));
g_assert_cmpint (snapd_snap_get_download_size (snap), ==, 0);
g_assert_null (snapd_snap_get_hold (snap));
g_assert_cmpstr (snapd_snap_get_icon (snap), ==, "ICON");
g_assert_cmpstr (snapd_snap_get_id (snap), ==, "ID");
g_assert_null (snapd_snap_get_install_date (snap));
Expand Down Expand Up @@ -1646,6 +1648,7 @@ test_get_snap_sync (void)
g_assert_cmpint (snapd_snap_get_publisher_validation (snap), ==, SNAPD_PUBLISHER_VALIDATION_UNKNOWN);
g_assert_false (snapd_snap_get_devmode (snap));
g_assert_cmpint (snapd_snap_get_download_size (snap), ==, 0);
g_assert_null (snapd_snap_get_hold (snap));
g_assert_cmpstr (snapd_snap_get_icon (snap), ==, "ICON");
g_assert_cmpstr (snapd_snap_get_id (snap), ==, "ID");
g_assert_null (snapd_snap_get_install_date (snap));
Expand Down Expand Up @@ -1692,6 +1695,7 @@ get_snap_cb (GObject *object, GAsyncResult *result, gpointer user_data)
g_assert_cmpint (snapd_snap_get_publisher_validation (snap), ==, SNAPD_PUBLISHER_VALIDATION_UNKNOWN);
g_assert_false (snapd_snap_get_devmode (snap));
g_assert_cmpint (snapd_snap_get_download_size (snap), ==, 0);
g_assert_null (snapd_snap_get_hold (snap));
g_assert_cmpstr (snapd_snap_get_icon (snap), ==, "ICON");
g_assert_cmpstr (snapd_snap_get_id (snap), ==, "ID");
g_assert_null (snapd_snap_get_install_date (snap));
Expand Down Expand Up @@ -1805,6 +1809,7 @@ test_get_snap_optional_fields (void)
mock_snap_set_broken (s, "BROKEN");
mock_snap_set_confinement (s, "classic");
mock_snap_set_devmode (s, TRUE);
mock_snap_set_hold (s, "2315-06-19T13:00:37Z");
mock_snap_set_install_date (s, "2017-01-02T11:23:58Z");
mock_snap_set_installed_size (s, 1024);
mock_snap_set_jailmode (s, TRUE);
Expand Down Expand Up @@ -1849,6 +1854,7 @@ test_get_snap_optional_fields (void)
g_assert_cmpint (snapd_snap_get_publisher_validation (snap), ==, SNAPD_PUBLISHER_VALIDATION_UNKNOWN);
g_assert_true (snapd_snap_get_devmode (snap));
g_assert_cmpint (snapd_snap_get_download_size (snap), ==, 0);
g_assert_true (date_matches (snapd_snap_get_hold (snap), 2315, 6, 19, 13, 00, 37));
g_assert_cmpstr (snapd_snap_get_icon (snap), ==, "ICON");
g_assert_cmpstr (snapd_snap_get_id (snap), ==, "ID");
g_assert_true (date_matches (snapd_snap_get_install_date (snap), 2017, 1, 2, 11, 23, 58));
Expand Down Expand Up @@ -4193,6 +4199,7 @@ test_find_query (void)
g_assert_cmpstr (snapd_snap_get_publisher_username (snap), ==, "PUBLISHER-USERNAME");
g_assert_cmpint (snapd_snap_get_publisher_validation (snap), ==, SNAPD_PUBLISHER_VALIDATION_UNKNOWN);
g_assert_cmpint (snapd_snap_get_download_size (snap), ==, 1024);
g_assert_null (snapd_snap_get_hold (snap));
g_assert_cmpstr (snapd_snap_get_icon (snap), ==, "ICON");
g_assert_cmpstr (snapd_snap_get_id (snap), ==, "ID");
g_assert_null (snapd_snap_get_install_date (snap));
Expand Down
12 changes: 10 additions & 2 deletions tests/test-qt.cpp
Expand Up @@ -1374,6 +1374,7 @@ QT_WARNING_POP
g_assert_cmpint (snap->publisherValidation (), ==, QSnapdEnums::PublisherValidationUnknown);
g_assert_false (snap->devmode ());
g_assert_cmpint (snap->downloadSize (), ==, 0);
g_assert_true (snap->hold ().isNull ());
g_assert_true (snap->icon () == "ICON");
g_assert_true (snap->id () == "ID");
g_assert_true (snap->installDate ().isNull ());
Expand Down Expand Up @@ -1421,6 +1422,7 @@ ListOneHandler::onComplete ()
g_assert_cmpint (snap->publisherValidation (), ==, QSnapdEnums::PublisherValidationUnknown);
g_assert_false (snap->devmode ());
g_assert_cmpint (snap->downloadSize (), ==, 0);
g_assert_true (snap->hold ().isNull ());
g_assert_true (snap->icon () == "ICON");
g_assert_true (snap->id () == "ID");
g_assert_true (snap->installDate ().isNull ());
Expand Down Expand Up @@ -1497,6 +1499,7 @@ test_get_snap_sync ()
g_assert_cmpint (snap->publisherValidation (), ==, QSnapdEnums::PublisherValidationUnknown);
g_assert_false (snap->devmode ());
g_assert_cmpint (snap->downloadSize (), ==, 0);
g_assert_true (snap->hold ().isNull ());
g_assert_true (snap->icon () == "ICON");
g_assert_true (snap->id () == "ID");
g_assert_true (snap->installDate ().isNull ());
Expand Down Expand Up @@ -1544,6 +1547,7 @@ GetSnapHandler::onComplete ()
g_assert_cmpint (snap->publisherValidation (), ==, QSnapdEnums::PublisherValidationUnknown);
g_assert_false (snap->devmode ());
g_assert_cmpint (snap->downloadSize (), ==, 0);
g_assert_true (snap->hold ().isNull ());
g_assert_true (snap->icon () == "ICON");
g_assert_true (snap->id () == "ID");
g_assert_true (snap->installDate ().isNull ());
Expand Down Expand Up @@ -1655,6 +1659,7 @@ test_get_snap_optional_fields ()
mock_snap_set_broken (s, "BROKEN");
mock_snap_set_confinement (s, "classic");
mock_snap_set_devmode (s, TRUE);
mock_snap_set_hold (s, "2315-06-19T13:00:37Z");
mock_snap_set_install_date (s, "2017-01-02T11:23:58Z");
mock_snap_set_installed_size (s, 1024);
mock_snap_set_jailmode (s, TRUE);
Expand Down Expand Up @@ -1699,9 +1704,11 @@ test_get_snap_optional_fields ()
g_assert_cmpint (snap->publisherValidation (), ==, QSnapdEnums::PublisherValidationUnknown);
g_assert_true (snap->devmode ());
g_assert_cmpint (snap->downloadSize (), ==, 0);
QDateTime date = QDateTime (QDate (2315, 6, 19), QTime (13, 00, 37), Qt::UTC);
g_assert_true (snap->hold () == date);
g_assert_true (snap->icon () == "ICON");
g_assert_true (snap->id () == "ID");
QDateTime date = QDateTime (QDate (2017, 1, 2), QTime (11, 23, 58), Qt::UTC);
date = QDateTime (QDate (2017, 1, 2), QTime (11, 23, 58), Qt::UTC);
g_assert_true (snap->installDate () == date);
g_assert_cmpint (snap->installedSize (), ==, 1024);
g_assert_true (snap->jailmode ());
Expand Down Expand Up @@ -3660,9 +3667,10 @@ test_find_query ()
g_assert_true (snap1->publisherUsername () == "PUBLISHER-USERNAME");
g_assert_cmpint (snap1->publisherValidation (), ==, QSnapdEnums::PublisherValidationUnknown);
g_assert_cmpint (snap1->downloadSize (), ==, 1024);
g_assert_true (snap1->hold ().isNull ());
g_assert_true (snap1->icon () == "ICON");
g_assert_true (snap1->id () == "ID");
g_assert_false (snap1->installDate ().isValid ());
g_assert_true (snap1->installDate ().isNull ());
g_assert_cmpint (snap1->installedSize (), ==, 0);
g_assert_cmpint (snap1->mediaCount (), ==, 3);
QScopedPointer<QSnapdMedia> media0 (snap1->media (0));
Expand Down

0 comments on commit ecb9c15

Please sign in to comment.