Skip to content

Commit

Permalink
Support store-url snap field
Browse files Browse the repository at this point in the history
  • Loading branch information
robert-ancell committed Sep 22, 2021
1 parent e57de9c commit 309396a
Show file tree
Hide file tree
Showing 9 changed files with 77 additions and 0 deletions.
1 change: 1 addition & 0 deletions snapd-glib/requests/snapd-json.c
Expand Up @@ -867,6 +867,7 @@ _snapd_json_parse_snap (JsonNode *node, GError **error)
"screenshots", screenshots_array,
"snap-type", snap_type,
"status", snap_status,
"store-url", _snapd_json_get_string (object, "store-url", NULL),
"summary", _snapd_json_get_string (object, "summary", NULL),
"title", _snapd_json_get_string (object, "title", NULL),
"tracking-channel", _snapd_json_get_string (object, "tracking-channel", NULL),
Expand Down
34 changes: 34 additions & 0 deletions snapd-glib/snapd-snap.c
Expand Up @@ -61,6 +61,7 @@ struct _SnapdSnap
gchar *revision;
GPtrArray *screenshots;
SnapdSnapStatus status;
gchar *store_url;
gchar *summary;
gchar *title;
gchar *tracking_channel;
Expand Down Expand Up @@ -92,6 +93,7 @@ enum
PROP_REVISION,
PROP_SCREENSHOTS,
PROP_STATUS,
PROP_STORE_URL,
PROP_SUMMARY,
PROP_TRYMODE,
PROP_SNAP_TYPE,
Expand Down Expand Up @@ -728,6 +730,23 @@ snapd_snap_get_status (SnapdSnap *self)
return self->status;
}

/**
* snapd_snap_get_store_url:
* @snap: a #SnapdSnap.
*
* Get a URL to the web snap store, e.g. "https://snapcraft.io/example"
*
* Returns: (allow-none): a URL or %NULL.
*
* Since: 1.60
*/
const gchar *
snapd_snap_get_store_url (SnapdSnap *self)
{
g_return_val_if_fail (SNAPD_IS_SNAP (self), NULL);
return self->store_url;
}

