Example #1
0
 def __init__(self, parent):
     super().__init__(parent)
     self.ui = Ui_Dialog()
     self.ui.setupUi(self)
     self.ui.lineEditTitle.textChanged.connect(self.enable_submit)
     self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit)
     self.ui.pushButtonSubmit.clicked.connect(self.submit)
     self.enable_submit()
Example #2
0
 def __init__(self, parent, title='', description=''):
     super().__init__(parent)
     self.ui = Ui_Dialog()
     self.ui.setupUi(self)
     self.ui.lineEditTitle.textChanged.connect(self.enable_submit)
     self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit)
     self.ui.pushButtonSubmit.clicked.connect(self.submit)
     self.ui.lineEditTitle.setText(title)
     self.ui.plainTextEditDesc.setPlainText(description)
     self.enable_submit()
 def __init__(self, parent, title='', description=''):
     super().__init__(parent)
     self.ui = Ui_Dialog()
     self.ui.setupUi(self)
     self.ui.lineEditTitle.textChanged.connect(self.enable_submit)
     self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit)
     self.ui.pushButtonSubmit.clicked.connect(self.submit)
     self.ui.lineEditTitle.setText(title)
     self.ui.plainTextEditDesc.setPlainText(description)
     self.enable_submit()
Example #4
0
 def __init__(self, parent, title='', description=''):
     super().__init__(parent)
     self.ui = Ui_Dialog()
     self.ui.setupUi(self)
     self.ui.lineEditTitle.textChanged.connect(self.enable_submit)
     self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit)
     self.ui.pushButtonSubmit.clicked.connect(self.submit)
     self.ui.pushButtonSendEmail.clicked.connect(self.send_email)
     self.ui.lineEditTitle.setText(title)
     self.ui.plainTextEditDesc.setPlainText(description)
     self.enable_submit()
     _logger().info('System informations:\n%s',
                    self.get_system_infos())
Example #5
0
class DlgReportBug(QtWidgets.QDialog):
    def __init__(self, parent, title='', description=''):
        super().__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.lineEditTitle.textChanged.connect(self.enable_submit)
        self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit)
        self.ui.pushButtonSubmit.clicked.connect(self.submit)
        self.ui.pushButtonSendEmail.clicked.connect(self.send_email)
        self.ui.lineEditTitle.setText(title)
        self.ui.plainTextEditDesc.setPlainText(description)
        self.enable_submit()
        _logger().info('System informations:\n%s',
                       self.get_system_infos())

    def enable_submit(self, *_):
        self.ui.pushButtonSubmit.setEnabled(
            self.ui.lineEditTitle.text().strip() != '' and
            self.ui.plainTextEditDesc.toPlainText().strip() != '')
        self.ui.pushButtonSendEmail.setEnabled(
            self.ui.pushButtonSubmit.isEnabled())

    def _get_data(self):
        title = self.ui.lineEditTitle.text().strip()
        description = self.ui.plainTextEditDesc.toPlainText().strip()
        bug = self.ui.radioButtonBug.isChecked()
        if bug:
            title = '[Bug] %s' % title
            description = BUG_DESCRIPTION % (
                description, self.get_system_infos(),
                self.get_application_log())
        else:
            title = '[Enhancement] %s' % title
        return {'title': title, 'body': description}

    def submit(self):
        data = self._get_data()
        username, password, remember = self.get_user_credentials()
        if not username or not password:
            return
        try:
            gh = github.GitHub(username=username, password=password)
            repo = gh.repos('OpenCobolIDE')('OpenCobolIDE')
            ret = repo.issues.post(title=data['title'], body=data['body'])
        except github.ApiError:
            _logger().exception('failed to send bug report')
            QtWidgets.QMessageBox.warning(
                self, 'Failed to create issue',
                'Failed to create github issue, see the application log for '
                'more information...')
        else:
            issue_nbr = ret['number']
            ret = QtWidgets.QMessageBox.question(
                self, 'Issue created on github',
                'Issue successfully created. Would you like to open the ticket'
                ' in your web browser?')
            if ret == QtWidgets.QMessageBox.Yes:
                webbrowser.open(
                    'https://github.com/OpenCobolIDE/OpenCobolIDE/issues/%d' %
                    issue_nbr)
            self.accept()

    def send_email(self):
        data = self._get_data()
        url = QtCore.QUrl("mailto:%s?subject=%s&body=%s" %
                          (EMAIL_ADDRESS, data['title'], data['body']))
        QtGui.QDesktopServices.openUrl(url)

    def get_user_credentials(self):
        remember = Settings().remember_github_credentials
        username = Settings().github_username
        if remember and username:
            return username, keyring.get_password('github', username), remember
        else:
            username, password, remember = DlgGitHubLogin.login(self)
            if remember:
                Settings().remember_github_credentials = remember
                Settings().github_username = username
                keyring.set_password('github', username, password)
            return username, password, remember

    @classmethod
    def report_bug(cls, parent, title='', description=''):
        dlg = cls(parent, title=title, description=description)
        dlg.exec_()

    def get_system_infos(self):
        try:
            import qdarkstyle
        except ImportError:
            qdarkstyle_version = 'Not installed'
        else:
            qdarkstyle_version = qdarkstyle.__version__

        def get_linux_distro():
            try:
                out = str(subprocess.check_output(['lsb_release', '-i']),
                          locale.getpreferredencoding())
            except OSError:
                distro = platform.linux_distribution()[0]
                if not distro:
                    distro = 'linux distribution not found'
            else:
                distro = out.split(':')[1].strip()
            return distro

        system_info = platform.system()
        if 'linux' in sys.platform.lower():
            system_info = get_linux_distro()
        elif 'darwin' in sys.platform.lower():
            system_info = 'Mac OS X %s' % platform.mac_ver()[0]
        return '\n'.join([
            '- Operating System: %s' % system_info,
            '- OpenCobolIDE: %s' % __version__,
            '- GnuCOBOL: %s' % GnuCobolCompiler().get_version(
                include_all=False),
            '- Python: %s (%dbits)' % (platform.python_version(), 64
                                       if sys.maxsize > 2**32 else 32),
            '- Qt: %s' % QtCore.QT_VERSION_STR,
            '- PyQt: %s' % QtCore.PYQT_VERSION_STR,
            '- pyqode.core: %s' % pyqode.core.__version__,
            '- pyqode.cobol: %s' % pyqode.cobol.__version__,
            '- pyqode.qt: %s' % pyqode.qt.__version__,
            '- pygments: %s' % pygments.__version__,
            '- QDarkStyle: %s' % qdarkstyle_version
        ])

    def get_application_log(self):
        try:
            with open(logger.get_path(), 'r') as f:
                content = f.read()
            lines = []
            for l in content.splitlines():
                if l.strip():
                    lines.append(l)
            return '\n'.join(lines[-100:])
        except FileNotFoundError:
            return ''
