Update for progress bar

Signed-off-by: Dimitris Zlatanidis <d.zlatanidis@gmail.com>
This commit is contained in:
Dimitris Zlatanidis 2024-06-02 20:34:41 +03:00
parent 55c133db74
commit 2f798e8cf2
14 changed files with 60 additions and 93 deletions

View file

@ -8,6 +8,7 @@
- Updated: - Updated:
* Updated message for invalid package version * Updated message for invalid package version
* Updated upgrade.log file to json format * Updated upgrade.log file to json format
* Separation of the process bar with progress bar
### 5.0.9 - 23/05/2024 ### 5.0.9 - 23/05/2024

View file

@ -1,4 +1,4 @@
.TH slpkg 1 "Orestiada, Hellas" "slpkg 5.0.4" dslackw .TH slpkg 1 "Orestiada, Hellas" "slpkg 5.1.0" dslackw
.SH NOM .SH NOM
.P .P
slpkg \- Utilitaire de gestion de paquets pour Slackware. slpkg \- Utilitaire de gestion de paquets pour Slackware.
@ -14,12 +14,12 @@ slpkg [-h|-v] [-u, update] [-U, upgrade] [-I, repo-info]
-P, --parallel, -o, --repository=\fINAME\fR, -z, --directory=\fIPATH\fR -P, --parallel, -o, --repository=\fINAME\fR, -z, --directory=\fIPATH\fR
.SH DESCRIPTION .SH DESCRIPTION
.P .P
Slpkg est un gestionnaire de paquets qui installe, met à jour et supprime les paquets sur les systèmes basés sur Slackware. Slpkg est un gestionnaire de paquets qui installe, met à jour et supprime les paquets sur les systèmes basés sur Slackware.
Il calcule automatiquement les dépendances et détermine ce qui doit se passer pour installer les paquets. Il calcule automatiquement les dépendances et détermine ce qui doit se passer pour installer les paquets.
Slpkg facilite la maintenance de groupes de machines sans avoir à les mettre à jour manuellement. Slpkg facilite la maintenance de groupes de machines sans avoir à les mettre à jour manuellement.
.P .P
Slpkg travaille en accord avec les standards de l'organisation SlackBuilds.org pour construire des paquets. Slpkg travaille en accord avec les standards de l'organisation SlackBuilds.org pour construire des paquets.
Il utilise également les instructions de Slackware Linux pour l'installation, la mise à jour ou la suppression des paquets. Il utilise également les instructions de Slackware Linux pour l'installation, la mise à jour ou la suppression des paquets.
.SH COMMANDES .SH COMMANDES
.P .P
.B -u, update .B -u, update
@ -134,7 +134,7 @@ Exemple : '\fIslpkg install python3 --search\fR' ou '\fIslpkg download python3 -
.B -B, --progress-bar .B -B, --progress-bar
.RS .RS
Appliquez-le pour voir une barre de progression statique au lieu d'un processus exécuté comme la construction, Appliquez-le pour voir une barre de progression statique au lieu d'un processus exécuté comme la construction,
l'installation ou la suppression. l'installation ou la suppression. (à utiliser avec : -b, build, -i, install, -U, upgrade, -R --remove)
.RE .RE
.P .P
.B -p, --pkg-version .B -p, --pkg-version
@ -187,10 +187,10 @@ En dehors de la manière classique, vous pouvez mettre plusieurs options qui ne
.RE .RE
.SH FILELIST|PACKAGES .SH FILELIST|PACKAGES
.P .P
Au lieu de paquets, vous pouvez transmettre un fichier texte avec le suffixe '.pkgs' et les noms des paquets. Au lieu de paquets, vous pouvez transmettre un fichier texte avec le suffixe '.pkgs' et les noms des paquets.
Exemple : '\fIslpkg install list.pkgs\fR'. Exemple : '\fIslpkg install list.pkgs\fR'.
Editez le fichier de configuration '/etc/slpkg/slpkg.toml' pour changer le suffixe si vous le souhaitez. Editez le fichier de configuration '/etc/slpkg/slpkg.toml' pour changer le suffixe si vous le souhaitez.
Vous pouvez utiliser des listes provenant d'autres sources, comme les fichiers '.sqf'. Vous pouvez utiliser des listes provenant d'autres sources, comme les fichiers '.sqf'.
.RE .RE
.SH A SAVOIR .SH A SAVOIR
.P .P
@ -198,7 +198,7 @@ Il y a cinq indicateurs lorsque certaines commandes sont utilisées, par exemple
Cyan : Installer, Jaune : Construire, Gris : Installé, Violet : Installé Pour construire, Gris : C'est installé, Violet : Pour la mise à jour, Rouge : Pour supprimer. Cyan : Installer, Jaune : Construire, Gris : Installé, Violet : Installé Pour construire, Gris : C'est installé, Violet : Pour la mise à jour, Rouge : Pour supprimer.
Lorsque vous utilisez les commandes install, build, upgrade ou remove, vous devez savoir que si le paquet est installé, sa couleur passera au gris, Lorsque vous utilisez les commandes install, build, upgrade ou remove, vous devez savoir que si le paquet est installé, sa couleur passera au gris,
si le paquet peut être mis à jour, il devient violet, et s'il n'est pas installé, sa couleur est cyan. si le paquet peut être mis à jour, il devient violet, et s'il n'est pas installé, sa couleur est cyan.
De même, si vous essayez de supprimer un paquet, la couleur du paquet devient rouge. De même, si vous essayez de supprimer un paquet, la couleur du paquet devient rouge.

