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, Signal, QObject, QSortFilterProxyModel, Qt, QProcess 0007 from PySide2.QtQml import qmlRegisterType 0008 0009 from PicoWizard.module import Module 0010 from PicoWizard.modules.timezone.timezonemodel import TimezoneModel 0011 from PicoWizard.utils.logger import Logger 0012 0013 0014 class Timezone(Module): 0015 log = Logger.getLogger(__name__) 0016 _filterText = '' 0017 0018 def __init__(self, parent=None): 0019 super().__init__(__file__, parent) 0020 0021 self._timezoneModel = TimezoneModel(parent) 0022 self._timezoneProxyModel = QSortFilterProxyModel(parent) 0023 0024 self._timezoneProxyModel.setSourceModel(self._timezoneModel) 0025 self._timezoneProxyModel.setFilterRole(TimezoneModel.TzRole) 0026 self._timezoneProxyModel.setFilterCaseSensitivity(Qt.CaseInsensitive) 0027 0028 self._timezoneProxyModel.setSortRole(TimezoneModel.TzRole) 0029 self._timezoneProxyModel.setSortCaseSensitivity(Qt.CaseInsensitive) 0030 self._timezoneProxyModel.sort(0, Qt.AscendingOrder) 0031 0032 @staticmethod 0033 def registerTypes() -> None: 0034 qmlRegisterType(Timezone, 'PicoWizard', 1, 0, 'TimezoneModule') 0035 0036 @staticmethod 0037 def qmlPath() -> QUrl: 0038 return QUrl(os.path.join(os.path.dirname(os.path.realpath(__file__)), "Timezone.qml")) 0039 0040 @Slot(None, result=str) 0041 def moduleName(self) -> str: 0042 return self.tr("Timezone") 0043 0044 @Signal 0045 def modelChanged(self): 0046 pass 0047 0048 @Signal 0049 def filterTextChanged(self): 0050 pass 0051 0052 def _getFilterText(self): 0053 return self._filterText 0054 0055 def _setFilterText(self, text): 0056 self._filterText = text 0057 self._timezoneProxyModel.setFilterRegExp(text) 0058 0059 @Property(QObject, notify=modelChanged) 0060 def model(self): 0061 return self._timezoneProxyModel 0062 0063 @Slot(int, result=None) 0064 def setTimezone(self, tzIndex): 0065 timezone = self._timezoneProxyModel.data(self._timezoneProxyModel.index(tzIndex, 0), TimezoneModel.TzRole) 0066 self.log.debug(f'Selected Timezone : {timezone}') 0067 Module.__ENV__.insert('PICOWIZARD_TZ', timezone) 0068 0069 process = QProcess(self) 0070 args = [ 0071 '/usr/bin/ln', 0072 '-sf', 0073 os.path.join( 0074 '/usr', 0075 'share', 0076 'zoneinfo', 0077 timezone 0078 ), 0079 '/etc/localtime' 0080 ] 0081 0082 process.start('/usr/bin/pkexec', args) 0083 0084 process.finished.connect(lambda exitCode, exitStatus: self.tzCmdSuccess(exitCode, exitStatus)) 0085 process.error.connect(lambda err: self.tzCmdFailed(err)) 0086 0087 def tzCmdSuccess(self, exitCode, exitStatus): 0088 self.log.info('Setting Timezone') 0089 0090 if exitCode != 0: 0091 self.log.error('Failed to set timezone') 0092 self.setTimezoneFailed.emit() 0093 self.errorOccurred.emit("Failed to set Timezone") 0094 else: 0095 self.setTimezoneSuccess.emit() 0096 0097 def tzCmdFailed(self, err): 0098 self.log.error('Failed to set timezone') 0099 self.log.error(err) 0100 self.setTimezoneFailed.emit() 0101 self.errorOccurred.emit("Failed to set Timezone") 0102 0103 @Signal 0104 def setTimezoneSuccess(self): 0105 pass 0106 0107 @Signal 0108 def setTimezoneFailed(self): 0109 pass 0110 0111 filterText = Property(str, _getFilterText, _setFilterText, notify=filterTextChanged)