Skip to content

Commit aaad188

Browse files
author
Koi-foo
committed
Version v1.7-alt11
1 parent 73cd2f6 commit aaad188

22 files changed

Lines changed: 4552 additions & 2642 deletions

form/main_win.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,22 @@ def setupUi(self, MainWindow):
166166
self.Tab5_PacketFilter.setObjectName("Tab5_PacketFilter")
167167
self.gridLayout_6 = QtWidgets.QGridLayout(self.Tab5_PacketFilter)
168168
self.gridLayout_6.setObjectName("gridLayout_6")
169+
self.comboBox_ModulesSystem = QtWidgets.QComboBox(self.Tab5_PacketFilter)
170+
self.comboBox_ModulesSystem.setEnabled(True)
171+
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
172+
sizePolicy.setHorizontalStretch(0)
173+
sizePolicy.setVerticalStretch(0)
174+
sizePolicy.setHeightForWidth(self.comboBox_ModulesSystem.sizePolicy().hasHeightForWidth())
175+
self.comboBox_ModulesSystem.setSizePolicy(sizePolicy)
176+
self.comboBox_ModulesSystem.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
177+
self.comboBox_ModulesSystem.setLayoutDirection(QtCore.Qt.LeftToRight)
178+
self.comboBox_ModulesSystem.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
179+
self.comboBox_ModulesSystem.setDuplicatesEnabled(False)
180+
self.comboBox_ModulesSystem.setFrame(True)
181+
self.comboBox_ModulesSystem.setModelColumn(0)
182+
self.comboBox_ModulesSystem.setObjectName("comboBox_ModulesSystem")
183+
self.comboBox_ModulesSystem.addItem("")
184+
self.gridLayout_6.addWidget(self.comboBox_ModulesSystem, 2, 0, 1, 1)
169185
self.listWidget_Modules = QtWidgets.QListWidget(self.Tab5_PacketFilter)
170186
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
171187
sizePolicy.setHorizontalStretch(0)
@@ -202,28 +218,6 @@ def setupUi(self, MainWindow):
202218
self.listWidget_Modules.setBatchSize(100)
203219
self.listWidget_Modules.setObjectName("listWidget_Modules")
204220
self.gridLayout_6.addWidget(self.listWidget_Modules, 0, 0, 1, 3)
205-
self.textBrowser_2 = QtWidgets.QTextBrowser(self.Tab5_PacketFilter)
206-
self.textBrowser_2.setMinimumSize(QtCore.QSize(0, 0))
207-
self.textBrowser_2.setMaximumSize(QtCore.QSize(16777215, 150))
208-
self.textBrowser_2.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
209-
self.textBrowser_2.setObjectName("textBrowser_2")
210-
self.gridLayout_6.addWidget(self.textBrowser_2, 1, 0, 1, 3)
211-
self.comboBox_ModulesSystem = QtWidgets.QComboBox(self.Tab5_PacketFilter)
212-
self.comboBox_ModulesSystem.setEnabled(True)
213-
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
214-
sizePolicy.setHorizontalStretch(0)
215-
sizePolicy.setVerticalStretch(0)
216-
sizePolicy.setHeightForWidth(self.comboBox_ModulesSystem.sizePolicy().hasHeightForWidth())
217-
self.comboBox_ModulesSystem.setSizePolicy(sizePolicy)
218-
self.comboBox_ModulesSystem.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
219-
self.comboBox_ModulesSystem.setLayoutDirection(QtCore.Qt.LeftToRight)
220-
self.comboBox_ModulesSystem.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
221-
self.comboBox_ModulesSystem.setDuplicatesEnabled(False)
222-
self.comboBox_ModulesSystem.setFrame(True)
223-
self.comboBox_ModulesSystem.setModelColumn(0)
224-
self.comboBox_ModulesSystem.setObjectName("comboBox_ModulesSystem")
225-
self.comboBox_ModulesSystem.addItem("")
226-
self.gridLayout_6.addWidget(self.comboBox_ModulesSystem, 2, 0, 1, 1)
227221
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
228222
self.gridLayout_6.addItem(spacerItem3, 2, 1, 1, 1)
229223
self.pushButton_Autoremove = QtWidgets.QPushButton(self.Tab5_PacketFilter)
@@ -237,6 +231,12 @@ def setupUi(self, MainWindow):
237231
self.pushButton_Autoremove.setIconSize(QtCore.QSize(18, 18))
238232
self.pushButton_Autoremove.setObjectName("pushButton_Autoremove")
239233
self.gridLayout_6.addWidget(self.pushButton_Autoremove, 2, 2, 1, 1)
234+
self.textBrowser_2 = QtWidgets.QTextBrowser(self.Tab5_PacketFilter)
235+
self.textBrowser_2.setMinimumSize(QtCore.QSize(0, 0))
236+
self.textBrowser_2.setMaximumSize(QtCore.QSize(16777215, 150))
237+
self.textBrowser_2.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
238+
self.textBrowser_2.setObjectName("textBrowser_2")
239+
self.gridLayout_6.addWidget(self.textBrowser_2, 1, 0, 1, 3)
240240
self.Tab1.addTab(self.Tab5_PacketFilter, "")
241241
self.gridLayout.addWidget(self.Tab1, 0, 0, 1, 1)
242242
MainWindow.setCentralWidget(self.centralwidget)
@@ -301,15 +301,15 @@ def retranslateUi(self, MainWindow):
301301
self.pushButton_DISTR.setText(_translate("MainWindow", _("Distribution")))
302302
self.comboBox_ChangeRepo.setToolTip(_translate("MainWindow", _("Change repository")))
303303
self.Tab1.setTabText(self.Tab1.indexOf(self.Tab4_UpdateKernel), _translate("MainWindow", _("Update kernel")))
304+
self.comboBox_ModulesSystem.setToolTip(_translate("MainWindow", _("Filter for kernel modules installed on the system")))
305+
self.comboBox_ModulesSystem.setItemText(0, _translate("MainWindow", _("All installed modules")))
304306
self.listWidget_Modules.setSortingEnabled(False)
307+
self.pushButton_Autoremove.setToolTip(_translate("MainWindow", _("Remove packages that were automatically installed to satisfy<br>dependencies for other packages and are now no longer needed. ")))
305308
self.textBrowser_2.setHtml(_translate("MainWindow", _("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
306309
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
307310
"p, li { white-space: pre-wrap; }\n"
308311
"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
309312
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:600;\">The note</span></p>\n"
310-
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">The brick button uses the &quot;<span style=\" font-weight:600;\">apt-get autoremove</span>&quot; command to clean up the system of packages that are not used by any program. Sometimes this command removes the libraries you want, so back up your system before using it. You can find out more by typing &quot;<span style=\" font-weight:600;\">--autoremove</span>&quot; in &quot;<span style=\" font-weight:600;\">man apt-get</span>&quot; terminal.</p></body></html>")))
311-
self.comboBox_ModulesSystem.setToolTip(_translate("MainWindow", _("Filter for kernel modules installed on the system")))
312-
self.comboBox_ModulesSystem.setItemText(0, _translate("MainWindow", _("All installed modules")))
313-
self.pushButton_Autoremove.setToolTip(_translate("MainWindow", _("Remove packages that were automatically installed to satisfy<br>dependencies for other packages and are now no longer needed. ")))
313+
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">The broom button uses the &quot;<span style=\" font-weight:600;\">apt-get autoremove</span>&quot; command to clean up the system of packages that are not used by any program. Sometimes this command removes the libraries you want, so back up your system before using it. You can find out more by typing &quot;<span style=\" font-weight:600;\">--autoremove</span>&quot; in &quot;<span style=\" font-weight:600;\">man apt-get</span>&quot; terminal.</p></body></html>")))
314314
self.Tab1.setTabText(self.Tab1.indexOf(self.Tab5_PacketFilter), _translate("MainWindow", _("Kernel modules")))
315315
import resources