View file

@ -1,4 +1,4 @@
.TH slpkg 1 "Orestiada, Hellas" "slpkg 5.0.4" dslackw .TH slpkg 1 "Orestiada, Hellas" "slpkg 5.1.0" dslackw
.SH NAME .SH NAME
.P .P
slpkg \- Package manager utility for Slackware. slpkg \- Package manager utility for Slackware.
@ -140,6 +140,7 @@ Example try: '\fIslpkg install python3 --search\fR' or '\fIslpkg download python
.B -B, --progress-bar .B -B, --progress-bar
.RS .RS
Apply it to see a static progress bar instead of process execute like building, installing or removing. Apply it to see a static progress bar instead of process execute like building, installing or removing.
(to be used with: -b, build, -i, install, -U, upgrade, -R --remove)
.RE .RE
.P .P
.B -p, --pkg-version .B -p, --pkg-version

View file

@ -38,12 +38,12 @@ class Packages(Configs): # pylint: disable=[R0902]
self.dialogbox = DialogBox() self.dialogbox = DialogBox()
self.multi_proc = MultiProcess(flags) self.multi_proc = MultiProcess(flags)
self.view = View(flags, repository, data) self.view = View(flags, repository, data)
self.view_process = ViewProcess(flags) self.view_process = ViewProcess()
self.check_md5 = Md5sum(flags) self.check_md5 = Md5sum(flags)
self.download = Downloader(flags) self.download = Downloader(flags)
self.upgrade = Upgrade(repository, data) self.upgrade = Upgrade(repository, data)
self.ascii = AsciiBox() self.ascii = AsciiBox()
self.gpg = GPGVerify(flags) self.gpg = GPGVerify()
self.progress = ProgressBar() self.progress = ProgressBar()
self.dependencies: list = [] self.dependencies: list = []

View file

@ -17,7 +17,6 @@ class Blacklist(Configs): # pylint: disable=[R0903]
"""Reads and returns the blacklist.""" """Reads and returns the blacklist."""
def __init__(self) -> None: def __init__(self) -> None:
"""Initilazation class."""
super(Configs, self).__init__() super(Configs, self).__init__()
self.toml_errors = TomlErrors() self.toml_errors = TomlErrors()

View file

