mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 11:44:15 +02:00
[flatpak] fix: category formatting | sorting categories
This commit is contained in:
@@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
- 3 password attempts for root authentication
|
- 3 password attempts for root authentication
|
||||||
- not changing the table applied filters after a uninstall
|
- not changing the table applied filters after a uninstall
|
||||||
- cleaning the progress bar substatus after each upgrade
|
- cleaning the progress bar substatus after each upgrade
|
||||||
|
- sorted categories
|
||||||
- AppImage:
|
- AppImage:
|
||||||
- showing an error popup when **AppImageLauncher** messes up with an application installation
|
- showing an error popup when **AppImageLauncher** messes up with an application installation
|
||||||
- Flatpak:
|
- Flatpak:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import re
|
|
||||||
import traceback
|
import traceback
|
||||||
|
from io import StringIO
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
from bauh.api.abstract.cache import MemoryCache
|
from bauh.api.abstract.cache import MemoryCache
|
||||||
@@ -10,8 +10,6 @@ from bauh.api.http import HttpClient
|
|||||||
from bauh.gems.flatpak.constants import FLATHUB_API_URL, FLATHUB_URL
|
from bauh.gems.flatpak.constants import FLATHUB_API_URL, FLATHUB_URL
|
||||||
from bauh.gems.flatpak.model import FlatpakApplication
|
from bauh.gems.flatpak.model import FlatpakApplication
|
||||||
|
|
||||||
RE_SPLIT_UPPER = re.compile(r'[A-Z][a-z]*')
|
|
||||||
|
|
||||||
|
|
||||||
class FlatpakAsyncDataLoader(Thread):
|
class FlatpakAsyncDataLoader(Thread):
|
||||||
|
|
||||||
@@ -25,6 +23,20 @@ class FlatpakAsyncDataLoader(Thread):
|
|||||||
self.logger = context.logger
|
self.logger = context.logger
|
||||||
self.category_cache = category_cache
|
self.category_cache = category_cache
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def format_category(category: str) -> str:
|
||||||
|
word = StringIO()
|
||||||
|
last_l = None
|
||||||
|
for idx, l in enumerate(category):
|
||||||
|
if idx != 0 and last_l != ' ' and l.isupper() and idx + 1 < len(category) and category[idx + 1].islower():
|
||||||
|
word.write(' ')
|
||||||
|
|
||||||
|
last_l = l.lower()
|
||||||
|
word.write(last_l)
|
||||||
|
|
||||||
|
word.seek(0)
|
||||||
|
return word.read()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
if self.app:
|
if self.app:
|
||||||
self.app.status = PackageStatus.LOADING_DATA
|
self.app.status = PackageStatus.LOADING_DATA
|
||||||
@@ -60,7 +72,7 @@ class FlatpakAsyncDataLoader(Thread):
|
|||||||
cached = self.category_cache.get(c['name'])
|
cached = self.category_cache.get(c['name'])
|
||||||
|
|
||||||
if not cached:
|
if not cached:
|
||||||
cached = ' '.join(RE_SPLIT_UPPER.findall(c['name'])).lower() if not c['name'].isupper() else c['name'].lower()
|
cached = self.format_category(c['name'])
|
||||||
self.category_cache.add_non_existing(c['name'], cached)
|
self.category_cache.add_non_existing(c['name'], cached)
|
||||||
|
|
||||||
cats.append(cached)
|
cats.append(cached)
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ def update_info(pkgv: PackageView, pkgs_info: dict):
|
|||||||
pkgs_info['updates'] += 1
|
pkgs_info['updates'] += 1
|
||||||
|
|
||||||
if pkgv.model.categories:
|
if pkgv.model.categories:
|
||||||
pkgs_info['categories'].update([s.lower() for s in pkgv.model.categories])
|
for c in pkgv.model.categories:
|
||||||
|
pkgs_info['categories'].add(c.lower())
|
||||||
|
|
||||||
pkgs_info['pkgs'].append(pkgv)
|
pkgs_info['pkgs'].append(pkgv)
|
||||||
pkgs_info['not_installed'] += 1 if not pkgv.model.installed else 0
|
pkgs_info['not_installed'] += 1 if not pkgv.model.installed else 0
|
||||||
|
|||||||
@@ -417,7 +417,8 @@ class ManageWindow(QWidget):
|
|||||||
|
|
||||||
for p in self.pkgs_available:
|
for p in self.pkgs_available:
|
||||||
if p.model.categories:
|
if p.model.categories:
|
||||||
categories.update(p.model.categories)
|
for c in p.model.categories:
|
||||||
|
categories.add(c.lower())
|
||||||
|
|
||||||
if categories:
|
if categories:
|
||||||
self._update_categories(categories, keep_selected=True)
|
self._update_categories(categories, keep_selected=True)
|
||||||
@@ -727,7 +728,7 @@ class ManageWindow(QWidget):
|
|||||||
if categories is None:
|
if categories is None:
|
||||||
self.ref_combo_categories.setVisible(self.combo_categories.count() > 1)
|
self.ref_combo_categories.setVisible(self.combo_categories.count() > 1)
|
||||||
else:
|
else:
|
||||||
keeping_selected = keep_selected and categories and self.category_filter in {c.lower() for c in categories}
|
keeping_selected = keep_selected and categories and self.category_filter in categories
|
||||||
|
|
||||||
if not keeping_selected:
|
if not keeping_selected:
|
||||||
self.category_filter = self.any_category_filter
|
self.category_filter = self.any_category_filter
|
||||||
@@ -738,13 +739,15 @@ class ManageWindow(QWidget):
|
|||||||
self.combo_categories.removeItem(1)
|
self.combo_categories.removeItem(1)
|
||||||
|
|
||||||
selected_cat = -1
|
selected_cat = -1
|
||||||
for idx, c in enumerate(categories):
|
cat_list = list(categories)
|
||||||
lower_cat = c.lower()
|
cat_list.sort()
|
||||||
i18n_cat = self.i18n.get(lower_cat)
|
|
||||||
cat_label = i18n_cat if i18n_cat else c
|
|
||||||
self.combo_categories.addItem(cat_label.capitalize(), lower_cat)
|
|
||||||
|
|
||||||
if keeping_selected and lower_cat == self.category_filter:
|
for idx, c in enumerate(cat_list):
|
||||||
|
i18n_cat = self.i18n.get(c)
|
||||||
|
cat_label = i18n_cat if i18n_cat else c
|
||||||
|
self.combo_categories.addItem(cat_label.capitalize(), c)
|
||||||
|
|
||||||
|
if keeping_selected and c == self.category_filter:
|
||||||
selected_cat = idx + 1
|
selected_cat = idx + 1
|
||||||
|
|
||||||
self.combo_categories.blockSignals(True)
|
self.combo_categories.blockSignals(True)
|
||||||
|
|||||||
0
tests/gems/flatpak/__init__.py
Normal file
0
tests/gems/flatpak/__init__.py
Normal file
20
tests/gems/flatpak/worker_test.py
Normal file
20
tests/gems/flatpak/worker_test.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
from bauh.gems.flatpak.worker import FlatpakAsyncDataLoader
|
||||||
|
|
||||||
|
|
||||||
|
class FlatpakAsyncDataLoaderTest(TestCase):
|
||||||
|
|
||||||
|
def test_format_category(self):
|
||||||
|
self.assertEqual('irc client', FlatpakAsyncDataLoader.format_category('IRCClient'))
|
||||||
|
self.assertEqual('text editor', FlatpakAsyncDataLoader.format_category('TextEditor'))
|
||||||
|
self.assertEqual('text editor', FlatpakAsyncDataLoader.format_category('Text Editor'))
|
||||||
|
self.assertEqual('text editor', FlatpakAsyncDataLoader.format_category('text editor'))
|
||||||
|
self.assertEqual('text editor', FlatpakAsyncDataLoader.format_category('Text editor'))
|
||||||
|
self.assertEqual('text editor', FlatpakAsyncDataLoader.format_category('text Editor'))
|
||||||
|
self.assertEqual('text editor', FlatpakAsyncDataLoader.format_category('textEditor'))
|
||||||
|
self.assertEqual('ide', FlatpakAsyncDataLoader.format_category('IDE'))
|
||||||
|
self.assertEqual('faster irc client', FlatpakAsyncDataLoader.format_category('Faster IRCClient'))
|
||||||
|
self.assertEqual('3d graphics', FlatpakAsyncDataLoader.format_category('3DGraphics'))
|
||||||
|
self.assertEqual('32d graphics', FlatpakAsyncDataLoader.format_category('32DGraphics'))
|
||||||
|
self.assertEqual('d32 graphics', FlatpakAsyncDataLoader.format_category('D32Graphics'))
|
||||||
Reference in New Issue
Block a user