File indexing completed on 2024-05-12 05:22:09
0001 /* 0002 SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "mainwindow.h" 0008 0009 #include "core/account.h" 0010 #include "core/authjob.h" 0011 #include "drive/permissionfetchjob.h" 0012 0013 #include <QListWidgetItem> 0014 0015 MainWindow::MainWindow(QWidget *parent) 0016 : QMainWindow(parent) 0017 { 0018 /* Initialize GUI */ 0019 ui.setupUi(this); 0020 ui.errorLabel->setVisible(false); 0021 connect(ui.authButton, &QAbstractButton::clicked, this, &MainWindow::authenticate); 0022 connect(ui.getPermissionsButton, &QAbstractButton::clicked, this, &MainWindow::slotFetchPermissions); 0023 connect(ui.permissionsList, &QListWidget::itemSelectionChanged, this, &MainWindow::permissionSelected); 0024 } 0025 0026 void MainWindow::authenticate() 0027 { 0028 auto account = KGAPI2::AccountPtr::create(); 0029 account->setScopes({KGAPI2::Account::driveScopeUrl()}); 0030 0031 /* Create AuthJob to retrieve OAuth tokens for the account */ 0032 auto *authJob = new KGAPI2::AuthJob(account, QStringLiteral("554041944266.apps.googleusercontent.com"), QStringLiteral("mdT1DjzohxN3npUUzkENT0gO")); 0033 connect(authJob, &KGAPI2::Job::finished, this, [this, authJob]() { 0034 /* Always remember to delete the jobs, otherwise your application will 0035 * leak memory. */ 0036 authJob->deleteLater(); 0037 0038 if (authJob->error() != KGAPI2::NoError) { 0039 ui.errorLabel->setText(QStringLiteral("Error: %1").arg(authJob->errorString())); 0040 ui.errorLabel->setVisible(true); 0041 return; 0042 } 0043 0044 m_account = authJob->account(); 0045 0046 ui.authStatusLabel->setText(QStringLiteral("Authenticated")); 0047 ui.fileIdEdit->setEnabled(true); 0048 ui.getPermissionsButton->setEnabled(true); 0049 }); 0050 } 0051 0052 void MainWindow::slotFetchPermissions() 0053 { 0054 if (m_account.isNull()) { 0055 ui.errorLabel->setText(QStringLiteral("Error: Please authenticate first")); 0056 ui.errorLabel->setVisible(true); 0057 ui.authButton->setVisible(true); 0058 return; 0059 } 0060 0061 const auto fileId = ui.fileIdEdit->text(); 0062 auto *fetchJob = new KGAPI2::Drive::PermissionFetchJob(fileId, m_account, this); 0063 connect(fetchJob, &KGAPI2::Job::finished, this, [this, fetchJob]() { 0064 fetchJob->deleteLater(); 0065 0066 if (fetchJob->error() != KGAPI2::NoError) { 0067 ui.errorLabel->setText(QStringLiteral("Error: %1").arg(fetchJob->errorString())); 0068 ui.errorLabel->setVisible(true); 0069 return; 0070 } 0071 0072 /* Get all items the job has retrieved */ 0073 const auto objects = fetchJob->items(); 0074 ui.permissionsList->clear(); 0075 for (const auto &object : objects) { 0076 const auto permission = object.dynamicCast<KGAPI2::Drive::Permission>(); 0077 0078 /* Convert the permission to QListWidget item */ 0079 auto *item = new QListWidgetItem(ui.permissionsList); 0080 QString displayText; 0081 if (permission->name().isEmpty()) { 0082 displayText = permission->emailAddress(); 0083 } else { 0084 displayText = QStringLiteral("%0 (%1)").arg(permission->name()).arg(permission->emailAddress()); 0085 } 0086 item->setText(displayText); 0087 item->setData(Qt::UserRole, permission->id()); 0088 0089 ui.permissionsList->addItem(item); 0090 } 0091 }); 0092 } 0093 0094 void MainWindow::permissionSelected() 0095 { 0096 const bool hasSelection = (ui.permissionsList->selectedItems().count() != 0); 0097 0098 ui.permissionDetailsList->clear(); 0099 0100 if (!hasSelection) { 0101 return; 0102 } 0103 0104 const auto permissionId = ui.permissionsList->selectedItems().at(0)->data(Qt::UserRole).toString(); 0105 const auto fileId = ui.fileIdEdit->text(); 0106 auto *fetchJob = new KGAPI2::Drive::PermissionFetchJob(fileId, permissionId, m_account, this); 0107 connect(fetchJob, &KGAPI2::Job::finished, this, [this, fetchJob]() { 0108 fetchJob->deleteLater(); 0109 0110 if (fetchJob->error() != KGAPI2::NoError) { 0111 ui.errorLabel->setText(QStringLiteral("Error: %1").arg(fetchJob->errorString())); 0112 ui.errorLabel->setVisible(true); 0113 return; 0114 } 0115 0116 /* Get all items the job has retrieved */ 0117 const auto objects = fetchJob->items(); 0118 for (const auto &object : objects) { 0119 const auto permission = object.dynamicCast<KGAPI2::Drive::Permission>(); 0120 0121 ui.permissionDetailsList->addItem(QStringLiteral("Id: %0").arg(permission->id())); 0122 ui.permissionDetailsList->addItem(QStringLiteral("Name: %0").arg(permission->name())); 0123 ui.permissionDetailsList->addItem(QStringLiteral("Email: %0").arg(permission->emailAddress())); 0124 ui.permissionDetailsList->addItem(QStringLiteral("Type: %0").arg(typeToName(permission->type()))); 0125 ui.permissionDetailsList->addItem(QStringLiteral("Role: %0").arg(roleToName(permission->role()))); 0126 ui.permissionDetailsList->addItem(QStringLiteral("Permission details count: %0").arg(permission->permissionDetails().size())); 0127 for (int i = 0; i < permission->permissionDetails().size(); ++i) { 0128 const auto permissionDetails = permission->permissionDetails().at(i); 0129 ui.permissionDetailsList->addItem( 0130 QStringLiteral(" [%0] permissionType: %1").arg(i).arg(permissionTypeToName(permissionDetails->permissionType()))); 0131 ui.permissionDetailsList->addItem(QStringLiteral(" [%0] role: %1").arg(i).arg(roleToName(permissionDetails->role()))); 0132 ui.permissionDetailsList->addItem( 0133 QStringLiteral(" [%0] inherited: %1").arg(i).arg(permissionDetails->inherited() ? QStringLiteral("true") : QStringLiteral("false"))); 0134 if (permissionDetails->inherited()) { 0135 ui.permissionDetailsList->addItem(QStringLiteral(" [%0] inherited from: %1").arg(i).arg(permissionDetails->inheritedFrom())); 0136 } 0137 } 0138 } 0139 }); 0140 } 0141 0142 QString MainWindow::roleToName(KGAPI2::Drive::Permission::Role role) 0143 { 0144 switch (role) { 0145 case KGAPI2::Drive::Permission::OwnerRole: 0146 return QStringLiteral("owner"); 0147 case KGAPI2::Drive::Permission::ReaderRole: 0148 return QStringLiteral("reader"); 0149 case KGAPI2::Drive::Permission::WriterRole: 0150 return QStringLiteral("writer"); 0151 case KGAPI2::Drive::Permission::CommenterRole: 0152 return QStringLiteral("commenter"); 0153 case KGAPI2::Drive::Permission::OrganizerRole: 0154 return QStringLiteral("organizerRole"); 0155 case KGAPI2::Drive::Permission::FileOrganizerRole: 0156 return QStringLiteral("fileOrganizerRole"); 0157 default: 0158 return QString(); 0159 } 0160 } 0161 0162 QString MainWindow::typeToName(KGAPI2::Drive::Permission::Type type) 0163 { 0164 switch (type) { 0165 case KGAPI2::Drive::Permission::TypeUser: 0166 return QStringLiteral("user"); 0167 case KGAPI2::Drive::Permission::TypeGroup: 0168 return QStringLiteral("group"); 0169 case KGAPI2::Drive::Permission::TypeDomain: 0170 return QStringLiteral("domain"); 0171 case KGAPI2::Drive::Permission::TypeAnyone: 0172 return QStringLiteral("anyone"); 0173 default: 0174 return QString(); 0175 } 0176 } 0177 0178 QString MainWindow::permissionTypeToName(KGAPI2::Drive::Permission::PermissionDetails::PermissionType permissionType) 0179 { 0180 switch (permissionType) { 0181 case KGAPI2::Drive::Permission::PermissionDetails::TypeFile: 0182 return QStringLiteral("file"); 0183 case KGAPI2::Drive::Permission::PermissionDetails::TypeMember: 0184 return QStringLiteral("member"); 0185 default: 0186 return QString(); 0187 } 0188 } 0189 0190 #include "moc_mainwindow.cpp"