@ -41,9 +41,6 @@ class CheckUpdates(Configs): # pylint: disable=[R0902]
self.option_for_check: bool = self.utils.is_option( self.option_for_check: bool = self.utils.is_option(
('-c', '--check'), flags) ('-c', '--check'), flags)
self.option_for_progress_bar: bool = self.utils.is_option(
('-B', '--progress-bar'), flags)
def check_the_repositories(self, queue: str = None) -> None: def check_the_repositories(self, queue: str = None) -> None:
"""Save checks to a dictionary. """Save checks to a dictionary.
@ -183,31 +180,26 @@ class CheckUpdates(Configs): # pylint: disable=[R0902]
dict: Description dict: Description
""" """
message: str = 'Checking for news, please wait' message: str = 'Checking for news, please wait'
if self.progress_bar_conf or self.option_for_progress_bar: queue: Queue = Queue()
queue: Queue = Queue()
# Starting multiprocessing # Starting multiprocessing
process_1 = Process(target=self.check_the_repositories, args=(queue,)) process_1 = Process(target=self.check_the_repositories, args=(queue,))
process_2 = Process(target=self.progress.progress_bar, args=(message,)) process_2 = Process(target=self.progress.progress_bar, args=(message,))
process_1.start() process_1.start()
process_2.start() process_2.start()
# Wait until process 1 finish # Wait until process 1 finish
process_1.join() process_1.join()
# Terminate process 2 if process 1 finished # Terminate process 2 if process 1 finished
if not process_1.is_alive(): if not process_1.is_alive():
process_2.terminate() process_2.terminate()
self.compare: dict = queue.get() self.compare: dict = queue.get()
self.error_connected: list = queue.get() self.error_connected: list = queue.get()
print('\x1b[?25h') print('\x1b[?25h')
else:
print(f'\r{message}... ', end='')
self.check_the_repositories()
print()
self.check_for_error_connected() self.check_for_error_connected()
self.view_messages() self.view_messages()

View file

@ -32,7 +32,7 @@ class DownloadOnly(Configs): # pylint: disable=[R0902]
self.utils = Utilities() self.utils = Utilities()
self.ascii = AsciiBox() self.ascii = AsciiBox()
self.errors = Errors() self.errors = Errors()
self.gpg = GPGVerify(flags) self.gpg = GPGVerify()
self.urls: dict = {} self.urls: dict = {}
self.asc_files: list = [] self.asc_files: list = []

View file

@ -13,11 +13,11 @@ from slpkg.views.view_process import ViewProcess
class GPGVerify(Configs): # pylint: disable=[R0903] class GPGVerify(Configs): # pylint: disable=[R0903]
"""GPG verify files.""" """GPG verify files."""
def __init__(self, flags: list): def __init__(self):
super(Configs, self).__init__() super(Configs, self).__init__()
self.ascii = AsciiBox() self.ascii = AsciiBox()
self.view = View() self.view = View()
self.view_process = ViewProcess(flags) self.view_process = ViewProcess()
def verify(self, asc_files: list) -> None: def verify(self, asc_files: list) -> None:
"""Verify files with gpg tool. """Verify files with gpg tool.

View file

@ -17,13 +17,13 @@ from slpkg.views.view_process import ViewProcess
class InstallData(Configs): class InstallData(Configs):
"""Installs data to the repositories path.""" """Installs data to the repositories path."""
def __init__(self, flags: list): def __init__(self):
super(Configs, self).__init__() super(Configs, self).__init__()
self.utils = Utilities() self.utils = Utilities()
self.repos = Repositories() self.repos = Repositories()
self.ascii = AsciiBox() self.ascii = AsciiBox()
self.multi_process = MultiProcess() self.multi_process = MultiProcess()
self.view_process = ViewProcess(flags) self.view_process = ViewProcess()
def write_repo_info(self, changelog_file: Path, info: dict) -> None: def write_repo_info(self, changelog_file: Path, info: dict) -> None:
"""Read the first date of the changelog file. """Read the first date of the changelog file.

