forked from openlp/openlp
147 lines
7.4 KiB
Python
147 lines
7.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
##########################################################################
|
|
# OpenLP - Open Source Lyrics Projection #
|
|
# ---------------------------------------------------------------------- #
|
|
# Copyright (c) 2008-2019 OpenLP Developers #
|
|
# ---------------------------------------------------------------------- #
|
|
# This program is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
|
##########################################################################
|
|
"""
|
|
The :mod:`~openlp.plugins.planningcenter.lib.planningcentertab` module contains
|
|
the settings tab for the PlanningCenter plugin
|
|
"""
|
|
from PyQt5 import QtCore, QtWidgets
|
|
|
|
from openlp.core.common.i18n import translate
|
|
from openlp.core.common.settings import Settings
|
|
from openlp.core.lib.settingstab import SettingsTab
|
|
from openlp.plugins.planningcenter.lib.planningcenter_api import PlanningCenterAPI
|
|
|
|
|
|
class PlanningCenterTab(SettingsTab):
|
|
"""
|
|
PlanningCenterTab is the alerts settings tab in the settings dialog.
|
|
"""
|
|
def setup_ui(self):
|
|
self.setObjectName('PlanningCenterTab')
|
|
self.tab_layout = QtWidgets.QVBoxLayout(self)
|
|
self.tab_layout.setObjectName('tab_layout')
|
|
self.tab_layout.setAlignment(QtCore.Qt.AlignTop)
|
|
self.auth_group_box = QtWidgets.QGroupBox(self)
|
|
self.tab_layout.addWidget(self.auth_group_box)
|
|
self.auth_layout = QtWidgets.QFormLayout(self.auth_group_box)
|
|
self.auth_layout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
|
|
# notice
|
|
self.notice_label = QtWidgets.QLabel(self.auth_group_box)
|
|
self.notice_label.setWordWrap(True)
|
|
self.auth_layout.addRow(self.notice_label)
|
|
# instructions
|
|
self.instructions_label = QtWidgets.QLabel(self.auth_group_box)
|
|
self.instructions_label.setWordWrap(True)
|
|
self.auth_layout.addRow(self.instructions_label)
|
|
# application_id
|
|
self.application_id_label = QtWidgets.QLabel(self.auth_group_box)
|
|
self.application_id_line_edit = QtWidgets.QLineEdit(self.auth_group_box)
|
|
self.application_id_line_edit.setMaxLength(64)
|
|
self.auth_layout.addRow(self.application_id_label, self.application_id_line_edit)
|
|
# secret
|
|
self.secret_label = QtWidgets.QLabel(self.auth_group_box)
|
|
self.secret_line_edit = QtWidgets.QLineEdit(self.auth_group_box)
|
|
self.secret_line_edit.setMaxLength(64)
|
|
self.auth_layout.addRow(self.secret_label, self.secret_line_edit)
|
|
# Buttons
|
|
self.button_layout = QtWidgets.QDialogButtonBox(self.auth_group_box)
|
|
self.test_credentials_button = QtWidgets.QPushButton(self.auth_group_box)
|
|
self.button_layout.addButton(self.test_credentials_button, QtWidgets.QDialogButtonBox.AcceptRole)
|
|
self.auth_layout.addRow(self.button_layout)
|
|
# signals
|
|
self.test_credentials_button.clicked.connect(self.on_test_credentials_button_clicked)
|
|
|
|
def retranslate_ui(self):
|
|
self.auth_group_box.setTitle(translate('PlanningCenterPlugin.PlanningCenterTab', 'Authentication Settings'))
|
|
self.application_id_label.setText(translate('PlanningCenterPlugin.PlanningCenterTab', 'Application ID:'))
|
|
self.secret_label.setText(translate('PlanningCenterPlugin.PlanningCenterTab', 'Secret:'))
|
|
|
|
self.notice_label.setText(
|
|
translate('PlanningCenterPlugin.PlanningCenterTab', '<strong>Note:</strong> '
|
|
'An Internet connection and a Planning Center Online Account are required in order to \
|
|
import plans from Planning Center Online.')
|
|
)
|
|
self.instructions_label.setText(
|
|
translate('PlanningCenterPlugin.PlanningCenterTab',
|
|
"""Enter your <b>Planning Center Online</b> <i>Personal Access Token</i> details in the text boxes \
|
|
below. Personal Access Tokens are created by doing the following:
|
|
<ol>
|
|
<li>Login to your Planning Center Online account at<br>
|
|
<a href=https://api.planningcenteronline.com/oauth/applications>
|
|
https://api.planningcenteronline.com/oauth/applications</a></li>
|
|
<li>Click the "New Personal Access Token" button at the bottom of the screen.</li>
|
|
<li>Enter a description of your use case (eg. "OpenLP Integration")</li>
|
|
<li>Copy and paste the provided Application ID and Secret values below.</li>
|
|
</ol>"""))
|
|
|
|
self.test_credentials_button.setText(translate('PlanningCenterPlugin.PlanningCenterAuthForm',
|
|
'Test Credentials'))
|
|
|
|
def resizeEvent(self, event=None):
|
|
"""
|
|
Don't call SettingsTab resize handler because we are not using left/right columns.
|
|
"""
|
|
QtWidgets.QWidget.resizeEvent(self, event)
|
|
|
|
def load(self):
|
|
"""
|
|
Load the settings into the UI.
|
|
"""
|
|
settings = Settings()
|
|
settings.beginGroup(self.settings_section)
|
|
self.application_id = settings.value('application_id')
|
|
self.secret = settings.value('secret')
|
|
settings.endGroup()
|
|
self.application_id_line_edit.setText(self.application_id)
|
|
self.secret_line_edit.setText(self.secret)
|
|
|
|
def save(self):
|
|
"""
|
|
Save the changes on exit of the Settings dialog.
|
|
"""
|
|
settings = Settings()
|
|
settings.beginGroup(self.settings_section)
|
|
settings.setValue('application_id', self.application_id_line_edit.text())
|
|
settings.setValue('secret', self.secret_line_edit.text())
|
|
settings.endGroup()
|
|
|
|
def on_test_credentials_button_clicked(self):
|
|
"""
|
|
Tests if the credentials are valid
|
|
"""
|
|
application_id = self.application_id_line_edit.text()
|
|
secret = self.secret_line_edit.text()
|
|
if len(application_id) == 0 or len(secret) == 0:
|
|
QtWidgets.QMessageBox.warning(self, "Authentication Failed",
|
|
"Please enter values for both Application ID and Secret",
|
|
QtWidgets.QMessageBox.Ok)
|
|
return
|
|
test_auth = PlanningCenterAPI(application_id, secret)
|
|
organization = test_auth.check_credentials()
|
|
if len(organization):
|
|
QtWidgets.QMessageBox.information(self, 'Planning Center Online Authentication Test',
|
|
"Authentication successful for organization: {0}".format(organization),
|
|
QtWidgets.QMessageBox.Ok)
|
|
else:
|
|
QtWidgets.QMessageBox.warning(self, "Authentication Failed",
|
|
"Authentiation Failed",
|
|
QtWidgets.QMessageBox.Ok)
|