File indexing completed on 2024-05-19 05:35:37
0001 # SPDX-License-Identifier: GPL-3.0-or-later 0002 # SPDX-FileCopyrightText: 2021 Anupam Basak <anupam.basak27@gmail.com> 0003 0004 import os 0005 0006 from PySide2.QtCore import QUrl, Slot, Property, QObject, Signal, QSortFilterProxyModel, Qt, QProcess 0007 from PySide2.QtQml import qmlRegisterType 0008 0009 from PicoWizard.module import Module 0010 from PicoWizard.modules.locale.localemodel import LocaleModel 0011 from PicoWizard.modules.locale.localeslist import locales 0012 from PicoWizard.utils.logger import Logger 0013 0014 0015 class Locale(Module): 0016 log = Logger.getLogger(__name__) 0017 __filterText__ = '' 0018 0019 def __init__(self, parent=None): 0020 super().__init__(__file__, parent) 0021 0022 self.__localeModel__ = LocaleModel(parent) 0023 self.__localeProxyModel__ = QSortFilterProxyModel(parent) 0024 0025 self.__localeProxyModel__.setSourceModel(self.__localeModel__) 0026 self.__localeProxyModel__.setFilterRole(LocaleModel.Roles.NameRole) 0027 self.__localeProxyModel__.setFilterCaseSensitivity(Qt.CaseInsensitive) 0028 0029 self.__localeProxyModel__.setSortRole(LocaleModel.Roles.NameRole) 0030 self.__localeProxyModel__.setSortCaseSensitivity(Qt.CaseInsensitive) 0031 self.__localeProxyModel__.sort(0, Qt.AscendingOrder) 0032 0033 for locale in locales: 0034 self.__localeModel__.addLocaleItem(locale) 0035 0036 @staticmethod 0037 def registerTypes() -> None: 0038 qmlRegisterType(Locale, 'PicoWizard', 1, 0, 'LocaleModule') 0039 qmlRegisterType(LocaleModel, 'PicoWizard', 1, 0, 'LocaleModel') 0040 0041 @staticmethod 0042 def qmlPath() -> QUrl: 0043 return QUrl(os.path.join(os.path.dirname(os.path.realpath(__file__)), "Locale.qml")) 0044 0045 @Slot(None, result=str) 0046 def moduleName(self) -> str: 0047 return self.tr("Locale") 0048 0049 @Slot(None) 0050 def writeLocaleGenConfig(self): 0051 self.log.debug(f'Selected locales : {self.__localeModel__.getSelectedLocales()}') 0052 0053 process = QProcess(self) 0054 args = [os.path.join(os.path.dirname(os.path.realpath(__file__)), "writelocalegenconfig.sh")] 0055 0056 for locale in self.__localeModel__.getSelectedLocales(): 0057 args.append(f"{locale[0]} {locale[1]}") 0058 0059 self.log.debug(f"writelocalegenconfig.sh arguments : {args}") 0060 0061 process.start('/usr/bin/pkexec', args) 0062 0063 process.finished.connect(lambda exitCode, exitStatus: self.writeLocaleScriptSuccess(exitCode, exitStatus, process)) 0064 process.error.connect(lambda err: self.writeLocaleScriptError(err)) 0065 0066 def writeLocaleScriptSuccess(self, exitCode, exitStatus, process): 0067 if exitCode != 0: 0068 self.log.error('Failed to write `localegen` config') 0069 self.localeSetupFailed.emit() 0070 self.errorOccurred.emit("Failed to write `localegen` config") 0071 else: 0072 self.log.info('`localegen` config written successfully') 0073 self.log.info("Running `locale-gen` command to generate locales") 0074 0075 process = QProcess(self) 0076 args = ['locale-gen'] 0077 0078 process.start('/usr/bin/pkexec', args) 0079 process.finished.connect(lambda exitCode, exitStatus: self.localeGenCmdSuccess(exitCode, exitStatus, process)) 0080 process.error.connect(lambda err: self.localeGenCmdError(err)) 0081 0082 0083 def writeLocaleScriptError(self, err): 0084 self.log.error('Failed to write `localegen` config') 0085 self.log.error(err) 0086 self.localeSetupFailed.emit() 0087 self.errorOccurred.emit("Failed to write `localegen` config") 0088 0089 def localeGenCmdSuccess(self, exitCode, exitStatus, process): 0090 if exitCode != 0: 0091 self.log.error('`locale-gen` command failed') 0092 self.localeSetupFailed.emit() 0093 self.errorOccurred.emit("`locale-gen` command failed") 0094 else: 0095 self.log.info('`locale-gen` command complete') 0096 self.log.debug(process.readAll()) 0097 self.localeSetupSuccess.emit() 0098 0099 def localeGenCmdError(self, err): 0100 self.log.error('`locale-gen` command failed') 0101 self.log.error(err) 0102 self.localeSetupFailed.emit() 0103 self.errorOccurred.emit("`locale-gen` command failed") 0104 0105 def __getModel__(self): 0106 return self.__localeProxyModel__ 0107 0108 def __getFilterText__(self): 0109 return self.__filterText__ 0110 0111 def __setFilterText__(self, text): 0112 self.__filterText__ = text 0113 self.__localeProxyModel__.setFilterRegExp(text) 0114 0115 filterTextChanged = Signal() 0116 modelChanged = Signal() 0117 localeSetupSuccess = Signal() 0118 localeSetupFailed = Signal() 0119 0120 model = Property(QObject, __getModel__, notify=modelChanged) 0121 filterText = Property(str, __getFilterText__, __setFilterText__, notify=filterTextChanged)