/**
* snapd_snap_get_summary:
* @snap: a #SnapdSnap.
Expand Down Expand Up @@ -948,6 +967,10 @@ snapd_snap_set_property (GObject *object, guint prop_id, const GValue *value, GP
case PROP_STATUS:
self->status = g_value_get_enum (value);
break;
case PROP_STORE_URL:
g_free (self->store_url);
self->store_url = g_strdup (g_value_get_string (value));
break;
case PROP_SUMMARY:
g_free (self->summary);
self->summary = g_strdup (g_value_get_string (value));
Expand Down Expand Up @@ -1080,6 +1103,9 @@ snapd_snap_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
case PROP_STATUS:
g_value_set_enum (value, self->status);
break;
case PROP_STORE_URL:
g_value_set_string (value, self->store_url);
break;
case PROP_SUMMARY:
g_value_set_string (value, self->summary);
break;
Expand Down Expand Up @@ -1139,6 +1165,7 @@ snapd_snap_finalize (GObject *object)
g_clear_pointer (&self->publisher_username, g_free);
g_clear_pointer (&self->revision, g_free);
g_clear_pointer (&self->screenshots, g_ptr_array_unref);
g_clear_pointer (&self->store_url, g_free);
g_clear_pointer (&self->summary, g_free);
g_clear_pointer (&self->title, g_free);
g_clear_pointer (&self->tracking_channel, g_free);
Expand Down Expand Up @@ -1375,6 +1402,13 @@ snapd_snap_class_init (SnapdSnapClass *klass)
"One line description",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (gobject_class,
PROP_STORE_URL,
g_param_spec_string ("store-url",
"store-url",
"Web store URL",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (gobject_class,
PROP_TITLE,
g_param_spec_string ("title",
Expand Down
2 changes: 2 additions & 0 deletions snapd-glib/snapd-snap.h
Expand Up @@ -154,6 +154,8 @@ SnapdSnapType snapd_snap_get_snap_type (SnapdSnap *sna

SnapdSnapStatus snapd_snap_get_status (SnapdSnap *snap);

const gchar *snapd_snap_get_store_url (SnapdSnap *snap);

const gchar *snapd_snap_get_summary (SnapdSnap *snap);

const gchar *snapd_snap_get_title (SnapdSnap *snap);
Expand Down
2 changes: 2 additions & 0 deletions snapd-qt/Snapd/snap.h
Expand Up @@ -53,6 +53,7 @@ class Q_DECL_EXPORT QSnapdSnap : public QSnapdWrappedObject
Q_PROPERTY(QString revision READ revision)
Q_PROPERTY(QSnapdEnums::SnapType snapType READ snapType)
Q_PROPERTY(QSnapdEnums::SnapStatus status READ status)
Q_PROPERTY(QString storeUrl READ summary)
Q_PROPERTY(QString summary READ summary)
Q_PROPERTY(QString title READ title)
Q_PROPERTY(QString trackingChannel READ trackingChannel)
Expand Down Expand Up @@ -101,6 +102,7 @@ class Q_DECL_EXPORT QSnapdSnap : public QSnapdWrappedObject
Q_DECL_DEPRECATED_X("Use media()") QSnapdScreenshot *screenshot (int) const;
QSnapdEnums::SnapType snapType () const;
QSnapdEnums::SnapStatus status () const;
QString storeUrl () const;
QString summary () const;
QString title () const;
QString trackingChannel () const;
Expand Down
5 changes: 5 additions & 0 deletions snapd-qt/snap.cpp
Expand Up @@ -318,6 +318,11 @@ QSnapdEnums::SnapStatus QSnapdSnap::status () const
}
}

QString QSnapdSnap::storeUrl () const
{
return snapd_snap_get_store_url (SNAPD_SNAP (wrapped_object));
}

QString QSnapdSnap::summary () const
{
return snapd_snap_get_summary (SNAPD_SNAP (wrapped_object));
Expand Down
13 changes: 13 additions & 0 deletions tests/mock-snapd.c
Expand Up @@ -206,6 +206,7 @@ struct _MockSnap
gchar *publisher_validation;
gchar *revision;
gchar *status;
gchar *store_url;
gchar *summary;
gchar *title;
gchar *tracking_channel;
Expand Down Expand Up @@ -369,6 +370,7 @@ mock_snap_free (MockSnap *snap)
g_free (snap->publisher_validation);
g_free (snap->revision);
g_free (snap->status);
g_free (snap->store_url);
g_free (snap->summary);
g_free (snap->title);
g_free (snap->tracking_channel);
Expand Down Expand Up @@ -1500,6 +1502,13 @@ mock_snap_set_status (MockSnap *snap, const gchar *status)
snap->status = g_strdup (status);
}

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

void
mock_snap_set_summary (MockSnap *snap, const gchar *summary)
{
Expand Down Expand Up @@ -2490,6 +2499,10 @@ make_snap_node (MockSnap *snap)
json_builder_end_array (builder);
json_builder_set_member_name (builder, "status");
json_builder_add_string_value (builder, snap->status);
if (snap->store_url) {
json_builder_set_member_name (builder, "store-url");
json_builder_add_string_value (builder, snap->store_url);
}
if (snap->summary) {
json_builder_set_member_name (builder, "summary");
json_builder_add_string_value (builder, snap->summary);
Expand Down
3 changes: 3 additions & 0 deletions tests/mock-snapd.h
Expand Up @@ -373,6 +373,9 @@ MockMedia *mock_snap_add_media (MockSnap *snap,
void mock_snap_set_status (MockSnap *snap,
const gchar *status);

void mock_snap_set_store_url (MockSnap *snap,
const gchar *store_url);

void mock_snap_set_summary (MockSnap *snap,
const gchar *summary);

Expand Down
9 changes: 9 additions & 0 deletions tests/test-glib.c
Expand Up @@ -1537,6 +1537,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
G_GNUC_END_IGNORE_DEPRECATIONS
g_assert_cmpint (snapd_snap_get_snap_type (snap), ==, SNAPD_SNAP_TYPE_APP);
g_assert_cmpint (snapd_snap_get_status (snap), ==, SNAPD_SNAP_STATUS_ACTIVE);
g_assert_cmpstr (snapd_snap_get_store_url (snap), ==, NULL);
g_assert_cmpstr (snapd_snap_get_summary (snap), ==, NULL);
g_assert_cmpstr (snapd_snap_get_tracking_channel (snap), ==, NULL);
g_assert_false (snapd_snap_get_trymode (snap));
Expand Down Expand Up @@ -1586,6 +1587,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
G_GNUC_END_IGNORE_DEPRECATIONS
g_assert_cmpint (snapd_snap_get_snap_type (snap), ==, SNAPD_SNAP_TYPE_APP);
g_assert_cmpint (snapd_snap_get_status (snap), ==, SNAPD_SNAP_STATUS_ACTIVE);
g_assert_cmpstr (snapd_snap_get_store_url (snap), ==, NULL);
g_assert_cmpstr (snapd_snap_get_summary (snap), ==, NULL);
g_assert_cmpstr (snapd_snap_get_tracking_channel (snap), ==, NULL);
g_assert_false (snapd_snap_get_trymode (snap));
Expand Down Expand Up @@ -1659,6 +1661,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
G_GNUC_END_IGNORE_DEPRECATIONS
g_assert_cmpint (snapd_snap_get_snap_type (snap), ==, SNAPD_SNAP_TYPE_APP);
g_assert_cmpint (snapd_snap_get_status (snap), ==, SNAPD_SNAP_STATUS_ACTIVE);
g_assert_cmpstr (snapd_snap_get_store_url (snap), ==, NULL);
g_assert_cmpstr (snapd_snap_get_summary (snap), ==, NULL);
g_assert_cmpstr (snapd_snap_get_tracking_channel (snap), ==, NULL);
g_assert_false (snapd_snap_get_trymode (snap));
Expand Down Expand Up @@ -1706,6 +1709,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
G_GNUC_END_IGNORE_DEPRECATIONS
g_assert_cmpint (snapd_snap_get_snap_type (snap), ==, SNAPD_SNAP_TYPE_APP);
g_assert_cmpint (snapd_snap_get_status (snap), ==, SNAPD_SNAP_STATUS_ACTIVE);
g_assert_cmpstr (snapd_snap_get_store_url (snap), ==, NULL);
g_assert_cmpstr (snapd_snap_get_summary (snap), ==, NULL);
g_assert_cmpstr (snapd_snap_get_tracking_channel (snap), ==, NULL);
g_assert_false (snapd_snap_get_trymode (snap));
Expand Down Expand Up @@ -1811,6 +1815,7 @@ test_get_snap_optional_fields (void)
mock_snap_set_description (s, "DESCRIPTION");
mock_snap_set_license (s, "LICENSE");
mock_snap_set_mounted_from (s, "MOUNTED-FROM");
mock_snap_set_store_url (s, "https://snapcraft.io/snap");
mock_snap_set_summary (s, "SUMMARY");
mock_snap_set_tracking_channel (s, "CHANNEL");

Expand Down Expand Up @@ -1861,6 +1866,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
G_GNUC_END_IGNORE_DEPRECATIONS
g_assert_cmpint (snapd_snap_get_snap_type (snap), ==, SNAPD_SNAP_TYPE_APP);
g_assert_cmpint (snapd_snap_get_status (snap), ==, SNAPD_SNAP_STATUS_ACTIVE);
g_assert_cmpstr (snapd_snap_get_store_url (snap), ==, "https://snapcraft.io/snap");
g_assert_cmpstr (snapd_snap_get_summary (snap), ==, "SUMMARY");
g_assert_cmpstr (snapd_snap_get_tracking_channel (snap), ==, "CHANNEL");
g_assert_true (snapd_snap_get_trymode (snap));
Expand Down Expand Up @@ -4117,6 +4123,7 @@ test_find_query (void)
mock_snap_set_contact (s, "CONTACT");
mock_snap_set_website (s, "WEBSITE");
mock_snap_set_description (s, "DESCRIPTION");
mock_snap_set_store_url (s, "https://snapcraft.io/snap");
mock_snap_set_summary (s, "SUMMARY");
mock_snap_set_download_size (s, 1024);
mock_snap_add_price (s, 1.25, "NZD");
Expand Down Expand Up @@ -4155,6 +4162,7 @@ test_find_query (void)
g_assert_cmpint (snapd_channel_get_size (channel), ==, 65535);
g_assert_null (snapd_snap_get_contact (snap));
g_assert_null (snapd_snap_get_description (snap));
g_assert_null (snapd_snap_get_store_url (snap));
g_assert_null (snapd_snap_get_summary (snap));
snap = snaps->pdata[1];
g_assert_cmpstr (snapd_snap_get_channel (snap), ==, "CHANNEL");
Expand Down Expand Up @@ -4194,6 +4202,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
G_GNUC_END_IGNORE_DEPRECATIONS
g_assert_cmpint (snapd_snap_get_snap_type (snap), ==, SNAPD_SNAP_TYPE_APP);
g_assert_cmpint (snapd_snap_get_status (snap), ==, SNAPD_SNAP_STATUS_ACTIVE);
g_assert_cmpstr (snapd_snap_get_store_url (snap), ==, "https://snapcraft.io/snap");
g_assert_cmpstr (snapd_snap_get_summary (snap), ==, "SUMMARY");
g_assert_true (snapd_snap_get_trymode (snap));
g_assert_cmpstr (snapd_snap_get_version (snap), ==, "VERSION");
Expand Down
8 changes: 8 additions & 0 deletions tests/test-qt.cpp
Expand Up @@ -1392,6 +1392,7 @@ QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_POP
g_assert_cmpint (snap->snapType (), ==, QSnapdEnums::SnapTypeApp);
g_assert_cmpint (snap->status (), ==, QSnapdEnums::SnapStatusActive);
g_assert_null (snap->storeUrl ());
g_assert_null (snap->summary ());
g_assert_null (snap->trackingChannel ());
g_assert_false (snap->trymode ());
Expand Down Expand Up @@ -1436,6 +1437,7 @@ QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_POP
g_assert_cmpint (snap->snapType (), ==, QSnapdEnums::SnapTypeApp);
g_assert_cmpint (snap->status (), ==, QSnapdEnums::SnapStatusActive);
g_assert_null (snap->storeUrl ());
g_assert_null (snap->summary ());
g_assert_null (snap->trackingChannel ());
g_assert_false (snap->trymode ());
Expand Down Expand Up @@ -1513,6 +1515,7 @@ QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_POP
g_assert_cmpint (snap->snapType (), ==, QSnapdEnums::SnapTypeApp);
g_assert_cmpint (snap->status (), ==, QSnapdEnums::SnapStatusActive);
g_assert_null (snap->storeUrl ());
g_assert_null (snap->summary ());
g_assert_null (snap->trackingChannel ());
g_assert_false (snap->trymode ());
Expand Down Expand Up @@ -1557,6 +1560,7 @@ QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_POP
g_assert_cmpint (snap->snapType (), ==, QSnapdEnums::SnapTypeApp);
g_assert_cmpint (snap->status (), ==, QSnapdEnums::SnapStatusActive);
g_assert_null (snap->storeUrl ());
g_assert_null (snap->summary ());
g_assert_null (snap->trackingChannel ());
g_assert_false (snap->trymode ());
Expand Down Expand Up @@ -1661,6 +1665,7 @@ test_get_snap_optional_fields ()
mock_snap_set_description (s, "DESCRIPTION");
mock_snap_set_license (s, "LICENSE");
mock_snap_set_mounted_from (s, "MOUNTED-FROM");
mock_snap_set_store_url (s, "https://snapcraft.io/snap");
mock_snap_set_summary (s, "SUMMARY");
mock_snap_set_tracking_channel (s, "CHANNEL");
g_assert_true (mock_snapd_start (snapd, NULL));
Expand Down Expand Up @@ -1713,6 +1718,7 @@ QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_POP
g_assert_cmpint (snap->snapType (), ==, QSnapdEnums::SnapTypeApp);
g_assert_cmpint (snap->status (), ==, QSnapdEnums::SnapStatusActive);
g_assert_true (snap->storeUrl () == "https://snapcraft.io/snap");
g_assert_true (snap->summary () == "SUMMARY");
g_assert_true (snap->trackingChannel () == "CHANNEL");
g_assert_true (snap->trymode ());
Expand Down Expand Up @@ -3594,6 +3600,7 @@ test_find_query ()
mock_snap_set_contact (s, "CONTACT");
mock_snap_set_website (s, "WEBSITE");
mock_snap_set_description (s, "DESCRIPTION");
mock_snap_set_store_url (s, "https://snapcraft.io/snap");
mock_snap_set_summary (s, "SUMMARY");
mock_snap_set_download_size (s, 1024);
mock_snap_add_price (s, 1.25, "NZD");
Expand Down Expand Up @@ -3667,6 +3674,7 @@ QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_POP
g_assert_cmpint (snap1->snapType (), ==, QSnapdEnums::SnapTypeApp);
g_assert_cmpint (snap1->status (), ==, QSnapdEnums::SnapStatusActive);
g_assert_true (snap1->storeUrl () == "https://snapcraft.io/snap");
g_assert_true (snap1->summary () == "SUMMARY");
g_assert_true (snap1->trymode ());
g_assert_true (snap1->version () == "VERSION");
Expand Down

0 comments on commit 309396a

Please sign in to comment.