Example #6
0
class DlgReportBug(QtWidgets.QDialog):
    def __init__(self, parent, title='', description=''):
        super().__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.lineEditTitle.textChanged.connect(self.enable_submit)
        self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit)
        self.ui.pushButtonSubmit.clicked.connect(self.submit)
        self.ui.lineEditTitle.setText(title)
        self.ui.plainTextEditDesc.setPlainText(description)
        self.enable_submit()

    def enable_submit(self, *_):
        self.ui.pushButtonSubmit.setEnabled(
            self.ui.lineEditTitle.text().strip() != ''
            and self.ui.plainTextEditDesc.toPlainText().strip() != '')

    def submit(self):
        title = self.ui.lineEditTitle.text().strip()
        description = self.ui.plainTextEditDesc.toPlainText().strip()
        bug = self.ui.radioButtonBug.isChecked()
        if bug:
            title = '[Bug] %s' % title
            description = BUG_DESCRIPTION % (description,
                                             self.get_system_infos())
        else:
            title = '[Enhancement] %s' % title
        url_data = urllib.parse.urlencode({
            'title': title,
            'body': description
        })
        url = 'https://github.com/OpenCobolIDE/OpenCobolIDE/issues/new?' + \
            url_data
        QtWidgets.QMessageBox.information(
            self, 'Complete bug report on www.github.com',
            'To complete the report process, we need you to submit the '
            'generated ticket on our issue tracker. We will open a browser to '
            'our tracker, you just need to login with your github account and '
            'press the submit button at the end of the page.')
        try:
            QtGui.QDesktopServices.openUrl(QtCore.QUrl.fromEncoded(url))
        except TypeError:
            QtGui.QDesktopServices.openUrl(
                QtCore.QUrl.fromEncoded(bytes(url, 'utf-8')))
        self.accept()

    @classmethod
    def report_bug(cls, parent, title='', description=''):
        dlg = cls(parent, title=title, description=description)
        dlg.exec_()

    def get_system_infos(self):
        try:
            import qdarkstyle
        except ImportError:
            qdarkstyle_version = 'Not installed'
        else:
            qdarkstyle_version = qdarkstyle.__version__

        system = platform.system()
        is_linux = system.lower() == 'linux'
        return '\n'.join([
            '- Operating System: %s' % system + ' (' +
            ' '.join(platform.linux_distribution()) + ')' if is_linux else '',
            '- OpenCobolIDE: %s' % __version__,
            '- GnuCOBOL: %s' % GnuCobolCompiler().get_version(),
            '- Python: %s (%dbits)' %
            (platform.python_version(), 64 if sys.maxsize > 2**32 else 32),
            '- Qt: %s' % QtCore.QT_VERSION_STR,
            '- PyQt: %s' % QtCore.PYQT_VERSION_STR,
            '- pyqode.core: %s' % pyqode.core.__version__,
            '- pyqode.cobol: %s' % pyqode.cobol.__version__,
            '- pyqode.qt: %s' % pyqode.qt.__version__,
            '- pygments: %s' % pygments.__version__,
            '- QDarkStyle: %s' % qdarkstyle_version
        ])

    def get_application_log(self):
        with open(logger.get_path(), 'r') as f:
            return f.read()
