diff options
Diffstat (limited to 'subprojects')
-rw-r--r-- | subprojects/appstream.wrap | 5 | ||||
-rw-r--r-- | subprojects/gnome-pwa-list.wrap | 6 | ||||
-rw-r--r-- | subprojects/gnome-pwa-list/README.md | 61 | ||||
-rw-r--r-- | subprojects/gnome-pwa-list/gnome-pwa-list-foss.csv | 10 | ||||
-rw-r--r-- | subprojects/gnome-pwa-list/gnome-pwa-list-foss.xml | 310 | ||||
-rw-r--r-- | subprojects/gnome-pwa-list/gnome-pwa-list-proprietary.csv | 2 | ||||
-rw-r--r-- | subprojects/gnome-pwa-list/gnome-pwa-list-proprietary.xml | 62 | ||||
-rw-r--r-- | subprojects/gnome-pwa-list/meson.build | 14 | ||||
-rwxr-xr-x | subprojects/gnome-pwa-list/pwa-metainfo-generator.py | 213 | ||||
-rw-r--r-- | subprojects/gtk.wrap | 5 | ||||
-rw-r--r-- | subprojects/libadwaita.wrap | 5 | ||||
-rw-r--r-- | subprojects/libglib-testing.wrap | 5 | ||||
-rw-r--r-- | subprojects/libxmlb.wrap | 5 | ||||
-rw-r--r-- | subprojects/malcontent.wrap | 5 | ||||
-rw-r--r-- | subprojects/sysprof.wrap | 5 |
15 files changed, 713 insertions, 0 deletions
diff --git a/subprojects/appstream.wrap b/subprojects/appstream.wrap new file mode 100644 index 0000000..6f0beb0 --- /dev/null +++ b/subprojects/appstream.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory = appstream +url = https://github.com/ximion/appstream.git +revision = v0.14.1 +depth = 1 diff --git a/subprojects/gnome-pwa-list.wrap b/subprojects/gnome-pwa-list.wrap new file mode 100644 index 0000000..d679a35 --- /dev/null +++ b/subprojects/gnome-pwa-list.wrap @@ -0,0 +1,6 @@ +[wrap-git] +directory = gnome-pwa-list +url = https://gitlab.gnome.org/mwleeds/gnome-pwa-list.git +# Note: The git submodule for this wrap should be updated when updating this +revision = 48ac9f7ed6a639eab7648f3e3b19105694eaf306 +depth = 1 diff --git a/subprojects/gnome-pwa-list/README.md b/subprojects/gnome-pwa-list/README.md new file mode 100644 index 0000000..b365319 --- /dev/null +++ b/subprojects/gnome-pwa-list/README.md @@ -0,0 +1,61 @@ +# GNOME PWA list + +This repository is a place to maintain a list of Progressive Web Apps that are +suitable for inclusion with GNOME Software. The goals of this initiative are: + +1. To facilitate the discovery of useful apps by pre-populating a list of web + apps in GNOME Software +2. To enable users to take advantage of the powerful features of PWAs, such as + offline functionality and desktop integration +3. To make the GNOME platform competitive with other platforms which already + make PWAs first-class citizens + +There is more context available in the discussion on [this issue](https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1575). + +## Criteria for inclusion + +To be eligible for inclusion, PWAs must: + +- either be released under an open source license (see below) or appear in the + popular apps category [here](https://www.findpwa.com/list/top-apps) or [here](https://appsco.pe/toplist) +- be served over HTTPS +- include a [web app manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) with an + icon, name, and a `display` value of `fullscreen`, `standalone`, or + `minimal-ui`. The app having an Install button in Chrome means the app meets + and exceeds these criteria. +- be fully functional in GNOME Web +- not duplicate a native (non-Electron) app available for GNOME + +## Process for adding to the list + +1. Determine that the app meets all the criteria above. +2. Gather the information for each of the columns listed below. +2. If the license is [FSF-approved or OSI-approved](https://spdx.org/licenses/), + the app will go in `gnome-pwa-list-foss.csv`, otherwise `gnome-pwa-list-proprietary.csv`. +4. Add a new line in the format "URL,license,categories,content-rating,adaptive,custom-summary" to + either CSV file as appropriate. +5. Re-build the AppStream xml; see below. +6. Open a merge request [here](https://gitlab.gnome.org/mwleeds/gnome-pwa-list/-/merge_requests). + +| Column | Example value | Accepted values | +|---------|---------------|-----------------| +| URL | https://app.diagrams.net/ | the starting URL of the app | +| license | Apache-2.0 | the license(s) of the client side software in a format conforming to the AppStream [spec](https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-project_license) | +| categories | Graphics;Office | one or more main or additional categories as defined [here](https://specifications.freedesktop.org/menu-spec/latest/apa.html) | +| content-rating | social-info=intense;social-audio=moderate | a set of key-value pairs which are OARS 1.1 attributes and values; see [here](https://hughsie.github.io/oars/generate.html). "social-info=none" is appropriate if the service does not even store IP addresses | +| adaptive | adaptive | either "adaptive" or "not-adaptive" depending on whether mobile devices are supported | +| custom-summary | "Telegram web app based on the open API" | a one-sentence summary to use instead of the one in the manifest, or an empty string | + +## Re-generating AppStream xml + +The script `pwa-metainfo-generator.py` can take the CSV files mentioned above +and generate AppStream metainfo for them, which enables software centers to +display them with rich metadata such as screenshots. + +1. Install the `requests` and `bs4` python3 modules using pip3 or your package manager +2. To regenerate the FOSS xml: `python3 pwa-metainfo-generator.py gnome-pwa-list-foss.xml` +3. To regenerate the proprietary xml: `python3 pwa-metainfo-generator.py gnome-pwa-list-proprietary.xml` +4. You can check the validity using e.g. `appstreamcli validate + gnome-pwa-list-foss.xml`. It will complain about missing descriptions but + GNOME Software handles those gracefully. + diff --git a/subprojects/gnome-pwa-list/gnome-pwa-list-foss.csv b/subprojects/gnome-pwa-list/gnome-pwa-list-foss.csv new file mode 100644 index 0000000..e781ab6 --- /dev/null +++ b/subprojects/gnome-pwa-list/gnome-pwa-list-foss.csv @@ -0,0 +1,10 @@ +https://app.diagrams.net/,Apache-2.0,Graphics;Office;FlowChart,social-info=mild,adaptive, +https://pinafore.social/,AGPL-3.0-only,Chat,social-audio=intense;social-info=none,adaptive, +https://snapdrop.net/,GPL-3.0-only,FileTransfer;Utility,social-info=mild,adaptive,"Local network file sharing in your browser" +https://stackedit.io/app,Apache-2.0,TextEditor;Utility,social-info=mild,adaptive, +https://squoosh.app/,Apache-2.0,FileTools;Utility;ImageProcessing,social-info=moderate,adaptive, +https://excalidraw.com/,MIT,Office;Education,social-info=moderate,adaptive, +https://discourse.gnome.org/,GPL-2.0-or-later,Chat,social-info=moderate;social-audio=moderate;social-contacts=intense,adaptive, +https://discourse.flathub.org/,GPL-2.0-or-later,Chat,social-info=moderate;social-audio=moderate;social-contacts=intense,adaptive, +https://devdocs.io/,MPL-2.0,Documentation;Development,social-info=moderate,adaptive, +https://web.telegram.org/,GPL-3.0-only,Chat,social-info=mild,adaptive,"Telegram web app based on the MTProto protocol and Telegram's open API" diff --git a/subprojects/gnome-pwa-list/gnome-pwa-list-foss.xml b/subprojects/gnome-pwa-list/gnome-pwa-list-foss.xml new file mode 100644 index 0000000..f7d0a7a --- /dev/null +++ b/subprojects/gnome-pwa-list/gnome-pwa-list-foss.xml @@ -0,0 +1,310 @@ +<?xml version='1.0' encoding='utf-8'?> +<components version="0.15"> + <component type="web-application"> + <launchable type="url">https://app.diagrams.net/</launchable> + <url type="homepage">https://app.diagrams.net/</url> + <project_license>Apache-2.0</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Diagrams</name> + <id>org.gnome.Software.WebApp_527a2dd6729c3574227c145bbc447997f0048537.desktop</id> + <icon type="remote" width="512" height="512">https://app.diagrams.net/images/android-chrome-512x512.png</icon> + <categories> + <category>Graphics</category> + <category>Office</category> + <category>FlowChart</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">mild</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>diagrams.net is a completely free diagram editor</summary> + </component> + <component type="web-application"> + <launchable type="url">https://pinafore.social/</launchable> + <url type="homepage">https://pinafore.social/</url> + <project_license>AGPL-3.0-only</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Pinafore</name> + <id>org.gnome.Software.WebApp_e636aa5f2069f6e9c02deccc7b65f43da7985e32.desktop</id> + <icon type="remote" width="48" height="48">https://pinafore.social/icon-48.png</icon> + <icon type="remote" width="72" height="72">https://pinafore.social/icon-72.png</icon> + <icon type="remote" width="96" height="96">https://pinafore.social/icon-96.png</icon> + <icon type="remote" width="144" height="144">https://pinafore.social/icon-144.png</icon> + <icon type="remote" width="192" height="192">https://pinafore.social/icon-192.png</icon> + <icon type="remote" width="512" height="512">https://pinafore.social/icon-512.png</icon> + <icon type="remote" width="44" height="44">https://pinafore.social/icon-44.png</icon> + <icon type="remote" width="50" height="50">https://pinafore.social/icon-50.png</icon> + <icon type="remote" width="150" height="150">https://pinafore.social/icon-150.png</icon> + <screenshots> + <screenshot type="default"> + <image width="540" height="720">https://pinafore.social/screenshot-540-720-1.png</image> + </screenshot> + <screenshot type="default"> + <image width="540" height="720">https://pinafore.social/screenshot-540-720-2.png</image> + </screenshot> + <screenshot type="default"> + <image width="540" height="720">https://pinafore.social/screenshot-540-720-3.png</image> + </screenshot> + </screenshots> + <categories> + <category>Chat</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-audio">intense</content_attribute> + <content_attribute id="social-info">none</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>An alternative web client for Mastodon, focused on speed and simplicity</summary> + </component> + <component type="web-application"> + <launchable type="url">https://snapdrop.net/</launchable> + <url type="homepage">https://snapdrop.net/</url> + <project_license>GPL-3.0-only</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Snapdrop</name> + <id>org.gnome.Software.WebApp_4dda9043da5b2d2aa57c6064c907c1ae3fe58941.desktop</id> + <icon type="remote" width="192" height="192">https://snapdrop.net/images/android-chrome-192x192.png</icon> + <icon type="remote" width="512" height="512">https://snapdrop.net/images/android-chrome-512x512.png</icon> + <icon type="remote" width="96" height="96">https://snapdrop.net/images/favicon-96x96.png</icon> + <categories> + <category>FileTransfer</category> + <category>Utility</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">mild</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>Local network file sharing in your browser</summary> + </component> + <component type="web-application"> + <launchable type="url">https://stackedit.io/app</launchable> + <url type="homepage">https://stackedit.io/app</url> + <project_license>Apache-2.0</project_license> + <metadata_license>FSFAP</metadata_license> + <name>StackEdit</name> + <id>org.gnome.Software.WebApp_e7aada0261449b5239c5c458c48fe92717950d1a.desktop</id> + <icon type="remote" width="512" height="512">https://stackedit.io/icon_512x512.bc1452c3b77b59eb0d8c449de1c77310.png</icon> + <icon type="remote" width="384" height="384">https://stackedit.io/icon_384x384.3f55b77300c8b37b4aa380c8460ee0a2.png</icon> + <icon type="remote" width="256" height="256">https://stackedit.io/icon_256x256.f406288343ae34c5c7bd1543700c2ac0.png</icon> + <icon type="remote" width="192" height="192">https://stackedit.io/icon_192x192.eec0feaecc5bef1a499b3de11bde6b27.png</icon> + <icon type="remote" width="128" height="128">https://stackedit.io/icon_128x128.43ad56ce3535a3ffe333a76a05c13267.png</icon> + <icon type="remote" width="96" height="96">https://stackedit.io/icon_96x96.1d93fc90dc62ceec6c921786ddab3f69.png</icon> + <categories> + <category>TextEditor</category> + <category>Utility</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">mild</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>Full-featured, open-source Markdown editor</summary> + </component> + <component type="web-application"> + <launchable type="url">https://squoosh.app/</launchable> + <url type="homepage">https://squoosh.app/</url> + <project_license>Apache-2.0</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Squoosh</name> + <id>org.gnome.Software.WebApp_e41134be0ce95da0832878faa90cf3473b1b52d7.desktop</id> + <icon type="remote" width="1024" height="1024">https://squoosh.app/c/icon-large-cb438cac.png</icon> + <screenshots> + <screenshot type="default"> + <image width="540" height="720">https://squoosh.app/c/screenshot1-0ff68546.png</image> + </screenshot> + <screenshot type="default"> + <image width="540" height="720">https://squoosh.app/c/screenshot2-1f78c4db.jpg</image> + </screenshot> + <screenshot type="default"> + <image width="540" height="720">https://squoosh.app/c/screenshot3-c1e02216.jpg</image> + </screenshot> + </screenshots> + <categories> + <category>FileTools</category> + <category>Utility</category> + <category>ImageProcessing</category> + <category>Photography</category> + <category>Office</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">moderate</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>Compress and compare images with different codecs, right in your browser</summary> + </component> + <component type="web-application"> + <launchable type="url">https://excalidraw.com/</launchable> + <url type="homepage">https://excalidraw.com/</url> + <project_license>MIT</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Excalidraw</name> + <id>org.gnome.Software.WebApp_ea52ad18346faac27072cd1654243dfb7c70ef14.desktop</id> + <icon type="remote" width="180" height="180">https://excalidraw.com/logo-180x180.png</icon> + <icon type="remote" width="256" height="256">https://excalidraw.com/apple-touch-icon.png</icon> + <screenshots> + <screenshot type="default"> + <image width="462" height="945">https://excalidraw.com/screenshots/virtual-whiteboard.png</image> + </screenshot> + <screenshot type="default"> + <image width="462" height="945">https://excalidraw.com/screenshots/wireframe.png</image> + </screenshot> + <screenshot type="default"> + <image width="462" height="945">https://excalidraw.com/screenshots/illustration.png</image> + </screenshot> + <screenshot type="default"> + <image width="462" height="945">https://excalidraw.com/screenshots/shapes.png</image> + </screenshot> + <screenshot type="default"> + <image width="462" height="945">https://excalidraw.com/screenshots/collaboration.png</image> + </screenshot> + <screenshot type="default"> + <image width="462" height="945">https://excalidraw.com/screenshots/export.png</image> + </screenshot> + </screenshots> + <categories> + <category>Office</category> + <category>Education</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">moderate</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>Excalidraw is a whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them</summary> + </component> + <component type="web-application"> + <launchable type="url">https://discourse.gnome.org/</launchable> + <url type="homepage">https://discourse.gnome.org/</url> + <project_license>GPL-2.0-or-later</project_license> + <metadata_license>FSFAP</metadata_license> + <name>GNOME</name> + <id>org.gnome.Software.WebApp_dd7b0c5ff0c21c2984f8fc1a05d01c33aee4fe9d.desktop</id> + <icon type="remote" width="512" height="512">https://discourse.gnome.org/uploads/default/optimized/1X/d7f8fbabd4cd13f5fdbf7c73bd203723a2ef36ea_2_512x512.png</icon> + <categories> + <category>Chat</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">moderate</content_attribute> + <content_attribute id="social-audio">moderate</content_attribute> + <content_attribute id="social-contacts">intense</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>GNOME Project and Community related discussions</summary> + </component> + <component type="web-application"> + <launchable type="url">https://discourse.flathub.org/</launchable> + <url type="homepage">https://discourse.flathub.org/</url> + <project_license>GPL-2.0-or-later</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Flathub</name> + <id>org.gnome.Software.WebApp_02310f2fd700a63d17ecc2d4b261f6956d8a0193.desktop</id> + <icon type="remote" width="512" height="512">https://discourse-flathub-org-uploads.s3.dualstack.us-east-1.amazonaws.com/optimized/1X/be4563846333bda6607c6c3c5b226dff9d213866_2_512x512.png</icon> + <categories> + <category>Chat</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">moderate</content_attribute> + <content_attribute id="social-audio">moderate</content_attribute> + <content_attribute id="social-contacts">intense</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>A place for Flathub Contributors and Users</summary> + </component> + <component type="web-application"> + <launchable type="url">https://devdocs.io/</launchable> + <url type="homepage">https://devdocs.io/</url> + <project_license>MPL-2.0</project_license> + <metadata_license>FSFAP</metadata_license> + <name>DevDocs</name> + <id>org.gnome.Software.WebApp_962f69328d6450369f25a6fdb6bbd1764d11a3c8.desktop</id> + <icon type="remote" width="32" height="32">https://devdocs.io/images/webapp-icon-32.png</icon> + <icon type="remote" width="60" height="60">https://devdocs.io/images/webapp-icon-60.png</icon> + <icon type="remote" width="80" height="80">https://devdocs.io/images/webapp-icon-80.png</icon> + <icon type="remote" width="128" height="128">https://devdocs.io/images/webapp-icon-128.png</icon> + <icon type="remote" width="192" height="192">https://devdocs.io/images/webapp-icon-192.png</icon> + <icon type="remote" width="256" height="256">https://devdocs.io/images/webapp-icon-256.png</icon> + <icon type="remote" width="512" height="512">https://devdocs.io/images/webapp-icon-512.png</icon> + <categories> + <category>Documentation</category> + <category>Development</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">moderate</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>API Documentation Browser</summary> + </component> + <component type="web-application"> + <launchable type="url">https://web.telegram.org/</launchable> + <url type="homepage">https://web.telegram.org/</url> + <project_license>GPL-3.0-only</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Telegram</name> + <id>org.gnome.Software.WebApp_78977f7aec98d1c072a768b6a366b8d99cde8df4.desktop</id> + <icon type="remote" width="16" height="16">https://web.telegram.org/img/icons/icon16.png</icon> + <icon type="remote" width="32" height="32">https://web.telegram.org/img/icons/icon32.png</icon> + <icon type="remote" width="60" height="60">https://web.telegram.org/img/icons/icon60.png</icon> + <icon type="remote" width="64" height="64">https://web.telegram.org/img/icons/icon64.png</icon> + <icon type="remote" width="90" height="90">https://web.telegram.org/img/icons/icon90.png</icon> + <icon type="remote" width="128" height="128">https://web.telegram.org/img/icons/icon128.png</icon> + <icon type="remote" width="192" height="192">https://web.telegram.org/img/icons/icon192.png</icon> + <icon type="remote" width="512" height="512">https://web.telegram.org/img/icons/icon512.png</icon> + <icon type="remote" width="513" height="513">https://web.telegram.org/img/icons/icon.svg</icon> + <categories> + <category>Chat</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">mild</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>Telegram web app based on the MTProto protocol and Telegram's open API</summary> + </component> +</components> diff --git a/subprojects/gnome-pwa-list/gnome-pwa-list-proprietary.csv b/subprojects/gnome-pwa-list/gnome-pwa-list-proprietary.csv new file mode 100644 index 0000000..cb78d0c --- /dev/null +++ b/subprojects/gnome-pwa-list/gnome-pwa-list-proprietary.csv @@ -0,0 +1,2 @@ +https://twitter.com/,LicenseRef-proprietary,Chat,social-info=intense;social-audio=moderate,adaptive, +https://www.photopea.com/,LicenseRef-proprietary,Photography;ImageProcessing,social-info=intense,not-adaptive,"Photopea is an advanced photo editor supporting PSD, XCF, Sketch, XD, and CDR formats" diff --git a/subprojects/gnome-pwa-list/gnome-pwa-list-proprietary.xml b/subprojects/gnome-pwa-list/gnome-pwa-list-proprietary.xml new file mode 100644 index 0000000..ba3752a --- /dev/null +++ b/subprojects/gnome-pwa-list/gnome-pwa-list-proprietary.xml @@ -0,0 +1,62 @@ +<?xml version='1.0' encoding='utf-8'?> +<components version="0.15"> + <component type="web-application"> + <launchable type="url">https://twitter.com/</launchable> + <url type="homepage">https://twitter.com/</url> + <project_license>LicenseRef-proprietary</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Twitter</name> + <id>org.gnome.Software.WebApp_5ea0d5a0681e425022d889f3e355de2f19f92070.desktop</id> + <icon type="remote" width="192" height="192">https://abs.twimg.com/responsive-web/client-web-legacy/icon-default.ee534d85.png</icon> + <icon type="remote" width="512" height="512">https://abs.twimg.com/responsive-web/client-web-legacy/icon-default-large.8e027b65.png</icon> + <screenshots> + <screenshot type="default"> + <image width="586" height="1041">https://abs.twimg.com/responsive-web/client-web-legacy/twitter-lite-data-saver-marketing.68059865.png</image> + </screenshot> + <screenshot type="default"> + <image width="586" height="1041">https://abs.twimg.com/responsive-web/client-web-legacy/twitter-lite-explore-marketing.fd45b025.png</image> + </screenshot> + <screenshot type="default"> + <image width="586" height="1041">https://abs.twimg.com/responsive-web/client-web-legacy/twitter-lite-timeline-marketing.befcdb45.png</image> + </screenshot> + </screenshots> + <categories> + <category>Chat</category> + <category>News</category> + <category>News</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">intense</content_attribute> + <content_attribute id="social-audio">moderate</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <control>touch</control> + <display_length compare="ge">small</display_length> + </recommends> + <summary>Get breaking news, politics, trending music, world events, sports scores, and the latest global news stories as they unfold - all with less data</summary> + </component> + <component type="web-application"> + <launchable type="url">https://www.photopea.com/</launchable> + <url type="homepage">https://www.photopea.com/</url> + <project_license>LicenseRef-proprietary</project_license> + <metadata_license>FSFAP</metadata_license> + <name>Photopea</name> + <id>org.gnome.Software.WebApp_b38ea26683d13dabcfbbc10824fcd7f3b88af94b.desktop</id> + <icon type="remote" width="512" height="512">https://www.photopea.com/promo/icon512.png</icon> + <categories> + <category>Photography</category> + <category>ImageProcessing</category> + </categories> + <content_rating type="oars-1.1"> + <content_attribute id="social-info">intense</content_attribute> + </content_rating> + <recommends> + <control>pointing</control> + <control>keyboard</control> + <display_length compare="ge">medium</display_length> + </recommends> + <summary>Photopea is an advanced photo editor supporting PSD, XCF, Sketch, XD, and CDR formats</summary> + </component> +</components> diff --git a/subprojects/gnome-pwa-list/meson.build b/subprojects/gnome-pwa-list/meson.build new file mode 100644 index 0000000..b5846f3 --- /dev/null +++ b/subprojects/gnome-pwa-list/meson.build @@ -0,0 +1,14 @@ +project('gnome-pwa-list') + +python3 = find_program('python3') + +gnome_pwa_list_foss = configure_file( + input: 'gnome-pwa-list-foss.xml', + output: 'gnome-pwa-list-foss.xml', + copy: true, +) +gnome_pwa_list_proprietary = configure_file( + input: 'gnome-pwa-list-proprietary.xml', + output: 'gnome-pwa-list-proprietary.xml', + copy: true, +) diff --git a/subprojects/gnome-pwa-list/pwa-metainfo-generator.py b/subprojects/gnome-pwa-list/pwa-metainfo-generator.py new file mode 100755 index 0000000..ef7f24a --- /dev/null +++ b/subprojects/gnome-pwa-list/pwa-metainfo-generator.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright 2021-2022 Matthew Leeds +# SPDX-License-Identifier: GPL-2.0+ + +""" +Generates AppStream metainfo for a set of Progressive Web Apps + +Usage: pwa-metainfo-generator.py LIST.CSV + +The CSV format expected looks like this: + +https://app.diagrams.net/,Apache-2.0 +https://pinafore.social/,AGPL-3.0-only +... + +The output will be written to a file with the same name as the input but a .xml +file ending. + +This tool uses the web app's manifest to fill out the AppStream info, so an +Internet connection is required +""" + +import csv +import sys +import xml.etree.ElementTree as ET +import requests +import json +import hashlib +from urllib.parse import urljoin +from bs4 import BeautifulSoup + +# w3c categories: https://github.com/w3c/manifest/wiki/Categories +# appstream categories: https://specifications.freedesktop.org/menu-spec/latest/apa.html +# left out due to no corresponding appstream category: +# entertainment, food, government, kids, lifestyle, personalization, politics, shopping, travel +w3c_to_appstream_categories = { + "books": "Literature", + "business": "Office", + "education": "Education", + "finance": "Finance", + "fitness": "Sports", + "games": "Game", + "health": "MedicalSoftware", + "magazines": "News", + "medical": "MedicalSoftware", + "music": "Music", + "navigation": "Maps", + "news": "News", + "photo": "Photography", + "productivity": "Office", + "security": "Security", + "social": "Chat", + "sports": "Sports", + "utilities": "Utility", + "weather": "Utility" +} + + +def get_manifest_for_url(url): + response = requests.get(url) + response.raise_for_status() + soup = BeautifulSoup(response.text, 'html.parser') + + # Seems this link is broken for discourse, href value doesn't use quotes + if url.startswith('https://discourse.'): + manifest_path = '/manifest.webmanifest' + elif soup.head: + manifest_path = soup.head.find('link', rel='manifest', href=True)['href'] + else: + manifest_path = soup.find('link', rel='manifest', href=True)['href'] + + manifest_response = requests.get(urljoin(url, manifest_path)) + manifest_response.raise_for_status() + return json.loads(manifest_response.text) + +def copy_metainfo_from_manifest(url, app_component, manifest, categories, content_rating, adaptive, custom_summary): + # Short name seems more suitable in practice + try: + ET.SubElement(app_component, 'name').text = manifest['short_name'] + except KeyError: + ET.SubElement(app_component, 'name').text = manifest['name'] + + # Generate a unique app ID that meets the spec requirements. A different + # app ID will be used upon install that is determined by the backing browser + hashed_url = hashlib.sha1(url.encode('utf-8')).hexdigest() + app_id = 'org.gnome.Software.WebApp_' + hashed_url + '.desktop' + ET.SubElement(app_component, 'id').text = app_id + + # Avoid using maskable icons if we can, they don't have nice rounded edges + normal_icon_exists = False + for icon in manifest['icons']: + if 'purpose' not in icon or icon['purpose'] == 'any': + normal_icon_exists = True + + for icon in manifest['icons']: + if 'purpose' in icon and icon['purpose'] != 'any' and normal_icon_exists: + continue + icon_element = ET.SubElement(app_component, 'icon') + icon_element.text = urljoin(url, icon['src']) + icon_element.set('type', 'remote') + size = icon['sizes'].split(' ')[-1] + icon_element.set('width', size.split('x')[0]) + icon_element.set('height', size.split('x')[1]) + + if 'screenshots' in manifest: + screenshots_element = ET.SubElement(app_component, 'screenshots') + for screenshot in manifest['screenshots']: + screenshot_element = ET.SubElement(screenshots_element, 'screenshot') + screenshot_element.set('type', 'default') + image_element = ET.SubElement(screenshot_element, 'image') + image_element.text = urljoin(url, screenshot['src']) + size = screenshot['sizes'].split(' ')[-1] + image_element.set('width', size.split('x')[0]) + image_element.set('height', size.split('x')[1]) + if 'label' in screenshot: + ET.SubElement(screenshot_element, 'caption').text = screenshot['label'] + + categories_element = ET.SubElement(app_component, 'categories') + user_categories = categories.split(';') + for category in user_categories: + if len(category) > 0: + ET.SubElement(categories_element, 'category').text = category + if 'categories' in manifest: + for category in manifest['categories']: + try: + mapped_category = w3c_to_appstream_categories[category] + if mapped_category not in user_categories: + ET.SubElement(categories_element, 'category').text = mapped_category + except KeyError: + pass + + if len(content_rating) > 0: + ratings_element = ET.SubElement(app_component, 'content_rating') + ratings_element.set('type', 'oars-1.1') + content_ratings = content_rating.split(';') + for rating in content_ratings: + if len(rating) > 0: + rating_element = ET.SubElement(ratings_element, 'content_attribute') + rating_element.text = rating.split('=')[1] + rating_element.set('id', rating.split('=')[0]) + + if adaptive in ('adaptive', 'not-adaptive'): + recommends_element = ET.SubElement(app_component, 'recommends') + ET.SubElement(recommends_element, 'control').text = 'pointing' + ET.SubElement(recommends_element, 'control').text = 'keyboard' + if adaptive == 'adaptive': + ET.SubElement(recommends_element, 'control').text = 'touch' + display_element = ET.SubElement(recommends_element, 'display_length') + display_element.set('compare', 'ge') + if adaptive == 'adaptive': + display_element.text = 'small' + else: + display_element.text = 'medium' + + summary = '' + if len(custom_summary) > 0: + summary = custom_summary + elif 'description' in manifest: + summary = manifest['description'] + + if len(summary) > 0: + # appstreamcli validate recommends summary not ending with '.' + if summary.endswith('.'): summary = summary[:-1] + # ...and not containing newlines + summary = summary.replace('\n', ' ').strip() + ET.SubElement(app_component, 'summary').text = summary + +def main(): + if len(sys.argv) != 2 or not sys.argv[1].endswith('.csv'): + print('Usage: {} input.csv'.format(sys.argv[0])) + sys.exit(1) + + input_filename = sys.argv[1] + out_filename = input_filename.replace('.csv', '.xml') + with open(input_filename) as input_csv: + components = ET.Element('components') + components.set('version', '0.15') + reader = csv.reader(input_csv) + for (i, app) in enumerate(reader): + if len(app) != 6: + print('Line {} has the wrong number of columns!'.format(i+1), file=sys.stderr) + sys.exit(2) + + app_component = ET.SubElement(components, 'component') + app_component.set('type', 'web-application') + + launchable = ET.SubElement(app_component, 'launchable') + launchable.set('type', 'url') + launchable.text = app[0] + + url = ET.SubElement(app_component, 'url') + url.set('type', 'homepage') + url.text = app[0] + + project_license = ET.SubElement(app_component, 'project_license') + project_license.text = app[1] + + # metadata license is a required field but we don't have one, assume FSFAP? + metadata_license = ET.SubElement(app_component, 'metadata_license') + metadata_license.text = 'FSFAP' + + print('Processing entry \'{}\' from file \'{}\''.format(app[0], input_filename)) + copy_metainfo_from_manifest(app[0], app_component, get_manifest_for_url(app[0]), + app[2], app[3], app[4], app[5]) + + tree = ET.ElementTree(components) + ET.indent(tree) + tree.write(out_filename, xml_declaration=True, encoding='utf-8', method='xml') + + +if __name__=='__main__': + main() diff --git a/subprojects/gtk.wrap b/subprojects/gtk.wrap new file mode 100644 index 0000000..38d4770 --- /dev/null +++ b/subprojects/gtk.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory=gtk +url=https://gitlab.gnome.org/GNOME/gtk.git +revision=4.6.0 +depth=1 diff --git a/subprojects/libadwaita.wrap b/subprojects/libadwaita.wrap new file mode 100644 index 0000000..6831248 --- /dev/null +++ b/subprojects/libadwaita.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory=libadwaita +url=https://gitlab.gnome.org/GNOME/libadwaita.git +revision=1.0.1 +depth=1 diff --git a/subprojects/libglib-testing.wrap b/subprojects/libglib-testing.wrap new file mode 100644 index 0000000..e3c06f2 --- /dev/null +++ b/subprojects/libglib-testing.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory = libglib-testing +url = https://gitlab.gnome.org/pwithnall/libglib-testing.git +revision = 0.1.1 +depth = 1 diff --git a/subprojects/libxmlb.wrap b/subprojects/libxmlb.wrap new file mode 100644 index 0000000..8b46a7d --- /dev/null +++ b/subprojects/libxmlb.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory = libxmlb +url = https://github.com/hughsie/libxmlb.git +revision = main +depth = 1 diff --git a/subprojects/malcontent.wrap b/subprojects/malcontent.wrap new file mode 100644 index 0000000..e41381a --- /dev/null +++ b/subprojects/malcontent.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory=malcontent +url=https://gitlab.freedesktop.org/pwithnall/malcontent.git +revision=ab75b35d91a32aae6179f42a8037a8ef28e2f3c5 +depth=1 diff --git a/subprojects/sysprof.wrap b/subprojects/sysprof.wrap new file mode 100644 index 0000000..6a807b1 --- /dev/null +++ b/subprojects/sysprof.wrap @@ -0,0 +1,5 @@ +[wrap-git] +directory=sysprof +url=https://gitlab.gnome.org/GNOME/sysprof.git +revision=555ec04e322ec979c84a7a21d09a5afd9c02f672 +depth=1 |