View file

@ -26,7 +26,7 @@ class LoadData(Configs):
self.utils = Utilities() self.utils = Utilities()
self.black = Blacklist() self.black = Blacklist()
self.ascii = AsciiBox() self.ascii = AsciiBox()
self.view_process = ViewProcess(flags) self.view_process = ViewProcess()
def load(self, repository: str, message: bool = True) -> dict: def load(self, repository: str, message: bool = True) -> dict:
"""Load data to the dictionary. """Load data to the dictionary.

View file

@ -123,9 +123,7 @@ class Menu(Configs): # pylint: disable=[R0902]
self.flag_repository, self.flag_repository,
self.flag_short_repository, self.flag_short_repository,
self.flag_parallel, self.flag_parallel,
self.flag_short_parallel, self.flag_short_parallel
self.flag_for_progress_bar,
self.flag_short_for_progress_bar,
], ],
'upgrade': [ 'upgrade': [
self.flag_yes, self.flag_yes,
@ -141,13 +139,11 @@ class Menu(Configs): # pylint: disable=[R0902]
self.flag_repository, self.flag_repository,
self.flag_short_repository, self.flag_short_repository,
self.flag_parallel, self.flag_parallel,
self.flag_short_parallel, self.flag_short_parallel
], ],
'repo-info': [ 'repo-info': [
self.flag_repository, self.flag_repository,
self.flag_short_repository, self.flag_short_repository
self.flag_for_progress_bar,
self.flag_short_for_progress_bar
], ],
'configs': [], 'configs': [],
'clean-tmp': [], 'clean-tmp': [],
@ -200,8 +196,6 @@ class Menu(Configs): # pylint: disable=[R0902]
self.flag_short_parallel, self.flag_short_parallel,
self.flag_no_case, self.flag_no_case,
self.flag_short_no_case, self.flag_short_no_case,
self.flag_for_progress_bar,
self.flag_short_for_progress_bar
], ],
'remove': [ 'remove': [
self.flag_yes, self.flag_yes,
@ -227,9 +221,7 @@ class Menu(Configs): # pylint: disable=[R0902]
self.flag_pkg_version, self.flag_pkg_version,
self.flag_short_pkg_version, self.flag_short_pkg_version,
self.flag_no_case, self.flag_no_case,
self.flag_short_no_case, self.flag_short_no_case
self.flag_for_progress_bar,
self.flag_short_for_progress_bar
], ],
'search': [ 'search': [
self.flag_search, self.flag_search,
@ -239,9 +231,7 @@ class Menu(Configs): # pylint: disable=[R0902]
self.flag_pkg_version, self.flag_pkg_version,
self.flag_short_pkg_version, self.flag_short_pkg_version,
self.flag_no_case, self.flag_no_case,
self.flag_short_no_case, self.flag_short_no_case
self.flag_for_progress_bar,
self.flag_short_for_progress_bar
], ],
'dependees': [ 'dependees': [
self.flag_full_reverse, self.flag_full_reverse,
@ -253,9 +243,7 @@ class Menu(Configs): # pylint: disable=[R0902]
self.flag_pkg_version, self.flag_pkg_version,
self.flag_short_pkg_version, self.flag_short_pkg_version,
self.flag_no_case, self.flag_no_case,
self.flag_short_no_case, self.flag_short_no_case
self.flag_for_progress_bar,
self.flag_short_for_progress_bar
], ],
'tracking': [ 'tracking': [
self.flag_search, self.flag_search,
@ -267,9 +255,7 @@ class Menu(Configs): # pylint: disable=[R0902]
self.flag_no_case, self.flag_no_case,
self.flag_short_no_case, self.flag_short_no_case,
self.flag_resolve_off, self.flag_resolve_off,
self.flag_short_resolve_off, self.flag_short_resolve_off
self.flag_for_progress_bar,
self.flag_short_for_progress_bar
] ]
} }

