refreshing only the needed package types

This commit is contained in:
Vinicius Moreira
2019-08-29 18:39:41 -03:00
parent 6b40232a05
commit fd6ec1f79f
6 changed files with 216 additions and 46 deletions

View File

@@ -1,6 +1,6 @@
from argparse import Namespace
from threading import Thread
from typing import List, Set
from typing import List, Set, Type
from bauh_api.abstract.controller import SoftwareManager, SearchResult
from bauh_api.abstract.handler import ProcessWatcher
@@ -96,20 +96,34 @@ class GenericSoftwareManager(SoftwareManager):
self.thread_prepare.join()
self.thread_prepare = None
def read_installed(self, disk_loader: DiskCacheLoader = None) -> List[SoftwarePackage]:
def read_installed(self, disk_loader: DiskCacheLoader = None, pkg_types: Set[Type[SoftwarePackage]] = None) -> List[SoftwarePackage]:
self._wait_to_be_ready()
installed = []
disk_loader = None
for man in self.managers:
if self._is_enabled(man):
if not disk_loader:
disk_loader = self.disk_loader_factory.new()
disk_loader.start()
if not pkg_types: # any type
for man in self.managers:
if self._is_enabled(man):
if not disk_loader:
disk_loader = self.disk_loader_factory.new()
disk_loader.start()
installed.extend(man.read_installed(disk_loader=disk_loader))
installed.extend(man.read_installed(disk_loader=disk_loader, pkg_types=None))
else:
man_already_used = []
for t in pkg_types:
man = self.map.get(t)
if man and (man not in man_already_used) and self._is_enabled(man):
if not disk_loader:
disk_loader = self.disk_loader_factory.new()
disk_loader.start()
installed.extend(man.read_installed(disk_loader=disk_loader, pkg_types=None))
if disk_loader:
disk_loader.stop = True