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)