mirror of
https://github.com/terrapkg/packages.git
synced 2026-05-31 09:01:55 +00:00
05b0359fda
(cherry picked from commit 1d6c077f43)
Co-authored-by: lea <lleyton@fyralabs.com>
312 lines
12 KiB
Diff
312 lines
12 KiB
Diff
commit fce55d9373bfb82953191b32e276a2129ffcb8c1
|
|
Author: Marius Meisenzahl <meisenzahl@users.noreply.github.com>
|
|
Date: Wed Feb 7 00:14:43 2024 +0100
|
|
|
|
Add support for AppStream 1.0 (#2099)
|
|
|
|
diff --git a/src/Core/FlatpakBackend.vala b/src/Core/FlatpakBackend.vala
|
|
index 98931505..10f2baab 100644
|
|
--- a/src/Core/FlatpakBackend.vala
|
|
+++ b/src/Core/FlatpakBackend.vala
|
|
@@ -400,8 +400,13 @@ public class AppCenterCore.FlatpakBackend : Backend, Object {
|
|
|
|
var category_array = new GLib.GenericArray<AppStream.Category> ();
|
|
category_array.add (category);
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ AppStream.utils_sort_components_into_categories (user_appstream_pool.get_components ().as_array (), category_array, false);
|
|
+ AppStream.utils_sort_components_into_categories (system_appstream_pool.get_components ().as_array (), category_array, false);
|
|
+#else
|
|
AppStream.utils_sort_components_into_categories (user_appstream_pool.get_components (), category_array, false);
|
|
AppStream.utils_sort_components_into_categories (system_appstream_pool.get_components (), category_array, false);
|
|
+#endif
|
|
components = category.get_components ();
|
|
|
|
var apps = new Gee.TreeSet<AppCenterCore.Package> ();
|
|
@@ -417,13 +422,21 @@ public class AppCenterCore.FlatpakBackend : Backend, Object {
|
|
var apps = new Gee.TreeSet<AppCenterCore.Package> ();
|
|
var comps = user_appstream_pool.search (query);
|
|
if (category == null) {
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ comps.as_array ().foreach ((comp) => {
|
|
+#else
|
|
comps.foreach ((comp) => {
|
|
+#endif
|
|
var packages = get_packages_for_component_id (comp.get_id ());
|
|
apps.add_all (packages);
|
|
});
|
|
} else {
|
|
var cat_packages = get_applications_for_category (category);
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ comps.as_array ().foreach ((comp) => {
|
|
+#else
|
|
comps.foreach ((comp) => {
|
|
+#endif
|
|
var packages = get_packages_for_component_id (comp.get_id ());
|
|
foreach (var package in packages) {
|
|
if (package in cat_packages) {
|
|
@@ -435,13 +448,21 @@ public class AppCenterCore.FlatpakBackend : Backend, Object {
|
|
|
|
comps = system_appstream_pool.search (query);
|
|
if (category == null) {
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ comps.as_array ().foreach ((comp) => {
|
|
+#else
|
|
comps.foreach ((comp) => {
|
|
+#endif
|
|
var packages = get_packages_for_component_id (comp.get_id ());
|
|
apps.add_all (packages);
|
|
});
|
|
} else {
|
|
var cat_packages = get_applications_for_category (category);
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ comps.as_array ().foreach ((comp) => {
|
|
+#else
|
|
comps.foreach ((comp) => {
|
|
+#endif
|
|
var packages = get_packages_for_component_id (comp.get_id ());
|
|
foreach (var package in packages) {
|
|
if (package in cat_packages) {
|
|
@@ -510,7 +531,11 @@ public class AppCenterCore.FlatpakBackend : Backend, Object {
|
|
continue;
|
|
}
|
|
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ if (package.component.get_developer ().get_name () == author) {
|
|
+#else
|
|
if (package.component.developer_name == author) {
|
|
+#endif
|
|
package_ids.add (package.component.id);
|
|
|
|
AppCenterCore.Package? user_package = null;
|
|
@@ -1095,7 +1120,11 @@ public class AppCenterCore.FlatpakBackend : Backend, Object {
|
|
warning ("Errors found in flatpak appdata, some components may be incomplete/missing: %s", e.message);
|
|
} finally {
|
|
var comp_validator = ComponentValidator.get_default ();
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ user_appstream_pool.get_components ().as_array ().foreach ((comp) => {
|
|
+#else
|
|
user_appstream_pool.get_components ().foreach ((comp) => {
|
|
+#endif
|
|
if (!comp_validator.validate (comp)) {
|
|
return;
|
|
}
|
|
@@ -1133,7 +1162,11 @@ public class AppCenterCore.FlatpakBackend : Backend, Object {
|
|
warning ("Errors found in flatpak appdata, some components may be incomplete/missing: %s", e.message);
|
|
} finally {
|
|
var comp_validator = ComponentValidator.get_default ();
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ system_appstream_pool.get_components ().as_array ().foreach ((comp) => {
|
|
+#else
|
|
system_appstream_pool.get_components ().foreach ((comp) => {
|
|
+#endif
|
|
if (!comp_validator.validate (comp)) {
|
|
return;
|
|
}
|
|
diff --git a/src/Core/Package.vala b/src/Core/Package.vala
|
|
index 0f9a90c4..ed141292 100644
|
|
--- a/src/Core/Package.vala
|
|
+++ b/src/Core/Package.vala
|
|
@@ -306,7 +306,11 @@ public class AppCenterCore.Package : Object {
|
|
return _author;
|
|
}
|
|
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ _author = component.get_developer ().get_name ();
|
|
+#else
|
|
_author = component.developer_name;
|
|
+#endif
|
|
|
|
if (_author == null) {
|
|
var project_group = component.project_group;
|
|
@@ -677,7 +681,11 @@ public class AppCenterCore.Package : Object {
|
|
}
|
|
|
|
try {
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ description = AppStream.markup_convert (description, TEXT);
|
|
+#else
|
|
description = AppStream.markup_convert_simple (description);
|
|
+#endif
|
|
} catch (Error e) {
|
|
warning ("Failed to convert description to markup: %s", e.message);
|
|
}
|
|
@@ -919,7 +927,11 @@ public class AppCenterCore.Package : Object {
|
|
}
|
|
|
|
public AppStream.Release? get_newest_release () {
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ var releases = component.get_releases_plain ().get_entries ();
|
|
+#else
|
|
var releases = component.get_releases ();
|
|
+#endif
|
|
releases.sort_with_data ((a, b) => {
|
|
if (a.get_version () == null || b.get_version () == null) {
|
|
if (a.get_version () != null) {
|
|
diff --git a/src/Core/PackageKitBackend.vala b/src/Core/PackageKitBackend.vala
|
|
index 09da4074..a108831e 100644
|
|
--- a/src/Core/PackageKitBackend.vala
|
|
+++ b/src/Core/PackageKitBackend.vala
|
|
@@ -275,7 +275,11 @@ public class AppCenterCore.PackageKitBackend : Backend, Object {
|
|
} finally {
|
|
var new_package_list = new Gee.HashMap<string, Package> ();
|
|
var comp_validator = ComponentValidator.get_default ();
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ appstream_pool.get_components ().as_array ().foreach ((comp) => {
|
|
+#else
|
|
appstream_pool.get_components ().foreach ((comp) => {
|
|
+#endif
|
|
if (!comp_validator.validate (comp)) {
|
|
return;
|
|
}
|
|
@@ -317,7 +321,12 @@ public class AppCenterCore.PackageKitBackend : Backend, Object {
|
|
component.set_id (id);
|
|
component.set_origin (Package.APPCENTER_PACKAGE_ORIGIN);
|
|
|
|
-#if HAS_APPSTREAM_0_15
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ var components = new AppStream.ComponentBox (AppStream.ComponentBoxFlags.NONE);
|
|
+ components.add (component);
|
|
+
|
|
+ appstream_pool.add_components (components);
|
|
+#elif HAS_APPSTREAM_0_15
|
|
var components = new GenericArray<AppStream.Component> ();
|
|
components.add (component);
|
|
|
|
@@ -430,7 +439,11 @@ public class AppCenterCore.PackageKitBackend : Backend, Object {
|
|
break;
|
|
}
|
|
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ if (package.component.get_developer ().get_name () == author) {
|
|
+#else
|
|
if (package.component.developer_name == author) {
|
|
+#endif
|
|
packages.add (package);
|
|
}
|
|
}
|
|
@@ -447,7 +460,11 @@ public class AppCenterCore.PackageKitBackend : Backend, Object {
|
|
|
|
var category_array = new GLib.GenericArray<AppStream.Category> ();
|
|
category_array.add (category);
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ AppStream.utils_sort_components_into_categories (appstream_pool.get_components ().as_array (), category_array, true);
|
|
+#else
|
|
AppStream.utils_sort_components_into_categories (appstream_pool.get_components (), category_array, true);
|
|
+#endif
|
|
components = category.get_components ();
|
|
|
|
var apps = new Gee.TreeSet<AppCenterCore.Package> ();
|
|
@@ -465,7 +482,11 @@ public class AppCenterCore.PackageKitBackend : Backend, Object {
|
|
var apps = new Gee.TreeSet<AppCenterCore.Package> ();
|
|
var comps = appstream_pool.search (query);
|
|
if (category == null) {
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ comps.as_array ().foreach ((comp) => {
|
|
+#else
|
|
comps.foreach ((comp) => {
|
|
+#endif
|
|
var package = get_package_for_component_id (comp.get_id ());
|
|
if (package != null) {
|
|
apps.add (package);
|
|
@@ -473,7 +494,11 @@ public class AppCenterCore.PackageKitBackend : Backend, Object {
|
|
});
|
|
} else {
|
|
var cat_packages = get_applications_for_category (category);
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ comps.as_array ().foreach ((comp) => {
|
|
+#else
|
|
comps.foreach ((comp) => {
|
|
+#endif
|
|
var package = get_package_for_component_id (comp.get_id ());
|
|
if (package != null && package in cat_packages) {
|
|
apps.add (package);
|
|
diff --git a/src/Views/AppInfoView.vala b/src/Views/AppInfoView.vala
|
|
index 5a3a361a..bef37f0e 100644
|
|
--- a/src/Views/AppInfoView.vala
|
|
+++ b/src/Views/AppInfoView.vala
|
|
@@ -310,8 +310,16 @@ public class AppCenter.Views.AppInfoView : AppCenter.AbstractAppContainer {
|
|
oars_flowbox.add (uncurated);
|
|
}
|
|
#endif
|
|
+
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ var active_locale = "en-US";
|
|
+ if (package_component.get_context () != null) {
|
|
+ active_locale = package_component.get_context ().get_locale () ?? "en-US";
|
|
+ }
|
|
+#else
|
|
var active_locale = package_component.get_active_locale ();
|
|
- if (active_locale != "en_US") {
|
|
+#endif
|
|
+ if (active_locale != "en_US" && active_locale != "en-US") {
|
|
var percent_translated = package_component.get_language (
|
|
// Expects language without locale
|
|
active_locale.split ("_")[0]
|
|
@@ -492,7 +500,11 @@ public class AppCenter.Views.AppInfoView : AppCenter.AbstractAppContainer {
|
|
}
|
|
}
|
|
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ screenshots = package_component.get_screenshots_all ();
|
|
+#else
|
|
screenshots = package_component.get_screenshots ();
|
|
+#endif
|
|
|
|
if (screenshots.length > 0) {
|
|
screenshot_carousel = new Hdy.Carousel () {
|
|
@@ -1030,7 +1042,11 @@ public class AppCenter.Views.AppInfoView : AppCenter.AbstractAppContainer {
|
|
get_app_download_size.begin ();
|
|
|
|
Idle.add (() => {
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ var releases = package.component.get_releases_plain ().get_entries ();
|
|
+#else
|
|
var releases = package.component.get_releases ();
|
|
+#endif
|
|
|
|
foreach (unowned var release in releases) {
|
|
if (release.get_version () == null) {
|
|
@@ -1049,7 +1065,11 @@ public class AppCenter.Views.AppInfoView : AppCenter.AbstractAppContainer {
|
|
|
|
release_carousel.add (release_row);
|
|
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ if (package.installed && AppStream.vercmp_simple (release.get_version (), package.get_version ()) <= 0) {
|
|
+#else
|
|
if (package.installed && AppStream.utils_compare_versions (release.get_version (), package.get_version ()) <= 0) {
|
|
+#endif
|
|
break;
|
|
}
|
|
}
|
|
diff --git a/src/Widgets/ReleaseRow.vala b/src/Widgets/ReleaseRow.vala
|
|
index 3b487914..36fcbc76 100644
|
|
--- a/src/Widgets/ReleaseRow.vala
|
|
+++ b/src/Widgets/ReleaseRow.vala
|
|
@@ -116,7 +116,11 @@ public class AppCenter.Widgets.ReleaseRow : Gtk.Box {
|
|
private string format_release_description (string? description ) {
|
|
if (description != null) {
|
|
try {
|
|
+#if HAS_APPSTREAM_1_0
|
|
+ var markup = AppStream.markup_convert (description, TEXT);
|
|
+#else
|
|
var markup = AppStream.markup_convert_simple (description);
|
|
+#endif
|
|
|
|
if (markup.strip () != "") {
|
|
return markup;
|
|
diff --git a/src/meson.build b/src/meson.build
|
|
index d3d558ef..df69a0bf 100644
|
|
--- a/src/meson.build
|
|
+++ b/src/meson.build
|
|
@@ -78,6 +78,10 @@ if appstream.version().version_compare('>=0.16')
|
|
args += '--define=HAS_APPSTREAM_0_16'
|
|
endif
|
|
|
|
+if appstream.version().version_compare('>=1.0')
|
|
+ args += '--define=HAS_APPSTREAM_1_0'
|
|
+endif
|
|
+
|
|
if get_option('packagekit_backend')
|
|
appcenter_files += files(
|
|
'Core/PackageKitBackend.vala',
|