class DlgReportBug(QtWidgets.QDialog):
    def __init__(self, parent, title='', description=''):
        super().__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.lineEditTitle.textChanged.connect(self.enable_submit)
        self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit)
        self.ui.pushButtonSubmit.clicked.connect(self.submit)
        self.ui.lineEditTitle.setText(title)
        self.ui.plainTextEditDesc.setPlainText(description)
        self.enable_submit()

    def enable_submit(self, *_):
        self.ui.pushButtonSubmit.setEnabled(
            self.ui.lineEditTitle.text().strip() != '' and
            self.ui.plainTextEditDesc.toPlainText().strip() != '')

    def submit(self):
        title = self.ui.lineEditTitle.text().strip()
        description = self.ui.plainTextEditDesc.toPlainText().strip()
        bug = self.ui.radioButtonBug.isChecked()
        if bug:
            title = '[Bug] %s' % title
            description = BUG_DESCRIPTION % (
                description, self.get_system_infos())
        else:
            title = '[Enhancement] %s' % title
        url_data = urllib.parse.urlencode(
            {'title': title, 'body': description})
        url = 'https://github.com/OpenCobolIDE/OpenCobolIDE/issues/new?' + \
            url_data
        QtWidgets.QMessageBox.information(
            self, 'Complete bug report on www.github.com',
            'To complete the report process, we need you to submit the '
            'generated ticket on our issue tracker. We will open a browser to '
            'our tracker, you just need to login with your github account and '
            'press the submit button at the end of the page.')
        try:
            QtGui.QDesktopServices.openUrl(QtCore.QUrl.fromEncoded(url))
        except TypeError:
            QtGui.QDesktopServices.openUrl(QtCore.QUrl.fromEncoded(bytes(
                url, 'utf-8')))
        self.accept()

    @classmethod
    def report_bug(cls, parent, title='', description=''):
        dlg = cls(parent, title=title, description=description)
        dlg.exec_()

    def get_system_infos(self):
        try:
            import qdarkstyle
        except ImportError:
            qdarkstyle_version = 'Not installed'
        else:
            qdarkstyle_version = qdarkstyle.__version__

        system = platform.system()
        is_linux = system.lower() == 'linux'
        return '\n'.join([
            '- Operating System: %s' % system +
            ' (' + ' '.join(platform.linux_distribution()) + ')' if is_linux
            else '',
            '- OpenCobolIDE: %s' % __version__,
            '- GnuCOBOL: %s' % GnuCobolCompiler().get_version(),
            '- Python: %s (%dbits)' % (platform.python_version(), 64
                                       if sys.maxsize > 2**32 else 32),
            '- Qt: %s' % QtCore.QT_VERSION_STR,
            '- PyQt: %s' % QtCore.PYQT_VERSION_STR,
            '- pyqode.core: %s' % pyqode.core.__version__,
            '- pyqode.cobol: %s' % pyqode.cobol.__version__,
            '- pyqode.qt: %s' % pyqode.qt.__version__,
            '- pygments: %s' % pygments.__version__,
            '- QDarkStyle: %s' % qdarkstyle_version
        ])

    def get_application_log(self):
        with open(logger.get_path(), 'r') as f:
            return f.read()