View file

@ -43,11 +43,11 @@ class Slackbuilds(Configs): # pylint: disable=[R0902,R0904]
self.dialogbox = DialogBox() self.dialogbox = DialogBox()
self.multi_proc = MultiProcess(flags) self.multi_proc = MultiProcess(flags)
self.view = View(flags, repository, data) self.view = View(flags, repository, data)
self.view_process = ViewProcess(flags) self.view_process = ViewProcess()
self.check_md5 = Md5sum(flags) self.check_md5 = Md5sum(flags)
self.download = Downloader(flags) self.download = Downloader(flags)
self.upgrade = Upgrade(repository, data) self.upgrade = Upgrade(repository, data)
self.gpg = GPGVerify(flags) self.gpg = GPGVerify()
self.errors = Errors() self.errors = Errors()
self.bar_process = None self.bar_process = None

View file

@ -27,7 +27,7 @@ class UpdateRepositories(Configs): # pylint: disable=[R0902]
self.multi_process = MultiProcess(flags) self.multi_process = MultiProcess(flags)
self.repos = Repositories() self.repos = Repositories()
self.utils = Utilities() self.utils = Utilities()
self.data = InstallData(flags) self.data = InstallData()
self.generate = SBoGenerate() self.generate = SBoGenerate()
self.check_updates = CheckUpdates(flags, repository) self.check_updates = CheckUpdates(flags, repository)
self.download = Downloader(flags) self.download = Downloader(flags)

View file

@ -14,7 +14,7 @@ from slpkg.views.asciibox import AsciiBox
class ViewProcess(Configs): class ViewProcess(Configs):
"""View the process messages.""" """View the process messages."""
def __init__(self, flags: list): def __init__(self):
super(Configs, self).__init__() super(Configs, self).__init__()
self.progress = ProgressBar() self.progress = ProgressBar()
@ -23,35 +23,23 @@ class ViewProcess(Configs):
self.bar_process = None self.bar_process = None
self.option_for_progress_bar: bool = self.utils.is_option(
('-B', '--progress-bar'), flags)
def message(self, message: str) -> None: def message(self, message: str) -> None:
"""Show spinner with message or message.""" """Show spinner with message or message."""
if self.progress_bar_conf or self.option_for_progress_bar: self.bar_process = Process(target=self.progress.progress_bar, args=(message,))
self.bar_process = Process(target=self.progress.progress_bar, args=(message,)) self.bar_process.start()
self.bar_process.start()
else:
print(f'\r{message}... ', end='')
def done(self) -> None: def done(self) -> None:
"""Show done message.""" """Show done message."""
if self.progress_bar_conf or self.option_for_progress_bar: time.sleep(0.1)
time.sleep(0.1) self.bar_process.terminate()
self.bar_process.terminate() self.bar_process.join()
self.bar_process.join() print(f'\b{self.bgreen}{self.ascii.done}{self.endc}', end='')
print(f'\b{self.bgreen}{self.ascii.done}{self.endc}', end='') print('\x1b[?25h') # Reset cursor after hiding.
print('\x1b[?25h') # Reset cursor after hiding.
else:
print(f'{self.bgreen}{self.ascii.done}{self.endc}')
def failed(self) -> None: def failed(self) -> None:
"""Show for failed message.""" """Show for failed message."""
if self.progress_bar_conf or self.option_for_progress_bar: time.sleep(0.1)
time.sleep(0.1) self.bar_process.terminate()
self.bar_process.terminate() self.bar_process.join()
self.bar_process.join() print(f'\b{self.bred}{self.ascii.failed}{self.endc}', end='')
print(f'\b{self.bred}{self.ascii.failed}{self.endc}', end='') print('\x1b[?25h') # Reset cursor after hiding.
print('\x1b[?25h') # Reset cursor after hiding.
else:
print(f'{self.bred}{self.ascii.failed}{self.endc}')