form/tray_win.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# Form implementation generated from reading ui file 'tray_win.ui'
4+
#
5+
# Created by: PyQt5 UI code generator 5.13.1
6+
#
7+
# WARNING! All changes made in this file will be lost!
8+
9+
10+
from PyQt5 import QtCore, QtGui, QtWidgets
11+
12+
13+
class Ui_TrayWindow(object):
14+
def setupUi(self, TrayWindow):
15+
TrayWindow.setObjectName("TrayWindow")
16+
TrayWindow.resize(618, 364)
17+
icon = QtGui.QIcon()
18+
icon.addPixmap(QtGui.QPixmap(":/picture/icons/kernel-manager.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
19+
TrayWindow.setWindowIcon(icon)
20+
self.centralwidget = QtWidgets.QWidget(TrayWindow)
21+
self.centralwidget.setObjectName("centralwidget")
22+
TrayWindow.setCentralWidget(self.centralwidget)
23+
self.statusbar = QtWidgets.QStatusBar(TrayWindow)
24+
self.statusbar.setObjectName("statusbar")
25+
TrayWindow.setStatusBar(self.statusbar)
26+
27+
self.retranslateUi(TrayWindow)
28+
QtCore.QMetaObject.connectSlotsByName(TrayWindow)
29+
30+
def retranslateUi(self, TrayWindow):
31+
_translate = QtCore.QCoreApplication.translate
32+
TrayWindow.setWindowTitle(_translate("TrayWindow", "Kernel Management: Configuring Notifications"))
33+
import resources

icons/logo/kernel_manager.png

-16.7 KB
Binary file not shown.

icons/logo/tray.png

22.6 KB
Loading

information

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
# Python
5+
import os
6+
import re
7+
import sys
8+
from subprocess import run, PIPE, Popen
9+
from platform import release
10+
# PyQt
11+
from PyQt5 import QtWidgets, QtGui, QtCore
12+
from PyQt5.QtWidgets import QSystemTrayIcon, QMenu, QAction
13+
from PyQt5.QtGui import QIcon
14+
# Forms
15+
from form.tray_win import Ui_TrayWindow
16+
17+
18+
class SystemTrayWindows(QtWidgets.QMainWindow, Ui_TrayWindow):
19+
"""Окно настроек уведомлений на панели задач"""
20+
def __init__(self):
21+
super().__init__()
22+
self.setupUi(self)
23+
# Значок
24+
self.tray_icon = QSystemTrayIcon(self)
25+
self.tray_icon.setIcon(QIcon(":/picture/icons/logo/tray.png"))
26+
self.tray_icon.setVisible(False)
27+
self.tray_icon.setToolTip("Kernel Manager")
28+
29+
# Сигналы
30+
self.tray_icon.activated.connect(self.open_kernel_manager)
31+
32+
# Действия для меню
33+
quit_actio = QAction(
34+
QIcon(":/picture/icons/application-exit.svg"),
35+
"Disable indicator", self)
36+
quit_actio.triggered.connect(exit)
37+
# Меню
38+
tray_menu = QMenu()
39+
tray_menu.addAction(quit_actio)
40+
41+
self.tray_icon.setContextMenu(tray_menu)
42+
self.test_version_kernel()
43+
44+
45+
def test_version_kernel(self):
46+
"""Проверка версии ядра"""
47+
flavour = re.search(r'.*-(.+-.+)-', release()).group(1)
48+
current_number = release().split('-')[0]
49+
new_version = current_number.split('.')
50+
51+
search_version = run(
52+
f"apt-cache pkgnames kernel-image-{flavour}#",
53+
shell=True, stdout=PIPE, encoding='utf-8').stdout
54+
55+
for line in search_version.splitlines():
56+
act = re.search(r'.*#.*:(.+)-' ,line).group(1).split(".")
57+
58+
if int(act[0]) > int(new_version[0]): new_version[0] = act[0]
59+
if int(act[1]) > int(new_version[1]): new_version[1] = act[1]
60+
if int(act[2]) > int(new_version[2]): new_version[2] = act[2]
61+
62+
new_version = ".".join(new_version)
63+
64+
if current_number == new_version:
65+
exit()
66+
else:
67+
self.tray_icon.setVisible(True)
68+
self.tray_icon.showMessage(
69+
"Kernel update", "A new version of the kernel is available: " + new_version,
70+
QSystemTrayIcon.Information, 10000)
71+
72+
73+
def open_kernel_manager(self):
74+
"""Открыть kernel manager"""
75+
activ_manager = run(
76+
"pidof -x kernel-manager",
77+
shell=True, stdout=PIPE, encoding='utf-8').stdout
78+
79+
if activ_manager:
80+
pass
81+
else:
82+
Popen("kernel-manager")
83+
84+
85+
def open_window_tray(self):
86+
"""Окно настройки функций лотка"""
87+
run("ls")
88+
89+
90+
if __name__ == '__main__':
91+
app = QtWidgets.QApplication(sys.argv)
92+
sys_tray = SystemTrayWindows()
93+
sys.exit(app.exec_())

kernel-manager.spec

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Name: kernel-manager
22
Version: 1.7
3-
Release: alt10
3+
Release: alt11
44

55
License: GPL3
66
Group: System/Base
@@ -65,7 +65,7 @@ fi
6565
%attr(755,root,root)/opt/kernel-manager/kernel_manager.py
6666
%{_datadir}/polkit-1/actions/org.freedesktop.pkexec.kernel-manager.policy
6767
%{_bindir}/kernel-manager
68-
%{_pixmapsdir}/kernel_manager.png
68+
%{_pixmapsdir}/kernel-manager.png
6969
/opt/kernel-manager/icons*
7070
/opt/kernel-manager/locale*
7171
/opt/kernel-manager/form*
@@ -75,6 +75,11 @@ fi
7575
%doc README.md
7676

7777
%changelog
78+
* Mon Nov 08 2021 Evgeny Chuck <koi@altlinux.org> 1.7-alt11
79+
- Fixed translation (Russian)
80+
- Added function to jump to p10
81+
- Fixed bug with switching to p10
82+
7883
* Sat Jun 26 2021 Koi <eg.evgeniy@gmail.com> 1.7-alt10
7984
- Fixed display of the icon for cleaning unnecessary packages
8085
- Fixed translation string before installing default kernel in Greek translation

kernel_manager.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def combobox_repo(self):
205205
"""Widget comboBox и список репозиториев в нем"""
206206
current_repo = run('apt-repo', shell=True, stdout=PIPE, \
207207
encoding='utf-8').stdout.splitlines()[1]
208-
list_repo = ["p9", "Sisyphus"]
208+
list_repo = ["p9", "p10", "Sisyphus"]
209209

210210
for name_repo in list_repo:
211211
if name_repo in current_repo:
@@ -318,17 +318,27 @@ def branches(self):
318318
elif combobox_text == 'Sisyphus' and combobox_text not in current_repo:
319319
list_command = ("/bin/sh -c "
320320
'"apt-get dist-upgrade ; "'
321-
'"apt-repo rm all ; "'
322-
'"apt-repo add Sisyphus ; "'
321+
'"apt-repo set Sisyphus ; "'
323322
'"apt-get clean ; "'
324323
'"apt-get update ; "'
325324
'"apt-get install apt rpm ; "'
326325
'"apt-get dist-upgrade ; "'
327326
'"update-kernel"')
328327
return list_command
329328

329+
elif combobox_text == 'p10' and combobox_text not in current_repo:
330+
list_command = ("/bin/sh -c "
331+
'"apt-get dist-upgrade ; "'
332+
'"apt-repo set p10 ; "'
333+
'"apt-get clean ; "'
334+
'"apt-get update ; "'
335+
'"apt-get install apt rpm ; "'
336+
'"apt-get dist-upgrade ; "'
337+
'"update-kernel -t std-def"')
338+
return list_command
339+
330340
elif combobox_text not in current_repo:
331-
change_repo = run(f'apt-repo rm all ; apt-repo add {combobox_text}', shell=True)
341+
change_repo = run(f'apt-repo set {combobox_text}', shell=True)
332342
self.bar()
333343

334344
list_command = ("/bin/sh -c "
@@ -556,12 +566,10 @@ def sisyphus_flavour(self):
556566
flavour = 'un-def'
557567

558568
command = ("/bin/sh -c "
559-
'"apt-repo rm all ; "'
560-
'"apt-repo add Sisyphus ; "'
569+
'"apt-repo set Sisyphus ; "'
561570
'"apt-get\" \"update" + "; "'
562571
f'"update-kernel -t {flavour} ; "'
563-
'"apt-repo rm all ; "'
564-
f'"apt-repo add {combobox_text} ; "'
572+
f'"apt-repo set {combobox_text} ; "'
565573
'"apt-get update"')
566574

567575
self.proc_win.update_kernel = True
-4 Bytes
Binary file not shown.

locale/el/LC_MESSAGES/kernel_manager.po

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
msgid ""
66
msgstr ""
77
"Project-Id-Version: Kernel Manager\n"
8-
"POT-Creation-Date: 2021-06-26 12:10+0300\n"
9-
"PO-Revision-Date: 2021-06-26 12:10+0300\n"
8+
"POT-Creation-Date: 2021-11-08 11:33+0300\n"
9+
"PO-Revision-Date: 2021-11-08 11:41+0300\n"
1010
"Last-Translator: Евгений <eg.evgeniy@gmail.com>\n"
1111
"Language-Team: LANGUAGE <eg.evgeniy@gmail.com>\n"
1212
"Language: el\n"
@@ -367,7 +367,23 @@ msgstr "Διανομή"
367367
msgid "Change repository"
368368
msgstr "Αλλαγή αποθετηρίου"
369369

370+
#: form/main_win.py:304
371+
msgid "Filter for kernel modules installed on the system"
372+
msgstr "Φίλτρο για μονάδες πυρήνα εγκατεστημένα στο σύστημα"
373+
370374
#: form/main_win.py:305
375+
msgid "All installed modules"
376+
msgstr "Όλες οι εγκατεστημένες λειτουργικές μονάδες"
377+
378+
#: form/main_win.py:307
379+
msgid ""
380+
"Remove packages that were automatically installed to satisfy<br>dependencies "
381+
"for other packages and are now no longer needed. "
382+
msgstr ""
383+
"Καταργήστε πακέτα που εγκαταστάθηκαν αυτόματα για να "
384+
"ικανοποιήσουν<br>εξαρτήσεις για άλλα πακέτα και δεν χρειάζονται πλέον. "
385+
386+
#: form/main_win.py:308
371387
msgid ""
372388
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/"
373389
"REC-html40/strict.dtd\">\n"
@@ -380,7 +396,7 @@ msgid ""
380396
"right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-"
381397
"weight:600;\">The note</span></p>\n"
382398
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-"
383-
"right:0px; -qt-block-indent:0; text-indent:0px;\">The brick button uses the "
399+
"right:0px; -qt-block-indent:0; text-indent:0px;\">The broom button uses the "
384400
"&quot;<span style=\" font-weight:600;\">apt-get autoremove</span>&quot; "
385401
"command to clean up the system of packages that are not used by any program. "
386402
"Sometimes this command removes the libraries you want, so back up your "
@@ -399,32 +415,16 @@ msgstr ""
399415
"right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-"
400416
"weight:600;\">Σημείωση</span></p>\n"
401417
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-"
402-
"right:0px; -qt-block-indent:0; text-indent:0px;\">Το κεραμικό κουμπί "
403-
"(τούβλο) χρησιμοποιεί το &quot;<span style=\" font-weight:600;\">apt-get "
404-
"autoremove</span>&quot; εντολή για να καθαρίσετε το σύστημα των πακέτων που "
405-
"δεν χρησιμοποιούνται από κανένα πρόγραμμα. Μερικές φορές αυτή η εντολή "
406-
"καταργεί τις βιβλιοθήκες που θέλετε, οπότε δημιουργήστε αντίγραφα ασφαλείας "
407-
"του συστήματός σας πριν τη χρησιμοποιήσετε. Μπορείτε να μάθετε περισσότερα "
418+
"right:0px; -qt-block-indent:0; text-indent:0px;\">Το σκούπα κουμπί (τούβλο) "
419+
"χρησιμοποιεί το &quot;<span style=\" font-weight:600;\">apt-get autoremove</"
420+
"span>&quot; εντολή για να καθαρίσετε το σύστημα των πακέτων που δεν "
421+
"χρησιμοποιούνται από κανένα πρόγραμμα. Μερικές φορές αυτή η εντολή καταργεί "
422+
"τις βιβλιοθήκες που θέλετε, οπότε δημιουργήστε αντίγραφα ασφαλείας του "
423+
"συστήματός σας πριν τη χρησιμοποιήσετε. Μπορείτε να μάθετε περισσότερα "
408424
"πληκτρολογώντας &quot;<span style=\" font-weight:600;\">--autoremove</"
409425
"span>&quot; in &quot;<span style=\" font-weight:600;\">man apt-get</"
410426
"span>&quot; Τερματικό.</p></body></html>"
411427

412-
#: form/main_win.py:311
413-
msgid "Filter for kernel modules installed on the system"
414-
msgstr "Φίλτρο για μονάδες πυρήνα εγκατεστημένα στο σύστημα"
415-
416-
#: form/main_win.py:312
417-
msgid "All installed modules"
418-
msgstr "Όλες οι εγκατεστημένες λειτουργικές μονάδες"
419-
420-
#: form/main_win.py:313
421-
msgid ""
422-
"Remove packages that were automatically installed to satisfy<br>dependencies "
423-
"for other packages and are now no longer needed. "
424-
msgstr ""
425-
"Καταργήστε πακέτα που εγκαταστάθηκαν αυτόματα για να "
426-
"ικανοποιήσουν<br>εξαρτήσεις για άλλα πακέτα και δεν χρειάζονται πλέον. "
427-
428428
#: form/main_win.py:314
429429
msgid "Kernel modules"
430430
msgstr "Μονάδες Πυρήνων (kernel)"
-2.61 KB
Binary file not shown.

0 commit comments

Comments
 (0)