Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support store-url snap field #107

Merged
merged 1 commit into from Sep 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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