From a7cb4b42455717c8285052b0bfe83245674991ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Wed, 16 Apr 2025 11:01:03 -0700 Subject: [PATCH 1/3] Move get_screenshots () to Package --- src/Core/Package.vala | 62 ++++++++++++++++++++++++++++++++++++ src/Views/AppInfoView.vala | 65 +------------------------------------- 2 files changed, 63 insertions(+), 64 deletions(-) diff --git a/src/Core/Package.vala b/src/Core/Package.vala index 4dead0804..b2ec55e2c 100644 --- a/src/Core/Package.vala +++ b/src/Core/Package.vala @@ -898,6 +898,68 @@ public class AppCenterCore.Package : Object { return null; } + + public GenericArray get_screenshots () { + bool has_matching_environment = false; + bool has_matching_style = false; + var desktop_environment = Environment.get_variable ("XDG_SESSION_DESKTOP"); + var prefer_dark_style = Gtk.Settings.get_default ().gtk_application_prefer_dark_theme; + var desktop_style = prefer_dark_style? AppStream.ColorSchemeKind.DARK.to_string () : AppStream.ColorSchemeKind.LIGHT.to_string (); + + component.sort_screenshots (desktop_environment, desktop_style.to_string (), false); + var all_screenshots = component.get_screenshots_all (); + + // This first pass is to gather if we have matching style and matching + // desktop environments, this is useful if we need to fall back to any + // screnshot if none of the conditions are fullfiled + foreach (unowned var screenshot in all_screenshots) { + var environment_id = screenshot.get_environment (); + if (environment_id != null) { + var environment_split = environment_id.split (":", 2); + var screenshot_environment = environment_split[0]; + var screenshot_style = environment_split[1] ?? AppStream.ColorSchemeKind.LIGHT.to_string (); + + if (screenshot_environment == desktop_environment) { + has_matching_environment = true; + } + + if (screenshot_style == desktop_style) { + has_matching_style = true; + } + } + } + + var screenshots = new GenericArray (); + + foreach (unowned var screenshot in all_screenshots) { + var environment_id = screenshot.get_environment (); + if (environment_id == null) { + screenshots.add (screenshot); + break; + } + + var environment_split = environment_id.split (":", 2); + var screenshot_environment = environment_split[0]; + var screenshot_style = environment_split[1] ?? AppStream.ColorSchemeKind.LIGHT.to_string (); + + var same_environment = screenshot_environment == desktop_environment; + var same_style = screenshot_style == desktop_style; + + if (same_environment && same_style) { + screenshots.add (screenshot); + } else if (same_environment && !same_style && !has_matching_style) { + screenshots.add (screenshot); + } else if (!same_environment && same_style && !has_matching_environment) { + screenshots.add (screenshot); + } else if (!has_matching_environment && !has_matching_style) { + screenshots.add (screenshot); + break; + } + } + + return screenshots; + } + public async uint64 get_download_size_including_deps () { uint64 size = 0; try { diff --git a/src/Views/AppInfoView.vala b/src/Views/AppInfoView.vala index bb98664e2..baf60e55c 100644 --- a/src/Views/AppInfoView.vala +++ b/src/Views/AppInfoView.vala @@ -472,70 +472,7 @@ public class AppCenter.Views.AppInfoView : Adw.NavigationPage { } } - bool has_matching_environment = false; - bool has_matching_style = false; - var desktop_environment = Environment.get_variable ("XDG_SESSION_DESKTOP"); - var prefer_dark_style = Gtk.Settings.get_default ().gtk_application_prefer_dark_theme; - var desktop_style = prefer_dark_style - ? AppStream.ColorSchemeKind.DARK.to_string () - : AppStream.ColorSchemeKind.LIGHT.to_string (); - - package_component.sort_screenshots (desktop_environment, - desktop_style.to_string (), - false); - - var all_screenshots = package_component.get_screenshots_all (); - - // This first pass is to gather if we have matching style and matching - // desktop environments, this is useful if we need to fall back to any - // screnshot if none of the conditions are fullfiled - all_screenshots.foreach ((screenshot) => { - var environment_id = screenshot.get_environment (); - if (environment_id != null) { - var environment_split = environment_id.split (":", 2); - var screenshot_environment = environment_split[0]; - var screenshot_style = environment_split[1] - ?? AppStream.ColorSchemeKind.LIGHT.to_string (); - - if (screenshot_environment == desktop_environment) { - has_matching_environment = true; - } - - if (screenshot_style == desktop_style) { - has_matching_style = true; - } - } - }); - - screenshots = new GenericArray (); - - all_screenshots.foreach ((screenshot) => { - var environment_id = screenshot.get_environment (); - if (environment_id == null) { - screenshots.add (screenshot); - return; - } - - var environment_split = environment_id.split (":", 2); - var screenshot_environment = environment_split[0]; - var screenshot_style = environment_split[1] - ?? AppStream.ColorSchemeKind.LIGHT.to_string (); - - var same_environment = screenshot_environment == desktop_environment; - var same_style = screenshot_style == desktop_style; - - if (same_environment && same_style) { - screenshots.add (screenshot); - } else if (same_environment && !same_style && !has_matching_style) { - screenshots.add (screenshot); - } else if (!same_environment && same_style && !has_matching_environment) { - screenshots.add (screenshot); - } else if (!has_matching_environment && !has_matching_style) { - screenshots.add (screenshot); - return; - } - }); - + screenshots = package.get_screenshots (); if (screenshots.length > 0) { screenshot_carousel = new Adw.Carousel () { allow_mouse_drag = true, From 456f04ca2f95a6b1f2a9c68a6391a620a5faa660 Mon Sep 17 00:00:00 2001 From: Ryo Nakano Date: Sat, 19 Apr 2025 10:42:08 +0900 Subject: [PATCH 2/3] Remove extra newline --- src/Core/Package.vala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Core/Package.vala b/src/Core/Package.vala index b2ec55e2c..35bc05534 100644 --- a/src/Core/Package.vala +++ b/src/Core/Package.vala @@ -898,7 +898,6 @@ public class AppCenterCore.Package : Object { return null; } - public GenericArray get_screenshots () { bool has_matching_environment = false; bool has_matching_style = false; From f25452e4a746a0b732b4e24930363166398b4acd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 28 Aug 2025 12:04:55 -0700 Subject: [PATCH 3/3] Address review comments --- src/Core/Package.vala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Core/Package.vala b/src/Core/Package.vala index 35bc05534..c41e06a76 100644 --- a/src/Core/Package.vala +++ b/src/Core/Package.vala @@ -934,7 +934,7 @@ public class AppCenterCore.Package : Object { var environment_id = screenshot.get_environment (); if (environment_id == null) { screenshots.add (screenshot); - break; + continue; } var environment_split = environment_id.split (":", 2); @@ -952,7 +952,7 @@ public class AppCenterCore.Package : Object { screenshots.add (screenshot); } else if (!has_matching_environment && !has_matching_style) { screenshots.add (screenshot); - break; + continue; } }