--- a/Preferences/ConfigurationPages/EmailPage.py Sat Mar 02 11:12:25 2019 +0100 +++ b/Preferences/ConfigurationPages/EmailPage.py Sat Mar 02 17:33:58 2019 +0100 @@ -11,12 +11,16 @@ import smtplib import socket +import sys from PyQt5.QtCore import pyqtSlot, Qt from PyQt5.QtGui import QCursor from PyQt5.QtWidgets import QApplication from E5Gui import E5MessageBox +from E5Gui.E5Application import e5App + +from E5Network.E5GoogleMailHelpers import getInstallCommand, RequiredPackages from .ConfigurationPageBase import ConfigurationPageBase from .Ui_EmailPage import Ui_EmailPage @@ -46,30 +50,7 @@ " ".join(pipPackages)) # set initial values - try: - import googleapiclient # __IGNORE_WARNING__ - self.googleMailCheckBox.setChecked( - Preferences.getUser("UseGoogleMailOAuth2")) - - from E5Network.E5GoogleMail import isClientSecretFileAvailable - if not isClientSecretFileAvailable(): - # credentials file is not installed - self.googleMailCheckBox.setChecked(False) - self.googleMailCheckBox.setEnabled(False) - self.googleMailInfoLabel.setText(self.tr( - "<p>The credentials file is not present. Has the Gmail API" - " been enabled?</p>")) - Preferences.setUser("UseGoogleMailOAuth2", False) - except ImportError: - # missing libraries, disable Google Mail - self.googleMailCheckBox.setChecked(False) - self.googleMailCheckBox.setEnabled(False) - self.googleMailInfoLabel.setText(self.tr( - "<p>The Google Mail Client API is not installed." - " Use <code>{0}</code> to install it.</p>") - .format(self.__pipCommand)) - self.googleHelpButton.setEnabled(False) - Preferences.setUser("UseGoogleMailOAuth2", False) + self.__checkGoogleMail() self.mailServerEdit.setText(Preferences.getUser("MailServer")) self.portSpin.setValue(Preferences.getUser("MailServerPort")) @@ -87,7 +68,7 @@ self.useSslButton.setChecked(True) else: self.noEncryptionButton.setChecked(True) - + def save(self): """ Public slot to save the Email configuration. @@ -290,10 +271,10 @@ from E5Network.E5GoogleMail import GoogleMailHelp helpStr = GoogleMailHelp() except ImportError: - helpStr = self.tr( - "<p>The Google Mail Client API is not installed." - " Use <code>{0}</code> to install it.</p>" - ).format(self.__pipCommand) + helpStr = self.tr( + "<p>The Google Mail Client API is not installed." + " Use <code>{0}</code> to install it.</p>" + ).format(getInstallCommand()) from E5Gui.E5SimpleHelpDialog import E5SimpleHelpDialog self.__helpDialog = E5SimpleHelpDialog( @@ -301,6 +282,65 @@ helpStr=helpStr, parent=self) self.__helpDialog.show() + + @pyqtSlot() + def on_googleInstallButton_clicked(self): + """ + Private slot to install the required packages for use of Google Mail. + """ + pip = e5App().getObject("Pip") + pip.installPackages(RequiredPackages, interpreter=sys.executable) + self.__checkGoogleMail() + + @pyqtSlot() + def on_googleCheckAgainButton_clicked(self): + """ + Private slot to check again the availability of Google Mail. + """ + self.__checkGoogleMail() + + def __checkGoogleMail(self): + """ + Private method to check the Google Mail availability and set the + widgets accordingly. + """ + self.googleMailInfoLabel.hide() + self.googleInstallButton.show() + self.googleCheckAgainButton.show() + self.googleHelpButton.setEnabled(True) + self.googleMailCheckBox.setEnabled(True) + + try: + import E5Network.E5GoogleMail # __IGNORE_WARNING__ + from E5Network.E5GoogleMailHelpers import \ + isClientSecretFileAvailable + + self.googleInstallButton.hide() + if not isClientSecretFileAvailable(): + # secrets file is not installed + self.googleMailCheckBox.setChecked(False) + self.googleMailCheckBox.setEnabled(False) + self.googleMailInfoLabel.setText(self.tr( + "<p>The client secrets file is not present." + " Has the Gmail API been enabled?</p>")) + self.googleMailInfoLabel.show() + Preferences.setUser("UseGoogleMailOAuth2", False) + else: + self.googleMailCheckBox.setChecked( + Preferences.getUser("UseGoogleMailOAuth2")) + self.googleMailInfoLabel.hide() + self.googleCheckAgainButton.hide() + except ImportError: + # missing libraries, disable Google Mail + self.googleMailCheckBox.setChecked(False) + self.googleMailCheckBox.setEnabled(False) + self.googleMailInfoLabel.setText(self.tr( + "<p>The Google Mail Client API is not installed." + " Use <code>{0}</code> to install it.</p>" + ).format(getInstallCommand())) + self.googleMailInfoLabel.show() + self.googleHelpButton.setEnabled(False) + Preferences.setUser("UseGoogleMailOAuth2", False) def create(dlg):