Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py

Fri, 21 Oct 2016 20:01:56 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 21 Oct 2016 20:01:56 +0200
changeset 5262
235d6a030128
parent 5104
Plugins/VcsPlugins/vcsMercurial/HgUserConfigDataDialog.py@0b9420dc1093
child 5264
8bc23ecb4ea3
permissions
-rw-r--r--

Continued refactoring the Mercurial user config management code.

# -*- coding: utf-8 -*-

# Copyright (c) 2014 - 2016 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a dialog to enter some user data.
"""

from __future__ import unicode_literals

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog

from Globals.E5ConfigParser import E5ConfigParser

from .HgUtilities import getConfigPath

from .Ui_HgUserConfigDialog import Ui_HgUserConfigDialog


class HgUserConfigDialog(QDialog, Ui_HgUserConfigDialog):
    """
    Class implementing a dialog to enter some user data.
    """
    def __init__(self, version=(0, 0), parent=None):
        """
        Constructor
        
        @param version Mercurial version info (tuple of two integers)
        @param parent reference to the parent widget (QWidget)
        """
        super(HgUserConfigDialog, self).__init__(parent)
        self.setupUi(self)
        
        msh = self.minimumSizeHint()
        self.resize(max(self.width(), msh.width()), msh.height())
        
        self.__config = None
        self.readUserConfig()
    
    def writeUserConfig(self):
        """
        Public method to write the user configuration file.
        """
        if self.__config is None:
            self.__config = E5ConfigParser()
        
        self.__config["ui"] = {
            "username": "{0} <{1}>".format(
                self.userNameEdit.text(),
                self.emailEdit.text(),
            )
        }
        self.__config["extensions"] = {}
        if self.fetchCheckBox.isChecked():
            self.__config["extensions"]["fetch"] = ""
        if self.gpgCheckBox.isChecked():
            self.__config["extensions"]["gpg"] = ""
        if self.purgeCheckBox.isChecked():
            self.__config["extensions"]["purge"] = ""
        if self.queuesCheckBox.isChecked():
            self.__config["extensions"]["mq"] = ""
        if self.rebaseCheckBox.isChecked():
            self.__config["extensions"]["rebase"] = ""
        if self.shelveCheckBox.isChecked():
            self.__config["extensions"]["shelve"] = ""
        if self.largefilesCheckBox.isChecked():
            self.__config["extensions"]["largefiles"] = ""
            self.__config["largefiles"] = {
                "minsize": self.lfFileSizeSpinBox.value(),
            }
            lfFilePatterns = self.lfFilePatternsEdit.text()
            if lfFilePatterns:
                self.__config["largefiles"]["patterns"] = lfFilePatterns
        
        cfgFile = getConfigPath()
        with open(cfgFile, "w") as configFile:
            self.__config.write(configFile)
    
    def readUserConfig(self):
        """
        Public method to read the user configuration file.
        """
        cfgFile = getConfigPath()
        
        self.__config = E5ConfigParser()
        if self.__config.read(cfgFile):
            # step 1: extract user name and email
            try:
                username = self.__config["ui"]["username"].strip()
                if "<" in username and username.endswith(">"):
                    name, email = username[:-1].rsplit("<", 1)
                else:
                    name = username
                    email = ""
                self.userNameEdit.setText(name.strip()),
                self.emailEdit.setText(email.strip()),
            except KeyError:
                pass
            
            # step 2: extract extensions information
            if "extensions" in self.__config:
                self.fetchCheckBox.setChecked(
                    "fetch" in self.__config["extensions"])
                self.gpgCheckBox.setChecked(
                    "gpg" in self.__config["extensions"])
                self.purgeCheckBox.setChecked(
                    "purge" in self.__config["extensions"])
                self.queuesCheckBox.setChecked(
                    "mq" in self.__config["extensions"])
                self.rebaseCheckBox.setChecked(
                    "rebase" in self.__config["extensions"])
                self.shelveCheckBox.setChecked(
                    "shelve" in self.__config["extensions"])
                self.largefilesCheckBox.setChecked(
                    "largefiles" in self.__config["extensions"])
            
            # step 3: extract large files information
            if "largefiles" in self.__config:
                if "minsize" in self.__config["largefiles"]:
                    self.lfFileSizeSpinBox.setValue(
                        self.__config.getint("largefiles", "minsize"))
                if "patterns" in self.__config["largefiles"]:
                    self.lfFilePatternsEdit.setText(
                        self.__config["largefiles"]["patterns"])
    
    @pyqtSlot()
    def accept(self):
        """
        Public slot to accept the dialog.
        """
        self.writeUserConfig()
        
        super(HgUserConfigDialog, self).accept()

eric ide

mercurial