Skip to content

Commit 02e2fa2

Browse files
committed
Adapt to flatpak installer changes, improve flatpak presentation.
- Show when a flatpak is being installed as a dependency of an already-installed parent runtime - Compare using full FlatpakRef strings when looking for parent runtimes, in order to distinguish between branches. - Display branch names in the update details for dependencies - these can also have the same 'name' but different branch within a single parent runtime. Depends on mintcommon up thru: linuxmint/mintcommon@e69615d
1 parent f6a4d8b commit 02e2fa2

File tree

3 files changed

+53
-44
lines changed

3 files changed

+53
-44
lines changed

usr/lib/linuxmint/mintUpdate/Classes.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import json
1010
import os
1111
import subprocess
12+
import sys
1213
import time
1314
import re
1415
import threading
@@ -387,6 +388,7 @@ def __init__(self, op=None, installer=None, ref=None, installed_ref=None, remote
387388

388389
# nullable
389390
self.installed_ref = installed_ref
391+
self.installing = self.installed_ref is None
390392
self.remote_ref = remote_ref
391393
self.pkginfo = pkginfo
392394
#
@@ -420,7 +422,7 @@ def __init__(self, op=None, installer=None, ref=None, installed_ref=None, remote
420422
old_commit = installed_ref.get_commit()[:10]
421423
else:
422424
iref_version = ""
423-
old_commit = ""
425+
old_commit = _("Installing")
424426

425427
appstream_version = ""
426428
# new version
@@ -441,23 +443,31 @@ def __init__(self, op=None, installer=None, ref=None, installed_ref=None, remote
441443
self.new_version = new_commit
442444

443445
if pkginfo:
444-
self.name = installer.get_display_name(pkginfo)
446+
self.name = pkginfo.get_display_name() or self.ref_name
445447
elif installed_ref and self.flatpak_type != "runtime":
446448
self.name = installed_ref.get_appdata_name()
447449
else:
448450
self.name = ref.get_name()
449451

452+
# gnome has the branch as part of its name, the rest add it to the name if it's not a Locale
453+
if self.flatpak_type == "runtime":
454+
if ref.get_name() not in ("org.gnome.Platform", "org.gnome.Sdk") and (not ref.get_name().endswith(".Locale")):
455+
self.name = "%s (%s)" % (self.name, ref.get_branch())
456+
450457
if pkginfo:
451-
self.summary = installer.get_summary(pkginfo)
458+
self.summary = pkginfo.get_summary()
459+
if self.summary is None:
460+
if installed_ref:
461+
self.summary = installed_ref.get_appdata_summary()
462+
452463
self.description = installer.get_description(pkginfo)
453-
elif installed_ref:
454-
self.summary = installed_ref.get_appdata_summary()
455-
self.description = ""
464+
if self.description is None:
465+
self.description = self.summary
456466
else:
457467
self.summary = ""
458468
self.description = ""
459469

460-
if self.description == "" and self.flatpak_type == "runtime":
470+
if self.summary == "" and self.flatpak_type == "runtime":
461471
self.summary = self.description = _("A Flatpak runtime package")
462472

463473
self.real_source_name = self.ref_name
@@ -474,9 +484,8 @@ def __init__(self, op=None, installer=None, ref=None, installed_ref=None, remote
474484

475485
def add_package(self, update):
476486
self.sub_updates.append(update)
477-
self.package_names.append(update.ref_name)
487+
self.package_names.append(update.name)
478488
self.size += update.size
479-
# self.source_packages.append("%s=%s" % (update.ref_name, update.new_version))
480489

481490
def to_json(self):
482491
trimmed_dict = {}
@@ -493,7 +502,8 @@ def to_json(self):
493502
"source_packages",
494503
"package_names",
495504
"sub_updates",
496-
"link"):
505+
"link",
506+
"installing"):
497507
trimmed_dict[key] = self.__dict__[key]
498508
trimmed_dict["metadata"] = self.metadata.to_data()[0]
499509
trimmed_dict["ref"] = self.ref.format_ref()
@@ -518,13 +528,13 @@ def from_json(cls, json_data:dict):
518528
inst.package_names = json_data["package_names"]
519529
inst.sub_updates = json_data["sub_updates"]
520530
inst.link = json_data["link"]
531+
inst.installing = json_data["installing"]
521532
inst.metadata = GLib.KeyFile()
522533

523534
try:
524535
b = GLib.Bytes.new(json_data["metadata"].encode())
525536
inst.metadata.load_from_bytes(b, GLib.KeyFileFlags.NONE)
526537
except GLib.Error as e:
527-
print("unable to decode op metadata: %s" % e.message)
528-
pass
538+
print("flatpaks: unable to decode op metadata: %s" % e.message, file=sys.stderr, flush=True)
529539

530540
return inst

usr/lib/linuxmint/mintUpdate/flatpak-update-worker.py

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,15 @@ def fetch_updates(self):
102102
if self.cancellable.is_cancelled():
103103
return
104104

105+
self.installer.connect("appstream-changed", self.on_appstream_loaded)
106+
105107
if not self.installer.init_sync():
106108
warn("cache not valid, refreshing")
107109
self.refresh(False)
108110
else:
109111
debug("cache valid")
110112

111-
self.installer.generate_uncached_pkginfos()
112-
113-
debug("generating updates")
114-
_flatpak._initialize_appstream_thread()
115-
113+
def on_appstream_loaded(self, installer):
116114
self.updates = []
117115
self.installer.select_flatpak_updates(None,
118116
self._fetch_task_ready, self._fetch_updates_error,
@@ -157,7 +155,7 @@ def cmp_ref_name(a, b):
157155
for op in ops:
158156
if op.get_operation_type() == Flatpak.TransactionOperationType.UPDATE:
159157
ref = Flatpak.Ref.parse(op.get_ref())
160-
debug("Update: ", op.get_ref())
158+
debug("Update: ", op.get_ref(), ref.get_branch())
161159
try:
162160
installed_ref = self.fp_sys.get_installed_ref(ref.get_kind(),
163161
ref.get_name(),
@@ -169,7 +167,7 @@ def cmp_ref_name(a, b):
169167
if e.code == Flatpak.Error.NOT_INSTALLED:
170168
installed_ref = None
171169

172-
pkginfo = self.installer.find_pkginfo(ref.get_name(), installer.PKG_TYPE_FLATPAK, remote=op.get_remote())
170+
pkginfo = self.installer.find_pkginfo(ref.format_ref(), installer.PKG_TYPE_FLATPAK, remote=op.get_remote())
173171
try:
174172
update = FlatpakUpdate(op, self.installer, ref, installed_ref, None, pkginfo)
175173

@@ -192,7 +190,7 @@ def cmp_ref_name(a, b):
192190
debug("Can't add ref to install: %s" % e.message)
193191
remote_ref = None
194192

195-
pkginfo = self.installer.find_pkginfo(ref.get_name(), installer.PKG_TYPE_FLATPAK, remote=op.get_remote())
193+
pkginfo = self.installer.find_pkginfo(ref.format_ref(), installer.PKG_TYPE_FLATPAK, remote=op.get_remote())
196194
try:
197195
update = FlatpakUpdate(op, self.installer, ref, None, remote_ref, pkginfo)
198196

@@ -204,39 +202,37 @@ def cmp_ref_name(a, b):
204202

205203
def add_to_parent_update(self, update):
206204
for maybe_parent in self.updates:
207-
if update.ref_name.startswith(maybe_parent.ref_name):
208-
maybe_parent.add_package(update)
209-
return True
210-
# if not self.is_base_package(maybe_parent):
211-
# continue
212-
built_extensions = []
205+
if not update.ref_name.startswith(maybe_parent.ref_name):
206+
continue
207+
208+
kf = update.metadata
209+
213210
try:
214-
kf = maybe_parent.metadata
215-
try:
216-
built_extensions = kf.get_string_list("Build", "built-extensions")
217-
except:
218-
# runtimes, sdks don't have built-extensions, so we must parse the group names...
219-
groups, n_groups = kf.get_groups()
220-
221-
for group in groups:
222-
ref_name = group.replace("Extension ", "")
223-
built_extensions.append(ref_name)
224-
except Exception:
225-
return False
226-
for extension in built_extensions:
227-
if update.ref_name.startswith(extension):
211+
extension_of = kf.get_string("ExtensionOf", "ref")
212+
if extension_of == maybe_parent.ref.format_ref():
213+
maybe_parent.add_package(update)
214+
return True
215+
except:
216+
pass
217+
218+
try:
219+
runtime_ref_id = "runtime/%s" % kf.get_string("Runtime", "runtime")
220+
221+
parent_ref = maybe_parent.ref.format_ref()
222+
if parent_ref == runtime_ref_id:
228223
maybe_parent.add_package(update)
229224
return True
225+
except:
226+
pass
230227

231228
def is_base_package(self, update):
232-
name = update.ref_name
229+
name = update.ref.format_ref()
233230
if name.startswith("app"):
234231
return True
235232
try:
236233
kf = update.metadata
237234
runtime_ref_id = "runtime/%s" % kf.get_string("Runtime", "runtime")
238-
runtime_ref = Flatpak.Ref.parse(runtime_ref_id)
239-
if name == runtime_ref.get_name():
235+
if name == runtime_ref_id:
240236
return True
241237
except Exception:
242238
return False

usr/lib/linuxmint/mintUpdate/mintUpdate.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ def display_selected_update(self, selection):
891891
self.ui_notebook_details.get_nth_page(TAB_CHANGELOG).hide()
892892
self.ui_notebook_details.set_current_page(TAB_DESC)
893893
elif update.type == "flatpak":
894-
if update.link is not None:
894+
if update.link is not None and update.link != "":
895895
website_label_str = _("Website: %s") % update.link
896896
description = "%s\n\n%s" % (update.description, website_label_str)
897897
else:
@@ -1182,6 +1182,9 @@ def display_package_list(self, update, is_flatpak=False):
11821182
count = len(update.package_names)
11831183
if is_flatpak:
11841184
size_label = _("Total size: <")
1185+
if update.installing:
1186+
self.textview_packages.set_text("%s %s" % (size_label, size_to_string(update.size)))
1187+
return
11851188
else:
11861189
size_label = _("Total size:")
11871190

0 commit comments

Comments
 (0)